Port knocking explicado
El port knocking mantiene un servicio invisible hasta que alguien demuestra conocer un secreto. Esta guía explica cómo funciona, las dos implementaciones habituales — knockd y fwknop — y por qué fallan las llamadas en la práctica.
Cómo funciona el port knocking
El cortafuegos descarta todas las conexiones al puerto protegido, por lo que un escáner no ve nada. Un pequeño demonio vigila el tráfico que llega al cortafuegos. Cuando una dirección de origen produce el patrón esperado, el demonio añade una regla de cortafuegos que permite esa dirección, normalmente durante poco tiempo.
El patrón es la llamada. Con knockd es una secuencia de intentos de conexión a puertos concretos en un orden específico y dentro de un límite de tiempo. Con fwknop es un único paquete cifrado.
knockd: secuencias de llamadas
knockd escucha en una interfaz y compara los intentos de conexión con las secuencias de /etc/knockd.conf. Una secuencia puede combinar puertos TCP y UDP. Cuando coincide, knockd ejecuta un comando, normalmente una regla de iptables o nftables para la dirección que llama (%IP%).
Este ejemplo abre SSH para la dirección que llama y lo vuelve a cerrar después de 10 segundos. Las sesiones SSH existentes seguirán funcionando si el cortafuegos acepta conexiones establecidas.
[options]
UseSyslog
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT Elige tus propios puertos; no reutilices nunca puertos de ejemplos publicados. tcpflags = syn hace que knockd cuente solo paquetes con la marca SYN: el primer paquete de un intento de conexión.
fwknop: autorización de paquete único
fwknop sustituye la secuencia por un paquete UDP cifrado (AES) y autenticado (HMAC). El servidor, fwknopd, lo captura pasivamente, lo verifica, comprueba que no sea una repetición y abre el puerto solicitado para la dirección incluida en el paquete.
Genera claves con fwknop --key-gen e inclúyelas en el access.conf del servidor. Secret Knock importa la parte del cliente desde tu .fwknoprc.
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 <output of fwknop --key-gen>
HMAC_KEY_BASE64 <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT 30 Como la dirección permitida viaja dentro del paquete cifrado, SPA puede abrir un puerto para una dirección distinta de la que envía el paquete; resulta útil cuando llamas desde un teléfono con datos móviles para un portátil situado en otro lugar.
Por qué fallan las llamadas
- IPv4 frente a IPv6: la llamada salió por una familia de direcciones y SSH se conecta por la otra. El cortafuegos abrió la puerta para una dirección que no estás usando.
- Una dirección pública diferente: con datos móviles, detrás de NAT del operador o una VPN, el servidor ve otra IP distinta de la esperada. Comprueba la dirección desde la que llamas.
- SYN retransmitidos: si una llamada TCP no recibe respuesta, el sistema operativo del cliente vuelve a enviar el mismo SYN. En nuestras pruebas, knockd 0.8 reinició la secuencia ante un SYN repetido, por lo que el cliente debe enviar cada llamada una sola vez y detener el intento rápidamente.
- Temporización: las llamadas que llegan fuera de seq_timeout, o en un orden incorrecto, reinician la secuencia.
- Dispositivos intermedios: algunas redes bloquean o reescriben el tráfico hacia puertos inusuales, por lo que una llamada que funciona en casa puede fallar en una red de hotel u oficina.
¿Es seguro?
Una secuencia de knockd se envía sin cifrar; cualquiera que pueda observar tu tráfico puede repetirla. Úsala para ocultar un servicio de los escáneres, delante de claves SSH, no en lugar de ellas. SPA de fwknop elimina ese problema mediante cifrado, HMAC y protección contra repeticiones, y es la mejor opción cuando tu tráfico pueda ser observado.
Llamadas desde iPhone, Mac y Apple Watch
Secret Knock envía secuencias de knockd y paquetes SPA de fwknop desde iPhone, iPad y Mac, comprueba que el puerto responde y abre tu app SSH. Apple Watch llama mediante el iPhone enlazado, porque watchOS no permite que las apps envíen paquetes TCP o UDP sin procesar; lejos del iPhone puede enviar SPA mediante HTTP a servidores que lo habiliten.
Guías para tu configuración
- knockd en iPhone, iPad y Mac →
- SPA de fwknop en iPhone, Mac y Apple Watch →
- Port knocking de MikroTik →
- Llamada a puertos de DrayTek Vigor →
- Oculta SSH tras llamadas a puertos →
- Port knocking en Apple Watch →
- Por qué una llamada no abre el puerto →
- Ejemplos de knockd.conf →
- configuración del servidor fwknop →
- ¿Port knocking, VPN o fail2ban? →
Mantén la puerta cerrada. Lleva la llamada contigo.
Secret Knock llegará al App Store para iPhone, iPad, Mac y Apple Watch.
Secret Knock →