Port-knocking: "llama antes de entrar"

networkingseguridadArco

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

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Duda con port-knocking

Buenas, he estado leyendo su receta y me parece muy interesante pero la duda me aparece con lo siguiente:

Actualmente dispongo de varias maquinas con ubuntu y centos que administro via ssh con el cliente putty (windows)
¿Es posible con este cliente hacer previamente el knock con la secuencia y luego abrir ssh?

Muchas gracias.

Imagen de Lk2

Tendrías que buscar un

Tendrías que buscar un port-knocker para Windows y ejecutarlo "mu rápido", me imagino.

Que yo sepa Putty solo es un cliente de SSH y Telnet, no tiene nada de port-knocking. Hay un port knocker para Windows que se llama KnockKnock, pero vamos. Yo me pensaría eso de andar haciendo estas cosas con ese SSOO...

Imagen de int-0

Uda al catchap!

...por lo menos a los que estemos registrados!!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de oscarah

Talibán ortográfico...

SSOO -> Sistemas Operativos... Sticking out tongue

PD: ¿Por qué tengo que escribir un captcha si estoy registrado?... ¡¡el de ascii art es un infierno!!

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1