Aktionen

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:

ClipCapIt-210130-124342.PNG

Vergebt einen passenden Namen (z.B. des Servers auf welchem Ihr das einsetzen wollt) und setzt die Einstellungen wie folgt:

ClipCapIt-210130-124623.PNG


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 !!!!!

ClipCapIt-210130-124804.PNG

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:

Important.png
Hinweis:Hier wird auf die Version 1.2.0 verwiesen. Prüft bitte vorher unter https://github.com/maxmind/mod_maxminddb/releases/ ob es eventuell eine neuere Version gibt


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

Wir bearbeiten die Konfigurationsdatei einer Webseite, diese liegen im Normalfall unter

/etc/apache2/sites-available

und fügen folgende Zeilen hinzu:

# GeoIp Blocking
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
<Location />
        # Alles verbieten außer Deutschland
        SetEnvIf MM_COUNTRY_CODE DE AllowCountry
        Deny from all
        Allow from env=AllowCountry
</Location>

Danach den Apache die Konfiguration neu laden lassen:

systemctl reload apache2.service

und schon ist das ganze aktiv!

Zum testen könnt Ihr statt dem DE ein CN für China eintragen - beim Aufruf der Seite von extern kommt dann ein:

ClipCapIt-210130-142119.PNG


Für jedes weitere Land welches Ihr erlauben wollt fügt einfach eine entsprechende Zeile mit SetEnvIf hinzu.


Quellen


Kommentare

Loading comments...