
Centraliser ou distribuer des listes noires IPset
Ce programme vous permet de centraliser et de distribuer des listes noires d'adresses IP.
Si vous gérez un serveur sur Internet, il est très probable que vous ayez rencontré une ou plusieurs attaques par force brute. Pas de problème, il suffit d'installer fail2ban. C'est fait.
Mais si vous exécutez plusieurs serveurs, chacun avec sa propre instance de fail2ban, ils auront tous des adresses IP différentes dans leur liste de bannissement. Ne serait-il pas agréable d'avoir une liste de bannissement partagée entre toutes vos instances fail2ban ? Ou, si toutes vos machines sont derrière un routeur ou un pare-feu que vous contrôlez vous-même, ne serait-il pas agréable de bloquer le trafic malveillant à la limite de votre réseau ?
C'est exactement ce que vallumd permet de réaliser.
Vallumd se connecte à un courtier MQTT, lit les messages contenant des adresses IP, et ajoute ou supprime ces adresses IP d'un ipset. Aussi simple que cela.
Cela signifie qu'il n'est pas utile seul, mais cela rend vallumd très flexible. Vous pouvez décider vous-même quel type de règle iptables vous voulez utiliser pour référencer l'ipset. L'intégrer avec fail2ban est aussi simple que de créer une nouvelle action qui utilise mosquitto_pub pour envoyer un message à votre courtier MQTT. Et comme il existe des bibliothèques MQTT pour la plupart des langages courants, cela ne devrait pas être trop difficile à intégrer avec votre IDS, IPS ou Honeypot préféré.
Le nom vallumd vient du mot latin 'vallum', qui signifie mur. Et c'est ce que fait vallumd : construire un mur pour protéger votre empire numérique.
La meilleure façon d'installer un paquet est d'utiliser le gestionnaire de paquets de votre distribution. Cependant, comme ce projet est très récent, il n'a pas encore été inclus dans de nombreuses distributions.
Un paquet qui suit la branche master de git est disponible dans l'AUR.
Assurez-vous que le dépôt EPEL est activé.
sudo yum -y install cmake3 ipset-devel mosquitto-devel openssl-devel pkgconfig '@Development Tools'
Vous pouvez maintenant générer un paquet RPM avec cpack :
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake3 .
cpack3 -G RPM
sudo yum -y localinstall build/*.rpm
Testé en compilation sur CentOS 7.
Vous pouvez générer un paquet DEB avec cpack :
sudo apt-get -y install build-essential cmake file libipset-dev libmosquitto-dev libssl-dev pkg-config
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake .
cpack -G DEB
sudo dpkg -i build/*.deb
Testé en compilation sur Debian 10, 11, 12, 13 et Ubuntu 18.04, 20.04, 22.04, 24.04.
Vous pouvez trouver un ebuild en direct pour vallumd dans mon overlay Gentoo
Si vous utilisez un snapshot OpenWrt DD ou LEDE, vallumd est disponible dans le flux de paquets, et peut être installé avec opkg :
opkg update
opkg install vallumd
L'installation manuelle est très simple. Prérequis :
Instructions :
git clone https://codeberg.org/stintel/vallumd.git
cd vallumd
cmake .
make
make install
Pour utiliser vallumd, vous avez besoin d'un courtier MQTT, comme Mosquitto. Selon votre configuration, vous pouvez l'exécuter sur le même hôte que vallumd, mais ce n'est pas une obligation.
La prochaine chose dont vous avez besoin est un IPset. Pour vous donner un contrôle total sur le type d'IPset et ses options, vallumd ne créera pas l'IPset lui-même. Vous pouvez choisir parmi ces types d'IPset :
Exemple de création d'IPset :
ipset create blacklist hash:ip timeout 3600
Vous pouvez maintenant démarrer vallumd. Les options de ligne de commande suivantes existent :
-h : hôte MQTT auquel se connecter
-p : port MQTT auquel se connecter (1883)
-u : nom d'utilisateur MQTT
-P : mot de passe MQTT
-t : sujet MQTT et nom de l'IPset
-V : afficher le numéro de version et quitter
-c : chemin vers le fichier CA
-T : utiliser TLS
Les options host et topic sont obligatoires, les autres sont facultatives (valeur par défaut). Il est possible de spécifier plusieurs topics.
Démarrage de vallumd :
vallumd -h 192.168.0.1 -t blacklist
Cela écoutera les messages sur le courtier MQTT à 192.168.0.1, dans le sujet blacklist, et lorsqu'un message est reçu, l'adresse IP dans le message sera ajoutée ou supprimée de l'IPset nommé blacklist.
Nous avons donc maintenant tout en place pour commencer à ajouter des IP à la liste noire. Tout ce que nous avons à faire est de configurer notre IDS, IPS ou Honeypot pour envoyer les adresses IP malveillantes à notre courtier MQTT.
Pour fail2ban, cela peut être fait avec le client Mosquitto mosquitto_pub. Créez une nouvelle action dans /etc/fail2ban/action.d/vallumd.conf :
[Definition]
actionban = mosquitto_pub -h 192.168.0.1 -q 2 -t blacklist/add -m <ip>
actionunban = mosquitto_pub -h 192.168.0.1 -q 2 -t blacklist/del -m <ip>
Et configurez vos prisons fail2ban pour utiliser l'action vallumd.
Les paquets générés avec CPack supportent OpenRC, Upstart et systemd. Les fichiers de configuration du service se trouvent là où vous vous attendez dans votre distribution :
Après avoir modifié le fichier correspondant à votre distribution, démarrez le service vallumd comme vous le feriez pour tout autre service sur votre système.
Vallumd utilise syslog(3) pour la journalisation.