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.
Table des matières
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é.
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
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
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
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.
Liens
- Générer et se connecter en SSH avec des clés SSH
- SSH : comment ça marche
- Comment générer des clés SSH et se connecter avec OpenSSH de Windows 10, 11
- Comment se connecter en SSH à un serveur distant depuis Windows
- Comment se connecter en SSH à un serveur distant depuis Linux
- Activer et installer le serveur OpenSSH sur Windows 10
- Comment activer et utiliser le client OpenSSH de Windows 10
- Comment configurer le tunnel SSH (redirection de port)
- Sécuriser un serveur SSH
- SSH : bloquer une adresse IP
- Comment protéger SSH avec Fail2ban des attaques DoS / Bruteforce
- Remmina : logiciel de bureau à distance RDP, VNC, SSH pour Linux
- Configurer un port knocking pour protéger SSH
- Ai-je besoin d’antivirus à Linux ?
- Comment installer et utiliser un antivirus sur Ubuntu (ClamTk)
- Comment installer et utiliser ClamAV sur Linux
- Comment installer ClamAV sur Postfix sur Debian
- ufw : configurer, voir, créer, supprimer, réinitialiser des règles de firewall
- gufw : configurer le firewall ufw sur Ubuntu (Firewall Configuration)