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