Por qué una llamada de puerto no abre la puerta
Una llamada nunca llega al servidor, llega de una forma que el daemon no acepta o abre la puerta para una dirección que no estás usando. Revisa la lista desde el principio: está ordenada según la frecuencia con la que aparece cada causa.
1. La puerta se abrió para otra dirección
El firewall abre el puerto para la dirección de origen que vio el servidor. Si llamaste mediante IPv6 y SSH se conecta después mediante IPv4, o al revés, la puerta estará abierta para una dirección que no estás usando. Los datos móviles, el NAT del operador y las VPN también cambian la dirección.
Compara la dirección que muestra Secret Knock en la pantalla de inicio («Llamas desde…») con la dirección del registro del servidor, y fija IPv4 o IPv6 para la puerta si son distintas.
2. Los paquetes no llegan al servidor
Las redes de hoteles, oficinas y móviles a veces bloquean puertos poco habituales, y un firewall en la nube delante del servidor descarta paquetes antes de que knockd o fwknopd los vean. Supervisa el tráfico en el servidor mientras llamas:
# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f
# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'
# fwknopd in the foreground with verbose output
sudo fwknopd -f -v 3. La secuencia llega con una forma incorrecta
- 1SYN retransmitidos: cuando una llamada TCP no recibe respuesta, el sistema operativo del cliente vuelve a enviar el mismo SYN. knockd 0.8 reinicia la secuencia ante esa repetición. Secret Knock envía cada llamada TCP como un único SYN y detiene el intento de inmediato; es posible que otros clientes no lo hagan.
- 2Tiempo: todos los pasos deben llegar dentro de seq_timeout y en orden. Añade un breve retraso antes de un paso si un router intermedio reordena los paquetes.
- 3Protocolo: un paso UDP debe enviarse como UDP y uno TCP como TCP; comprueba cada paso con knockd.conf.
- 4tcpflags = syn hace que knockd ignore los paquetes TCP sin el indicador SYN. Sin ello, los demás paquetes de una conexión al mismo puerto también cuentan como aciertos y pueden romper la secuencia.
4. fwknop: claves, relojes y repeticiones
- 1Ambas claves deben coincidir con access.conf: la clave Rijndael y la Clave HMAC, con el mismo resumen (SHA-256 de forma predeterminada).
- 2fwknopd rechaza paquetes de más de MAX_SPA_PACKET_AGE (120 segundos de forma predeterminada), por lo que un reloj del dispositivo muy desajustado hace que todos los paquetes parezcan antiguos.
- 3Cada paquete SPA se puede usar una sola vez; fwknopd descarta deliberadamente un paquete repetido.
- 4Si llamas mediante HTTP, algo debe aceptar conexiones TCP en ese puerto, o la solicitud nunca se enviará.
5. La puerta se abre, pero SSH sigue fallando
- 1Orden de las reglas: la regla que añade el daemon debe ir antes de la regla que descarta el puerto; un iptables -A añade la regla después de un DROP existente y nunca encuentra coincidencia.
- 2La ventana: cmd_timeout o FW_ACCESS_TIMEOUT cerró la puerta antes de que SSH se conectara. Conéctate dentro de la ventana; las sesiones establecidas siguen funcionando si tu firewall acepta conexiones establecidas.
- 3La comprobación de puerto de Secret Knock después de la llamada te indica si el puerto respondió, independientemente de la autenticación SSH.
Todos los ejemplos en GitHub → Todas las configuraciones de esta página, listas para copiar: github.com/mobilcomm/secretknock-examples (dominio público).
Preguntas
¿Cómo veo lo que envió realmente la app?
El historial de la puerta muestra cada llamada con su hora, resultado y familia de direcciones, y el editor muestra la misma llamada como un comando de terminal que puedes ejecutar desde un ordenador para comparar.
Guías para tu configuración
- Port knocking explicado →
- 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 →
- Ejemplos de knockd.conf →
- configuración del servidor fwknop →
- ¿Port knocking, VPN o fail2ban? →