Bloquer IP par pays
Bloquer IP par pays jppCet article présente un tout petit ensemble de scripts permettant la création et la mise à jour d'un "set" comprenant toutes les classes d'adresses IP allouées à certains pays, le tout paramétrable par le fichier de configuration.
J'utilisais comme source d'adresses le site "https://www.ipdeny.com" qui permet d'obtenir facilement les classes d'adresses allouées à chaque pays, mais, depuis quelques mois, les données ne semblent plus évoluer ...
Je me suis donc mis à la recherche d'une nouvelle source et j'ai trouvé le site "https://ip2location.com" qui fournit plusieurs listes d'IP, certaines payantes, mais une version "LITE" est en accès libre. Comme je n'ai pas besoin d'une grande précision géographique (le pays me suffit) la version LITE me convient parfaitement.
Le "set" constitué à partir de ces adresses est utilisé dans une règle iptables simple :
## Interface vers l'extérieur iptables $TYP -A PRE_EXT -m set --match-set BLOCK_COUNTRY src -j MARK --set-mark 97 |
Le seul problème pour moi c'est que les données récupérées depuis IP2LOCATION ne sont pas en format CIDR mais sous forme de "ranges" tels que : 192.168.1.0-192.168.3.255 ce qui n'est pas exploitable facilement avec des "sets" qui préfèrent la notation CIDR.
Heureusement quelqu'un a inventé et réalisé "ipcalc" qui réalise ce type d'opérations en un tour de main et si le range fourni ne peut être exprimé en une seule expression il en fournit plusieurs qui réalisent le truc, c'est tout simplement génial.
Afin d'automatiser la récupération des données et la construction du set j'ai réalisé un petit groupe de scripts qui réalisent les opérations suivantes :
- Récupération du fichier sur le site IP2LOCATION
- Dé-zipper les données
- Reformater les données reçues pour les soumettre à "ipcalc"
- Les soumettre à la sagacité d'ipcalc
- Mettre en forme les résultats pour charger un fichier "set" utilisable avec :
"ipset --restore MON_SET < Le_fichier_formaté"
Le fichier de configuration est assez simple et j'y ai inséré quelques commentaires pour faciliter le remplissage.
Le tout est disponible ici sous forme de "tar.gz".
Ce paquet est à installer dans un petit endroit douillet d'où il sera facile à utiliser.
Le paramétrage "exemple" est assez sévère pour beaucoup de pays mais ce site en français intéresse peu russes et chinois (bien qu'ils scannent régulièrement le serveur) et d'autres qui ne visent qu'à pirater un site de plus pour lui faire subir toutes sortes de choses désagréables ou même miner du bitcoin ...
Une autre partie du filtrage est réalisé par Suricata et Modsecurity, chaque individu mal intentionné qui est pris dans le filet permet d'ajouter de nouvelles règles de filtrage ...