Génère des listes de blocage IP (IPv4 et IPv6) par pays à partir des zones agrégées de ipdeny.com.
Par défaut, les pays francophones, frontaliers et partenaires sont autorisés (non bloqués).
Les fichiers générés sont compatibles avec ipset/iptables, nftables et HAProxy ACL.

- Go 1.21+
- go.etcd.io/bbolt
# installation dans $GOPATH/bin
make install
# installation système (ex: /usr/local/bin)
sudo make installmake build# génération avec la liste blanche par défaut
./geoip-blocklist-generator
# liste blanche personnalisée (remplace entièrement la liste par défaut)
./geoip-blocklist-generator --autoriser="ru,cn"
# répertoire de sortie
./geoip-blocklist-generator --sortie="/etc/haproxy/blocklists"
# tester si une IP ou un CIDR est présent dans le cache
./geoip-blocklist-generator --test-ip="1.180.0.1"
./geoip-blocklist-generator --test-ip="157.90.40.40/8"
./geoip-blocklist-generator --test-ip="2801:18:9800::/48"| Flag | Défaut | Description |
|---|---|---|
--autoriser |
pays francophones + frontaliers | pays à ne pas bloquer, codes ISO 3166-1 alpha-2 séparés par des virgules |
--sortie |
répertoire courant | répertoire de destination des fichiers générés |
--test-ip |
— | IP ou CIDR à tester contre le cache |
--autoriser remplace intégralement la liste par défaut. Pour bloquer tous les pays sans exception : --autoriser="".
| Fichier | Contenu |
|---|---|
deny_ipv4_networks.txt |
plages IPv4 CIDR à bloquer |
deny_ipv6_networks.txt |
plages IPv6 CIDR à bloquer |
Le cache bbolt (TTL 24h) est stocké dans $XDG_CACHE_HOME/geoip-blocklist-generator/ (ou ~/.cache/... si XDG_CACHE_HOME n'est pas défini).
Deux groupes constituent la liste blanche par défaut. Francophones
be bf bi bj bl ca cd cf cg ch ci cm dj dz fr ga gf gn gq gp
ht km lb lu ma mc mg ml mq ne nc pf rw sc sn td tg tn vu wf
Frontaliers et partenaires
ad be br ch de es gb it lu mc sr
--test-ip consulte le cache local sans déclencher de téléchargement. Le cache doit avoir été rempli au préalable par une exécution normale.
Pour chaque correspondance trouvée, le statut affiché est :
[✓] sera bloquée— le pays n'est pas dans--autoriseret sera présent dans les fichiers de sortie[~] autorisée— le pays est dans--autoriserou dans la liste blanche permanente (us) : présent dans le cache, absent des fichiers de sortie Exemple :
=== test-ip ===
cible : 157.90.40.40/18
[i] 1 correspondance(s) dans le cache :
157.90.0.0/16 de Germany [~] autorisée
[~] non bloquée — présente dans le cache mais tous les pays sont autorisés
acl geo_block_ipv4 src -f /etc/blocklists/deny_ipv4_networks.txt
acl geo_block_ipv6 src -f /etc/blocklists/deny_ipv6_networks.txt
http-request deny if geo_block_ipv4
http-request deny if geo_block_ipv6
{
echo "create bloc-ipv4 hash:net family inet hashsize 65536 maxelem 500000 -exist"
while IFS= read -r cidr; do
printf 'add bloc-ipv4 %s -exist\n' "$cidr"
done < deny_ipv4_networks.txt
} > bloc-ipv4.ipset
sudo ipset restore < bloc-ipv4.ipset
sudo iptables -I INPUT -m set --match-set bloc-ipv4 src -j DROPhttps://www.ipdeny.com/ipblocks/data/aggregated/ Les données sont issues des allocations officielles des registres Internet régionaux (ARIN, RIPE NCC, APNIC, AFRINIC, LACNIC). Elles représentent les allocations RIR par pays et ne reflètent pas nécessairement l'origine réelle du trafic (BGP, CDN, cloud, Anycast).
main.go point d'entrée, parsing des flags
src/constantes.go URLs, TTL, couleurs, listes de pays
src/countries.go table ISO 3166-1 des pays
src/pays_helpers.go résolution code → nom de pays
src/reseau.go téléchargement HTTP + retry
src/cache.go lecture/écriture bbolt
src/traitement.go orchestration parallèle, écriture des fichiers
src/testip.go implémentation de --test-ip