El otro día hablábamos sobre securizar un sistema Linux con iptables y en otro artículo encontrábamos un firewall basado en FreeBSD llamado pfSense. Hoy vamos a ver cómo securizar un sistema Unix (Linux, BSD…) a través de TCP Wrappers, un buen complemento de iptables. La wikipedia lo define como:
TCP Wrapper («Envoltorio de TCP») es un sistema de red ACL que trabaja en terminales y que se usa para filtrar el acceso de red a servicios de protocolos de Internet que corren en sistemas operativos (tipo UNIX), como Linux o BSD. Permite que las direcciones IP, los nombres de terminales y/o respuestas de consultas ident de las terminales o subredes sean usadas como tokens sobre los cuales filtrar para propósitos de control de acceso.
Bien, partimos de la base de que tenemos dos ficheros configurables, /etc/hosts.deny y /etc/hosts.allow. En ellos podemos especificar que IPs, hostnames o redes pueden acceder a determinados servicios del sistema. TCP Wrappers suele venir instalado por defecto en la mayoría de sistemas operativos Unix.
La sintaxis básica de estos ficheros es la siguiente:
daemon : dirección : acción ó daemon : dirección
Daemon es el demonio/servicio a filtrar, dirección es la dirección, host o subred y acción si denegamos o aceptamos el acceso. Para saber si un servicio puede ser configurado para filtrado vía TCP Wrappers hay que saber si su binario está enlazado con la biblioteca libwrap.a. Para ello:
# ldd /usr/sbin/sshd | grep libwrap.so libwrap.so.0 => /lib/libwrap.so.0 (0x001ce000)
Si la salida es NULL el demonio no está compilado con TCP Wrappers y no funcionará. Si devuelve algo como lo anterior sí que lo está. Vamos a ver entonces unos cuantos ejemplos:
Permitir acceso ssh únicamente a unas IPs
/etc/hosts.allow Permitimos acceso a las IPs 192.168.0.111, 192.168.0.112, 192.168.0.113.
sshd: 192.168.0.111 192.168.0.112 192.168.0.113
/etc/hosts.deny Denegamos al resto.
sshd: ALL
Bloquear todo excepto lo declarado en /etc/hosts.allow
/etc/hosts.allow
sshd: 192.168.0.111 192.168.0.112 192.168.0.113
/etc/hosts.deny Denegamos acceso al resto de servicios excepto SSH a las Ips indicadas. La máquina quedará blindada excepto el acceso SSH a las Ips permitidas:
ALL: ALL
Permitir también el uso de sendmail a una subred y unos hosts concretos
/etc/hosts.allow Permitimos acceso a las IPs 192.168.0.111, 192.168.0.112, 192.168.0.113.
sshd: 192.168.0.111 192.168.0.112 192.168.0.113 sendmail: 10.0.0.0/24 test.com prueba.com
/etc/hosts.deny
ALL: ALL
Permitir todo y bloquear el acceso total a una única IP
/etc/hosts.allow
ALL: ALL
/etc/hosts.deny
ALL: 192.168.0.115
Filtrar y ejecutar un comando tras un intento de acceso
/etc/hosts.allow
ALL: ALL
/etc/hosts.deny
ALL: 192,168.0.115 \ : spawn (/bin/echo %a desde %h intento acceder a %d >> \ /var/log/connections.log) \ : deny
Aquí ya depende todo si queremos aplicar una política restrictiva desde el principio, bloquear todo y a partir de ahí comenzar a abrir servicios a determinadas Ips, rangos o hosts o si por el contrario queremos dejar todo abierto y cerrar servicios a determinadas Ips,etc.
Si os resulta interesante, disponéis de más información en el handbook de freebsd o en Linux about.com. Esta ha sido una mera introducción a TCP Wrappers
Podrías comentar como agregar un servicio para filtrado vía TCP Wrappers como por ejemplo Telnet.
Y me sería de gran utilidad si comentases como agregarlo a iptables, porque no encuentro el modo.
Gracias.
Muy buena bitácora personal ;).