Intro
Wenn man seine selbst gehosteten Dienste über das Internet verfügbar macht, möchte man oft den Zugriff geografisch einschränken — z. B. nur aus dem eigenen Land zulassen.
Das GeoBlock Plugin von Pascal Minder ermöglicht genau das. Es handelt sich um eine Traefik Middleware, die den Zugriff auf bestimmte Routen oder Dienste auf Basis von IP-Geolokalisierung erlauben oder verweigern kann.
Das Plugin ist einfach zu konfigurieren, performant und unterstützt sowohl Whitelist- als auch Blacklist-Modi.
Versionierung
Datum | Änderung |
---|---|
01-06-2025 | Erste Version mit Traefik 3.0 getestet |
2. Voraussetzungen
Stellt vor der Integration sicher, dass folgende Dinge vorhanden sind:
3. Plugin aktivieren
In der statischen Traefik-Konfiguration (traefik/config/traefik.yaml
) muss das Plugin aktiviert werden.
nano /opt/containers/traefik/config/traefik.yaml
experimental:
localPlugins:
geoblock:
moduleName: github.com/PascalMinder/geoblock
4. Middleware definieren
Die eigentliche Konfiguration erfolgt in der dynamic_conf.yml
Beispiel mit einer Whitelist für DE:
nano /opt/containers/traefik/config/conf.d/dynamic_conf.yml
[...]
http:
middlewares:
geoblock-de:
plugin:
geoblock:
silentStartUp: false
allowLocalRequests: true
logLocalRequests: false
logAllowedRequests: true
logApiRequests: true
api: "https://get.geojs.io/v1/ip/country/{ip}"
apiTimeoutMs: 750
cacheSize: 50
forceMonthlyUpdate: true
allowUnknownCountries: false
unknownCountryApiResponse: "nil"
countries:
- DE
[...]
5. Mountpoints setzen
Wir müssen nun noch das Plugin Repro in traefik rein mounten. Dafür erstellen wir einen neuen Ordner und switchen direkt in den neu erstellten ordner
mkdir -p /opt/containers/traefik/plugin/geoblock && cd /opt/containers/traefik/plugin/geoblock
Hier clonen wir einmal das Repro rein
git clone https://github.com/PascalMinder/geoblock.git
Und nun setzen wir noch das Mount Volume in traefik richtig
nano /opt/containers/traefik/docker-compose.yaml
[...]
volumes:
- /run/docker.sock:/run/docker.sock:ro
- ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro
- ./data/certs/:/var/traefik/certs/:rw
- ./config/conf.d/:/etc/traefik/conf.d/:ro
- ./plugin/geoblock:/plugins-local/src/github.com/PascalMinder/geoblock/ # <-- Das muss hinzugefügt werden
- ./logs/:/var/log/traefik
[...]
6. Middleware zuweisen
Nun kann die Middleware bei beliebigen Routern hinzugefügt werden. Beispiel:
labels:
[...]
- traefik.http.routers.dein-service.middlewares=geoblock-de@file
[...]
7. Verhalten bei Blockierung
Wird eine Anfrage aus einem nicht erlaubten Land gestellt, gibt Traefik standardmäßig den HTTP-Status 403 Forbidden zurück.
7. Erweiterte Optionen
GeoBlock bietet auch:
blacklist
: Anstelle einer Whitelist können gezielt Länder gesperrt werden.customResponseBody
: Definiere eine eigene Fehlermeldung.
Eine vollständige Liste aller Optionen findet sich in der offiziellen Doku.
8. Fazit
Das GeoBlock-Plugin ist ein leichtgewichtiges Sicherheitsfeature, das sich hervorragend in bestehende Traefik-Setups integrieren lässt. Ich nutze das GeoBlock-Plugin bei einer Vielzahl von Diensten, die öffentlich im Netz stehen – bei denen aber klar ist, dass der Zugriff ausschließlich durch mich oder durch Freunde und Familie aus Deutschland erfolgt. Und wenn doch mal jemand im Urlaub ist, aktiviert man einfach den VPN mit deutscher IP, und der Zugriff funktioniert weiterhin wie gewohnt.
Aus sicherheitstechnischer Sicht schließt man so eine große Menge an Bots und potenziellen Angreifern von vornherein aus – was definitiv ein zusätzliches Maß an Sicherheit bringt.
Quellen:
[ˌtuːˌtæpˈtoːbi]