Il s'avère que je n'ai pas à réinventer complètement la roue pour obtenir une sorte de support GeoIP mélangé à IPTables. Il suffit d’utiliser IPSet avec une copie de la base de données GeoIP Country de MaxMind au format CSV - en plus d’une simple règle IPTables - pour mettre tout cela en place et le rendre opérationnel dans Ubuntu 12.04.5 (LTS).
Remarque, mais certains tutoriels en ligne qui expliquent une procédure de ce type recommandent d’utiliser des fichiers de zone de pays basés sur le Web, comme ceux provenant du site Web d’IPDeny:
http://www.ipdeny.com/ipblocks/data/countries/cn.zone
Bien que cela fonctionne techniquement, je n’aime pas l’idée de devoir compter autant sur les données d’un site Web externe comme celle-ci. Et si je veux créer un processus de script automatisé pour gérer cela et que le site IPDeny tombe en panne ou est piraté? Dont les IPs je bloquerais.
C’est pourquoi je préfère utiliser la base de données MaxMind GeoIP Country au format CSV sur mes serveurs. Je peux toujours récupérer une nouvelle copie de cette base de données si j'ai besoin de mises à jour et même si leur site est en panne, j'ai toujours une copie de la base de données sur mes serveurs. Et comme cette base de données contient tous les pays du monde, je peux toujours facilement ajouter plus de pays à la propriété intellectuelle en utilisant les deux lettres du pays. ISO 3166-1 code postal.
Quoi qu'il en soit, voici les étapes que j'ai suivies pour y parvenir avec IPSet et la base de données MaxMind GeoIP Country.
1. Installez IPSet.
Commencez par installer IPSet comme ceci.
sudo aptitude install ipset
Une fois installé, créez un BANNED_RANGES
IP réglé comme ceci:
sudo ipset create BANNED_RANGES hash:net
2. Obtenez une copie de la base de données MaxMind GeoIP Country au format CSV.
La clé suivante consiste à obtenir une copie de la base de données MaxMind GeoIP Country au format CSV installée sur le serveur. Mes pas sont les suivants:
curl -O -L http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
Maintenant, décompressez cette archive:
unzip -o -q -d . GeoIPCountryCSV.zip
3. Filtrez et importez une configuration IPSet spécifique à un pays comme celle-ci.
Nous allons maintenant utiliser Awk pour filtrer les plages d'adresses IP spécifiques à la Chine dans un fichier de configuration IPSet:
awk -F "," -v COUNTRY_CODE=CN -v IPSET_TABLE=BANNED_RANGES} '$5 ~ COUNTRY_CODE { gsub(/"/, "", $1); gsub(/"/, "", $2); print "add "IPSET_TABLE" "$1"-"$2; }' /usr/local/share/GeoIP/GeoIPCountryWhois.csv >> ipset.BANNED_RANGES.conf
Cela créera un fichier de configuration IPSet nommé ipset.BANNED_RANGES.conf
qui peut ensuite être importé dans IPSet comme ceci:
sudo ipset restore < ipset.BANNED_RANGES.conf
Et vous pouvez ensuite vérifier les éléments de cet ensemble avec cette commande:
sudo ipset -l BANNED_RANGES | more
4. Informez IPTables de l’IPSet.
La dernière étape qui rassemble tout cela consiste à insérer une règle simple dans IPTables comme ceci:
sudo iptables -I INPUT -p tcp -m set --match-set BANNED_RANGES src -j REJECT
Ceci fait, IPTables sait maintenant que toute adresse IP ou plage ajoutée à la BANNED_RANGES
l'ensemble sera simplement rejeté via REJECT
.
Si vous souhaitez vous débarrasser de cette règle ultérieurement, vous pouvez exécuter cette commande:
sudo iptables -D INPUT -p tcp -m set --match-set BANNED_RANGES src -j REJECT
Mais pour moi, c’est un peu désordonné. Une façon plus simple de gérer un cas comme celui-ci consiste à vider toutes les données IP BANNED_RANGES
réglé comme ceci:
sudo ipset flush BANNED_RANGES
En faisant cela, vous pouvez avoir la règle IPTables en place et ne pas avoir à faire autre chose que vider les données de BANNED_RANGES
. Facilite / facilite la mise à jour des adresses ou des plages si vous souhaitez ajouter ou supprimer des adresses IP ou des plages de cet ensemble.