Tcp_wrappers
Controlando los puertos

[ Introducción ] [ Configuración ] [ Ejemplos ] [ Limitaciones ] [ Avanzado ] [ Links ]


 


0. Introducción

Tcp_wrappers te permite controlar los puertos de software de tu PC, o sea que no es para los com no los lpt, sino para el puerto telnet, ftp, pop3 ...

El primer requisito es tener instalado y configurado el superservidor inetd, esto es muy fácil y solo se trata de instalar el demonio y asegurarse de que se arranca durante el inicio de la máquina.
Para asegurarnos de que lo tenemos instalado i corriendo ejecutaremos el comando: ps aux | grep inetd, y debe salir algo como esto:
140 ? S 0:00 inetd si no es que algo va mal, repasa la instalación.

Para mas información: man inetd, man inetd.conf y man services

Ya tenemos el inetd instalado, el principal archivo de configuración del mismo es el /etc/inetd.conf, en el, cada linea se refiere a un puerto/servicio que podemos ofrecer. Sin tcp_wrappers cada una de las lineas debería parecerse a esto:
telnet stream tcp nowait root /usr/sbin/in.telnetd
Esto significa que cada llamada al puerto telnet será gestionada por el demonio in.telnetd

Ahora instalamos el paquete tcp_wrappers, una vez instalado lo único necesario es cambiar la linea anterior por algo como esto:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
La diferencia es que ahora, lo que se ejecuta al recibir un telnet es el demonio tcpd, al que se le pasa como parámetro el demonio que debe controlar, en este caso in.telnetd.

Para mas información: man tcpd, man hosts_access, man hosts.allow y man hosts.deny

2. Configuración

Se basa únicamente en dos archivos, /etc/hosts.allow y /etc/hosts.deny, aunque como veremos mas adelante solo hace falta uno de ellos.

Por defecto, a menos que se indique lo contrario, todos los servicios y/o direcciones definidas en el hosts.allow son admitidas mientras que las definidas en el hosts.deny son rechazadas.

La sintaxis de estos archivos es muy simple:
servicio: host: acción

servicio: es la primera palabra que encontramos en cada linea del archivo inetd.conf, por ejemplo son servicios el in.telnetd, in.fingerd ...
Si queremos referirnos a todos los puertos bastará con poner ALL, también podemos poner una lista de servicios separados por espacios en blanco.

host: es una o mas direcciones de red separadas por espacios en blanco, esta dirección se contrasta con la del sistema que nos hace la petición de conexión. La dirección puede ser del tipo IP numérica, IP/mask, rango de IP (por ejemplo 195.116.), dominio (como por ejemplo arrakis.es), grupo de dominios (como por ejemplo .es o arrakis.)
Ademas pueden usarse otras palabras como ALL (para referirse a todos los host), LOCAL (los que no tienes un . en su nombre) KNOWN o UNKNOWN (de los que se tiene información o no) y PARANOID (el nombre que te ofrecen no concuerda con el que tcp_wrappers espera).

acción: puede tener 4 valores, accept (acepta la conexión si se cumplen las condiciones impuestas por servivio/host), deny (rechaza la conexión, spawn (acepta la conexión y realiza el comando bash que se le pasa como parámetro) y twist (rechaza la conexión y realiza el comando bash).
A los comandos se les pueden pasar parámetros relacionados con la conexión, estos son:
%a, %c, %h y %n: nombre de la máquina que intenta acceder
%d: demonio que controla el puerto por el que accede
%p: PID del proceso que controla la conexión

Con esto ya podemos hacer nuestra primera configuración super segura:
#/etc/hosts.allow
ALL: ALL: deny

El primer archivo que se mira es hosts.allow por lo que en este caso no importa lo que ponga en hosts.deny, porque todas las conexiones se rechazan de todas formas.

3. Ejemplos

Como mejor se aprende es viendo algunos ejemplos. De mas sencillos (y por lo tanto cerrados) a mas complicados (mas útiles, divertidos y peligrosos)

4. Limitaciones

Este sistema aunque es muy fácil e intuitivo tiene algunas limitaciones, algunas sencillas de solucionar otras no tanto:

5. Avanzado:

Usos avanzados de tcp_wrappers, que mas puedo hacer con esto?

Mas información en /usr/doc/tcp_wrappers-x.x

6. Links

Documentación en postscript



 


Volver a la pagina principal