[Anterior: Cuestiones Relacionadas con FTP] [Contenido] [Siguiente: Ejemplo #1: Cortafuegos para Red en Casa u Oficina]
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.
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).
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.
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.
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.
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:
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
Para una completa descripción de la operación de authpf, véase la página del manual de authpf(8).
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]