Port Knocking Configuration

This articles describe how to configure a port knocking. We will use Knockd
Cet articles décrit la mise en place d’un port knocking. Nous utiliserons Knockd

Port knocking is a method of « message transmission across closed ports. » It works like this: initially a firewall blocks all ports on the server. The client issues a series of connection requests (knocks) to different ports; these are, of course, dropped since the ports are blocked. However, there is a daemon that monitors the log files for connection requests, and the sequence of requests serves as an encrypted code. If the code makes sense to the daemon, it enables SSH or another service (for a particular IP address and on a particular port encoded by the knock sequence).
Le port knocking est une forme d’authentification réseau. Le Port Knocking fonctionne actuellement en suivant constamment les fichiers de log du firewall afin d’en extraire les tentatives de connexions sur les ports concernés. Si une séquence est reconnue, alors les commandes correspondantes seront exécutées, notamment des modifications « à chaud » des règles du firewall, mais aussi le lancement ou l’arrêt d’un service ou l’éxecution d’une commande quelconque. En interne, le serveur garde une liste des ports sur lesquels ont été tentés des connexions en fonction de l’adresse IP de l’émetteur. A chaque tentative de connexion sur un port surveillé par Port Knocking, le port est ajouté à la liste des ports pour cette adresse IP. Si la nouvelle liste contiens une séquence, les commandes de la séquence sont exécutées.

First step juste download and install knockd sources
Télécharger les sources de knockd et l’installer
Knockd Sources


[root@pussycat ~]# wget http://www.invoca.ch/pub/packages/knock/knock-0.5-3.src.rpm
[root@pussycat ~]# rpm -Uvh knock-0.5-3.src.rpm

Just compil knockd-server


[root@pussycat ~]# [root@pussycat ~]# rpmbuild -bb /usr/src/redhat/SPECS/knock.spec
....
[root@pussycat ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/knock-server-0.5-3.i386.rpm

It’s important to understand more your sequence is complex and more is complex a brute force attack.
Just need to setup the /etc/knockd.conf


[root@pussycat ~]# more /etc/knockd.conf
[options]
        logfile = /var/log/knockd.log
        pidfile = /var/run/knockd.pid

[openWEBMIN]
        sequence      = 10001:tcp,9007:udp,10512:tcp,4078:udp
        seq_timeout   = 90
        tcpflags      = syn
        start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 9935 -j ACCEPT

[closeWEBMIN]
        sequence      = 10001:tcp,9007:udp,10512:tcp,4079:udp
        seq_timeout   = 90
        tcpflags      = syn
        start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 9935 -j ACCEPT

[opencloseSSH]
        sequence      = 11001:tcp,10007:udp,10512:tcp,4078:udp
        seq_timeout   = 90
        tcpflags      = syn
        start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout   = 10
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[root@pussycat ~]#

sequence: Sequence will be enable the command defined in the start_command
seq_timeout: Timeout (in sec) for termintated the squence
start_command: Command will be executed if the sequence is COMPLETED
cmd_timeout: Is a « stop_command » is defined, it’s the timeout between start_command and stop_command
stop_command: Command executede at the end of the cmd_timeout

In this example if a user try to telnet on the port 10001:tcp,9007:udp,10512:tcp,4078:udp knockd will allow port 9935 which is the webmin port.
User could close this port with the sequence 10001:tcp,9007:udp,10512:tcp,4079:udp
If a sequence 11001:tcp,10007:udp,10512:tcp,4078:udp is detected knockd open port 22 during 10secondes.
Well check if you have defined this in your iptables configuration:


-A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed -m state --state ESTABLISHED

This rule let’s open port 22 when a connection is etablished.
It’s very important if you don’t want SSH doesn’t close in use after 10 secondes!
You can find an IPTables example here :
http://www.crapules.com/wordpress/2006/09/03/firewall-setup-with-a-frontend-server/

So if you want to open ssh port for exemple please use the port knocking client (windows or linux!).
You can find it here for example.
If you have only tcp port in you sequence you can use a simple telnet too.

Please let me know if you have any question.

Ce contenu a été publié dans Linux. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *