Mise en place du port knocking sous CentOS

Le port Knocking est une méthode permettant d’ouvrir dynamiquement des ports protégés par un pare-feu. Pour cela, une suite de connexion sur plusieurs ports doit être effectuer. Un processus tourne alors en arrière-plan et vérifie régulièrement le journal de connexion du pare-feu pour ouvrir un port spécifique si une séquence est détectée.

Cette technique est notamment utilisée pour protéger l’accès au port 22 (SSH) d’une machine.

Le port Knocking est une méthode permettant d’ouvrir dynamiquement des ports protégés par un pare-feu. Pour cela, une suite de connexion sur plusieurs ports doit être effectuée. Un processus tourne alors en arrière-plan et vérifie régulièrement le journal de connexion du pare-feu pour ouvrir un port spécifique si une séquence est détectée.

Cette technique est notamment utilisée pour protéger l’accès au port 22 (SSH) d’une machine.

Pour mettre en place le port knocking sous CentOS, nous allons utiliser le démon knockd disponible à cette adresse. L’installation à partir des sources consistent à installer tout d’abord les dépendances puis le démon knockd.

yum install gcc libpcap-devel
cd /usr/local/src/
wget http://www.zeroflux.org/proj/knock/files/knock-0.5.tar.gz
tar -xzvf knock-0.5.tar.gz
./configure
make
make install

Ensuite, il vous faut supprimer la règle autorisant SSH en entrée sur le serveur.

vi /etc/sysconfig/iptables

#-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

– Redémarrez le pare-feu : service iptables restart

Il vous faut maintenant définir la séquence de port à « frapper » pour ouvrir le port SSH. Dans notre exemple, nous choisissons les ports 2222, 3333 et 4444.

vi /etc/knockd.conf

[options]
UseSyslog
PidFile = /var/run/knockd.pid
Interface = eth0

[opencloseSSH]
sequence = 2222,3333,4444
seq_timeout = 15
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 60
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

La séquence doit être effectuée dans les 15 secondes et vous avez 60 secondes pour vous connecter en SSH sur le serveur.

Il ne vous reste plus qu’à lancer le démon knockd.

/usr/sbin/knockd -d

Depuis votre client, essayez maintenant de vous connecter en SSH sur votre serveur. La connexion est maintenant impossible puisque le pare-feu n’autorise plus le port 22 en entrée. Par contre le serveur SSH est toujours à l’écoute. Récupérez par exemple le client Knock pour Windows.

Depuis un poste sous Windows, en ligne de commande, « frappez les ports » : knock.exe 192.168.0.100 2222 3333 4444

Vous pouvez maintenant vous connecter normalement en SSH sur votre serveur dans un certain laps de temps.