Menu Fermer

Configurer un port knocking pour protéger SSH

Le port knocking (pour coup de port) est une technique pour sécuriser un service réseau comme SSH, FTP ou autres.
Il vous permet de ne pas exposer le port du service sur internet. Un firewall comme iptables ou ufw filtre l’accès au port.
Pour y accéder une séquence TCP (ou UDP) doit être envoyé au serveur.

Dans ce tutoriel, je vous explique comment mettre en place un port knocking pour protéger un serveur SSH.

Configurer un port knocking pour protéger SSH

Qu’est-ce que le port knocking ?

Le port knocking est une technique utilisée pour améliorer la sécurité d’un serveur. Cela fonctionne avec l’aide du pare-feu. Cette méthode aide à identifier les utilisateurs légitimes, de sorte que le blocage est efficace.
Les ports seront fermés sur le pare-feu par défaut comme iptable ou ufw.
Puis une séquence prédéfinie est nécessaire pour accéder au port et le client s’y connecte de manière classique.

Le principal avantage de cette méthode est que les ports protégés par le un port knocking seront indiqués indisponibles pour un port scan.

Veuillez noter que le coup de port ne doit pas être utilisé comme seule mesure de sécurité, mais également avec les autres stratégies de sécurité.

Qu'est-ce que le port knocking ?

Comment installer et configurer le port knocking sur Linux

Tout d’abord, on installe un daemon de port knocking comme knockd.
Par exemple pour installer le service de port knocking sur Debian/Ubuntu avec APT :

aptitude install knockd
Comment installer et configurer le port knocking sur Linux

Sur le serveur, knockd doit tourner en daemon, pour cela, on modifie /etc/default/knockd :

START_KNOCKD=1

Ensuite on modifie /etc/knockd.conf en créant la séquence de ports qui va permettre de créer la règle de séquence de ports.
Par défaut le fichier de configuration propose une configuration pour ouvrir le port SSH et le fermer.
Par exemple, ci-dessous, il faut envoyer une connexion TCP sur les ports 7000 puis 8000 et enfin 9000 afin que la règle Iptables permette l’accès à SSH.
Puis on suit la règle CloseSSH pour supprimer la règle Iptables.

[options]
	UseSyslog

[openSSH]
	sequence    = 7000,8000,9000
	seq_timeout = 5
	command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
	tcpflags    = syn

[closeSSH]
	sequence    = 9000,8000,7000
	seq_timeout = 5
	command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
	tcpflags    = syn
Comment installer et configurer le port knocking sur Linux

Je vous conseille de corriger la règle iptables en remplaçant -A par -I afin que la règle iptables ajoutée par knockd se place en premier.
Ainsi :

command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

devient :

command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
De plus, le but étant de protéger l’accès à SSH, il est conseillé de changer la séquence par défaut.
Des scans automatisés peuvent tenter de trouver des serveurs SSH avec la séquence de ports par défaut de knockd.

Si vous avez un pare-feu type iptables, il faut autoriser la séquence de ports sur ce dernier, par exemple avec :

sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables -I INPUT -p tcp  -m multiport --dports 7000,8000,9000 -j ACCEPT
sudo iptables -I OUTPUT -p tcp  -m multiport --sports 7000,8000,9000 -j ACCEPT

Enfin relancez le service knockd :

udo /etc/init.d/knockd restart

Comment envoyer une séquence de port knocking

Sur Linux

Le paquet knockd installe iun client knock qui permet d’envoyer une séquence de ports.
Voici la syntaxe :

Côté client, vous pouvez générer la séquence comme ceci :

knock host <ports::proto> <hôte>

Par exemple pour envoyer la séquence par défaut pour débloquer SSH :

knock host 7000:tcp 8000:tcp 9000:tcp

Côté serveur, dans les logs /var/log/syslog, on obtient :

Jul 21 14:59:16 mak-virtual-machine knockd: 10.0.0.12: openSSH: Stage 1
Jul 21 14:59:16 mak-virtual-machine knockd: 10.0.0.12: openSSH: Stage 2
Jul 21 14:59:16 mak-virtual-machine knockd: 10.0.0.12: openSSH: Stage 3
Jul 21 14:59:16 mak-virtual-machine knockd: 10.0.0.12: openSSH: OPEN SESAME
Jul 21 14:59:16 mak-virtual-machine knockd: openSSH: running command: /sbin/iptables -A INPUT -s 10.0.0.12 -p tcp --dport 22 -j ACCEPT

Sur Windows

Pour faire du port knocking sur Windows, vous devez installer un client tel que KnockKnock, Port knocking ou Port Knocking Tool.
Ensuite on indique la séquence de ports pour libérer l’accès au service SSH, FTP ou autres.

Comment envoyer une séquence de port knocking sur Windows