Bloquer le trafic par pays (GeoIP) sur un serveur YunoHost sans casser le pare-feu

Objectif : Bloquer tout trafic entrant provenant de certains pays (ex. : Chine, Russie, Corée du Nord, Inde, etc.) en utilisant iptables et les bases GeoIP, tout en conservant la compatibilité avec YunoHost.


✅ 1. Installer les outils nécessaires

sudo apt update
sudo apt install xtables-addons-common libtext-csv-xs-perl unzip

✅ 2. Créer le dossier des données GeoIP

sudo mkdir -p /usr/share/xt_geoip
cd /usr/share/xt_geoip

✅ 3. Télécharger les bases GeoLite2 (CSV) depuis MaxMind

  1. Crée un compte gratuit sur : https://www.maxmind.com/en/geolite2/signup
  2. Récupère ta clé de licence.
  3. Remplace-la dans la commande ci-dessous :
wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=VOTRE_CLÉ_ICI&suffix=zip" -O GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip
cd GeoLite2-Country-CSV_*

✅ 4. Créer un script cron pour générer les fichiers .iv4 à partir des CSV

Crée le fichier suivant :

sudo nano /etc/cron.daily/xt_geoip

Colle ce contenu :

#!/bin/sh -e
workdir=$(mktemp -d)
cd "$workdir"
/usr/libexec/xtables-addons/xt_geoip_dl
/usr/libexec/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
cd && rm -rf "$workdir"

Rends-le exécutable :

sudo chmod +x /etc/cron.daily/xt_geoip

Et exécute-le immédiatement pour générer les fichiers :

sudo run-parts /etc/cron.daily

✅ 5. Vérifier que les fichiers GeoIP sont générés

ls /usr/share/xt_geoip/*.iv4

Tu devrais voir des fichiers comme CN.iv4, RU.iv4, etc.


✅ 6. Ajouter la règle iptables pour bloquer les pays

Ajoute la règle suivante :

sudo iptables -A INPUT -m geoip --src-cc CN,RU,KP,IN,PK,BD,PH -j DROP

Cela bloque tout le trafic entrant depuis :

  • CN = Chine
  • RU = Russie
  • KP = Corée du Nord
  • IN = Inde
  • PK = Pakistan
  • BD = Bangladesh
  • PH = Philippines

❌ YunoHost empêche l’usage de iptables-persistent

Comme iptables-persistent est en conflit avec yunohost, on doit utiliser un service systemd personnalisé pour restaurer les règles iptables au démarrage.


✅ 7. Créer le script de restauration des règles

sudo nano /usr/local/sbin/geoip-iptables-restore.sh

Colle :

#!/bin/bash
iptables -C INPUT -m geoip --src-cc CN,RU,KP,IN,PK,BD,PH -j DROP 2>/dev/null || \
iptables -A INPUT -m geoip --src-cc CN,RU,KP,IN,PK,BD,PH -j DROP

Puis rends-le exécutable :

sudo chmod +x /usr/local/sbin/geoip-iptables-restore.sh

✅ 8. Créer le service systemd pour exécuter ce script au démarrage

sudo nano /etc/systemd/system/geoip-iptables.service

Colle :

[Unit]
Description=Restaurer les règles iptables GeoIP au démarrage
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/geoip-iptables-restore.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target


✅ 9. Activer et lancer le service

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable geoip-iptables.service
sudo systemctl start geoip-iptables.service

Vérifie qu’il est actif :

sudo systemctl status geoip-iptables.service

✅ 10. Vérifier que les règles sont bien actives

sudo iptables -L -v --line-numbers

Tu dois voir une ligne DROP avec les pays ciblés.


🧼 En résumé

  • Blocage GeoIP actif et persistant ✅
  • Mise à jour automatique des données via cron.daily
  • Compatible avec YunoHost (pas de iptables-persistent) ✅

cedetrick

👤 Présentation personnelle Né en 1970, je suis un passionné d'informatique depuis mon tout premier ZX81. Curieux de nature, j'ai toujours aimé explorer, démonter, comprendre - et parfois même réparer - tout ce qui touche au numérique. Officiellement vintage, j'ai traversé les époques technologiques : du TI99/4A, CPC6128, aux calculatrices HP 48G / GX / 40G et TI92, sans oublier l'arrivée des PCs, que j'ai suivie de près, du i386 jusqu'aux configurations modernes. 💻 Je reste un utilisateur convaincu de Windows, même si je m'essaie régulièrement à Linux pour sortir de ma zone de confort. Le monde Mac ? Disons qu'on ne s'est jamais vraiment croisés. 🎮 Côté consoles, c'est toute une vie de gaming (ou presque) : de l'Atari (avant même qu'il s'appelle 2600) à la SNES, puis les PS1 et PS2 de mon petit frère - que je formais au passage à Doom, Wolfenstein, et aux assemblages Lego sur PC. Aujourd'hui, même si j'ai une PS3, PS4 et Switch, le temps me manque pour vraiment en profiter... mais elles sont là, fidèles, comme un musée interactif prêt à s'allumer ! 🎥📚 Passionné de cinéma, de séries, et de lecture, j'aime aussi simplement découvrir, apprendre et m'émerveiller. Car au fond, ce qui m'anime depuis toujours, c'est cette curiosité insatiable, ce plaisir de creuser un sujet jusqu'à en comprendre les rouages.

Laisser un commentaire