Esta pagina se ve mejor con JavaScript habilitado

Inetd/Tcpwrappers FreeBSD

 ·  🎃 kr0m

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:

sysrc inetd_enable="yes"

Configuramos el servicio FTP mediante inetd:

vi /etc/inetd.conf

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

Arrancamos inetd:

service inetd start

Podemos ver que inetd ha abierto el puerto 21:

sockstat -sv|grep 21

root inetd 4949 6 tcp4 *:21 *:* LISTEN

Si conectamos, el servicio funciona correctamente y podemos ver como inetd ha arrancado el proceso FTP:

ps aux|grep 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:

vi /etc/hosts.allow

#ALL : ALL : allow
ftpd : 192.168.11.2 : allow

Recargamos la configuración:

service inetd restart

Ahora conectamos desde la 192.168.11.1 pero obtenemos:

ftp 192.168.11.4

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."
service inetd restart

Conectando podemos ver el nuevo mensaje:

ftp 192.168.11.4

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

Si te ha gustado el artículo puedes invitarme a un RedBull aquí