Accéder au contenu
Secret Knock

Exemples de knockd.conf

knockd lit /etc/knockd.conf : une section [options] et une section par porte. Chaque section comporte une séquence, un délai et la commande à exécuter pour l’adresse qui frappe, %IP%. Choisissez vos propres ports : ne réutilisez jamais ceux des exemples.

Ouvrir SSH pendant quelques secondes

La configuration la plus courante : une frappe ouvre SSH, puis knockd le referme après cmd_timeout. Les sessions déjà ouvertes continuent de fonctionner si le pare-feu accepte les connexions établies.

[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

Séquences distinctes pour ouvrir et fermer

Sans minuteur, le port reste ouvert jusqu’à ce que vous frappiez la séquence de fermeture. C’est pratique, mais facile à oublier : privilégiez la version temporisée.

[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

Séquences à usage unique

Au lieu d’une séquence fixe, knockd peut lire un fichier de séquences et n’accepter chacune qu’une seule fois, afin qu’une frappe enregistrée ne puisse pas être rejouée. Secret Knock conserve la même liste et passe à la séquence suivante après une frappe ayant ouvert la porte.

[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 et le fichier de séquences

Avec nftables

Sur les systèmes utilisant nftables, laissez knockd ajouter l’adresse à un ensemble avec un délai d’expiration ; le guide pour masquer SSH présente la table nftables correspondante.

[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

Après modification

  1. 1Sous Debian et Ubuntu, définissez l’interface sur laquelle knockd écoute dans /etc/default/knockd (KNOCKD_OPTS="-i eth0"), puis redémarrez knockd.
  2. 2Observez son fonctionnement avec journalctl -u knockd -f pendant que vous frappez.
  3. 3Dans Secret Knock, + › Importer depuis un fichier transforme chaque section contenant une séquence en porte ; saisissez manuellement les listes de séquences à usage unique.

Tous les exemples sur GitHub → Toutes les configurations de cette page, prêtes à copier : github.com/mobilcomm/secretknock-examples (domaine public).

Questions

Dois-je utiliser des étapes TCP ou UDP ?

Les deux fonctionnent. Les mélanger rend une séquence plus difficile à deviner à partir d’une analyse des ports. Les étapes UDP peuvent transporter une charge utile dans Secret Knock si votre configuration la vérifie.

Guides pour votre configuration