Si vous êtes la cible d'attaque DDoS ou de bots, il peut être intéressant de bloquer des adresses IP par pays pour bloquer l'attaquant, par exemple en bannissant les IP chinoises, souvent source de réseau de bots. Dans ce guide, nous allons voir comment procéder sur un VPS linux sous Debian, Ubuntu ou CentOS.
Installer IPSET
Pour bannir des les adresses IP des pays que nous souhaitons, nous allons utiliser ipset disponible dans le gestionnaire de paquet. Vous devez être administrateur root de votre VPS.
Installation IPSET sur Debian
apt update && apt install ipset
Installation IPSET sur Ubuntu
sudo apt update && sudo apt install ipset
Installation IPSET sur CentOS
sudo yum install ipset
Bannir des pays avec IPSET
Maintenant que ipset est présent sur notre système d'exploitation, nous allons le configurer pour bannir les adresses IP des pays que nous souhaitons.
Tout d'abord, on va créer un ensemble qui va contenir les pays dont nous voulons ban les adresses IP.
ipset create countries hash:net,port
Vous pouvez vérifier la création avec ipset list
qui doit vous renvoyer:
Name: countries
Type: hash:net,port
Revision: 7
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 448
References: 0
Number of entries: 0
Members:
On ajoute maintenant les adresses IP des pays que nous souhaitons avec le script suivant. Ce script va récupérer la liste de toutes les adresses IP des pays que nous lui demandons.
Créez un fichier ban-ip-countries.sh
dans /root/ipset
et donnez lui les droits d'éxécutions :
mkdir /root/ipset
cd /root/ipset
touch /root/ipset/ban-ip-countries.sh
chmod +x /root/ipset/ban-ip-countries.sh
Il ne nous reste plus qu'à créer le script de récupération des IP à bannir.
Ajoutez maintenant le contenu suivant avec la commande nano /root/ipset/ban-ip-countries.sh
. Éditez le tableau dans la section COUNTRIES
si vous voulez bannir d'autres pays. Vous devez indiquer le code format ISO du pays, voir site officiel.
Dans cet exemple, la variable COUNTRIES
contient les pays: Chine, Russie, Taiwan, Brésil
COUNTRIES=('cn' 'tw' 'ru' 'in' 'br') ipset flush countries for i in "${COUNTRIES[@]}"; do echo "Ban IP of country ${i}" for IP in $(wget -O - https://www.ipdeny.com/ipblocks/data/countries/${i}.zone) do ipset add countries $IP,22 done done
Appuyez sur les touches CTRL
+ X
pour quitter l'éditeur et sauvegarder le fichier.
Il ne nous reste plus qu'à exécuter le script:
bash ban-ip-countries.sh
Maintenant que nous avons la liste des IP à bannir, il ne nous reste qu'à faire le lien avec le firewall iptables. Créez un fichier /root/iptables.sh
:
touch /root/iptables.sh chmod +x /root/iptables.sh
Editez le fichier avec nano /root/iptables.sh
et ajoutez le contenu suivant:
# On vide les règles iptables précédentes iptables -F iptables -X iptables -I INPUT -m set --match-set countries src -j DROP iptables -I FORWARD -m set --match-set countries src -j DROP
Appuyez sur les touches CTRL
+ X
pour quitter l'éditeur et sauvegarder le fichier.
Dernière étape, nous devons exécuter ce dernier script:
bash /root/iptables.sh
Et voila, les IPs sont bannies!