Ir al contenido
Secret Knock

Oculta SSH tras llamadas a puertos

Un puerto SSH abierto recibe intentos de inicio de sesión de todo Internet. Las llamadas a puertos mantienen el puerto cerrado hasta que demuestras que conoces un secreto; después, lo abren solo para tu dirección durante unos segundos.

Con knockd y nftables

Descarta SSH de forma predeterminada y acéptalo solo desde direcciones incluidas en un conjunto con un tiempo de espera. knockd añade al conjunto la dirección que llama; nftables la elimina cuando vence el tiempo de espera, y la sesión SSH establecida sigue funcionando.

table inet filter {
    set knocked4 {
        type ipv4_addr
        flags timeout
    }
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif "lo" accept
        tcp dport 22 ip saddr @knocked4 accept
    }
}
/etc/nftables.conf (extracto)

La sección de knockd que rellena el conjunto:

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s }
/etc/knockd.conf

Mantén separado el acceso permanente

Si también permites algunas direcciones de forma permanente, mantenlas en un conjunto independiente sin tiempo de espera. Añadir una dirección que ya está en un conjunto con tiempo de espera no restablece dicho tiempo, por lo que mezclar ambos tipos de entrada en un único conjunto puede dejarte sin acceso cuando se agote el temporizador.

O usa fwknop

SPA de fwknop es más seguro que una secuencia: un paquete cifrado y autenticado que no se puede reutilizar. Consulta la guía de fwknop.

Desde tu iPhone a SSH

  1. 1Mantén pulsado el llamador de latón. Secret Knock comprueba que el puerto 22 responde y muestra cuánto tiempo permanece abierto.
  2. 2Abrir SSH abre tu app de SSH con un enlace ssh:// para el servidor.
  3. 3Mantener abierta vuelve a llamar poco antes de que termine el periodo, mientras la puerta está en pantalla.

Todos los ejemplos en GitHub → Todas las configuraciones de esta página, listas para copiar: github.com/mobilcomm/secretknock-examples (dominio público).

Preguntas

¿Sustituye esto a las claves SSH?

No. Las llamadas a puertos ocultan el servicio; también debes conservar claves SSH seguras y desactivar los inicios de sesión con contraseña.

Guías para tu configuración