Apache2 Ubuntu 20.04 GeoIP Blocking einrichten
Aus znilwiki
Changelog: 2021-01-30 erste Version
Vorwort
Ich setze für diverse Dienste/Programme/Zugriffe immer jeweils eine Subdomain ein.
Am Standort wo auch diese Webseite gehostet wird habe ich mehrere öffentliche IP-Adressen hinter einer pfSense Firewall.
Auf diese nutze ich schon seit Jahren ein GeoIP-Blocking und erlaube den Zugriff auf bestimmte Dienste z.B. nur aus Deutschland.
Zu Hause habe ich inzwischen auch eine feste IP-Adresse und auch dort einiges laufen was über diverse Subdomänen erreichbar ist.
Nur habe ich dort "nur" eine FritzBox dazwischen welche per NAT die Ports 80 und 443 auf einen internen Server mit einem Apache2 weiterleitet.
Dieser hostet einiges selbst bzw. dient als Reverse Proxy zu diversen anderen Diensten/Geräten.
Jeder dieser Subdomänen läuft zwar unter einem eigenen, eingeschränktem Benutzer - aber da geht noch mehr!
Um auch den Zugriff aus dem Ausland einzuschränken brauchte ich also eine Lösung die auf dem Ubuntu-Server ansetzt statt auf dem Router/Firewall.
Ich arbeite hier immer als root, alle Befehle sind deshalb immer ohne sudo
davor, mit
sudo -i
könnt auch Ihr dauerhaft (für die Sitzung) zum root wechseln.
Zugriff auf MaxMind GeoIP Datenbank geolite2 erhalten
Zunächst brauchen wir eine Liste / Datenbank mit allen IP-Adressen und deren Zugehörigkeit zu den verschiedenen Ländern.
Ich setze hier die kostenlose Datenbank geolite2 von MaxMind ein, die wird etwa einmal in der Woche aktualisiert und dröselt die Adressen bis auf Länder- und Städteebene auf - was für unsere Zwecke völlig ausreicht.
Zunächst müsst Ihr euch registrieren:
https://www.maxmind.com/en/geolite2/signup
Wenn Ihr euch danach erfolgreich angemeldet habt könnten Ihr in den Account-Einstellungen unter My License Key einen neuen Zugriffsschlüssel erstellen:
Vergebt einen passenden Namen (z.B. des Servers auf welchem Ihr das einsetzen wollt) und setzt die Einstellungen wie folgt:
Dann seht Ihr eine Seite wo euch der Key angezeigt wird - notiert auch die Daten, es gibt keine Möglichkeit sich das noch einmal anzeigen zu lassen !!!!!
Die Datei GeoIP.conf
könnt auch gleich herunterladen und speichern.
GeoIP Update installieren und einrichten
MaxMind bietet ein Tool an welches automatisch die Datenbank herunterladen und aktualisieren kann - geoipupdate
.
Und für Ubuntu sogar als Repository so das man sich um Updates auch nicht extra manuell bemühen muss.
Wir fügen das Repository hinzu:
add-apt-repository ppa:maxmind/ppa
danach ein
apt update apt upgrade -y apt install geoipupdate
Das Programm erwartet eine Konfigurationsdatei mit den Zugangsdaten die wir im ersten Schritt erzeugt haben.
Das ist die Datei die wir zuvor heruntergeladen habt. Kopiert diese an den nachstehenden Pfad oder bearbeitet die bereits vorhandene:
nano /etc/GeoIP.conf
Inhalt:
# Please see https://dev.maxmind.com/geoip/geoipupdate/ for instructions
# on setting up geoipupdate, including information on how to download a
# pre-filled GeoIP.conf file.
# Replace YOUR_ACCOUNT_ID_HERE and YOUR_LICENSE_KEY_HERE with an active account
# ID and license key combination associated with your MaxMind account. These
# are available from https://www.maxmind.com/en/my_license_key.
AccountID YOUR_ACCOUNT_ID_HERE
LicenseKey YOUR_LICENSE_KEY_HERE
# Enter the edition IDs of the databases you would like to update.
# Multiple edition IDs are separated by spaces.
EditionIDs GeoLite2-Country GeoLite2-City
Ihr ersetzt YOUR_ACCOUNT_ID_HERE
und YOUR_LICENSE_KEY_HERE
mit den Daten die Ihr euch zuvor notiert habt,
das ganze könnt Ihr auch in der heruntergeladenen GeoIP.conf
ersehen.
Nach dem Speichern können wir die Datenbanken herunterladen:
geoipupdate -v
durch das -v
zeigt er euch die einzelnen Schritte an, ansonsten würde er das ohne Rückmeldungen machen.
Damit er die Datenbanken in Zukunft regelmäßig automatisch aktualisieret setzen wir einen entsprechenden CronJob:
crontab -e
und folgende Zeile hinzufügen und anpassen:
15 5 * * 0 /usr/bin/geoipupdate
führt das jeden Sonntag (0, 1 ist Montag usw) um 05:15 Uhr aus
Apache Erweiterungen herunterladen und installieren
Zuerst die Apache2 und MaxMind Entwicklertools:
apt install apache2-dev libmaxminddb-dev -y
Nun die von MaxMind bereitgestellte Apache-Erweiterung:
cd /usr/src wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz tar xvzf mod_maxminddb-1.2.0.tar.gz cd mod_maxminddb-1.2.0 ./configure make install
und danach den Apache2 neu starten:
systemctl restart apache2
Nun ist die Erweiterung innerhalb von Apache verfügbar (wird aber noch nicht genutzt)
Zugriff auf Webseite beschränken
Quellen
- https://dev.maxmind.com/geoip/geoipupdate/
- https://github.com/maxmind/geoipupdate
- https://github.com/maxmind/mod_maxminddb