GeoIP-Datenbanken¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
- Linuxfabrik
GeoIP-Datenbanken ordnen IP-Adressen einer geografischen Lage und einer Netzverantwortung (Autonomous System) zu. Typische Einsatzzwecke sind Zugriffsbeschränkung nach Ländern in Firewall, Webserver und Fail2ban, Grobklassifizierung in Logs und Reports sowie Lokalisierung in Webanwendungen. Für jede produktive Anwendung sollte klar sein, dass die Angaben probabilistisch sind: seriöse Anbieter geben selbst für das reine Ländermapping Genauigkeiten von 99-99.8% an, bei Stadt-/Region-Angaben deutlich weniger.
Begriffe¶
- ASN
Autonomous System Number. Eindeutige Nummer, die eine Gruppe von IP-Präfixen unter einheitlicher Routing-Verantwortung beschreibt (RFC 1930). GeoIP-ASN-Datenbanken liefern zu einer IP-Adresse die ASN und den Namen der verantwortlichen Organisation.
- GeoIP2
Kommerzielle Produktlinie von MaxMind. Höhere Genauigkeit und zusätzliche Felder (z.B. ISP, Nutzertyp).
- GeoLite2
Freie Produktlinie von MaxMind. Monatliche Updates, funktionaler Subset von GeoIP2, seit 2019-12 nur noch mit Account und Lizenzschlüssel beziehbar.
- ISO 3166-1 alpha-2
Zweistellige Länder-Codes (z.B.
CH,DE,US). Standard-Rückgabewert aller GeoIP-Datenbanken. Siehe https://en.wikipedia.org/wiki/ISO_3166-1.- MMDB
Binäres Datenbankformat von MaxMind (Suffix
.mmdb). Spezifikation offen, Bibliotheklibmaxminddb. Bevorzugtes Format für Laufzeit-Lookups in Webservern und Firewalls, weil die Datei direkt per mmap gelesen und keine Datenbank-Engine benötigt wird.
Datenquellen im Vergleich¶
- MaxMind (GeoLite2 / GeoIP2)
https://www.maxmind.com/. De-facto-Standard. GeoLite2 ist kostenlos, aber ab 2019-12 nur nach Registrierung und mit Lizenzschlüssel beziehbar; GeoIP2 ist kommerziell und genauer. MaxMind liefert seit 2019 wegen US-Exportkontrollen keine Daten mehr in bestimmte sanktionierte Länder aus.
- db-ip.com
https://db-ip.com/. Freie Variante ohne Account, monatlich aktualisiert, etwas ungenauer als MaxMind, aber praktisch für Stellen, an denen eine Registrierung stört. Unterstützt das MMDB-Format.
- IP2Location LITE
https://lite.ip2location.com/. Ebenfalls frei, benötigt Registrierung. Bietet MMDB und CSV.
- ipinfo.io
https://ipinfo.io/. Kommerziell mit Free-Tier, REST-API plus Database-Downloads.
Für einfache Länder-Sperren in Firewall oder Fail2ban genügen in der Regel db-ip oder GeoLite2-Country. Sobald ISP- oder Nutzertypen-Felder benötigt werden (z.B. Unterscheidung Hosting-Provider von Endkunden-Zugängen), führt kein Weg an den kommerziellen Produkten vorbei.
dbip¶
Die freie Variante wird monatlich aktualisiert, kommt ohne Account aus, ist aber etwas ungenauer als MaxMind.
timestamp=$(date "+%Y-%m")
# dbip Country Database in CSV format:
wget https://download.db-ip.com/free/dbip-country-lite-$timestamp.csv.gz --output-document - \
| gzip --decompress --stdout > dbip-country-lite.csv
# dbip City Database in GeoIP2 binary format:
wget https://download.db-ip.com/free/dbip-city-lite-$timestamp.mmdb.gz
Maxmind¶
Um die „GeoLite2“-GeoIP-Datenbank von Maxmind zu nutzen, benötigt man bei ihnen einen Online-Account. Wie folgt vorgehen:
Nach der Account-Erstellung erhält man nach ein paar Stunden eine Bestätigungs-E-Mail mit den Anmeldedaten.
Anmelden > „My license key“ > „Generate a new license key“
Beschreibung des Lizenzschlüssels eingeben, z.B. „iptables“ oder „Matomo“, und „No“ bei „Will this key be used for GeoIP Update?“ wählen.
Edition-IDs:
GeoLite2-ASN
GeoLite2-ASN-CSV
GeoLite2-City
GeoLite2-City-CSV
GeoLite2-Country
GeoLite2-Country-CSV
Die Datenbanken sollten typischerweise 1x pro Woche aktualisiert werden.
- Download per wget (empfohlen)
Das Einschliessen der Download-URL in Double-Quotes ist wegen
&erforderlich. Das Skript ist auch gleichzeitig für Cron, Systemd-Timer etc. nutzbar:update-maxmind.sh¶#!/usr/bin/env bash MM_LIC=mylic MM_DB=GeoLite2-Country cd /tmp wget "https://download.maxmind.com/app/geoip_download?edition_id=$MM_DB&suffix=tar.gz&license_key=$MM_LIC" --output-document=$MM_DB.tar.gz tar xzf $MM_DB.tar.gz \cp GeoLite2-Country_*/GeoLite2-Country.mmdb /usr/share/GeoIP/ rm -rf /tmp/GeoLite2-Country*
- Download per Maxmind-Tools
Wer die Datenbanken nur im GeoIP2-Binary-Format (
.mmdb) benötigt, kann für die einfache Pflege die Maxmind-Tools herunterladen (das Tool zieht keine CSV-Dateien):# https://github.com/maxmind/geoipupdate VER=7.0.1 dnf --assumeyes install "https://github.com/maxmind/geoipupdate/releases/download/v${VER}/geoipupdate_${VER}_linux_amd64.rpm"
/etc/GeoIP.conf¶AccountID 999999 LicenseKey mylic # example editions: EditionIDs GeoLite2-ASN GeoLite2-Country GeoLite2-City
Download der binären Datenbanken nach
/usr/share/GeoIP/:geoipupdate
Tipp
The MaxMind DB file's search tree is corrupt
Datenbank erneut ziehen. mod_maxminddb liest die mmdb-Dateien dynamisch ein, ein Restart des Apache ist also nicht nötig.
Maxmind Legacy¶
Die alten „legacy“ GeoLite-Datenbanken im binären GeoIP-Format (nicht MMDB) sind seit 2019-04-02 nicht mehr von MaxMind beziehbar. Wer noch solche Systeme pflegt, findet über Archivierungs-Spiegel mitunter ältere Stände, z.B.:
wget https://legacy-geoip-csv.ufficyo.com/Legacy-MaxMind-GeoIP-database.tar.gz
Da die Daten dort beliebig alt sind, wird der Umstieg auf GeoLite2 + MMDB dringend empfohlen.
Einsatz in Serverdiensten¶
- Apache HTTP Server
Über das Modul
mod_maxminddb(EPEL-Paketmod_maxminddb). Die MMDB wird einmal pro VirtualHost deklariert, Felder werden dann als Umgebungsvariablen gesetzt (z.B.MMDB_COUNTRY_CODE) und stehen Skripten und Mod-Rewrite zur Verfügung.- Nginx
Über das Drittmodul
ngx_http_geoip2_module. Auf RHEL und Debian ist es nicht in den offiziellen Nginx-Paketen enthalten - entweder selbst bauen oder auf ein Distributions-Paket aus EPEL/Debian-Repos ausweichen.- iptables / nftables
Über
xtables-addons(EPEL-Paketxtables-addons). Die Bibliothek nutzt eine eigene kompakte Datenbank unter/usr/share/xt_geoip/. Updates liefert das mitgelieferte Skriptxt_geoip_dlgefolgt vonxt_geoip_build. Eine Regel sieht dann beispielsweise so aus:iptables -A INPUT -m geoip ! --src-cc CH,DE,AT -j DROP.- Fail2ban
Kein direkter GeoIP-Support im Kern. Für Logging oder Reports lassen sich in eigenen Actions via
mmdblookupbzw.geoiplookupLänder zu gebannten IPs ermitteln; für Länder-Blocks aus Fail2ban heraus werden die IPs typischerweise in ein ipset geschrieben, das selbst aus einer GeoIP-Datenbank gefüllt wurde.- Matomo
Setzt auf
libmaxminddb(Matomo-Plugin „GeoIP2“) und benötigt eine GeoLite2-City-Datenbank.
Datenschutz¶
IP-Adressen gelten gemäss DSGVO und Schweizer DSG in Verbindung mit weiteren Identifikatoren als Personendaten. Für Logging und Reports bedeutet das: eine IP-zu-Geo-Zuordnung ersetzt nicht die Anonymisierung. Wer Besucher-Logs mit Geo-Informationen anreichern will, sollte entweder nur aggregiert auswerten, die IP nach dem Lookup kürzen (IPv4 /24, IPv6 /48) oder eine klare Aufbewahrungsfrist definieren. Die Linuxfabrik setzt in Matomo-Installationen standardmässig anonymize_ip_mask_length = 2 und speichert Logs zeitlich begrenzt.
Country Codes¶
Siehe https://en.wikipedia.org/wiki/ISO_3166-1 (Alpha-2 Code).