Port knocking pour ssh

Un article de Casys (Canadian Sysadmins).

Auteur: Thomas Boutry

Sommaire

Description

Le port ssh est constament attacké par des robots qui essaye des user/mot de passe avec des dictionnaires. Nous aimerions tous blocké la connection ssh avec une règle de firewall cependant il n'est pas toujours possible de le faire surtout si vous avez une adresse ip dynamique à votre domicile. Dans la présente documentation nous utiliserons du port knocking, la technique est simple comme lorsque nous cognons a une porte une commande sera executé. La solution présente peut être une solution pratique , ceci est un exemple simple je vous invite a regardé de manière plus approfondie pour la séquence de connection.

Situation actuelle

Une serveur GNU/linux qui offre un service http/https.
Avec les règles de firewall suivante :

iptables -P INPUT DROP
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

ATTENTION: ceci est un exemple de firewall très simple ne pas le prendre pour du cash.


Modification du setup

L'objectif est de ne plus avoir l'ouverture du port 22 pour toutes les adresses ip du monde !!!! Cependant pour être sur de toujours pouvoir vous connectez au serveur même si le système de port knocking devriendrais non-fonctionnelle je vous invite fortement à ajouté une ip fixe par laquelle vous pourrez toujours accéder au serveur. donc voici le résultat :

iptables -P INPUT DROP
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s Ip.Du.Srv.Du.Bureau -p tcp --dport 22 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Maintenant nous allons faire le setup pour que le port 22 s'ouvre automatiquement quand nos cognons à la porte.

Installation & Configuration de knockd

  • Installation de la librairie pcap qui est la même utilisé par tcpdump pour lire les connections sur la carte réseaux.
yum install libpcap-devel.i386
  • Téléchargement du logiciel
cd /root/apps/
wget http://www.zeroflux.org/proj/knock/files/knock-0.5.tar.gz
tar -zxvf knock-0.5.tar.gz
  • Compilation & installation
cd knock-0.5
configure --prefix=/usr/local/knock
make 
make install
  • Réalisation de la configuration
ci -u /etc/knockd.conf
co -l /etc/knockd.conf
vi /etc/knockd.conf

FICHIER:

[options]
        logfile = /var/log/knockd.log

[openSSH]
        sequence    = 8030,2020,8020
        seq_timeout = 5
        command     = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
        tcpflags    = syn

[closeSSH]
        sequence    = 8020,2021,8030
        seq_timeout = 5
        command     =  /usr/sbin/iptables -A INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
        tcpflags    = syn

  • Commit
ci -u /etc/knockd.conf

Démarrage du service :

/usr/local/knock/sbin/knockd &

Activation au démarrage :

rcsdiff /etc/rc.local
co -l /etc/rc.local
vi /etc/rc.local

AJOUT:

/usr/local/knock/sbin/knockd &

ATTENTION  : ceci n'est pas très propre je vous invite a réalisé un script de démarrage situé dans /etc/inetd/knockd.
malheureusement je n'ai pas pris le temps de le faire .

Test du setup

  • D'une addresse ip non-authorisé
ssh 192.168.2.38  

Vous devriez avoir un TimeOut.

  • Avec le port knocking
telnet 192.168.2.38  8030 || telnet 192.168.2.38 2020 || telnet 192.168.2.38 8020
ssh 192.168.2.38  
<pre>
Vous devriez être en mesure de vous connectez.

''' ATTENTION ''' il est important de faire la séquence de fermeture sinon la règle iptables sera toujours active .
Donc:
<pre>
telnet 192.168.2.38  8020 || telnet 192.168.2.38 2021 || telnet 192.168.2.38 8030

Refaire un test:

ssh 192.168.2.38  

Vous devriez avoir un TimeOut.


Référence