Comment avoir un pont-levis sous Linux

Nous allons nous servir ici de la méthode du port knocking qui permet de modifier le comportement d’un pare-feu en temps réel pour provoquer l’ouverture d’un port suite au lancement préalable d’une suite de connexions sur des ports distincts dans le bon ordre, à l’instar d’un code frappé à une porte.

J’ai testé denyhosts et fail2ban sans que ces solutions me comblent. Aujourd’hui je vais vous montrer comment protéger ssh afin de ne le rendre accessible qu’aux personnes connaissant une combinaison pour que IPtables ouvre le port 22.
Au préalable il faut paramétrer IPtables pour ne pas autoriser de façon permanente la connexion sur le port à protéger et autoriser le trafic entrant d’une connexion déjà établie.

Installation et paramétrage

  • Tout d’abord il faut installer le paquet knockd:

sudo apt-get install knockd

  • Puis on édite le fichier /etc/default/knockd

Remplacer

 # control if we start knockd at init or not # 1 = start # anything else = don't start START_KNOCKD=0 # command line options # KNOCKD_OPTS="-i eth0"

par

 # control if we start knockd at init or not # 1 = start # anything else = don't start START_KNOCKD=1 # command line options KNOCKD_OPTS="-i eth0"
  • Ensuite on modifie le fichier /etc/knockd.conf

Cette exemple va permettre de protéger l’accès à ssh (port 22).

Remplacer

 [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

par

 [SSH]       sequence    = 7000:udp,8000,9000       seq_timeout = 5       command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT       tcpflags    = syn       cmd_timeout   = 10       stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

sequence correspond à la combinaison de ports à « knocker » pour effectuer la ‘command’. Par défaut le protocole TCP est utilisé.
seq_timeout est le temps en secondes pendant lequel la combinaison doit être effectuée, après quoi elle est annulée, et il faut recommencer la séquence depuis le début.
command représente la règle iptables qui sera ajoutée au pare-feu afin de permettre l’ouverture/fermeture d’un port particulier.
tcpflags met en évidence les flags devant être positionnés dans les paquets reçus pour que le port soit pris en compte. Si une erreur survient, il faut recommencer le tout.

  • Il faut enfin redémarrer le service knockd:

sudo /etc/init.d/knockd restart

Utilisation

  • Installer le paquet knockd

sudo apt-get install knockd

  • Lancer ensuite cette commande

knock adresseipduserveur port1 port2 port3

Voilà vous pouvez vous connecter sur votre serveur!

Solution alternative

Si jamais vous ne pouvez pas installer knockd ,vous pouvez faire avec telnet:

telnet adresseipduserveur port1; telnet adresseipduserveur port2; telnet adresseipduserveur port3

Ensuite trois fois Ctrl+C et vous pouvez vous connecter sur votre serveur.

Photo par Elias Pirasteh

1 commentaire sur “Comment avoir un pont-levis sous Linux

  1. Alors ça, ça c’est du contenu !

    Je ne connaissais absolument pas, c’est super intéressant et ça ouvre pleins de possibilités… Seul inconvénient, c’est trop peu pratique d’avoir à utiliser knockd.

    Hypothèse, je suis sur une machine distante, sous windows, et j’utilise putty. Lancer 3 telnet de suite c’est long et chiant.

    N’y a-t-il pas moyen d’indiquer à Putty (ou à ssh), de ‘pinger’ tel, tel et tel port ?

    Peux-tu essayer un truc du genre : ping adresseipserveur:7000,8000,9000 par exemple. C’est qu’une idée en l’air parce qu’il me semble que l’icmp a son port, tout ça tout ça.

    Le top ce serait un truc genre :

    ping serveur:7000,8000,9000 && ssh user@serveur -p portssh

    Une commande, et toc.

    Une idée ?

Laisser un commentaire

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