Port Knocking

Te diremos cómo puedes usar el Port Knocking en Linux

Para empezar, el Port Knocking es una forma de asegurar un servidor cerrando los puertos del firewall, incluso aquellos que tú sepas que se van a utilizar. Esos puertos se abren a pedido si, y solo si, la solicitud de conexión proporciona el “golpe secreto”.

Puedes aprender a usar los comandos de búsqueda de Linux si eres novato en este genial sistema operativo. De esta forma podrás saber todo lo que necesitas acerca del terminal.

El Port Knocking es un «golpe secreto»

Port Knocking

En la década de 1920, cuando la prohibición estaba en su apogeo, si querías entrar en un bar clandestino, tenías que conocer el “golpe secreto”, refiriéndose a tocar las puertas. Y debías hacerlo correctamente para que pudieses entrar.

El Port Knocking es un equivalente moderno. Si quieres que las personas tengan acceso a los servicios en tu ordenador pero no quieres abrir tu firewall a todo el internet, puedes usar la anulación de puertos.

Esto te permite cerrar los puertos en tu firewall que permiten conexiones entrantes y hacer que se abran automáticamente cuando se realiza un patrón preestablecido de intentos de conexión. La secuencia de intentos de conexión actúa como el “golpe secreto”. Otro golpe secreto cierra el puerto.

El Port Knocking es algo nuevo en estos tiempos, pero es importante saber que es un ejemplo de seguridad a través de la oscuridad y ese concepto es fundamentalmente defectuoso. El secreto de cómo acceder a un sistema es seguro porque solo aquellos en un grupo específico lo saben.

El Port Knocking puede ser inseguro

Pero una vez que se revela ese secreto, ya sea porque se revela, se observa, se adivina o se resuelve, su seguridad es nula. Es mejor que protejas tu servidor de otras maneras más fuertes, como solicitar inicios de sesión basados ​​en claves para un servidor SSH.

Los enfoques más robustos para la ciberseguridad son de varias capas, por lo que tal vez el Port Knocking debería ser una de esas capas. Cuantas más capas, mejor, por supuesto. No obstante, podrías decir que estar “tocando la puerta” de los puertos no agrega mucha seguridad, si es que hay algo de seguridad, a un sistema seguro y debidamente reforzado.

Por esta razón, la seguridad cibernética es un tema vasto y complicado, pero no debes utilizar el Port Knocking como tu única forma de defensa.

Instala el knockd

Port Knocking

Para ponerte un ejemplo del bloqueo de puertos, usarás esta guía para controlar el puerto 22, que es el puerto SSH. Para ello utilizarás una herramienta llamada knockd.

Debes usar apt-get para instalar este paquete en su sistema si usas Ubuntu u otra distro basada en Debian. En otras distros de Linux, usa la herramienta de administración de paquetes predeterminado. Ahora debes escribir lo siguiente:

sudo apt-get install knockd

Probablemente ya tengas instalado el firewall de iptables en tu sistema, pero es posible que deba instalar el paquete persistente de iptables. Maneja la carga automática de reglas iptable guardadas en tu distribución y así no tendrás problemas. Puedes instalarlo de la siguiente manera:

sudo apt-get install iptables-persistent

Cuando aparezca la pantalla de configuración de IPV4, presiona la barra espaciadora para aceptar la opción «Sí». Ahora debes presionar la barra espaciadora nuevamente en la pantalla de configuración de IPv6 para aceptar la opción «Sí» y poder continuar. El siguiente comando le dice a iptables que permita que continúen las conexiones establecidas y en curso.

Ahora debes escribir otro comando para cerrar el puerto SSH. Si alguien está conectado por SSH cuando escribas este comando, no querrás que se corte:

sudo iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

Este comando agrega una regla al firewall que reza así:

-A: agrega la regla a la tabla de reglas del firewall. Es decir, agrégalo al final.

INPUT: Esta es una regla sobre las conexiones entrantes.

-m conntrack: las reglas de firewall actúan sobre el tráfico de red, que son los paquetes que coinciden con los criterios de la regla. El parámetro -m hace que iptables utilice módulos de coincidencia de paquetes adicionales. En este caso, el llamado conntrack funciona con las capacidades de seguimiento de conexión de red del núcleo.

–ctstate ESTABLISHED,RELATED: especifica el tipo de conexión a la que se aplicará la regla, a saber, conexiones ESTABLECIDAS y RELACIONADAS. Una conexión establecida es aquella que ya está en progreso. Una conexión relacionada es aquella que se realiza debido a una acción desde una conexión establecida. Quizás alguien que está conectado quiere descargar un archivo, eso podría suceder a través de una nueva conexión iniciada por el host.

-j ACCEPT: si el tráfico coincide con la regla, salta al objetivo ACEPTAR en el firewall. En otras palabras, el tráfico se acepta y se le permite pasar a través del firewall. Ahora puedes escribir un comando para cerrar el puerto:

sudo iptables -A INPUT -p tcp –dport 22 -j REJECT

