Los Teatinos

Consultoría y Formación

¿Qué es el Port Knocking?

El Port Knocking  o “Golpeo de puertos” es una técnica para aplicar seguridad a nuestro servidor. Según vemos en la imagen el Port Knocking se comporta como un Firewall.

Port knoching

¿En qué consiste?

Lo normal es que nos conectemos remotamente a nuestro servidor por SSH por el puerto 22, a través de algún cliente como Putty. Podríamos aplicar algo de seguridad y cambiar el puerto por defecto que es el 22, pero aun así hay utilidades como Nmap nos permiten averiguar los puertos que hay abiertos.

Aquí es donde entra la técnica del Port Knocking, comportándose como un Firewall. El método consiste en realizar una serie de intentos de conexión preestablecidos a una cadena de puertos para avisar al sistema de que es un acceso seguro. ¡¡Buff que lio ¡!

Lo explicaré en mayor detalle:

Configuro en el sistema para que si hay un intento de conexión en la siguiente secuencia de puertos  7000-8000-9000, me deje entrar por SSH al puerto deseado. Tiene que ser en esa misma secuencia y a esos mismos puertos, si no el puerto no se abriría.

1.       Si hago la secuencia 6000-7000-8000 no dejaría entrar

2.       Si hago la secuencia 9001-800 no dejaría entrar

Por lo tanto el servidor tiene el puerto cerrado, pero cuando detecte que se ha realizado la secuencia de puertos correcta (7000-8000-9000, definida previamente en el archivo de configuración), el server abrirá el puerto para establecer una conexión.

 

Port Knocking

Al lío, proceso de configuración.

1.       Instalar el paquete knockd.

               aptitude install knockd

Port knocking

Tras la instalación el servicio no está activo, para ello editar el archivo que nos dice la imagen, lo haremos en el punto 2.

2.       Tras la instalación, editar fichero /etc/default/knockd

Port knocking

Como se puede leer, hay que editar el fichero /etc/knockd.conf antes de editar este, pero no habría ningún problema si editamos /etc/default/knockd antes.

# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING

START_KNOCKD=1

                Hay que poner START_KNOCKD a 1 para que el demonio knockd arranque.

                Un demonio es un proceso que se ejecuta en segundo plano (background).

# command line options
# KNOCKD_OPTS="-i eth1"

Hay descomentar la línea anterior, y especificarle en qué interfaz tiene que escuchar, si no la descomentamos por defecto es el "eth0".

No funciona poner dos interfaces con "-i eth0 -i eth1".

3.       Bloquear acceso al puerto 22 con IPTABLES

AHHHH!!, por dios que es eso de IPTABLES, tranquilos aquí tenéis esta pequeña explicación.

IPTABLES es el cortafuegos (FIREWALL) por defecto de Linux.

iptables -A INPUT –p tcp --dport 22 –j DROP

Esto lo que hace es indicar a iptables que añada (A) una nueva regla a la cadena de entrada (INPUT) para el protocolo tcp (-p tcp), en la que descarte (-j DROP) todos los paquetes recibidos al puerto de destino 22 (--dport 22), que es el puerto SSH por defecto.

Ver como lo hemos bloqueado con :

-  iptables -L

Para borrar las reglas de iptables, iptables -F

Si cuando hacemos iptables -L aparece esto es que no tenemos ninguna regla definida.

Port knocking

-  nmap localhost

Para instalar nmap: aptitude install nmap

Port knocking

4.       Editar el fichero /etc/knockd.conf

Aquí se encuentra  el meollo, vemosque cuando llega una secuencia de paquetes TCP con el flag de SYN a los puertos 7000, 8000 y 9000 en menos de 5 segundos, el demonio knockd añade una regla de iptables para permitir el acceso al servicio SSH a la IP que ha hecho el port knocking. Y con la secuencia de puertos a la inversa, podemos cerrar el puerto posteriormente.

Usaré la secuencia por defecto 7000, 8000, 9000 pero aconsejo escoger otra por seguridad.

