Configurando Port Knocking en tu servidor

DragonJAR 336x280 Configurando Port Knocking en tu servidor

En los años 20 y 30 cuando en Estados Unidos se impuso la Ley Seca, donde se prohibía el consumo, venta, transporte y fabricación de bebidas alcohólicas, durante estos años proliferaron los bares clandestinos con doble razón social donde solicitaban una contraseña al entrar y dependiendo de la respuesta podrías disfrutar del anhelado licor o entrar a la mejor tienda de mascotas de la ciudad icon wink Configurando Port Knocking en tu servidor .

portnocking Configurando Port Knocking en tu servidor

En el 2003 Martin Krzywinski, publicó un articulo en la revista SysAdmin titulado “Port Knocking: Network Authentication Across Closed Ports.”, en el que mostraba en detalle como migrar estos mecanismos de autenticación usados durante la época de la “prohibición” a los sistemas de información actuales, bautizando esta técnica como .

El Port Knocking (algo así como “toque de puertos”) básicamente consiste en realizar varios intentos de conexión seguidas a ciertos puertos con X protocolo (previamente establecidos) para «avisar» al sistema de que somos nosotros y nos deje entrar o ejecute algo que nosotros queramos, un Port Knocking se divide en 2 partes esenciales:

  • Servidor: quien queda a la espera de alguna conexión a los puertos que especificamos.
  • Cliente: que nos permite “tocar” los puertos en la secuencia establecida, para poder ingresar al sistema.

Si configuramos adecuadamente nuestro sistema de Port Knocking, podremos nuestro firewall (puedes ver algunas reglas abajo) para que bloquee todo el trafico (menos el estrictamente necesario) y con nuestro sistema de Port Knocking abrir los puertos de los servicios que necesitemos, solo cuando haga falta y sin temor a perder el control del mismo.

#EJEMPLO REGLAS ITABLES QUE PUEDES USAR
#bloqueamos el trafico
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#permitimos ping y loockback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p ICMP –icmp-type 8 -m limit –limit 1/s -j ACCEPT
iptables -A OUTPUT -p ICMP –icmp-type 0 -m limit –limit 1/s -j ACCEPT
#permitimos acceso al apache (si lo tenemos) o algun servicio critico
iptables -A INPUT -p TCP –dport 80 -d IPSERVIDOR -m state –state NEW -j ACCEPT

Para empezar a y configurar nuestro Port Knocking, debemos hacer lo siguiente:

portnocking1 Configurando Port Knocking en tu servidor

Instalar el demonio knockd, que contiene tanto el cliente, como el servidor de port knocking, para distribuciones basadas en debian, basta con un apt-get install knockd, en otras distribuciones también se encuentra empaquetado, aunque puedes compilar tu mismo el programa si no lo encuentras.

portnocking2 Configurando Port Knocking en tu servidor

Después de instalar el knockd, debemos editar el archivo /etc/default/knockd habilitando el knockd (cambia el 0 por un 1) y configurando la interface de red por la cual escucharemos los “toques”.

portnocking3 Configurando Port Knocking en tu servidor

Una vez echo esto, vamos a configurar nuestras reglas de Port Knocking editando el archivo /etc/knockd.conf, es bastante simple de configurar, solo debemos cambiar la secuencia de puertos (predecibles para el articulo, pero deberías escoger puertos por encima del 5000 que no estén muy cerca el uno del otro y un timeout mas alto), el tiempo entre la conexión de cada uno, la bandera que utilizaran y el comando a ejecutar si todas las anteriores reglas se cumplen.

En la imagen de ejemplo podrás apreciar que (en este caso particular) deseo tener una combinación de puertos para abrir el servicio y otro para cerrarlo, si no deseas esto puedes simplemente poner un timeout a el comando y cuando este deje de estar activo, pasara a ejecutar el comando que especifiques.

[abrircerrarSSH]
sequence = 7000,8000,9000
seq_timeout = 5
tcpflags = syn,ack
start_command = iptables -A INPUT -p TCP –dport 22 -s %IP% -m state –state NEW -j ACCEPT
cmd_timeout = 25
stop_command = iptables -D INPUT -p TCP –dport 22 -s %IP% -m state –state NEW -j ACCEPT

También puedes cambiar los comandos a ejecutar para que realicen las tareas que tu quieras, en este caso lo que se quiere es abrir un puerto con el iptables.

portnocking4 Configurando Port Knocking en tu servidor

Grabamos y cerramos los archivos de configuración, reiniciamos el knockd (/etc/init.d/knockd restart).

portnocking5 Configurando Port Knocking en tu servidor

Ahora solo tenemos que ejecutar la secuencia de puertos desde nuestro cliente (existen clientes para Windows, GNU/Linux, Mac OS X) y se abrirá el puerto o se ejecutará el comando que configuramos con esa secuencia; también existe un cliente Knock para el iPhone, por lo que no tendrás problemas en acceder a tu servidor desde cualquier parte (me imagino que para otras plataformas, deben existir clientes parecidos).

iphonock Configurando Port Knocking en tu servidor

Espero que les sea de utilidad, cualquier duda o sugerencia pueden hacerla llegar atreves de los comentarios.

Actualizado:
Acabo de encontrar un cliente de Port Knocking para iPhone mucho mejor, gratuito y sin publicidad llamado KnockOnD, click aquí para mas info.

Para mas Información:
Pagina Oficial del Port Knocking


Si te ha gustado el post, compartelo y ayudanos a crecer.

Unete a nuestra Fanpage Siguenos en Twitter

Autor: DragoN

Ingeniero en Sistemas y Telecomunicaciones de la Universidad de Manizales. Information Security Researcher con más de 10 años de experiencias en Ethical Hacking, Pen Testing y Análisis Forense. Docente Universitario en Pre y Post-Grado, Speaker y Organizador de diferentes eventos de Seguridad Informática, Co-Fundador del ACK Security Conference y Fundador de DragonJAR SAS y de La Comunidad DragonJAR, una de las comunidades de seguridad informática mas grandes de habla hispana y referente en el sector.

Compartir este Artículo
  • Pingback: Tweets that mention Configurando Port Knocking en tu servidor -- Topsy.com

  • http://www.horoscopoleo.es Diego

    No lo entendi muy bien pero que va, lo trataré de hacer nuevamente y cualquier duda me pasaré por aca.

  • ezinex

    Excelente artículo. Quería también señalar, que para Android he leido de dos apps, una de ellas port knocker (disponible del market).

  • dero

    Bastante interesante para fortalecer la seguridad perimetral y volverla paranoica xD

  • Bart

    Para usarlo con mayor seguridad, lo ideal seria aumentar el numero de puertos para enviar los paquetes o los “toques”.

    El problema es que los “toques” deben llegar en una secuencia especifica, porque si no (perdida de paquetes, por ejemplo), tocaria que el cliente repita la secuencia desde el inicio.

    salu2