Modifier ses iptables dynamiquement (port knocking)

La technique dites du port knocking est une méthode permettant de modifier de manière dynamique les règles Iptables d’une machine dans le but d’ouvrir/fermer des ports à la volée.

Comme son nom l’indique, le port knocking va consister à « taper » à certains ports dans un ordre bien précis de manière à ouvrir un port pour s’y connecter. Pour cela il va falloir qu’un daemon (un processus en arrière plan) tourne sur la machine cible et écoute les communications réseaux que ce soit de manière active (il intercepte tous les paquets lorsqu’ils arrivent sur la machine cible) ou de manière passive (en analysant les fichiers de log).

La configuration du port knocking est assez simple. Premièrement il va falloir télécharger le binaire knockd à la fois sur notre serveur et sur notre client :

sudo apt install knockd

Pour ce qui est du serveur, il va falloir éditer le fichier /etc/knockd.conf. Voici son contenu par défaut :

Capture d’écran du 2019-06-19 20-12-05.png

On voit qu’il existe deux règles : la première permet d’ouvrir le port 22 tandis que la seconde permet de le fermer. Pour chaque règle on voit qu’il y a une séquence bien particulière à respecter. Cette séquence c’est tout simplement l’ordre dans lequel il faut « toquer » les ports.

Avant toute chose on va modifier la commande de la première règle en remplaçant le -A par un -I :

Capture d’écran du 2019-06-19 21-03-05.png

En effet si on laisse le -A alors la règle Iptables sera ajoutée en dessous de toutes les autres. Nous ce que nous voulons c’est qu’elle soit ajoutée au dessus (pour qu’elle soit prise en compte en première). Si le concept d’Iptables ne vous parle pas je vous invite à lire cet article 😉 !

Pour lancer le daemon en arrière plan on utilisera la commande suivante :

knockd -d

Si vous obtenez cette erreur :

Capture d’écran du 2019-06-19 20-15-20.png

C’est que l’interface sur laquelle veut tourner knockd n’existe pas. Il faudra donc ajouter la ligne suivante dans le fichier /etc/knockd.conf sous le bloc options :

interface = votre_interface

Capture d’écran du 2019-06-19 20-36-15.png

Puis relancez le daemon via :

knockd -d

Par défaut tous les flux de la machine cible sont ouverts. Par conséquent si on lance un scan nmap on verra que le port 22 est ouvert :

Capture d’écran du 2019-06-19 20-52-08.png

On va donc bloquer le flux à destination de ce port à l’aide de la règle Iptables suivante :

iptables -t filter -I INPUT -p tcp --dport 22 -j DROP

Si on refait un scan nmap, on verra que le port est filtré :

Capture d’écran du 2019-06-19 21-06-46.png

Maintenant si depuis notre client on envoie la séquence 7000, 8000, 9000 via cette commande :

knock IP -v 7000 8000 9000

Et qu’on refait un scan Nmap :

Capture d’écran du 2019-06-19 21-08-46.png

On remarquera que le port est ouvert ! D’ailleurs si on regarde nos règles Iptables on verra qu’une nouvelle règle est apparue et qu’elle autorise l’accès SSH à une seule IP (celle qui a knocké) :

Capture d’écran du 2019-06-19 21-11-48.png

On pourra donc se connecter au serveur via SSH :

Capture d’écran du 2019-06-19 21-09-45.png

Pour refermer le port il suffira d’envoyer la séquence de la règle permettant de fermer le port (9000 8000 7000) via cette commande :

knock IP -v 9000 8000 7000

Et le port sera fermé :

Capture d’écran du 2019-06-19 21-10-46.png

Dernière chose, le daemon knockd ne se lance pas au boot par défaut. Pour qu’il se lance lors de l’init il faudra modifier le fichier /etc/default/knock et modifier la ligne :

START_KNOCKD=0

En :

START_KNOCKD=1

Votre port knocking est opérationnel !

2 commentaires

  1. Bonjour Defte, ton blog me plaît énormément, moi même passionné de programmation et de sécurité, tu explique très bien ! Tu parle de plein de sujet différents, et je n’ai d’ailleurs pas trouvé d’autres blogs similaires… Après certain sujet comme la cryptographie sont très théorique et malheureusement assez compliqué pour mon niveau actuel en math

    Bonne journée et n’arrête jamais s’il te plaît

    Aimé par 1 personne

Répondre à Defte@WhiteFlag Annuler la réponse.

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s