Existe-t-il un autre moyen de faire en sorte que les IPTables filtrent les adresses IP en fonction de la géolocalisation dans Ubuntu 12.0.4.5 (LTS)

0

Ainsi, quelques-uns des serveurs que je gère sont bloqués par le trafic en provenance de Chine alors que les sites eux-mêmes n’auraient aucun attrait pour quiconque en Chine. Pour aggraver les choses, de nombreuses tentatives de piratage par la force brute et de DDoS non désirées viennent également de Chine. Ainsi, alors que Fail2Ban est installé pour bloquer une partie de ce trafic, j’aimerais vraiment couper tout le trafic en provenance de la Chine, pour le moment, pour que ces serveurs fonctionnent de manière stable et joyeuse.

J'ai lu comment activer le support GeoIP pour IPTables et j'ai essayé de suivre les solutions comme celui présenté ici , mais cela ne semble pas fonctionner sur mes serveurs Ubuntu 12.04.5 (LTS), quel que soit le conseil que je semble suivre.

Un choix que j'ai est de mordre la balle et juste de mettre à niveau ces serveurs vers Ubuntu 14.04, mais cela ouvre toute une boîte de Pandore. Passé tous les problèmes que je rencontre avec le filtrage GeoIP, ces serveurs sont extrêmement solides et fonctionnent assez bien. Une mise à niveau vers 14.04 ajouterait simplement le spectre d’une instabilité potentielle, et je n’ai pas le temps de le faire; la décision a été prise de rester sur 12.04 car il est stable et bien soutenu jusqu’en 2017, donc je vais traverser ce pont quand je le reviendrai.

Y a-t-il un moyen de faire en sorte que IPTables sur Ubuntu 12.04 puisse filtrer en fonction de la géolocalisation sans avoir à parcourir trop de procédures d'installation de paquets système?

JakeGould
la source

Réponses:

2

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.

JakeGould
la source
1
sensationnel. cette réponse mériterait vraiment plus de votes positifs.
Gábor Dani