Ir al contenido
Secret Knock

Ejemplos de knockd.conf

knockd lee /etc/knockd.conf: una sección [options] y una sección por cada puerta. Cada sección tiene una secuencia, un límite de tiempo y el comando que se ejecutará para la dirección que llama, %IP%. Elige tus propios puertos; nunca reutilices los de los ejemplos.

Abrir SSH durante unos segundos

La configuración más habitual: una llamada abre SSH y knockd lo vuelve a cerrar después de cmd_timeout. Las sesiones que ya hayas abierto seguirán funcionando si el firewall 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
/etc/knockd.conf

Secuencias independientes para abrir y cerrar

Sin temporizador, el puerto permanece abierto hasta que llames la secuencia de cierre. Es práctico, pero fácil de olvidar; es preferible usar la versión temporizada.

[options]
    UseSyslog

[openSSH]
    sequence    = 7311:tcp,8822:tcp,9133:udp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[closeSSH]
    sequence    = 9133:udp,8822:tcp,7311:tcp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

Secuencias de un solo uso

En lugar de una secuencia fija, knockd puede leer un archivo de secuencias y aceptar cada una una sola vez, para que no se pueda repetir una llamada grabada. Secret Knock conserva la misma lista y pasa a la siguiente secuencia después de una llamada que abrió la puerta.

[openSSH]
    one_time_sequences = /etc/knockd/ssh_sequences
    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

# /etc/knockd/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp
/etc/knockd.conf y el archivo de secuencias

Con nftables

En sistemas con nftables, permite que knockd añada la dirección a un conjunto con un tiempo de espera; la guía para ocultar SSH muestra la tabla de nftables correspondiente.

[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

Después de editar

  1. 1En Debian y Ubuntu, configura la interfaz en la que escucha knockd en /etc/default/knockd (KNOCKD_OPTS="-i eth0") y reinicia knockd.
  2. 2Comprueba cómo funciona con journalctl -u knockd -f mientras llamas.
  3. 3En Secret Knock, + › Importar desde archivo convierte cada sección con una secuencia en una puerta; introduce a mano las listas de secuencias de un solo uso.

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

Preguntas

¿Debo usar pasos TCP o UDP?

Ambos funcionan. Mezclarlos hace que una secuencia sea más difícil de adivinar a partir de un análisis de puertos. Los pasos UDP pueden incluir una carga útil en Secret Knock si tu configuración la comprueba.

Guías para tu configuración