29 abril 2016

Instalando y Configurando PortKnocking

Ya anteriormente vimos a Knockd, y las funciones que soporta. Ahora vamos a ver como instalarlo y configurarlo adecuadamente.
Queremos definir una secuencia de puertos, cuanto duran las conexiones, monitorear las mismas y guardar los registros (logs) para mantener un mejor control de nuestros servidores y servicios.

Con todo esto estamos bajando nuestro nivel de exposicion en la red, ya que si un atacante nos escanea, no veria los servicios que estamos publicando, ni tampoco sabria como invocarlos y aprovecharse de alguna vulnerabilidad en nuestros equipos. No es lo ideal, pero peor es tener un server SSH todo el dia escuchando abiertamente y siendo atacado:


[root@daelomin ~]# slapt-get --install knockd

Despues de instalar el paquete en el servidor precisamos configurar knockd, para eso editamos el archivo /etc/knockd.conf:

[root@daelomin ~]# vi /etc/knockd.conf

Este archivo de configuracion de knockd es muy simple de entender, mas para aquellos que no tienen mucha experiencia, siguiendo las lineas comentadas:

[options]
# Define que el Syslog sera el responsable por los logs.
UseSyslog

# Aca tenemos dos secuencias, una “Open SSH” y la otra “Close SSH”.

[openSSH]
# Define la secuencia de los puertos para ejecutar el comando de la linea de abajo.
sequence = 7000,8000,9000
# Define el tiempo en segundos que los paquetes no pueden sobrepasar
# para una secuencia sea validada.
seq_timeout = 5
# Comando a ser ejecutado cuando la secuencia es validada.
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
# Tipo de flag para conexion
tcpflags = syn

# La lógica de las opciones de abajo es exactamente de las opciones de arriba

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

En el ejemplo, estamos usando SSH, esto es de acuerdo a las configuraciones que nosotros necesitemos, podrian ser aleatorias, secuenciales o la combinacion que decidamos, lo importante es no dejarlas como vienen por omision cuando instalamos.

Una vez que sabemos cuales son las configuraciones necesarias, modificamos el archivo de configuracion de knockd por las nuestras propias:

[root@daelomin ~]# vi /etc/default/knockd

Cambiamos la opcion “START_KNOCKD=0” por “=1” y
Cambiamos la opcion KNOCKD_OPTS=”-I eth0”  # De acuerdo a nuestras configuraciones, eth0 es la placa con los servicios publicados.

Despues de eso podemos iniciar nuestro port-knocking:

[root@daelomin ~]# /etc/rc.d/rc.knockd start

Con nuestro servidor ya configurado y probado, en nuestro cliente ejecutamos los  siguientes comandos:

[root@daelomin ~]# knock vampii.com.ar 7000:tcp 8000:tcp 9000:tcp

Falta ejecutar “iptables -nL” en el servidor y ver que nos muestra. Ahora podemos conectarnos normalmente por ssh:

[root@daelomin ~]# ssh user@vampii.com.ar

Cuando cerramos nuestra conexion SSH podemos querer abrir los puertos de SSH en el servidor, para eso ejecuta desde otro lado remoto el comando:

[root@daelomin ~]# knock vampii.com.ar 9000:tcp 8000:tcp 7000:tcp

Y el servidor nos va a abrir el puerto 22 con el servicio que definimos que escuche, en este caso SSH.

Que te diviertas!

2 comentarios:

Pablo 0 dijo...

Que clientes de Portknocking para Win hay? Encontre uno que se llamam KnockKnock pero no me gusto mucho.

Hay alguna manero de integrar los knocks a Putty?

Vampii dijo...

La verdad seria fabulantastico que PuTTY supiera hacer golpeteo de puertos, pero por ahora parece que no va a tener esa funcionalidad...

Para que PuTTY pueda hacer eso tenes varias opciones, esta es la mas sencilla y esta tomada de la pagina del man de knockd:

Hacer un script que llame al cliente de knockd (puede ser incluso con NetCat o Telnet) y despues le pase el control a PuTTY, que creo que es la que hacemos todos, y evitas que KnockKnock se lance varias veces, lo cual es su costumbre...
Tambien podrias usar Hping o Sendip si configuraste de modo mas avanzado Knockd.