Utiliser tarpit avec iptables sous ubuntu server 10.04
Lorsqu’on a une machine sous linux qu’on souhaite protéger, la première qu’on fait est d’établir des règles de firewall.
On va autoriser juste ce que l’on souhaite, et “dropper” le reste, c’est à dire ne pas répondre aux autres connexions, afin de ne pas trop perdre de bande passante et de ressouces.
Et pour ce faire, un module particulièrement pratique existe pour iptables, j’ai nommé TARPIT.
Pour savoir ce que fait tarpit, je vous invite à aller lire cet article de Philippe Humeau qui explique très bien la chose.
Maintenant, il s’agit de l’installer. ici, l’installation est faite sous US 10.04, avec un kernel récent >= 2.6.32
Tout d’abord, on aura besoin de quelques packages :
aptitude install build-essential pkg-config linux-headers-$(uname -r)
Si vous avez un Ubuntu 9.04/9.10 ou une Debian, il vous faudra également une version récente d’iptables :
wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.8.tar.bz2 tar xvjf ./iptables-1.4.8.tar.bz2 cd iptables-1.4.8 ./configure make make install
Ensuite, il nous faut récupérer les sources de la dernière version de xtables, et les compiler pour avoir tous les modules nécessaires :
wget http://freefr.dl.sourceforge.net/project/xtables-addons/Xtables-addons/1.27/xtables-addons-1.27.tar.xz tar xvJf ./xtables-addons-1.27.tar.xz cd xtables-addons-1.27 ./configure make make install
EDIT: et pour debian squeeze :
aptitude install xtables-addons-common xtables-addons-source module-assistant auto-install xtables-addons-source
Maintenant on a tout ce qu’il faut pour jouer avec tarpit :p
une très bonne manière de l’utiliser est à la fin de notre script de firewall.
On a fait successivement toutes nos déclaration pour accepter tel ou tel port/destination/source etc….% A la fin, on met généralement une ligne droppant les paquets non désirés :
iptables -A INPUT -i eth0 -j DROP
et juste avant cette ligne, on va mettre notre tarpit :
iptables -A INPUT -i eth0 -p tcp -j TARPIT
(notez que le tarpit ne fonctionne QUE en tcp, pas en udp)
Une fois la règle ajoutée et votre script de firewall relancé, on fait un petit test pour voir comment notre machine est vue de l’exterieur.
On peut par exemple utiliser nmap ip.de.votre.serveur
pour voir le résultat: tous les ports semblent ouverts !
Mais bien sur, si on tente de faire une connexion sur un de ces ports, rien.
En regardant en même temps sur notre serveur avec un tcpdump, on peut voir que notre serveur réduit la taille de la fenêtre tcp à zero, ce qui est le résultat souhaité.
Désormais, tous les petits malins lancant des scans de ports, se feront tarpiter, et verront leurs misérables tentatives ne pas aboutir, bien sur, mais également saturer.
Maintenant, cette règle ci dessus ne sert qu’à dissuader les scanneurs de ports. On peut bien sur l’adapter à un contenu spécifique afin de se protéger plus efficacement d’attaques ddos, ou des woot-woot-at-isc.sans.dfind
http
par exemple.
Source: Le blog de Dju