[options]

        #UseSyslog  //esto es lo que viene por defecto

        logfile = /var/log /knockd.log    //personalizamos el fichero de log

[openSSH]

        sequence       = 7000,8000,9000

        seq_timeout = 5

        command      = iptables -D INPUT -p tcp --dport 22 -j DROP

        tcpflags          = syn

[closeSSH]

        sequence       = 9000,8000,7000

        seq_timeout = 5

        command      = iptables -A INPUT -p tcp --dport 22 -j DROP

        tcpflags          = syn

Explicación de la configuración:.

[options]

 UseSyslog significa que para registrar actividad (log) se usará /var/log/syslog

[openSSH]

Es donde obviamente irán las instrucciones para abrir SSH,

sequence.Primeramente tenemos la secuencia de puertos (la combinación secreta) que está configurada por defecto (puerto 7000, 8000 y 9000).

                NOTA IMPORTANTE:

· Obviamente los puertos se pueden cambiar (de hecho lo recomiendo) así como no tienen que ser 3 obligatoriamente, pueden ser más o menos, depende de lo que deseen ustedes.

· Los puertos no pueden ser consecutivos, deben estar bien distantes.

seq_timeout. Significa el tiempo que se esperará para que se efectúe la combinación secreta de puertos. Por defecto está puesto 5 segundos, esto significa que una vez empecemos a efectuar el port knocking tenemos máximo 5 segundos para terminar la secuencia correcta.

Si pasan 5 segundos y no hemos culminado el port knocking entonces simplemente será como si la secuencia no hubiese sido válida.

command.Cuando esos puertos sean "tocados" ejecutará el comando:

 /sbin/iptables -D INPUT -p tcp -dport 22 -j DROP, que elimina la sentencia creada en iptables encargada de bloquear el puerto SSH, permitiéndonos así poder conectar.

tcpflags. Con esta línea especificamos el tipo de paquetes que reconocerá el servidor como válidos para el port knocking. Por defecto es syn.

[closeSSH]

Hace lo contrario, la vuelve a añadir para que los paquetes que lleguen al puerto SSH sean descartados, pero el golpeo de los puertos es en orden contario como se observa.

5.       Ponemos en marcha el demonio.

service knockd start

O bien

/etc/init.d/knockd start

Port_Knocking

6.       Desde el pc cliente mandar la secuencia de conexión para que nos abra el puerto, eso sí, previamente hay que instalar en el cliente el paquete knock.

aptitude install knockd  //Instalar paquete en el cliente

knock 10.33.1.2 7000 8000 9000

   Si no dice nada va bien
   O bien

knock -v 10.33.1.2 7000 8000 9000

La marca "-v" le indica que lo haga en modo "verbose" (que muestre lo que va haciendo), seguido de la dirección IP del servidor (10.33.1.2), seguido de los puertos a "golpear" en cuestión en el orden indicado, poniendo el protocolo utilizado para realizar el "golpeo" separado por dos puntos ":"

7.       Ver que funciona.

conectarnos por putty

         o bien

ssh -p 22 Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla..1.2

o bien

ssh Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla..1.2

8.       Hacer el proceso inverso para cerrar el puerto.

knock -v 10.33.1.2 9000 8000 7000

9.       Ver el fichero de log para ver que se está realizando bien el proceso.

Cada golpeo se identifica como un Stage y openSSH y closeSSH son los nombres que se definen en el fichero de configuración /etc/knockd.conf

Port_Knocking

Como podéis ver, el Port Knocking es muy interesante y útil, además aparte de lo que ya sabemos podemos configurarlo para que mate un proceso, detenga un servicio como apache o MySQL, arranque el servicio SSH, hacer una actualización del sistema de forma remota sin ni siquiera acceder al sistema, añadir o eliminar un usuario, mover ficheros de lugar, eliminarlos, claro está apuntándonos previamente la combinación de puertos deseada, no vaya a ser que la liemos parda.

 

Algunos ejemplos de configuración del fichero knockd.conf los puedes ver en la siguiente imagen.

Port_Knocking

 

Escribir un comentario

Código de seguridad
Refescar