Cómo instalar y configurar knockd, un demonio de port-knocking

Introducción

El port-knocking una técnica de seguridad muy peculiar, tan sencilla como eficaz. Sirve para no dejar expuesto un puerto ante el público general, evitando que sea vulnerable ante muchos ataques e incluso ante simples escaneos de puertos.

El uso más habitual es ocultar el puerto del servidor SSH, y para eso lo vamos a usar en la receta. La idea es que la máquina aparentemente no tiene ningún puerto abierto (de eso se encarga el firewall) pero al realizar intentos de conexión a ciertos puertos (cerrados), el demonio abre temporalmente el puerto “oculto” (con ayuda del firewall) y el cliente puede entonces realizar la conexión.

El nombre de la técnica “knock” es por el sonido que hacen los nudillos al golpear una puerta (al menos para los ingleses). Así que es el equivalente a las claves de golpecitos que das en una puerta para que sepan que eres tú…

Ingredientes

  • knockd (paquete Debian)

Configuración del servidor

  • Habilitar el servidor en /etc/default/knockd
  • Escribir un fichero de configuración, por ejemplo:
  [options]
        logfile = /var/log/knockd.log

  [opencloseSSH]
        sequence      = 2222,3333,4444
        seq_timeout   = 15
        tcpflags      = syn,ack
        start_command = /usr/sbin/iptables -I INPUT 1 -s %IP% -p tcp --syn --dport 22 -j ACCEPT
        cmd_timeout   = 10
        stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT

Si te fijas, el puerto se abre sólo para la IP que “marca” la secuencia. El programa permite cosas más sofisticadas como:

  • Cerrar el puerto con una secuencia diferente, en lugar de con un timeout.
  • Usar secuencias de un solo uso.
  • Usar una secuencia almacenada en un fichero (que puedes subir al servidor por ftp, webdav, etc)

Cliente

El cliente necesita un programa que realice intentos de conexión a los puertos de la secuencia y después intente abrir la sesión SSH. Lo más fácil es:

$ knock server.example.org 2222 3333 4444; ssh usuario@server.example.org

Lo más cómodo es hacerte un scriptillo, que tendrás que poner a buen recaudo si tiene la secuencia en claro.

Conclusiones

Aunque parezca una medida un tanto paranoica, lo cierto es que es tan sencillo de utilizar que merece la pena, aunque sea sólo para ahorrarte los intentos de intrusión SSH con ataques por fuerza bruta.

Referencias



blog comments powered by Disqus