Esta web utiliza cookies, puedes ver nuestra política de cookies aquí. Si continuas navegando estás aceptándola

Inetd/tcpwrappers FreeBSD


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)

NOTA: Tcpwrappers es un mecanismo totalmente independiente de Inetd, se puede utilizar de forma aislada sin necesidad de Inetd para nada.

Comentamos la regla que permite todo el tráfico y modificamos la relacionada con ftp:

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


Autor: Kr0m -- 30/07/2019 21:44:27