Wer sich als Entwickler ein wenig mit Netzwerktechnik auskennt, weiß, dass man anhand der IP Adresse des Users einige spannende Details herausfinden kann. Diese Details sind neben Informationen zum Ursprungsland und der Stadt, aus der der Request kommt, auch der Provider. Es lassen sich also auf diese Art und Weise wirkungsvoll die mittlerweile beliebten Proxy Server erkennen und blockieren. Natürlich ist die Geolocation nur ein Baustein in der langen Kette, Nutzer eindeutig zu erkennen.
Die aktuelle Version von GeoIP ist 2 und hat damit die veraltete Version 1 komplett abgelöst. GeoIP2 ist ein Dienst der Firma MaxMind [1] für die es auch eine kostenfreie Community Variante gibt. Wer beispielsweise ein selbstgehostetes Analytics wie Matomo betreibt, sollte um die vollständige Funktionalität des Werkzeugs auch auf eine korrekte GeoIP2 Konfiguration des Webservers achten.
Um GeoIP2 auf dem eigenen Server zu integrieren, gibt es zwei Möglichkeiten. Variante 1 ist die einfacher umzusetzende Option als PHP Modul. Variante 2 ist leistungsfähiger, erfordert aber auch mehr Kenntnisse aus dem Bereich Serveradministration. Bei dieser Lösung verwenden wir GeoIP2 als Apache2 Modul.
Wer auf dem eigenen Server bereits Fail2Ban [2] korrekt laufen hat, überlegt möglicherweise, ob es sinnvoll ist, Fail2Ban mit GeoIP2 zu verknüpfen. Diese Möglichkeit besteht durchaus, hat allerdings mehr Vorteile als Nachteile, denn Fail2Ban operiert direkt auf den Apache Logdateien. Dies ist der Grund, wieso Fail2Ban erst beim zweiten Request von einer IP Adresse aktiv werden kann. Um GeoIP2 in Fail2Ban zu aktivieren, muss ein entsprechender Filter gesetzt werden, was sich bei Servern mit hoher Nutzerlast schnell negativ auf die Performance auswirken kann. Daher ist es besser, die Requests zum Server zu monitoren und gezielte spezielle Länder bei vermuteten Angriffen direkt über den Request zu blockieren. Dazu muss allerdings GeoIP2 als Apache Modul installiert und konfiguriert sein.
Bevor wir allerdings loslegen können, müssen wir uns bei MaxMind einen kostenfreien Account zulegen und für unser Beispiel die kostenfreien GeoIP2 (Lite Version) Datenbanken herunterladen.

Nachdem die erste Hürde genommen ist, können wir auch gleich loslegen. Um GeoIP2 in PHP Anwendungen nutzen zu können, benötigt man eine entsprechende Bibliothek. Mit Composer als Abhängigkeitsmanagement lässt sich die Bibliothek geoip2/geoip2 in einer aktuellen Version einbinden.
Abonnement / Subscription
[English] This content is only available to subscribers.
[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.
Mit wenigen Zielen lässt sich nun GeoIP2 im Quelltext benutzen.
Abonnement / Subscription
[English] This content is only available to subscribers.
[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.
Wie man sieht, muss bei der Initialisierung auch das Verzeichnis zu MaxMind GeoLite Datenbank angegeben werden. Diese Variante eignet sich besonders für all diejenigen, die auf einem Managed Server oder Webspace unterwegs sind und keinen Einfluss auf die installierte Umgebung haben. Von der Nutzung von PECL (PHP Extension Community Library) sollte man wiederum Abstand nehmen, da diese als veraltet markiert wurde und künftig durch PIE (PHP Installer for Extensions) [4] ersetzt ist.
Um GeoIP2 global für alle PHP-Applikationen einzubinden, ist etwas mehr Aufwand notwendig. Hierzu haben wir als Grundvoraussetzung eine funktionierende Apache 2/ PHP-Installation auf einem Linux-Betriebssystem. Ist das gegeben, sind nur wenige Schritte durchzuführen:
- Installieren der maxminddb Bibliothek
- Herunterladen der PIE PHAR Bibliothek
- Für PIE maxminddb installieren & Extension in der php.ini aktivieren
- Die GeoLite Datenbanken auf dem Server bereitstellen
Bevor man aber diesem Weg folgt, sollte man sich überlegen, ob man nicht lieber gleich MaxMindDB als Apache Modul bereitstellt. Der gravierendste Vorteil dieser Variante ist die hohe Geschwindigkeit, die auch bei hoher Nutzerlast den Server nicht gleich in die Knie zwingt. Das Apache Modul stellt dafür Umgebungsvariablen bereit, die bereits in der Apache Konfiguration zur Filterung verwendet werden können. Die größte Herausforderung, welche es zu meistern gilt ist das Kompilieren des Apache 2 Moduls.
Abonnement / Subscription
[English] This content is only available to subscribers.
[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.
In Zeile 13 kopieren wir die zuvor von GitHub [5] heruntergeladene mod_maxminddb in der Version 1.3.0 in den Container, um diese im nachfolgenden Schritt zu kompilieren. Wichtig ist der Zusatz in Zeile 16, der die Fehlermeldung unterdrückt: dass automake in der Version 1.6 vorliegen muss. Anschließend kann das Modul aktiviert werden und die von MaxMind heruntergeladenen Datenbanken sind ebenfalls in den Docker Container zu kopieren. Zu guterletzt ist noch die Modulkonfiguration für den Apache in der Datei geoip.conf vorzunehmen und zu aktivieren. Der Inhalt der Konfigurationsdatei lautet wie folgt:
Abonnement / Subscription
[English] This content is only available to subscribers.
[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.
Nach einem Serverneustart sollten die Änderungen aktiv sein. Der Erfolg lässt sich mit einem kleinen PHP Script überprüfen.
<?php
$country = $_SERVER['MM_COUNTRY_CODE'] ?? null;
$city = $_SERVER['MM_CITY_NAME'] ?? null;
echo "GeoIP2 Values: " . $country . " - " . $city;Resourcen
Abonnement / Subscription
[English] This content is only available to subscribers.
[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.



Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.