Este comando agrega una regla al firewall que dice:

-A: agregue la regla a la tabla de reglas del firewall, es decir, agrégala al final.

INPUT: esta regla se trata de conexiones entrantes.

-p tcp: esta regla se aplica al tráfico que utiliza el Protocolo de control de transmisión (TCP).

-dport 22: esta regla se aplica específicamente al tráfico TCP que se dirige al puerto 22, que es el puerto SSH.

-j REJECT: si el tráfico coincide con la regla, salta al objetivo RECHAZAR en el firewall De esta forma, si se rechaza el tráfico, no se permite ninguna conexión a través del firewall.

Debemos iniciar el demon netfilter-persistent. Podrás hacerlo fácilmente con este comando:

sudo systemctl start netfilter-persistent

Tienes que hacer que netfilter-persistent pase por un ciclo de guardar y recargar, por lo que carga y controla las reglas de iptable. Para ello debes escribir los siguientes comandos:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Ahora has instalado las utilidades y el puerto SSH está cerrado. Con suerte, sin rechazar ni cortar la conexión de otro usuario. Ahora es el momento de configurar el “golpe secreto”.

Port Knocking: debes configurar la utilidad knockd

Port Knocking

Hay dos archivos que debes editar para configurar knockd. El primero es el archivo de configuración de knockd que está a continuación:

sudo gedit /etc/knockd.conf

El editor gedit se abre con el archivo de configuración knockd cargado. Debes editar este archivo para adaptarlo a tus necesidades. Las secciones que te interesan son «openSSH» y «closeSSH». Las siguientes cuatro entradas están en cada sección:

secuence: la secuencia de puertos que alguien debe introducir para abrir o cerrar el puerto 22. Los puertos predeterminados son 7000, 8000 y 9000 para abrirlo. Y 9000, 8000 y 7000 para cerrarlo. Puedes cambiarlos o agregar más puertos a la lista. Para los propósitos de este ejemplo, vas a atender los valores predeterminados del archivo.

seq_timeout: es el período de tiempo dentro del cual alguien tiene que acceder a los puertos para activar su apertura o su cierre.

command: es el comando enviado al firewall de iptables cuando se activa la acción de abrir o cerrar. Estos comandos agregan una regla al firewall para abrir el puerto o la eliminan para cerrar el puerto.

tcpflags: se trata del tipo de paquete que cada puerto debe recibir en la secuencia secreta. Un paquete SYN (sincronizar) es el primero en una solicitud de conexión TCP, el cual es llamad “saludo de tres vías”.

La sección «openSSH» se puede leer como «se debe realizar una solicitud de conexión TCP a los puertos 7000, 8000 y 9000, en ese orden y en 5 segundos, para que el comando de apertura del puerto 22 se envíe al firewall».

La sección «closeSSH» se puede leer como «se debe realizar una solicitud de conexión TCP a los puertos 9000, 8000 y 7000, en ese orden y en 5 segundos, para que el comando de cierre el puerto 22 se envíe al firewall».

Echa un vistazo a las reglas del firewall

Las entradas de «comando» en las secciones openSSH y closeSSH permanecen iguales, excepto por un parámetro. Así es como están compuestos:

-A: introduce la regla al final de la lista de reglas del firewall para el comando openSSH.

-D: elimina el comando de la lista de reglas del firewall para el comando closeSSH.

INPUT: Esta regla se refiere al tráfico entrante de la red.

-s% IP%: la dirección IP del dispositivo que solicita una conexión.

-p: protocolo de red; en este caso, es el protocolo TCP.

–dport: el puerto de destino; en este ejemplo que te dimos, es el puerto 22.

-j ACCEPT: Salta al objetivo de aceptación dentro del firewall. En otras palabras, deja que el paquete pase por el resto de las reglas sin actuar sobre el mismo.

Port Knocking: ediciones del archivo de configuración knockd

Port Knocking

En primer lugar, extenderás el «seq_timeout» a 15 segundos. Esto es un tiempo holgado, pero si alguien dispara manualmente las solicitudes de conexión, podría necesitar un tanto más de tiempo.

En la sección «openSSH», cambia la opción -A (agregar) a -I (insertar). Este comando inserta una nueva regla de firewall en la parte superior de la lista de reglas de firewall. Si dejas la opción -A, agrega la lista de reglas del firewall y la coloca en la parte de abajo.

El tráfico entrante se prueba con cada regla de firewall en la lista de arriba hacia abajo. Ya tienes una regla que cierra el puerto 22. Entonces, si el tráfico entrante se prueba contra esa regla antes de ver la regla que permite el tráfico, la conexión se rechaza. Ahora, si el tráfico ve esta nueva regla primero, se permite la conexión.

El comando de cierre elimina la regla agregada por openSSH de las reglas del firewall. El tráfico SSH es manejado una vez más por la regla preexistente de «el puerto 22 está cerrado». Después de realizar estas ediciones, debes guardar el archivo de configuración y eso es todo.


Deja un comentario