Bloquer des adresses IP par pays avec IPTABLES

Si vous exposer une de vos machines sur Internet, il faudra la protéger. Si vous ne disposez pas d’infrastructure tel que Online ou OVH chez vous, il faudra utiliser toutes les ruses possibles. Vous aurez le choix d’une solution complète, fiable, simple, comme PFsense, ou alors un Linux de base, et donc de préférence, une Debian / Ubuntu, et bloquer des adresses IP par pays avec iptables… 🙂

Ras le bol de la pollution

Si vous jeter un œil parfois sur les journaux de votre firewall, vous avez du vous apercevoir que ceux-ci sont remplis de tentatives d’intrusions. Pour se débarrasser d’une grande partie de cette pollution, parfois, il suffit simplement de bloquer des adresses IP par pays avec iptables. En effet, les attaques proviennent généralement toujours des mêmes pays (Chine, Russie, Corée, Hong-Kong, etc…).
Pour ce faire, vous pouvez simplement utiliser un module de noyau pour iptables, appelé « xtables-addons ».

Installer le module xtables-addons

Sur Debian / Ubuntu, il est assez facile (comme assez souvent) d’installer ce module grâce à la commande apt-get.

 apt-get install libtext-csv-xs-perl xtables-addons-common

Mettre à jour la base Maxmind

Ensuite, il faudra télécharger la base de données géographique Maxmind. Pour cela, il faudra connaitre l’emplacement de l’outil xt_geoip_dl. En effet, cela dépendra de la version de xtables-addons installée (actuellement, dans les dépôts Debian, la version 2.6 est packagée, alors que la version 2.10 est disponible sur Sourceforge https://sourceforge.net/projects/xtables-addons/files/).

cd /usr/src/xtables-addons-2.6/geoip/
./xt_geoip_dl

Cela téléchargera donc la base Maxmind :

--2016-10-28 11:25:33-- http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
Length: 1303811 (1.2M) [application/octet-stream]
Saving to: ‘GeoIPv6.csv.gz’

GeoIPv6.csv.gz 100%[============================================================================================>] 2.78M --.-KB/s in 0.003s

2016-10-28 11:25:33 (786 MB/s) - ‘GeoIPv6.csv.gz’ saved [1303811/1303811]

--2016-10-28 11:25:33-- http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
Saving to: ‘GeoIPCountryCSV.zip’

GeoIPCountryCSV.zip 100%[======================================================================================>] 3.01M --.-KB/s in 0.005s

2016-10-28 11:25:33 (862 MB/s) - ‘GeoIPCountryCSV.zip’ saved [2137625/2137625]

FINISHED --2016-10-28 11:25:33--
Total wall clock time: 0.1s
Downloaded: 2 files, 3.3M in 0.01s (784 MB/s)
Archive: GeoIPCountryCSV.zip
inflating: GeoIPCountryWhois.csv

Il vous reste maintenant à construire les listes avec la commande suivante dans le même répertoire (il faut au préalable créer le répertoire qui les contiendra) :

mkdir -p /usr/share/xt_geoip
./xt_geoip_build -D /usr/share/xt_geoip *.csv

Bloquer des adresses IP par pays avec iptables

Côté pratique, rien de plus simple, vous pourrez bloquer les IP venant de Chine, de Hong-Kong, de Corée, de Russie ou d’ailleurs :

iptables -A INPUT -m geoip --src-cc CN -j DROP
iptables -A INPUT -m geoip --src-cc HK -j DROP 
iptables -A INPUT -m geoip --src-cc KR -j DROP 
iptables -A INPUT -m geoip --src-cc RU -j DROP

Ou alors, tout simplement n’autoriser que les adresses IP de votre pays (dans notre cas, sur le port 22) :

 iptables -A INPUT -m geoip --src-cc FR -m tcp -p tcp --dport 22 -j ACCEPT

Maintenant, il ne vous reste qu’à automatiser la mise à jour de la base de données Maxmind. Dans mon exemple, nous allons créer le script /etc/cront.monthly/0update_maxmind , afin que celui-ci soit exécuté une fois par mois :

#!/bin/bash

rm -f /usr/src/xtables-addons-2.6/geoip/*.csv
rm -rf /usr/share/xt_geoip/*

cd /usr/src/xtables-addons-2.6/geoip/
./xt_geoip_dl
./xt_geoip_build -D /usr/share/xt_geoip *.csv

N’oublier pas de le rendre exécutable :

 chmod u+x /etc/cront.monthly/0update_maxmind

Vous voilà prêt à jouer et à bloquer des adresses IP par pays avec iptables.

Références :
http://xtables-addons.sourceforge.net/geoip.php
https://room362.com/post/2016/blocking-countries-via-iptables/
https://www.internetstaff.com/frustrate-ssh-scanners-geoip-iptables-blocking/
https://www.linode.com/stackscripts/view/3807-jeffkyjin-ipp2p+filtering

A propos de Mehdi HAMIDA

Avec plus de 20 ans d’expérience dans la tech, je me suis spécialisé dans la gestion des données, le cloud (AWS, Snowflake) et l'architecture IT. Avant ça, j’étais expert technique et chef de projet sur des missions stratégiques. Je m'appelle Mehdi HAMIDA, et aujourd’hui, je partage simplement mes découvertes et connaissances à travers ce blog.

Lire aussi

IA et cybersécurité : la menace chinoise ?

Il y a encore quelques années, l’IA était une curiosité de laboratoire. Aujourd’hui, elle est …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *