[OpenBSD]

[Anterior: Cuestiones Relacionadas con FTP] [Contenido] [Siguiente: Ejemplo #1: Cortafuegos para Red en Casa u Oficina]

PF: Authpf: Shell de Usuario para la Autenticación de Pasarelas


Índice de Contenidos


Introducción

Authpf(8) es un intérprete (shell) para pasarelas de autenticación. Una pasarela de autenticación es como una pasarela de red normal (también llamada enrutador), con la diferencia que los usuarios se deben autenticar ante la pasarela antes de que se permita que pase el tráfico a través de ésta. Cuando se configura el intérprete de un usuario para que éste sea /usr/sbin/authpf (o sea, en lugar de configurarlo como ksh(1), csh(1), o cualquier otro intérprete) y el usuario ingresa en el sistema usando SSH, authpf realiza los cambios necesarios en el grupo de reglas activo de pf(4), de modo que el tráfico del usuario pase a través del filtro y/o sea traducido usando nat o rdr. Una vez que el usuario sale del sistema o que se desconecta la sesión, authpf elimina cualquier regla que haya sido cargada por el usuario y termina cualquier conexión de estado que haya dejado abierta el usuario. De esta forma, el tráfico generado por el usuario sólo podrá pasar a través de la pasarela mientras el usuario mantenga abierta su sesión de SSH.

Authpf altera el grupo de reglas de pf(4) añadiendo reglas al grupo de reglas con nombre que esté adunto a un punto de anclaje. Cada vez que se autentica un usuario, authpf crea un nuevo grupo de reglas con nombre y carga en éste las reglas preconfiguradas de filtros, nat, binat, y rdr. Las reglas que carga authpf se pueden configurar de forma individual para cada usuario o de forma global para todos.

Algunos ejemplos de usos de authpf son:

Authpf registra el nombre de usuario y la dirección IP de cada usuario que se autentica con éxito, además de también registrar el inicio y el final de sus sesiones de ingreso mediante syslogd(8). Con el uso de esta información, un administrador puede determinar quién ha ingresado en el sistema y cuándo, y también pedir cuentas a los usuarios por sus sesiones de tráfico en la red.

Configuración

Los pasos básicos necesarios para configurar authpf se señalan a continuación. Para una descripción completa de la configuración de authpf, véase la página del manual de authpf(8).

Cómo Enlazar Authpf en el Grupo de Reglas Principal

Authpf está enlazado en el grupo de reglas principal usando reglas de anclaje, anchor:

nat-anchor authpf
rdr-anchor authpf
binat-anchor authpf
anchor authpf

Allá donde las reglas anchor se encuentren dentro del grupo de reglas, será donde PF se ramificará desde el grupo de reglas principal para evaluar las reglas de authpf. No es necesario que estén presentes las cuatro reglas anchor; por ejemplo, si no se ha configurado authpf para que cargue cualquier regla de nat, se puede omitir la regla nat-anchor.

Configuración de las Reglas Cargadas

Authpf carga sus reglas desde uno de los dos ficheros siguientes:

El primer fichero contiene las reglas que sólo se cargarán cuando el usuario $USER (sustitúyase por el nombre de usuario del usuario) ingrese en el sistema. La configuración individual por usuario se usa cuando un usuario específico, como un administrador, requiere un grupo de reglas diferente al grupo predeterminado. El segundo fichero contiene las reglas predeterminadas que se cargarán para cualquier usuario que no tenga su propio fichero authpf.rules. Si existe este fichero específico PARA el usuario, se anulará el fichero predeterminado. Para que funcione authpf, como mínimo debe existir uno de los ficheros.

Las reglas de filtrado y traducción tienen la misma sintaxis que en cualquier otro grupo de reglas de PF, pero con una excepción: Authpf permite el uso de dos macros predefinidas:

La práctica recomendada es usar la macro $user_ip para que sólo se permita el paso a través de la pasarela al tráfico originado desde la máquina del usuario que se ha autenticado.

ACL, Listas de Control de Acceso

Se puede evitar que ciertos usuarios utilicen authpf creando un fichero con el nombre de cada uno de los usuarios a los que se quiera denegar el acceso, dentro del directorio /etc/authpf/banned/. El contenido del fichero es lo que se mostrará a los usuarios antes de que authpf los desconecte. Esto ofrece un modo sencillo de notificar al usuario el motivo por el que se le impide el acceso, y con quién debe contactar para que se le vuelva a otorgar acceso.

Y a la inversa, también es posible permitir el acceso sólo a ciertos usuarios añadiendo sus nombres de usuario al fichero /etc/authpf/authpf.allow. Si no existe este fichero o si el contenido de este fichero es un asterisco (*), entonces authpf permitirá el acceso a cualquier usuario que se autentique con éxito mediante SSH, siempre y cuando no exista una prohibición explícita para el usuario.

Si authpf no puede determinar si un nombre de usuario tiene el acceso permitido o denegado, mostrará un breve mensaje y luego desconectará al usuario. Una entrada en /etc/authpf/banned/ siempre tiene precedencia y anula otra entrada en /etc/authpf/authpf.allow.

Cómo Asignar Authpf como Intérprete de Usuario

Para que authpf funcione debe ser asignado como el intérprete (shell) de ingreso del usuario. Cuando el usuario se autentica con éxito a sshd(8), authpf se ejecuta como el intérprete del usuario; entonces comprueba si el usuario tiene permiso para usar authpf, carga las reglas desde el fichero apropiado, etc.

Existen un par de formas para asignar authpf como el intérprete del usuario:

  1. Manualmente para cada usuario utilizando chsh(1), vipw(8), useradd(8), usermod(8), etc.
  2. Asignando usuarios a una clase de ingreso y cambiando la opción de clase shell en /etc/login.conf.

Cómo Ver Quién Hay en el Sistema

Una vez que un usuario ha ingresado con éxito y que authpf ha ajustado las reglas de PF, authpf cambia el título de su proceso para indicar el nombre de usuario y la dirección IP del usuario:

    # ps -ax | grep authpf
    23664 p0  Is+     0:00.11 -authpf: charlie@192.168.1.3 (authpf)

En este ejemplo, el usuario charlie está conectado desde la máquina 192.168.1.3. Enviando una señal de SIGTERM al proceso de authpf, el usuario puede forzar la terminación de la conexión. Authpf también elimina cualquier regla que se haya cargado para el usuario, y termina cualquier conexión de estado que tenga abierta el usuario.

    # kill -TERM 23664

Más Información

Para una completa descripción de la operación de authpf, véase la página del manual de authpf(8).

Ejemplo

En el siguiente ejemplo se usa authpf en una pasarela OpenBSD, para autenticar a usuarios en una red inalámbrica que forma parte de otra red más grande del campus. Una vez que un usuario se ha autenticado, asumiendo que no se encuentre en la lista de usuarios prohibidos, se le permitirá usar SSH y navegar por la web (incluidos sitios web seguros), además de acceder a cualquiera de los servidores de DNS del campus.

El fichero /etc/authpf/authpf.rules contiene las siguientes reglas:

wifi_if = "wi0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \
   port domain keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
   https } flags S/SA keep state

El usuario administrador charlie necesita tener acceso a los servidores de SMTP y POP3 del campus, además de poder navegar por la web y de usar SSH. Para ello se configuran las siguientes reglas en /etc/authpf/users/charlie/authpf.rules:

wifi_if = "wi0"
smtp_server = "10.0.1.50"
pop3_server = "10.0.1.51"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \
   port domain keep state
pass in quick on $wifi_if proto tcp from $user_ip to $smtp_server \
   port smtp flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to $pop3_server \
   port pop3 flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
   https } flags S/SA keep state

El grupo de reglas principal, que se encuentra en el fichero /etc/pf.conf, se configura como sigue:

# macros
wifi_if = "wi0"
ext_if  = "fxp0"

scrub in all

# filtros
block drop all

pass out quick on $ext_if proto tcp from $wifi_if:network flags S/SA \
   modulate state
pass out quick on $ext_if proto { udp, icmp } from $wifi_if:network \
   keep state

pass in quick on $wifi_if proto tcp from $wifi_if:network to $wifi_if \
   port ssh flags S/SA keep state

anchor authpf in on $wifi_if

El grupo de reglas es muy simple y realiza las siguientes funciones:

La idea detrás del grupo de reglas principal es: bloquear todo y permitir que pase la mínima cantidad de tráfico que sea posible. El tráfico es libre de salir a la interfaz externa, pero tiene bloqueada la entrada a la interfaz inalámbrica debido a la política de denegación predeterminada. Una vez que el usuario se autentica, se permite que su tráfico pase a la interfaz inalámbrica y desde allí, a través de la pasarela, al resto de la red. Se usa la clave quick de forma consistente, para que PF no tenga que evaluar cada uno de los subgrupos de reglas con nombre cada vez que pase a través de la pasarela una nueva conexión.

[Anterior: Cuestiones Relacionadas con FTP] [Contenido] [Siguiente: Ejemplo #1: Cortafuegos para Red en Casa u Oficina]


[Índice] www@openbsd.org
Originally [OpenBSD: authpf.html,v 1.5 ]
$OpenBSD: authpf.html,v 1.6 2004/01/04 22:29:12 horacio Exp $
$Translation: authpf.html,v 1.6 2004/01/04 21:32:07 horacio Exp $