lunes, 3 de octubre de 2011

PortKnocking en Debian Squeeze desde Windows

Que es portknocking:

Es una tecnica de seguridad muy particular, facil y simple. Es utilizado para no dejar puertos a la escucha, por ejemplo en la administracion remota de linux utilizamos el puerto 22, pero recibimos varios ataques de fuerza bruta continuamente por tener este puerto escuchando. Podemos evitar dichos ataques e incluso escaneos utilizando esta tecnica.

Es comparado con el "golpear antes de entrar", por ejemplo, antes de abrir la puerta de casa esperamos que los integrantes de la familia utilicen un codigo, como ser el "pa parabapa pa pa", de esta forma identificamos que es algun familiar y procedemos a abrir la puerta.

El gopeteo de puertos consiste en tener el puerto bloqueado por el firewall hasta que recibamos "el golpe secreto", en nuestro caso utilizamos una secuencia de escaneos a ciertos puertos previamente configurados, reemplazamos el "pa pa parapa pa pa" por el "7000 8000 9000" para abrir el puerto y para cerrarlo en orden inverso "9000 8000 7000" (en nuestro ejemplo, ustedes pueden configurarlo con otros puertos y en el orden deseado).

Utilizaremos el KnockKnock en windows para golpear un servidor linux y habilitar el acceso por SSH:

Instalamos knockd en linux:
# apt-get install knockd


Habilitamos reglas para que solo hagan SSH desde una unica direccion ip:
# iptables -A INPUT --source 192.168.1.100 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP


Verificamos las reglas agregadas:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.100 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22


Configuramos el knockd, lo dejamos como viene por default, si tenemos SSH corriendo en otro puerto, debemos cambiar el 22 tanto en iptables como en el knockd.conf:
# vim /etc/knockd.conf
[options]
UseSyslog

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn


Reiniciamos el demonio:
# /etc/init.d/knockd restart
Stopping Port-knock daemon: knockd.
knockd disabled: not starting. To enable it edit /etc/default/knockd ... (warning).


Lo habilitamos:
# vim /etc/default/knockd
START_KNOCKD=1


Ahora cuando lo reiniciamos no nos aprarece el warning:
# /etc/init.d/knockd restart
Stopping Port-knock daemon: knockd.
Starting Port-knock daemon: knockd.


Enviamos el golpe de puerto desde la Pc remota desde la cual deseamos que abra el puerto:

Utilizamos el mismo knock si lo hacemos desde un linux:
# knock -v 192.168.1.1 7000 8000 9000


Si lo hacemos desde windows descargamos el siguiente el knock-knock:
Download KnockKnock_v0.92.zip

Luego de instalarlo y ejecutarlo especificamos la ip que deseamos golpear y los puertos que configuramos en el knock.conf para habilitar las reglas en el firewall:

Ip a golpear: 192.168.1.1
New port: 7000, 8000 y 9000



Vemos que podemos conectarnos por SSH al puerto 22 en la ip 192.168.1.1. Ahora si en cambio ejecutamos en orden inverso segun lo que configuramos, en vez de 7000, 8000 y 9000 hacemos: 9000, 8000 y 7000 vemos que perdemos conexion y solamente nos queda la siguiente linea en iptables:

DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt: 22


No hay comentarios: