Geo Blocking für Nginx Proxy Manager selber bauen


mgutt

Recommended Posts

Dem NPM fehlt bekanntlich die Geo Blocking Funktion. Diese soll ja irgendwann kommen, allerdings habe ich gerade was gefunden, womit man es eventuell auch schon vorher realisieren könnte.

 

Und zwar beinhaltet NPM das nginx Modul "http_auth_request_module". Mit dem kann man, bevor eine URL geladen wird, vorher eine andere URL laden, über die der Zugriff authentifiziert wird:

https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-subrequest-authentication/

 

Also sagen wir mal der Besucher hat die IP 12.34.56.78 und er lädt plex.example.com, dann lädt nginx erst mal ipcheck.example.com/12.34.56.78 und nur wenn die Antwort von da mit einem HTTP Status 2xx erfolgt, wird plex.example.com geladen.

 

Die Idee wäre nun, dass man ipcheck.example.com als Mini-Webiste mit einem sehr kleinen PHP Container umsetzt, der wiederum die folgende URL lädt:

http://ip-api.com/csv/12.34.56.78?fields=countryCode

 

Und nur wenn die Antwort darauf "DE" ist, dann antwortet diese Mini-Website mit HTTP 200. Natürlich speichert sie das Ergebnis dann zwischen, so dass wiederholte Anfragen nicht Richtung ip-api.com notwendig sind. Ich vermute mal das könnte man sogar mehrere Monate zwischenspeichern, da sich Länder von IP-Adressen denke ich mal nicht wirklich often ändern.

 

ip-api.com erlaubt bei privater Nutzung übrigens kostenlos 45 Anfragen pro Minute. Mit einem passenden Caching sollte das also locker ausreichen.

 

Spinnt man das weiter, könnte man auf dieser Mini-Website auch noch ein Passwortfeld anbieten, womit man sich freischaltet, wenn das Land gerade nicht passt (zB wenn man in Urlaub ist) oder man macht es grundsätzlich nur mit Passwort und beschränkt es auf die Art ausschließlich auf seinen eigenen Nutzerkreis (ist dann natürlich etwas unkomfortabel, weil bei jedem IP-Wechsel das Passwort eingegeben werden muss und Apps erst zugreifen können, wenn man vorher die URL zur Freischaltung aufruft).

 

Was haltet ihr von der Idee bzw habe ich evtl irgendwo einen Denkfehler?

 

 

 

  • Like 3
Link to comment

Klingt an sich tatsächlich sehr interessant als vorweg Filter für die eigenen öffentlichen Dienste, gerade wenn vollautomatisiert aus bestimmten Ländern ja öfters nach offenen Ports und dahinter liegenden angreifbaren Diensten gescannt wird, sowas lässt sich dann ja abfangen. Vorausgesetzt diese nutzen nicht einfach selber VPNs um genau solcher Filterung zu entkommen.
Die Geo Infos cachen ist definitiv sinnvoll, aber ob man mehrere Monate IPs speichern sollte weiß ich jetzt nicht, durchaus haben unsere ISPs hier ja ihre schon seit Jahrzehnten abgeklopften Ranges die sie weiterhin nutzen, man kein bei der RIPE leider nicht eben mal eben so auf die Schnelle einsehen, wann zuletzt deutsche Registrare was neues zugewiesen bekommen haben, aber ich würde mich nicht wundern, wenn unsere ISPs sich weiterhin um jede freie IPv4 aus dem RIPE Pool bemühen, für die sich anstellen dürfen, ungenutzte IPs können ja wieder zurückgegeben und daher neu vergeben werden. Aber wie die Wirklichkeit aussieht weiß ich nicht.

Außerdem kümmert sich die RIPE ja nicht um die Geo Informationen, so wie ich das verstehe, können die Registrare selbst freiwillig diese Info angeben und diese ganzen Geo Dienste verarbeiten das weiter bzw. laufen Neuregistrationen selbst hinterher um zu gucken wer das ist und woher die kommen. https://www.ripe.net/manage-ips-and-asns/db/tools/geolocation-in-the-ripe-database
IP2Location z.B. updated ihre Datenbanken jeweils monatlich. https://www.ip2location.com/faqshttps://www.ip2location.com/faqs

 

Ist ansonsten aber ein interessantes Projekt.

45 Anfragen pro Minute in deinem Beispiel klingen an sich ganz fair, sehr interessant wäre es jetzt wenn man jetzt noch im Reverse Proxy log nachguckt, wie häufig in der Minute bei ihm angeklopft wird. :)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.