Port knocking
| Fiche express | |
|---|---|
| Domaine | Filtrage réseau furtif |
| Type | Ouverture de port sur séquence |
| Contexte | Linux, iptables (module recent) ou knockd
|
| Voir aussi | Fail2ban · Iptables |
Le port knocking (« frappe de ports ») consiste à laisser un service — typiquement SSH — filtré par défaut, et à n'en autoriser l'accès qu'après réception d'une séquence prédéterminée de tentatives de connexion sur une suite de ports fermés. Un observateur qui scanne la machine ne voit aucun port ouvert : le service n'apparaît qu'après la bonne combinaison, ce qui réduit fortement la surface exposée aux scans et aux attaques automatisées.
Principe
Un client émet des paquets vers une séquence de ports (par exemple 7000, 8000 puis 9000). Le pare-feu mémorise la progression de chaque source ; une fois la séquence complète reçue dans le délai imparti, il ouvre le port réel (22) à l'adresse d'origine pour une courte durée.
Exemple avec iptables
Séquence 7000 → 8000 → 9000 ouvrant le port 22 pendant 10 secondes, à l'aide du module recent :
# 1re frappe : port 7000 -> on marque la source AUTH1
iptables -A INPUT -p tcp --dport 7000 -m recent --name AUTH1 --set -j DROP
# 2e frappe : port 8000, seulement si AUTH1 est récent -> marque AUTH2
iptables -A INPUT -p tcp --dport 8000 -m recent --name AUTH1 --rcheck --seconds 5 \
-m recent --name AUTH2 --set -j DROP
# 3e frappe : port 9000, seulement si AUTH2 est récent -> marque AUTH3
iptables -A INPUT -p tcp --dport 9000 -m recent --name AUTH2 --rcheck --seconds 5 \
-m recent --name AUTH3 --set -j DROP
# Ouverture du SSH si la séquence complète (AUTH3) est récente
iptables -A INPUT -p tcp --dport 22 -m recent --name AUTH3 --rcheck --seconds 10 -j ACCEPT
# Le reste du trafic entrant est refusé par défaut (hors connexions établies)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
Côté client, on émet la séquence avec knock, nmap ou nc :
knock serveur.exemple.tld 7000 8000 9000
ssh serveur.exemple.tld
Le démon knockd offre une alternative plus lisible, la séquence et l'action étant décrites dans /etc/knockd.conf.
Limites
Le port knocking est une mesure de discrétion, pas de chiffrement : la séquence peut être rejouée par un observateur du trafic. Il se combine donc avec une authentification forte (SSH par clé) et un outil de bannissement comme Fail2ban.