En criollo podría traducirse como "golpeo de puertos", pero la verdad es que creo que hay cosas que no deberían traducirse, así que le llamaremos port knocking (perdón a los fundamentalistas del Español :P)

En este post me voy a enfocar pura y exclusivamente en knockd, ya que es un daemon de port knocking muy simple y fácil de configurar.

Qué es?

Port knocking es un mecanismo de seguridad que, mediante una secuencia predefinida de intentos de conexión a ciertos puertos, habilita el acceso a cierto host mediante el firewall de sistema.

Para ser un poco más claro, voy a poner un ejemplo, supongamos que tenemos los siguientes equipos en nuestra red:

Servidor: 192.168.10.1  
Cliente (mi computadora): 192.168.10.10  

Y queremos acceder mediante SSH al servidor, pero el mismo tiene configurado un mecanismo de port knocking, con la siguiente secuencia de puertos/protocolos:

TCP/1111 -> TCP/2222 -> TCP/3333  

Si quisieramos conectarnos directamente al puerto 22, no podríamos llegar ya que ni siquiera lo veríamos en estado LISTEN.

Para que el servidor nos permita conectarnos al puerto 22 (SSHD) lo que debemos hacer es intentar conectar a esos puertos, en ese orden.

Para tener acceso al puerto 22, previamente hay que hacer knocking en los puertos TCP predefinidos (1111, 2222, 3333)

Podemos usar KNOCK, que viene incluído con el paquete de knockd

knock 192.168.10.1 1111 2222 3333  

Como también podríamos usar NMAP, o cualquier otra tool que nos resulte cómoda

for i in 1111 2222 3333; do \  
   nmap -Pn --host_timeout 100 --max-retries 0 -p $i 192.168.10.1; \
done;

ssh user@192.168.10.1  

Cuando el servidor detecta que hicieron port knocking en el orden configurado, habilita a la IP de origen para que pueda acceder al puerto de SSHD.

El daemon knockd permite configurarlo con indefinida cantidad de reglas de knocking, por lo que si queremos, mediante otra secuencia de knocking, podríamos eliminar la regla de iptables previamente creada, a modo de, una vez usado el acceso, cerrarlo y no poder acceder nuevamente hasta que se envíe la secuencia de apertura.

Instalación

La instalación varía dependiendo de la distro que usen. Yo soy usuario de archlinux desde hace casi 10 años, y para instalar knockd solo es cuestión de ejecutar:

sudo pacman -Sy knockd  

Pueden buscar el paquete correspondiente para la distro que usen, o bien compilarlo desde el código fuente.

Configuración

El archivo de configuración se encuentra en:

/etc/knockd.conf

Una configuración de ejemplo usando los puertos previamente nombrados:

[options]
    logfile = /var/log/knockd.log
    interface = wlp3s0

[openSSH]
    sequence    = 1111,2222,3333
    seq_timeout = 5
    command     = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn

[closeSSH]
    sequence    = 3333,2222,1111
    seq_timeout = 5
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn

Iniciar servicio

systemctl start knockd  

Y para dejarlo en autostart:

systemctl enable knockd  

Finalizando

Bueno, como habrán visto es un servicio muy fácil de configurar y de usar. Al poder configurar qué comando ejecutar para cada secuencia de knocking, nos da lugar para jugar con nuestra imaginación. Por ejemplo, podríamos armar un knocking a modo de honeypot, y que el sistema nos avise por mail o cualquier otro medio cuando alguien intente acceder.

Knockd [ http://www.zeroflux.org/projects/knock ]
nmap [ https://nmap.org/ ]