Einstellungen für die Zustimmung anpassen


Wir verwenden Cookies, um Ihnen eine effiziente Navigation zu ermöglichen und bestimmte Funktionen auszuführen. Detaillierte Informationen zu allen Cookies finden Sie unter jeder Zustimmungskategorie unten.

Die als 'Notwendig' kategorisierten Cookies werden auf Ihrem Browser gespeichert, da sie für die grundlegenden Funktionen der Website unerlässlich sind.... 

Immer aktiv

Notwendige Cookies sind für die Grundfunktionen der Website von entscheidender Bedeutung. Ohne sie kann die Website nicht in der vorgesehenen Weise funktionieren. Diese Cookies speichern keine personenbezogenen Daten.

Funktionale Cookies unterstützen bei der Ausführung bestimmter Funktionen, z. B. beim Teilen des Inhalts der Website auf Social Media-Plattformen, beim Sammeln von Feedbacks und anderen Funktionen von Drittanbietern.

Analyse-Cookies werden verwendet um zu verstehen, wie Besucher mit der Website interagieren. Diese Cookies dienen zu Aussagen über die Anzahl der Besucher, Absprungrate, Herkunft der Besucher usw.

Keine Cookies zum Anzeigen.

Leistungs-Cookies werden verwendet, um die wichtigsten Leistungsindizes der Website zu verstehen und zu analysieren. Dies trägt dazu bei, den Besuchern ein besseres Nutzererlebnis zu bieten.

Keine Cookies zum Anzeigen.

Werbe-Cookies werden verwendet, um Besuchern auf der Grundlage der von ihnen zuvor besuchten Seiten maßgeschneiderte Werbung zu liefern und die Wirksamkeit von Werbekampagne nzu analysieren.

Keine Cookies zum Anzeigen.

Skip to content

GeoIP2 Modul zu Nginx-Proxy-Manager hinzufügen

NGINX-Proxy-Manager wird immer populärer, auch die Funktionen erweitern sich stetig.

Die Software ermöglicht die komplexe Software nginx super einfach per Webinterface zu konfigurieren.

Doch leider fehlt dort das ein oder andere Modul, welches auch ich gerne nutze. Heute soll es um geoip2 gehen.

Das Modul kann genutzt werden, um Länder rückwärts zu IP-Adressen zu ermitteln oder bestimmte Regionen IP-Basiert einzuschränken. Gerade im Bereich Cybersicherheit ist das eine gute Möglichkeit um zumindest mal eine weitere Hürde zu setzen. (Von VPNs mal abgesehen).

Da sich NPM (Nginx-Proxy-Manager) nach Standard-Installation in Docker-Compose befindet, wird dieses Tutorial auch darauf aufbauen.

 

Vorbereitung

Um die Datenbank für die Rückwärtssuche herunterzuladen und sogar automatisch zu aktualisieren, muss zunächst ein Geoip-Dienst her. Ein gutes Beispiel hierfür ist maxmind.

Dort kann kostenfrei ein Account beantragt werden, und im Anschluss eine Lizenz für die GeoIP-Lite Datenbank generiert werden. Diese brauchen wir im Anschluss. Zu Maxmind geht es hier.

 

Docker-Compose Anpassungen

Um die Datenbank nun in unser Projekt zu integrieren, müssen wir die docker-compose.yml etwas anpassen.

Wie man sieht, wurde ein neuer Service in dem compose-file hinzugefügt. Außerdem wurde ein anderer Entrypoint für den npm eingestellt.

Die Environment Variablen müssen wir nun nur noch mit den richtigen Werten anpassen. Danach sollte die Datei immer aktuell gehalten werden.

Nun haben wir die Datei, aber es fehlt noch das Modul in Nginx sowie die Nginx Einstellungen.

 

GeoIP Compiler Skript

