Normalmente cada servicio se arranca de forma independiente consumiendo CPU/Ram, Inetd es un superdemonio que gestiona las conexiones de otros demonios, si estos servicios no se utilizan a menudo es un desperdicio de recursos tenerlos arrancados siempre incluso cuando no se están utilizando, con inetd tan solo tendremos un proceso arrancado, cuando llegue una conexión a uno de los servicios configurados en inetd se arranca el proceso del demonio en cuestión. Inetd hace de pasarela entre el cliente y el servicio arrancándolo y parándolo bajo demanda.
Habilitamos el servicio inetd:
Configuramos el servicio FTP mediante inetd:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Arrancamos inetd:
Podemos ver que inetd ha abierto el puerto 21:
root inetd 4949 6 tcp4 *:21 *:* LISTEN
Si conectamos, el servicio funciona correctamente y podemos ver como inetd ha arrancado el proceso FTP:
root 83937 0.0 0.0 12204 3504 - Ss 10:32 0:00.00 ftpd: 192.168.11.1: connected (ftpd)
Las configuración de filtrado de los servicios inetd se realiza mediante tcpwrappers , permitiéndonos una gran flexibilidad.
La sintaxis es la siguiente:
daemon : address : action(allow/deny)
Comentamos la regla que permite todo el tráfico y solo permitimos el acceso FTP a la dirección 192.168.11.2:
#ALL : ALL : allow
ftpd : 192.168.11.2 : allow
Recargamos la configuración:
Ahora conectamos desde la 192.168.11.1 pero obtenemos:
Connected to 192.168.11.4.
You are not welcome to use ftpd from 192.168.11.1.
Es posible ejecutar un comando y mostrarle la salida al cliente:
# ftp custom banner
ftpd : ALL : severity auth.info : twist /bin/echo "kr0m doesnt allow you to use %d from %h."
Conectando podemos ver el nuevo mensaje:
Connected to 192.168.11.4.
kr0m doesnt allow you to use ftpd from 192.168.11.1.
Si solo queremos ejecutar un script pero no responder con la salida del comando:
# We do not allow connections from example.com:
ALL : .example.com : spawn (/bin/echo %a from %h attempted to access %d >> /var/log/connections.log) : deny
Una opción interesante es PARANOID que aplica a cualquier host cuya resolución directa/inversa no cuadre, si se conecta desde una ip con resolución inversa X pero X no resuelve de forma directa a la ip macheará el parámetro paranoid.
# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny
NOTA: El uso de /etc/hosts.deny se considera deprecated en FreeBSD