Firewalls con Linux

Menú 
  1. Firewalls, ¿Qué son?
  2. Evaluar la necesidad de un firewall.
  3. tcpd: TCP Wrapping.
  4. ipfwadm.
  5. ipchains.
  6. Herramientes firewall gratuitas y complementos para Linux
  7. Firewalls comerciales
  8. Otros recursos

 

 3. tcpd: TCP Wrapping.

   Los TCP Wrappers son unas de las herramientas más famosas del mundo para reforzar el control de acceso a la red.

   Los TCP Wrappers añaden un control de accesos a la red mediante un sencillo mecanismo. Su funcionamiento es el siguiente.

   En hosts sin TCP Wrappers, inetd comienza en el cebador y comprueba los servidores permitidos en el "/etc/inetd.conf". Un inetd.conf de un host de este tipo podría ser así:

 ftp stream tcp nowait root /sbin/ftpd ftpd -f
telnet stream tcp nowait root /sbin/telnetd telnetd
finger stream tcp nowait guest /sbin/fingerd fingerd
... ... ... ... ... ... ...

   Cada línea es una entrada separada y cada entrada especifica un servicio, su tipo de toma, su tipo de protocolo, el usuario de ejecución y el servidor. Por ejemplo, la línea del finger:

  • El servicio: finger
  • El tipo de toma: STREAM
  • El protocolo: TCP
  • El "nowait" indica que fingerd debe generar nuevos procesos fingerd cuando se necesiten.
  • El usuario: guest
  • El programa que se ejecuta: /sbin/fingerd

   Cuando inetd recibe una petición e un cliente finger, comienza un fingerd. El motivo de esto es que es más fácil ejecutar un demonio sencillo como es el inetd, que ejecutar permanentemente 20 servidores diferentes. Así un solo servidor solo se ejecuta cuando es necesario.

   El problema de este método es que estos servicios pueden no aplicar el control de acceso por defecto, por lo que no se puede aceptar o negar conexiones selectivamente. Para esto se introduce el TCP Wrapping.

   Con los TCP Wrappers instalados, cuando el inetd llama a un servidor, tcpd intercepta la llamada y evalúa la petición de conexión. Durante este proceso, tcpd compara la petición con respecto a carias normas. Si pasa estas pruebas, tcpd arranca el servidor requerido, que satisface la petición del cliente.

   En un caso de host con TCP Wrappers instalado, el inetd.conf debería ser algo así:

 ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
... ... ... ... ... ... ...

   Si nos fijamos "/usr/sbin/tcpd" precede a "in.telnetd", por tanto telnetd está envuelto con tcpd.

   Cuando tcpd evalúa una petición de conexión también hace log de ella.

   TCP Wrappers y control de accesos a la red.

   Los TCP Wrappers leen las normas de control de acceso a la red de dos archivos "/etc/hosts.allow" y "/etc/hosts.deny".

   Configurando hosts.allow y hosts.deny.

   Para configurar estos archivos se desarrolló un lenguaje especial, el "hosts_options" (man 5 hosts_options). hosts_options es muy versátil, ya que se puede llegar a ejecutar un comando shell cuando una conexión cumpla con los criterios pedidos. Lo básico en hosts_options es esto:

lista_de_comandos: lista_clientes

   Ejemplo:

#hosts.allow

ALL: .arf.net EXCEPT uncapullo.arf.net

   Aquí, a todas las máquinas dentro de arf.net menos a "uncapullo" se les permite acceder a todos los servicios. Esto solo es útil si además se pone en hosts.deny:

ALL: ALL

   Con el EXCEPT hosts_options permite entrar en detalles más exhaustivos, por ejemplo:

#hosts.deny

ALL: .aol.com, .msn.com

ALL EXCEPT in.telnet: uncapullo.arf.net

   Así se bloquea todo a aol.com y a msn.com y solo se le permite el acceso telnet al host uncapullo.arf.net.

   Existen algunas sentencias comodín:
 Comodín:  Función:
ALL Usado para generalizaciones de barrido, tanto en servicios como en hosts remotos.
KNOWN Usado cuando se quiere aplicar una norma a usuarios y hosts que sean explícitamente nombrados en las normas de control de acceso.
LOCAL Usado para nombres de hosts que no tengan puntos.
PARANOID Usado para que tcpd suprima hosts cuando su nombre no coincida con su IP.
UNKOWN Usado para negar acceso a usuarios o hosts desconocidos.

   TCP Wrappers viene con herramientas para verificar sus normas:

  • tcpdchk: comprobador de configuración de TCP Wrappers.
  • tcpdmatch: el "oráculo" de TCP Wrappers.

   tcpdchk: Examina la configuración de TCP Wrappers e informa de los problemas potenciales y reales que pueda encontrar. Analiza buscando:

  • mala sintaxis
  • malos nombres de ruta
  • malos nombres de host o direcciones IP
  • verificación host / IP (PARANOID)
  • servicios para los que hay normas pero no están cubiertos por tcpd

   tcpdmatch: Predice cómo manipularían los TCP Wrappers una petición de servicio específica. Su sintaxis es:

tcpdmatch <daemon> <host>