Repository navigation
Country Block FR
English · 🌐 Français
Filtrage géographique par route utilisant la base MaxMind GeoLite2-City. Allow-list ou deny-list de n'importe quelle combinaison de codes pays ISO 3166 pour n'importe quelle route.
À utiliser quand : l'audience visée par ton homelab est géographiquement bornée (ex. services famille France-only) et tu veux dropper le trafic hors de la bulle avant qu'il n'atteigne le WAF ou ton backend.
- Sidebar → Routes → clique ta route → Edit
- Déploie la section Pays bloqués (Country Block)
- Choisis un mode :
- Désactivé (off) — défaut, pas de filtrage
- Allow — seulement les pays listés peuvent accéder
- Deny — les pays listés sont bloqués, tout le monde passe
- Tape un nom de pays dans l'autocomplete (ex.
France,Brazil) — les picks résolvent en codes ISO (FR,BR) ; chaque suggestion et chaque chip affiche le drapeau du pays (v2.22.0) - Clique chaque entrée pour l'ajouter à la liste de chips ; clique le ✕ du chip pour retirer
- Save
En 5s le filtre pays est actif. Les requêtes depuis les pays bloqués reçoivent 403 Forbidden avec la page d'erreur brandée de la route (ou la page d'erreur Arenet par défaut).
Comment les listes se combinent. Continents, pays et réseaux (ASN) sont trois listes facultatives reliées par un OU : une requête correspond dès que son continent, OU son pays, OU son réseau figure dans l'une d'elles. Remplis seulement celles dont tu as besoin — une seule suffit. En mode Deny, les exceptions passent toujours, avant tout le reste. Depuis la v2.34, une phrase en tête de section résume la règle en direct (ex. « Bloqué si le visiteur vient de Asie ou Russie ou AS14061 — sauf Japon »).
La section s'appelle désormais Filtrage géographique. À côté des pays, tu peux :
- Cocher des continents (Europe, Asie, Afrique, Amérique du Nord, Amérique du Sud, Océanie, Antarctique). Un continent compte exactement comme un pays de la liste : en Deny ses visiteurs sont bloqués, en Allow seuls les pays et continents listés passent.
- En mode Deny, ajouter des exceptions : des pays toujours autorisés, même dans un continent bloqué — ex. bloquer l'Asie, sauf le Japon.
| Configuration | Tokyo | Pékin | Paris | New York |
|---|---|---|---|---|
| Deny Asie | 403 | 403 | ✓ | ✓ |
| Deny Asie, exception Japon | ✓ | 403 | ✓ | ✓ |
| Allow Europe | 403 | 403 | ✓ | 403 |
Règles : les exceptions n'existent qu'en mode Deny (l'API les refuse sinon), un pays ne peut pas être à la fois bloqué et en exception, et une liste Allow exige au moins un pays ou un continent. Le continent vient de la même base GeoLite2-City — rien de plus à installer. Les requêtes bloquées sont journalisées avec le pays résolu, comme avant.
Un ASN (numéro de système autonome) identifie un opérateur réseau : FAI, cloud ou hébergeur (AS14061 DigitalOcean, AS16276 OVH, AS15169 Google…). Bloquer par ASN couvre tout l'espace d'adresses d'un fournisseur en une règle — pratique contre les scanners et bots qui tournent sur des VPS cloud.
- Le bloc ASN de la section Filtrage géographique cherche par nom ou numéro (
ovh,digital,16276,AS16276). Les ASN comptent comme les pays et continents, dans les deux modes. - En mode Deny, les Réseaux en exception (ASN) sont toujours autorisés — ex. bloquer l'Europe sauf l'AS29518, ou bloquer DigitalOcean sauf l'AS de ton propre hébergeur.
- Les données ASN viennent d'une seconde base MaxMind, GeoLite2-ASN (gratuite, même compte et même clé de licence). Avec Réglages → GeoIP configuré, Arenet la télécharge et la met à jour avec la base City ; en installation manuelle, dépose
GeoLite2-ASN.mmdbà côté du fichier City (ou définisARENET_GEOIP_ASN_MMDB). - Sans la base ASN, les autres règles continuent de fonctionner ; les règles ASN ne correspondent simplement à rien, et une liste Allow qui s'appuie sur des ASN laisse passer le trafic plutôt que de bloquer tout le monde (fail-open, comme une base GeoIP absente). Le formulaire affiche un avertissement quand la base manque.
| Stratégie | Idéal pour |
|---|---|
| Allow (whitelist) | Services personnels / famille, domotique, outils d'admin internes — ton audience EST géographiquement bornée |
| Deny (blacklist) | Services publics avec audience globale mais des régions connues comme mauvaises que tu veux dropper |
Allow est plus safe (posture default-deny). Deny est plus permissif mais plus facile à maintenir (pas de risque de te locker out accidentellement quand tu voyages — ajoute juste ton pays transient temporairement).
Pour chaque requête :
- Get l'IP source (après trust X-Forwarded-For si configuré)
- Look up l'IP dans la DB MaxMind GeoLite2-City
- Match le code pays résolu contre la liste allow/deny de la route
- Décision : pass-through ou 403
La DB MaxMind est fournie par l'opérateur, pas embarquée dans le binaire : Arenet la lit au chemin indiqué par ARENET_GEOIP_MMDB (défaut /var/lib/arenet/GeoLite2-City.mmdb). Une fois chargée, les lookups sont locaux — pas d'appel API externe, pas de coût réseau par requête. Voir Réglages → GeoIP plus bas pour mettre le fichier en place, y compris le téléchargement automatique.
Le block fire avant les handlers WAF et reverse-proxy dans la chain. Une requête bloquée :
- Retourne 403 Forbidden
- Émet une ligne
decision_event(visible dans/security/decisions) - Ne compte PAS contre les rate limits (elle ne les atteint jamais)
- N'apparaît PAS dans les événements WAF (elle n'atteint jamais Coraza)
Le GeoLite2 de MaxMind ne couvre pas les IPs privées (RFC1918), réservées, ou CGNAT. Pour celles-ci, le code pays résout à "" (vide).
Mode Allow : pays vide est rejeté (l'IP n'est pas dans la liste allow). Comportement utile pour les routes publiques — des IPs de range privé atteignant une route publique est suspect.
Mode Deny : pays vide est passé (pas dans la liste deny).
Si ta route est censée être LAN-only ET que tu veux autoriser les ranges privés en mode Allow, le workaround est de bind cette route à un listener spécifique sur l'interface LAN uniquement (avancé, pas exposé UI). Le pattern standard est de garder les routes LAN-only entièrement hors du listener public.
Entièrement supporté — MaxMind GeoLite2 couvre les ranges IPv6.
Le GeoLite2 gratuit de MaxMind ne flag pas les proxies anonymes. Si tu as besoin de ça, la DB MaxMind GeoIP2 Anonymous IP payante s'intègre séparément (pas exposée actuellement dans l'UI Arenet ; config manuelle requise).
Pour la plupart des cas d'usage homelab, layerer Country Block + CrowdSec (qui DOES flag les nodes de sortie VPN connus via scenarios communauté) te donne ~90% de la valeur d'une DB anonymous-IP payante.
Chaque requête bloquée émet un decision_event avec origin=country_block. La page /security/decisions filtre ces événements. Le /logs unifié les montre avec le badge COUNTRY.
La GeoIP World Map du dashboard visualise la distribution live du trafic bloqué par pays — utile pour comprendre ce que tes routes voient sans plonger dans les événements individuels.
# Update le country block d'une route via API
curl -b /tmp/jar -X PUT -H "Content-Type: application/json" \
-d '{
...other route fields...,
"countryBlock": {
"mode": "allow",
"countryList": ["FR", "BE", "CH", "LU"]
}
}' \
http://localhost:8001/api/v1/routes/<route-id>Modes disponibles : "off" (ou vide), "allow", "deny". Les codes pays sont 2-letter ISO 3166-1 alpha-2, uppercase.
La base est fournie par l'opérateur, pas embarquée dans le binaire Arenet. Arenet la lit depuis ARENET_GEOIP_MMDB (défaut /var/lib/arenet/GeoLite2-City.mmdb) — à toi d'y placer un fichier .mmdb et de le garder à jour.
Le plus simple est Réglages → GeoIP : saisis ton account ID + license key MaxMind (gratuits), puis active la mise à jour automatique hebdomadaire ou clique Mettre à jour maintenant pour télécharger/rafraîchir la base immédiatement. Arenet stocke les identifiants, télécharge la DB au chemin configuré et la recharge sans redémarrage.
Si tu préfères gérer le fichier toi-même (pas de compte MaxMind, host air-gapped, etc.), dépose manuellement un GeoLite2-City.mmdb au chemin configuré — Arenet prend en compte les changements de ce fichier sans avoir besoin de la mise à jour automatique.
- Routes — où trouver la section Country Block dans l'UI
- CrowdSec — réputation IP communautaire, layered avec country blocking
- WAF — détection d'attaque layer 7 après pass-through country + CrowdSec
- MaxMind GeoLite2 — la base upstream
-
internal/countryblock/— implémentation Arenet -
internal/geo/— lecteur MaxMind (rechargeable à chaud) + lookup IP
- Home · Accueil
- Installation · Installation 🇫🇷
- Routes · Routes 🇫🇷
- TCP / UDP services · Services TCP / UDP 🇫🇷
- DNS Providers · DNS Providers 🇫🇷
- Topology · Topology 🇫🇷
- WAF · WAF 🇫🇷
- CrowdSec · CrowdSec 🇫🇷
- Country Block · Country Block 🇫🇷
- Rate Limit · Rate Limit 🇫🇷
- OIDC SSO · OIDC SSO 🇫🇷
- Forward auth · Forward auth 🇫🇷
- Certificates · Certificats 🇫🇷
- Updating Arenet · Mettre à jour 🇫🇷
- Backup & Restore · Backup & Restore 🇫🇷
- Alerting · Alerting 🇫🇷
- Custom Error Pages · Custom Error Pages 🇫🇷
- API (OpenAPI) · API (OpenAPI) 🇫🇷
- Troubleshooting · Troubleshooting 🇫🇷