Port knocking

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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.

Voir aussi

  • Fail2ban — bannissement des sources après échecs répétés
  • Iptables — pare-feu Linux utilisé pour implémenter la séquence