Um nun das Modul zu kompilieren, gibt es zwei Möglichkeiten. Entweder ein eigenes Image nutzen, oder das Image beim Start selbst anpassen.

Dieses Tutorial behandelt das Anpassen des Images vor Start mit manipulation des entrypoints.

Um nun also das Image zu kompilieren muss eine neue Datei z.B. namens „geoip2-compile.sh“ im ./data Verzeichnis angelegt werden. Der ./data Ordner sollte korrekt eingehangen sein, wie oben aus der Compose Datei zu entnehmen ist.

In die Datei kommt folgendes:

In dem Skript wird zunächst die Nginx-Version ermittelt sowie einige Pakete zum kompilieren geladen.

Danach wird openrestry sowie das GeoIp2 Modul heruntergeladen und kompiliert.

Danach muss lediglich die Datei ausführbar gemacht werden, mittels

chmod +x ./data/geoip2-compile.sh

Manipulation des Entry-Points

Wir erstellen nun den Entrypoint den wir vorher in dem docker-compose File festgelegt haben.

Also wird die Datei „entrypoint.sh“ unter /data erstellt.

Das Skript installiert zunächst die benötigten Bibliotheken für die Prüfung und Installation des Moduls.

Danach wird geprüft ob die Versionen für das Geoip2 Modul und Nginx voneinander abweichen, oder ob Geoip2 sogar nie installiert war.

Falls eines der beiden Fehlschlägt, wird das Modul über die eben erstellte Datei heruntergeladen und nginx damit kompiliert.

Zum Schluss wird der normale init-Prozess von NPM fortgesetzt.

Natürlich machen wir die Datei mittels

chmod +x ./data/entrypoint.sh

wieder ausführbar.

 

NGINX Konfiguration

Für Nginx erstellen wir unter ./modules ein neues Modul. Sollte der Ordner noch nicht vorhanden sein, kann er ohne Gefahr angelegt werden. Dazu mkdir ./modules ausführen.

Für das Modul legen wir die Datei ‚geoip2.conf‘ an und fügen folgendes an:

Hier werden die geoip2 Module für Streams und HTTP Kontexte geladen.

Für die Serverkonfiguration muss noch eine Direktive abgelegt werden, damit die jeweiligen Länder blockiert werden. Dieser Schritt ist teils optional, sofern man geoip2 anders nutzen möchte.

Unter ./data/nginx/custom legen wir eine neue datei http_top.conf an.

Natürlich kann die Konfiguration beliebig angepasst werden. Im Normalfall ist auch nicht nur deutschland erlaubt, sondern eher nur einige Länder blockiert.

Das lässt sich ändern indem man unter $allowed_ip default auf yes ändert und DE yes in der uunteren Direktive entfernt. Zum blockieren kann dann der Ländercode + no genutzt werden. Beispiel an Indien IN no;

Zu guter letzt muss noch das Standardverhalten für den Filter definiert werden. Das kann auch ausgelassen werden und für jeden Proxy Host im Webinterface unter „Custom“ eingefügt werden. Ich zeige es aber mal global.

Dazu wird eine neue Datei „server_proxy.conf“ in ./data/custom/ angelegt.

Hier definieren wir nun noch die Regel, auf die Anfrage mit einer entsprechenden Antwort zu reagieren.

Natürlich kann hier das Verhalten auch auf eine HTML Datei verweisen. Das geht beispielsweise mit

Dazu natürlich noch die Datei geoblock.html unter /data anlegen.

 

Up & Go!

Nun ist alles eingerichtet. Also docker-compose up -d eingeben und logs prüfen ob alles startet. Die Anleitung gilt für die aktuelle Version von npm, nicht für ältere.

 

Vielen Dank für’s Lesen!

Quellen

Avatar

Hey! - Ich bin Tobias Hopp, 22 Jahre alt und entwickele in meiner Freizeit gerne das ein oder andere Projekt.
Git: https://git.dateien.org/TobiasH

Sidebar