Skip to content

Repository files navigation

geoip-blocklist-generator

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. demo

Prérequis

Installation

# installation dans $GOPATH/bin
make install
# installation système (ex: /usr/local/bin)
sudo make install

Compilation seule

make build

Utilisation

# 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"

Flags

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="".

Fichiers générés

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).

Pays autorisés par défaut

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

Comportement de --test-ip

--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 --autoriser et sera présent dans les fichiers de sortie
  • [~] autorisée — le pays est dans --autoriser ou 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

Intégration HAProxy

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

Intégration ipset / iptables

{
  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 DROP

Source des données

https://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).

Structure

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

About

GeoIP blocklist generator producing ipset / nftables / haproxy lists from country databases

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages