port knockingPour NBS System, la sécurité est un élément vital de l’informatique. Or, en la matière, il n’est pas toujours possible de gérer les accès à une machine facilement. Imaginons que vous souhaitez vous connecter à un serveur depuis une autre adresse IP que la celle que vous utilisez habituellement ; si cette IP n’est pas connue du pare-feu protégeant ce serveur, il vous est impossible d’y accéder. Si vous connaissez à l’avance l’IP que vous allez utiliser, vous pouvez bien entendu autoriser la connexion en amont, directement sur le pare-feu. Mais si vous êtes en déplacement, connecté sur la borne wifi d’un hôtel ou d’un café, ou même en partage de connexion avec votre téléphone, cela n’est plus possible.

Une solution simple existe pourtant pour indiquer au pare-feu concerné que vous êtes bien habilité à vous connecter sur le serveur souhaité : le port knocking (littéralement : frapper aux ports).

Attention : cette solution doit uniquement être utilisée avec le protocole TCP, et non le protocole UDP, afin de limiter les risques de spoofing (usurpation d’adresse IP).

Le port knocking, qu’est-ce que c’est ?

porte knockingLe principe du port knocking est le suivant : il s’agit de configurer son pare-feu pour que lorsqu’une série précise d’actions est prise, l’IP effectuant ces actions soit mise en liste blanche et puisse se connecter au serveur souhaité. Chacune de ces actions est en réalité constituée par l’envoi d’un paquet sur un port précis. C’est comme si vous deviez frapper à une porte avec un rythme et un nombre précis de coups pour que l’on puisse vous laisser entrer.

Voyons un cas pratique :

Vous avez préconfiguré votre pare-feu pour qu’il ajoute à sa liste blanche toute IP envoyant un paquet sur le port 22, puis un paquet sur le port 33, puis sur le port 44, puis sur le port 4242.

Une fois connecté avec une adresse IP inhabituelle, il vous suffit d’utiliser un client de portknocking, qui va envoyer la bonne séquence de paquets, et vous pourrez accéder à votre serveur. Il existe des clients pour Linux (Knockd, ou bien utilisez un Netcat), Windows (Knock Knock), Mac (Doorman), iOS (Knockond), Android (Port knocker)…

Configurer du port knocking sur Linux

Prenons l’exemple d’une machine Debian. Commencez par installer le client Knockd (apt-get install knockd), et éditez-y le fichier « /etc/knockd.conf » pour y mettre votre suite de ports :

[options]
             UseSyslog[open]
             sequence    = {votre séquence de ports, séparés par une virgule}
             seq_timeout = 30
             command     = ipset add whitelist %IP%
             tcpflags    = syn

Attention à choisir des séquences qui ont peu de chance d’être réalisées ! Evitez par exemple les classiques des scanners de ports comme « 20, 80, 443 ».

Une fois cela fait, vous verrez qu’Ipset est utilisé pour ajouter l’IP en question dans une liste blanche. Il vous suffit alors d’utiliser les règles Iptables de votre choix pour ouvrir vos accès, ou d’ajouter dans la configuration de votre pare-feu l’instruction suivante :

iptables -A INPUT -m set –match-set whitelist src -p tcp –dport 22 -j ACCEPT

Vous pouvez également faire en sorte que les adresses IP de la liste blanche aient accès, à distance, à une autre machine du réseau (LAN) avec une redirection de port (pré-routage en NAT), ce qui garantit une connexion sécurisée. Pour cela, utilisez l’instruction suivante :

iptables -t nat -A PREROUTING -m set –match-set whitelist src -p tcp –dport 3389 -j DNAT –to 192.168.0.5
iptables -A FORWARD -m set –match-set whitelist src -p tcp –dport 3389 -d 192.168.0.5 -j ACCEPT

Pour plus d’informations sur le port knocking, consultez le site http://portknocking.org/ !

Par Philippe Humeau & Lucie Saunois –

Lucie Saunois
Lucie Saunois
Passionnée d'informatique, en particulier de sécurité, depuis qu'elle a rejoint l'OT Group en 2015, Lucie se spécialise dans la vulgarisation technique pour permettre à tous d'appréhender ces sujets parfois complexes.