Un servidor con dirección IP pública que mantiene abierto el puerto 22 SSH queda expuesto a escaneos automatizados y a futuras vulnerabilidades de OpenSSH. Reforzar la autenticación con claves y añadir fail2ban reduce parte del ruido, pero el demonio SSH sigue siendo visible para herramientas como nmap, que obtiene confirmación de que hay un servicio escuchando. Para evitarlo se puede recurrir a la autorización por paquete único (SPA) mediante fwknop, una mejora sobre el port knocking tradicional.
La idea central consiste en enviar un único paquete UDP cifrado y firmado con HMAC al servidor antes de iniciar la conexión SSH. Si fwknopd valida la firma, inserta temporalmente una regla en iptables que abre el puerto 22 solo para la IP de origen durante un intervalo configurable (120 segundos en la configuración descrita). Pasado ese plazo, la regla se retira automáticamente, aunque las conexiones ya establecidas se mantienen. Para un escáner externo, el puerto 22 aparece simplemente como filtrado: sin banner, sin respuesta, sin evidencia de SSH.
El artículo detalla el flujo completo: generación de claves (una de cifrado y otra HMAC), despliegue del lado servidor mediante un rol de Ansible que instala fwknop-server, despliega las plantillas de configuración y elimina la regla pública de UFW, gestión del lado cliente con chezmoi y ~/.fwknoprc —alimentado desde Bitwarden— y la integración con ~/.ssh/config mediante ProxyCommand para que el SPA se ejecute de forma transparente al escribir ssh server1. También explica cómo adaptar Ansible para que las ejecuciones posteriores sigan pudiendo conectar tras retirar la regla SSH pública. El resultado es un acceso SSH invisible al escaneo, protegido criptográficamente y resistente a la reutilización de paquetes capturados gracias al timestamp y al contador de un solo uso incluidos en cada paquete SPA.
