{"id":1513,"date":"2024-08-15T10:00:00","date_gmt":"2024-08-15T13:00:00","guid":{"rendered":"https:\/\/www.nerdadas.com\/blog\/?p=1513"},"modified":"2024-08-13T20:01:33","modified_gmt":"2024-08-13T23:01:33","slug":"port-knocking-firewall-a-demanda","status":"publish","type":"post","link":"https:\/\/www.nerdadas.com\/blog\/port-knocking-firewall-a-demanda\/","title":{"rendered":"Port Knocking &#8211; Firewall a Demanda!"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Que tal si quer\u00e9s asegurar tu router\/firewall para evitar los accesos de administraci\u00f3n externos pero no para vos. Que digas: Abrete s\u00e9samo y asi como si nada tuvieras una SSH lista para administrarlo sin preocuparte por dejar ese puerto expuesto cuando lo dej\u00e9s de usar?. Bueno, hoy te voy a explicar una t\u00e9cnica bastante olvidada que es el Port Knoking. (knock Knock, who is?)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El Port Knocking es una t\u00e9cnica que se basa en detectar intentos de acceso a una lista de puertos y si el orden es correcto (Como si fuera un c\u00f3digo secreto) ejecutar determinada acci\u00f3n, que casi siempre es abrir todos los puertos hacia la ip de la que provienen los intentos de acceso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estos puertos no puede ser secuenciales ya que la idea es que no se ejecuten de casualidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo<\/strong>: Estoy desde mi casa y necesito acceder a la administraci\u00f3n de un router\/servidor en la oficina y este tiene todos los puertos bloqueados en su firewall. Necesito una regla que me de acceso al mismo. Para esto ya dej\u00e9 previamente configurado una <strong>app<\/strong> que si hago \u00abtelnet\u00bb a los puertos: 1001, 3001 y 2001 secuencialmente en menos de 1 minuto abran todos los puertos a la IP de donde estoy intentando conectarme. Esta t\u00e9cnica se llama: <strong>Port Knocking<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/port-knocking.png\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"189\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/port-knocking.png\" alt=\"\" class=\"wp-image-1541\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/port-knocking.png 623w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/port-knocking-300x91.png 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para probar esta t\u00e9cnica hice laboratorios en <strong>Linux (Debian 12) y Mikrotik RouterOS 7<\/strong>. Es un feature bastante moderno, aunque la t\u00e9cnica es vieja, y relacionado con servidores principalmente linux de ah\u00ed que no tenga an\u00e1logos similares en muchas marcas. En Windows Server por ejemplo se puede lograr pero emulando Knockd, la app que usaremos en Linux, con <a href=\"https:\/\/www.cygwin.com\/\" title=\"\">Cygwin<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1-1024x394.png\" alt=\"\" class=\"wp-image-1539\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1-1024x394.png 1024w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1-300x115.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1-768x295.png 768w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-1.png 1287w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3mo vamos a probar solo el acceso al router\/server debian, solo nos hace falta la interfaz NAT y el dispositivo. Ya que probaremos el acceso a ssh en Debian y en el router solo la cadena INPUT para el puerto 8291(Winbox).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Debian 12<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En Linux primero configuraremos la interfaz NAT\/Internet en dhcp y anotaremos la ip para hacer las pruebas. Instalaremos el paquete UFW que es un firewall muy sencillo de implementar para poder cerrar todos los puertos y realizar nuestras pruebas. En <a href=\"https:\/\/www.gns3.com\/\" title=\"\">GNS3<\/a> ya est\u00e1 instalado el paquete de OpenSSH-Server, sino lo instalaremos tambi\u00e9n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>debian@debian:~$ sudo apt install ufw openssh-server\n#Habilitamos el firewall\ndebian@debian:~$ sudo ufw enable\n#Vemos que puertas tiene abiertos.\ndebian@debian:~$ sudo ufw status numbered \nStatus: active\n\n     To                         Action      From\n     --                         ------      ----\n&#91; 1] 22\/tcp                     ALLOW IN    Anywhere                  \n&#91; 2] 80\/tcp                     ALLOW IN    Anywhere                  \n&#91; 3] 443                        ALLOW IN    Anywhere\n#Como vemos est\u00e1n los puertos 22,80 y 443 abiertos as\u00ed que eliminamos las reglas para cerrar todos.(Asegurate de estar sentado frente al equipo o que tenes acceso al emulador para hacerlo, sino te vas a quedar afuera)\ndebian@debian:~$ sudo ufw delete 3\ndebian@debian:~$ sudo ufw delete 2\ndebian@debian:~$ sudo ufw delete 1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"546\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open-1024x546.png\" alt=\"\" class=\"wp-image-1542\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open-1024x546.png 1024w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open-300x160.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open-768x410.png 768w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/Open.png 1361w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora probaremos desde nuestra terminal los puertos que tiene abiertos para asegurarnos que el firewall hace su trabajo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"588\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado-1024x588.png\" alt=\"\" class=\"wp-image-1543\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado-1024x588.png 1024w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado-300x172.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado-768x441.png 768w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/cerrado.png 1326w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Todo cerrado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Port Knocking<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este momento nos queda instalar la app que usaremos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Instalamos\ndebian@debian:~$ sudo apt install knockd\n#Abrimos la config\ndebian@debian:~$ sudo nano \/etc\/knockd.conf\n#Modificamos por nuestra propia secuencia y luego restart: systemctl restart knockd<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"747\" height=\"507\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-2.png\" alt=\"\" class=\"wp-image-1544\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-2.png 747w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2024\/07\/image-2-300x204.png 300w\" sizes=\"auto, (max-width: 747px) 100vw, 747px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como se ve en la imagen al ejecutarse nuestra secuencia abriremos los puertos usando un comando de iptables. Tambi\u00e9n podemos reemplazar esta secuencia por ufw allow ssh o simplemente podemos usarla para reiniciar alg\u00fan servicio, por ejemplo:<strong> \/etc\/init.d\/apache2 restart .<\/strong> Las posibilidades son infinitas y podemos generar nuestros propios comandos remotos sin siquiera conectarnos al equipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usando este servicio igualmente el comando abre el puerto\/los puertos a todas las ips que pregunten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RouterOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yo te lo explico clarito pero si quer\u00e9s visitar la documentaci\u00f3n t\u00e9cnica es por ac\u00e1: <a href=\"https:\/\/help.mikrotik.com\/docs\/display\/ROS\/Port+knocking\">https:\/\/help.mikrotik.com\/docs\/display\/ROS\/Port+knocking<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Port Knocking en RouterOS <\/strong>se basa en la detecci\u00f3n de hits en determinados puertos previamente configurados, en un orden espec\u00edfico y en una ventana de tiempo, como ya explique antes. La diferencia es que en Mikrotik se hace el \u00abif\u00bb como si estuvieramos programando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo de ACLs de filtrado:<\/strong><br \/>Una ip hace un hit en el puerto 1001, agendo en \u00ablista1\u00bb durante 30 segundos.<br \/>Si una ip de la \u00ablista1\u00bb hace hit en el puerto 3001,  agendo en \u00ablista2\u00bb por 30 segundos.<br \/>Si una ip de la \u00ablista2\u00bb hace hit en el puerto 2001, agendo esa ip en la lista: \u00abHabilitada\u00bb por 1hora.<br \/>La siguiente regla de Firewall dir\u00e1:<br \/>Habilitar el \u00abINPUT\u00bb a todas las ips que est\u00e1n en la lista: \u00abHabilitada\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De esa forma hacemos el diagrama l\u00f3gico que seguiremos para detectar la ip de origen que est\u00e1 ejecutando el Port Knocking.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/ip\/firewall\/filter add action=add-src-to-address-list address-list=\"Lista1\"\u00a0address-list-timeout=30s chain=input dst-port=1001\u00a0in-interface-list=WAN protocol=tcp\n\n\/ip\/firewall\/filter add action=add-src-to-address-list address-list=\"Lista2\"\u00a0address-list-timeout=30s chain=input dst-port=3001\u00a0in-interface-list=WAN protocol=tcp src-address-list=\"Lista1\"\n\n\/ip\/firewall\/filter add action=add-src-to-address-list address-list=\"Habilitada\" address-list-timeout=30m chain=input dst-port=2001\u00a0in-interface-list=WAN protocol=tcp src-address-list=\"Lista2\"\n\n\/ip\/firewall\/filter add action=accept chain=input in-interface-list=WAN src-address-list=\"Habilitada\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Que un router traiga una funcionalidad como esta es increible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo ejecutamos esta t\u00e9cnica desde el exterior?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bastante sencillo con Nmap:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#En linux si la ip Wan de tu router es: xx.xx.xx.xx\nfor x in 1001,3001,2001; do nmap -p $x -Pn xx.xx.xx.xx; done<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Con telnet:<\/strong><br \/>telnet xx.xx.xx.xx 1001<br \/>telnet xx.xx.xx.xx  3001<br \/>telnet xx.xx.xx.xx 2001<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>con Netcat:<br \/><\/strong>nc  xx.xx.xx.xx 1001<br \/>nc  xx.xx.xx.xx 3001<br \/>nc  xx.xx.xx.xx 2001<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Casos de Uso<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En el caso de un router los casos son bastante sencillos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Administraci\u00f3n remota del dispositivo<br \/>Abrir puerto para una VPN<br \/>Abrir puerto para una conexi\u00f3n RDP, Tunel SSH, etc<br \/>Del lado interno, permisos de internet, permisos de paso a una vlan de servidores<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el caso de un servidor Linux las opciones son infinitas como comandos queramos ejecutar:<br \/>Un backup<br \/>reinicio de un servicio<br \/>habilitar un usuario<br \/>Bloquear un servicio, usuario<br \/>Agregar una ACL al firewall y un gigantesco Etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El Port Knocking es una navaja suiza en manos de un Arquitecto de redes, us\u00e9 con precauci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Que tal si quer\u00e9s asegurar tu router\/firewall para evitar los accesos de administraci\u00f3n externos pero no para vos. Que digas: Abrete s\u00e9samo y asi como si nada tuvieras una SSH lista para administrarlo sin preocuparte por dejar ese puerto expuesto cuando lo dej\u00e9s de usar?. Bueno, hoy te voy a explicar una t\u00e9cnica bastante olvidada [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1566,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1243,1223,161,1,17,804],"tags":[1148,823,282,210,10,1336,1335,37,242,409,569,1281,263,869],"class_list":["post-1513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-montando-tu-red-corporativa-de-0","category-redes","category-seguridad","category-sin-categoria","category-tecnologia","category-ti","tag-cisco","tag-debian","tag-hack","tag-hacker","tag-jeremias-palazzesi","tag-knock","tag-knocking","tag-linux","tag-network","tag-port","tag-redes","tag-routeros","tag-security","tag-seguridad"],"_links":{"self":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/comments?post=1513"}],"version-history":[{"count":10,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1513\/revisions"}],"predecessor-version":[{"id":1567,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/1513\/revisions\/1567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media\/1566"}],"wp:attachment":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media?parent=1513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/categories?post=1513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/tags?post=1513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}