Le port knocking expliqué
Le port knocking garde un service invisible jusqu’à ce qu’une personne prouve qu’elle connaît un secret. Ce guide explique son fonctionnement, les deux implémentations courantes — knockd et fwknop — et les raisons concrètes des échecs de frappe.
Fonctionnement du port knocking
Le pare-feu rejette toute connexion vers le port protégé ; un scanner ne voit donc rien. Un petit démon surveille le trafic qui atteint le pare-feu. Lorsqu’une adresse source produit le motif attendu, le démon ajoute une règle de pare-feu qui autorise cette adresse, généralement pendant une courte durée.
Le motif correspond à la frappe. Avec knockd, il s’agit d’une séquence de tentatives de connexion vers des ports précis, dans un ordre précis et dans un délai limité. Avec fwknop, il s’agit d’un seul paquet chiffré.
knockd : séquences de frappes
knockd écoute sur une interface et compare les tentatives de connexion aux séquences de /etc/knockd.conf. Une séquence peut mélanger des ports TCP et UDP. Lorsqu’elle correspond, knockd exécute une commande — généralement une règle iptables ou nftables pour l’adresse qui frappe (%IP%).
Cet exemple ouvre SSH pour l’adresse qui frappe et le referme après 10 secondes. Les sessions SSH existantes continuent de fonctionner si votre 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 Choisissez vos propres ports ; ne réutilisez jamais les ports d’exemples publiés. tcpflags = syn permet à knockd de ne compter que les paquets portant l’indicateur SYN — le premier paquet d’une tentative de connexion.
fwknop : Single Packet Authorization
fwknop remplace la séquence par un paquet UDP chiffré (AES) et authentifié (HMAC). Le serveur, fwknopd, le capture passivement, le vérifie, contrôle qu’il ne s’agit pas d’une relecture et ouvre le port demandé pour l’adresse contenue dans le paquet.
Générez les clés avec fwknop --key-gen et placez-les dans le fichier access.conf du serveur. Secret Knock importe la partie client depuis votre .fwknoprc.
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 <output of fwknop --key-gen>
HMAC_KEY_BASE64 <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT 30 Comme l’adresse autorisée est contenue dans le paquet chiffré, SPA peut ouvrir un port pour une adresse autre que celle qui envoie le paquet — utile lorsque vous frappez depuis un téléphone en données mobiles pour un ordinateur portable situé ailleurs.
Pourquoi les frappes échouent
- IPv4 ou IPv6 : la frappe est partie par une famille d’adresses et SSH se connecte par l’autre. Le pare-feu a ouvert la porte pour une adresse que vous n’utilisez pas.
- Une autre adresse publique : avec les données mobiles, derrière un NAT opérateur ou un VPN, le serveur voit une autre IP que celle attendue. Vérifiez l’adresse depuis laquelle vous frappez.
- SYN retransmis : si une frappe TCP ne reçoit pas de réponse, le système d’exploitation du client envoie à nouveau le même SYN. Lors de nos tests, knockd 0.8 réinitialisait la séquence avec un tel SYN répété ; un client doit donc envoyer chaque frappe une seule fois et arrêter rapidement la tentative.
- Temporisation : les frappes arrivant hors de seq_timeout, ou dans le mauvais ordre, recommencent la séquence.
- Équipements intermédiaires : certains réseaux bloquent ou réécrivent le trafic vers des ports inhabituels ; une frappe qui fonctionne à domicile peut donc échouer sur un réseau d’hôtel ou de bureau.
Est-ce sécurisé ?
Une séquence knockd est envoyée sans chiffrement ; toute personne pouvant observer votre trafic peut la rejouer. Utilisez-la pour cacher un service aux scanners, devant des clés SSH, et non à leur place. La SPA fwknop comble cette lacune grâce au chiffrement, à HMAC et à la protection contre la relecture ; c’est le meilleur choix si votre trafic peut être observé.
Frapper depuis iPhone, Mac et Apple Watch
Secret Knock envoie des séquences knockd et des paquets SPA fwknop depuis iPhone, iPad et Mac, vérifie que le port répond et ouvre votre app SSH. L’Apple Watch frappe via l’iPhone jumelé, car watchOS ne permet pas aux apps d’envoyer des paquets TCP ou UDP bruts ; loin de l’iPhone, elle peut envoyer une SPA via HTTP aux serveurs qui l’autorisent.
Guides pour votre configuration
- knockd sur iPhone, iPad et Mac →
- SPA fwknop sur iPhone, Mac et Apple Watch →
- Port knocking MikroTik →
- Port knocking DrayTek Vigor →
- Masquer SSH derrière le port knocking →
- Port knocking sur Apple Watch →
- Pourquoi une frappe n’ouvre pas le port →
- Exemples de knockd.conf →
- configuration du serveur fwknop →
- Port knocking, VPN ou fail2ban ? →
Gardez la porte fermée. Emportez la frappe.
Secret Knock arrive bientôt sur l’App Store pour iPhone, iPad, Mac et Apple Watch.
Secret Knock →