Salut les gens,
C'est comme qui dirait mon premier [HOW-TO] et je demande donc votre indulgence (les remarques sont évidemment les bienvenues (et même les critiques (mais pas les insultes ))). Je ne pense pas que le sujet ait déjà été traité. Si c'est le cas, je passerai pour un blaireau mais j'm'en fous, même pas peur
Le contexte : voilà une semaine que je farfouille à gauche et à droite concernant les problèmes de sécurité. J'ai donc pu remarquer, comme beaucoup d'entre vous, que certains pays plus ou moins exotiques sont la source d'un nombre considérable d'attaques.
Je ne vais pas m'amuser à faire ici un palmarès des pays qui contiennent le plus grand nombre de machines vérolées, je suis sûr que vous avez tous vos petites idées sur la question. De mon côté, j'ai pris la décision de bloquer la Chine. Comprenez par là : toutes les IP chinoises. Je vous accorde que c'est une décision un peu radicale (Chuck Norris en force ! ). Mais bon, vu les centaines d'attaques quotidiennes que je choppe sur mes machines (et l'absence totale de trafic chinois réel sur mes sites), le rapport coût/bénéfice est très favorable.
La question à 1000 balles est donc : comment bloquer toutes les IP d'un pays sans trop de prise de tête (je ne suis pas le pape de l'administration système ). Voici la méthode (elle est décrite pour une release 2 OVH mais elle est très facilement adaptable car seuls PHP et Iptables sont nécessaires) :
1) Télécharger countryblock.zip sur cette page :
http://fixingtheweb.com/country/blocking.html (
lien direct vers le fichier)
2) Télécharger GeoIPCountryCSV.zip sur cette page :
http://www.maxmind.com/app/geolitecountry (
lien direct vers le fichier)
3) Décompresser et uploader tout le bazar dans un répertoire web. Par exemple /home/ovh/www/countryblock
4) Ne pas oublier de protéger ce répertoire pour qu'il ne soit accessible que de vous, par exemple à l'aide d'un .htaccess du genre :
Code:
AuthUserFile /home/ovh/www/countryblock/.htpasswd
AuthGroupFile /dev/null
AuthName "countryblock"
AuthType Basic
require valid-user
Accompagné du petit .htpasswd qui va bien.
5) Se rendre à l'aide de son navigateur favori sur
http://nsxxxx.ovh.net/countryblock/countryiptsetup.php et cliquer sur l'unique bouton "Generate Database". Attendez que la page ait fini de se charger (cela peut mettre un peu de temps) et cela aura pour effet de créer un grand nombre de fichiers dans /home/ovh/www/countryblock/
6) Se rendre à l'aide de son navigateur favori sur
http://nsxxxx.ovh.net/countryblock/countryiptables.php, sélectionner les pays dont on veut se passer et cliquer sur le bouton "Create File". Même topo : attendre le rafraichissement de la page. Cela aura pour effet de créer le fichier /home/ovh/www/countryblock/badiptlist.txt
Pour l'amour du ciel, évitez de sélectionner votre propre pays si vous ne voulez pas aller droit dans le mur. Je décline toute responsabilité
7) Il ne reste plus qu'à faire
Code:
iptables-restore < /home/ovh/www/countryblock/badiptlist.txt
Et le tour est joué
Si si, je vous jure : c'est déjà fini
Remarques :
- Il existe une version pour les hébergements mutualisés :
http://fixingtheweb.com/country/htblocking.html
- La base GeoIPCountryWhois.csv est régulièrement mise à jour. A vous de faire les updates. Pour ce faire, il suffit de (re)uploader GeoIPCountryWhois.csv et de relancer le script countryiptsetup.php.
- Si l'un des scripts déconne en vous signalant un manque de mémoire, il vous faut aller modifier votre php.ini (pour php5) que vous trouverez quelque part par ici : /usr/local/lib/
- Une fois que vous aurez un peu tripoté tout ça, n'hésitez pas à faire mumuse avec iptocountry.php qui vous permet de tester des IP. Ce script vous indique la géolocalisation de la plage d'IP au sein de laquelle se trouve celle que vous testez. Cela vous permet, grâce à Iptables (dont il va alors falloir vous familiariser avec le fonctionnement si ce n'est déjà fait), de pouvoir bannir des plages d'IP de manière un peu plus fine qu'en blacklistant tout un pays.
- Pour ceux qui sont déçus que rien ne se soit affiché et qui ont une furieuse envie de visualiser les règles iptables, il suffit d'aller voir le contenu de badiptlist.txt. Cela peut aussi se faire par webmin :
https://nsxxxx.ovh.net:10000/firewall/. Ou encore à l'aide de :
- Pour automatiser la chose n'oubliez pas d'ajouter ceci en cron/boot de votre serveur :
Code:
/sbin/iptables-restore < /home/ovh/www/countryblock/badiptlist.txt