Guía de tecnologías

Port Knocking en Ubuntu: instalar y configurar

8 min read Seguridad Actualizado 20 Oct 2025
Port Knocking en Ubuntu: instalar y configurar
Port Knocking en Ubuntu: instalar y configurar

TL;DR

Port knocking es una técnica para ocultar puertos (por ejemplo SSH) hasta que un cliente realiza una secuencia de conexiones a otros puertos en el orden correcto. Este artículo guía la instalación de knockd y la configuración básica con iptables en Ubuntu/Debian, pruebas de acceso, buenas prácticas y planes de recuperación. Incluye ejemplos, checklist operativo y un diagrama de decisión para elegir alternativas.

¿Qué es Port Knocking?

Port knocking es un mecanismo de control de acceso que mantiene un puerto (como 22 para SSH) cerrado o bloqueado hasta que un cliente conecta a una secuencia específica de puertos en el orden y tiempo correctos. Es una capa adicional de seguridad. Definición breve: técnica de «golpes» en puertos para desbloquear servicios.

Importante: cambiar el puerto SSH por defecto no evita rastreos automatizados. Port knocking complica los escaneos y reduce la superficie visible, pero no sustituye a otras medidas (autenticación por clave, firewall, MFA).

Índice

  • Requisitos previos
  • Paso 1: instalar paquetes
  • Paso 2: reglas de iptables
  • Paso 3: configurar knockd
  • Probar acceso y cerrar el puerto
  • Buenas prácticas y consideraciones de seguridad
  • Alternativas y comparativa
  • Recuperación si te quedas fuera
  • Checklist de roles
  • Diagrama de decisión
  • Preguntas frecuentes
  • Resumen final

Requisitos previos

  • Acceso administrativo (root) al servidor o acceso a la consola de emergencia.
  • Ubuntu o Debian (las instrucciones funcionan en Debian 8 y versiones similares).
  • Conocimiento básico de iptables y edición de archivos con nano o similar.

Nota: Si no tienes consola física o acceso a proveedor (panel de control), tener un plan de recuperación antes de bloquear SSH.

Paso 1: asegurarse de que los paquetes requeridos estén instalados

Todas las órdenes siguientes deben ejecutarse como root. Para elevar a root si trabajas con un usuario con sudo:

sudo su

Actualizar listas de paquetes:

apt-get update

Instalar el servidor SSH (si no está instalado):

apt-get install openssh-server

Instalar knockd, el demonio que administra port knocking:

apt-get install knockd

Salida de ejemplo durante la instalación (se mantiene como referencia):

Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]  
Get:2 http://security.debian.org wheezy/updates Release [102 kB]  
Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]  
Hit http://mirrors.digitalocean.com wheezy Release.gpg  
Hit http://mirrors.digitalocean.com wheezy Release  
Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]  
Hit http://mirrors.digitalocean.com wheezy/main amd64 Packages  
Hit http://mirrors.digitalocean.com wheezy/main Translation-en  
Fetched 635 kB in 1s (358 kB/s)  
Reading package lists... Done  
root@howtoforge:~#  
root@howtoforge:~# apt-get install openssh-server  
Reading package lists... Done  
Building dependency tree  
Reading state information... Done  
The following extra packages will be installed:  
 openssh-client  
Suggested packages:  
 ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw  
The following packages will be upgraded:  
 openssh-client openssh-server  
2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.  
Need to get 1,364 kB of archives.  
After this operation, 0 B of additional disk space will be used.  
Do you want to continue [Y/n]? 

Presiona Y y Enter para continuar.

Instalación de knockd.

A continuación, instala iptables si no está presente:

apt-get install iptables

Paso 2: añadir reglas a iptables

Primero vacía reglas actuales y permite salidas para no bloquear conexiones salientes:

iptables --flush  
iptables -t nat --flush  
iptables -t mangle --flush  
iptables --policy OUTPUT ACCEPT

Permitir conexiones ya establecidas o relacionadas (esto evita cortar la sesión SSH actual):

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

Nota importante: la regla usa ESTABLISHED,RELATED sin espacios alrededor de la coma.

Bloquear el puerto SSH (22) entrante para forzar el uso del mecanismo de port knocking:

iptables -A INPUT -p tcp --destination-port 22 -j DROP

Automatizar la restauración de reglas al reiniciar usando iptables-persistent:

apt-get install iptables-persistent

Durante la instalación te preguntará si deseas guardar reglas actuales para IPv4 e IPv6; selecciona Yes para ambas.

Instalación iptables persistent.

IPTables persistent, parte 2

Si prefieres guardar las reglas manualmente usa:

iptables-save > /etc/iptables/rules.v4

Ejemplo de salida de iptables-save (referencia):

# Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016  
*filter  
:INPUT ACCEPT [1:40]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [17:1976]  
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 22 -j DROP  
COMMIT  
# Completed on Tue Feb 23 04:59:28 2016

Con estas reglas, tu sesión activa se mantiene mientras otros intentos a 22 quedan bloqueados.

Paso 3: configurar knockd

Editar el archivo de configuración de knockd:

nano /etc/knockd.conf

Editando knockd.conf con nano.

Un ejemplo típico del archivo:

[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

Explicación corta de claves:

  • UseSyslog: envía los eventos a syslog.
  • sequence: lista de puertos en orden que el cliente debe tocar.
  • seq_timeout: tiempo en segundos para completar la secuencia (por defecto 5s).
  • command: comando que ejecuta knockd cuando la secuencia coincide; %IP% se reemplaza por la IP del cliente.
  • tcpflags: filtra tipos de paquete TCP (por ejemplo syn).

Recomendaciones:

  • Cambia los puertos y el orden por defecto. Los valores por defecto son conocidos por atacantes.
  • Considera usar secuencias más largas o incluir UDP para variar la firma.
  • Limita el tiempo que la IP queda autorizada (ver más abajo ejemplos y runbook).

Activar knockd en el arranque: editar /etc/default/knockd

nano /etc/default/knockd

Cambia:

START_KNOCKD=0

a:

START_KNOCKD=1

Si el servidor tiene varias interfaces y knockd no escucha donde debe, usa KNOCKD_OPTS para especificar la interfaz.

Iniciar knockd manualmente:

service knockd start

Ahora knockd gestionará la apertura temporal del puerto SSH según las reglas configuradas.

Acceder al servidor cuando knockd está activo

Con las reglas puestas, no podrás conectar SSH directamente. El cliente verá timeout o rechazo hasta que realices la secuencia.

Probar el knocking con telnet

En Linux instala telnet con apt. En Windows habilita el cliente Telnet desde “Activar o desactivar características de Windows”.

Ejemplo (reemplaza youripaddress y la secuencia por tus puertos):

telnet youripaddress 7000  
telnet youripaddress 8000  
telnet youripaddress 9000

Debes completar la secuencia dentro de seq_timeout (5 segundos en el ejemplo). Luego intenta conectar por SSH:

ssh usuario@youripaddress

Para cerrar el acceso, realiza la secuencia inversa definida en el bloque closeSSH:

telnet youripaddress 9000  
telnet youripaddress 8000  
telnet youripaddress 7000

Nota: Es recomendable combinar port knocking con autenticación por clave pública y, si es posible, con MFA.

Buenas prácticas y consideraciones de seguridad

  • No confíes solo en port knocking. Es una capa adicional, no un sustituto de autenticación fuerte.
  • Usa secuencias no triviales y cámbialas periódicamente.
  • Restringe la aceptación de la IP abierta por un tiempo limitado y registra intentos fallidos.
  • Considera cifrar o ofuscar los patrones si usas herramientas propias de knocking.
  • Ten un plan de recuperación si pierdes acceso: acceso de consola por proveedor, IP fija alternativa, o modo de rescate.
  • Riesgos: knockd puede ser vulnerable a ataques de repetición (replay) si no se limita la ventana de tiempo o el número de intentos.
  • Para IPv6, asegúrate de que knockd y tus reglas de firewall soporten direcciones v6; iptables vs ip6tables.

Seguridad adicional (opciones):

  • Single Packet Authorization (SPA) como fwknop ofrece mayor resistencia a escucha/repetición.
  • Usar certificados o clave privada además del knocking para autenticar al usuario.

Alternativas y cuando falla port knocking

Alternativas:

  • fwknop (SPA): envía un paquete cifrado que abre el puerto; evita secuencias visibles.
  • VPN: exige conexión a red privada antes de exponer servicios.
  • Port knocking a nivel de aplicación (servicios de orquestación) en lugar de iptables.

Casos en los que port knocking puede fallar:

  • El cliente está detrás de NAT simétrico y su IP pública cambia entre golpes.
  • Pérdida de conexión a la consola del proveedor y reglas persistentes sin acceso físico.
  • Sniffers en la red que capturan la secuencia (mitigable con SPA).

Ejemplos y snippets útiles

Ejemplo de knockd.conf que autoriza la IP por 60 segundos y guarda marca en iptables usando un temporizador (enlace a scripts externos recomendable):

[openSSH]  
 sequence = 1234,2345,3456  
 seq_timeout = 10  
 command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -m comment --comment "knocked" -j ACCEPT; /usr/bin/sleep 60; /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -m comment --comment "knocked" -j ACCEPT  
 tcpflags = syn

En este snippet el comando inserta la regla primero y, tras sleep 60, la elimina. Usar scripts para mayor control y logging es preferible.

Recuperación: plan si te quedas fuera

  1. Acceso al panel del proveedor: activar consola de rescate o reinstalar firewall por consola.
  2. Si tienes acceso físico, reinicia en modo single-user y edita /etc/iptables/rules.v4.
  3. Si tienes otra IP autorizada (por ejemplo tu oficina), añade una regla temporal desde consola del proveedor.
  4. Mantén siempre un usuario con keypair diferente y acceso de emergencia configurado.

Criterios de recuperación mínimos:

  • Poder restaurar /etc/iptables/rules.v4 desde respaldo.
  • Tener un método de autenticación alternativo (consola o panel proveedor).

Checklist por roles

Administrador de sistemas:

  • Respaldar /etc/iptables/rules.v4 y /etc/knockd.conf
  • Configurar knockd para arrancar en el inicio
  • Probar secuencia y tiempos desde red externa

DevOps / Despliegue:

  • Documentar secuencias y tiempos en vault o gestor seguro
  • Automatizar cambio periódico de secuencias como parte del pipeline

Seguridad / SOC:

  • Monitorizar logs de knockd en syslog
  • Alertar por intentos de knocking fallidos repetidos

Diagrama de decisión

flowchart TD
  A[¿Necesitas reducir la superficie pública?] -->|Sí| B{¿Quieres resistencia a captura de paquete?}
  B -->|Sí| C[Considera SPA 'fwknop' o VPN]
  B -->|No| D[Port Knocking 'knockd' con iptables]
  A -->|No| E[Usa medidas de autenticación: claves, MFA]
  D --> F[Implementar secuencias no triviales y monitorizar]
  C --> F

Pruebas y criterios de aceptación

  • El puerto 22 debe responder como cerrado antes de la secuencia (no aceptar conexiones).
  • Tras la secuencia correcta desde la IP autorizada, la conexión SSH se debe permitir dentro del tiempo configurado.
  • Las reglas deben persistir tras reinicio (iptables-persistent u otro método).
  • Logs deben registrar intentos de knocking (uso de syslog).

Preguntas frecuentes

¿Port knocking evita que me hackeen?

No completamente. Reduce la visibilidad del servicio, pero debes combinarlo con claves, actualizaciones y monitorización.

¿Puedo usar UDP en la secuencia?

Sí; knockd soporta TCP y UDP en la secuencia si lo configuras adecuadamente.

¿Qué pasa con IPv6?

Asegúrate de que tanto knockd como las reglas de firewall contemplen ip6tables y el soporte adecuado para direcciones IPv6.

Resumen final

Port knocking con knockd y iptables es una capa adicional útil para proteger SSH en servidores Ubuntu/Debian. Implementa secuencias únicas, limita ventanas temporales, mantén planes de recuperación y considera alternativas como SPA o VPN si necesitas mayor resistencia a captura de paquetes. Prueba todo desde redes externas y monitoriza logs.

Notas finales:

  • Guarda las configuraciones y documenta la secuencia en un lugar seguro.
  • Realiza pruebas de recuperación antes de depender en producción.

Confirmación iptables persistente

Autor
Edición

Materiales similares

Arreglar YouTube TV que no funciona en Roku
Soporte técnico

Arreglar YouTube TV que no funciona en Roku

Atajo Windows para descargar imágenes web
Software.

Atajo Windows para descargar imágenes web

Arreglar error CDP.dll falta en Windows
Windows

Arreglar error CDP.dll falta en Windows

Cómo detectar texto generado por IA a mano
Escritura

Cómo detectar texto generado por IA a mano

Instalar RabbitMQ en CentOS 7
DevOps

Instalar RabbitMQ en CentOS 7

Instalar y usar SSHFS en CentOS
Linux

Instalar y usar SSHFS en CentOS