stefankittel
Goto Top

NGINX oder Apache2 Reverse Proxy mit Spezial-Regeln?

Hallo,

vieleicht hat ja Jemand ein Stichwort für mich.

Ich habe hier eine alte Web-Anwendung die hinter einem NGINX Reverse Proxy läuft.

Nun sollen die Zugriffe darauf weiter eingeschränkt werden.
Bestimmte IPs dürfen nur bestimmte URLs aufrufen.

Da die Liste recht lang ist und noch ein paar Spezialfälle enthält, suche ich eine Möglichkeit mit einem eigenem Code die Anfragen vor dem RP zu prüfen.
Code kann alles mögliche sein. Sei es Python oder ein NGINX-Modul.

Kennt Jemand eine Option oder Stichwort dafür?

Das ganze kann auch mit einem Apache2 realisiert werden.

Stefan

Content-ID: 2280532322

Url: https://administrator.de/forum/nginx-oder-apache2-reverse-proxy-mit-spezial-regeln-2280532322.html

Ausgedruckt am: 13.03.2025 um 16:03 Uhr

NordicMike
Lösung NordicMike 25.03.2022 um 13:20:05 Uhr
Goto Top
Reverse Proxy ist doch schon das Stichwort, oder nicht?

Oder WAF (Web Application Firewall)

Dann nach "Rules" schauen.
1915348599
Lösung 1915348599 25.03.2022 aktualisiert um 13:34:04 Uhr
Goto Top
Kannst dir ja einfach die Blöcke per Code zu einer Config zusammenstellen und nginx danach reloaden
location /path {
        proxy_pass http://upstream;
        allow 1.2.3.4;
        allow 5.6.7.8;        
        deny all;
}
Die liste der IPs kannnst du ja auch in Config-Variablen schreiben und in den Blöcken verwenden.

Hier gibt's noch ne Methode
https://docs.nginx.com/nginx/admin-guide/security-controls/denylisting-i ...
StefanKittel
StefanKittel 25.03.2022 um 13:58:07 Uhr
Goto Top
Zitat von @NordicMike:
Reverse Proxy ist doch schon das Stichwort, oder nicht?
Hab ich ja schon

Oder WAF (Web Application Firewall)
Zu viel Kanone auf zu wenig Spatzen..

Dann nach "Rules" schauen.
Scheint es für Apache2 und NGINX nicht zu geben
StefanKittel
StefanKittel 25.03.2022 um 13:59:52 Uhr
Goto Top
Zitat von @1915348599:
Kannst dir ja einfach die Blöcke per Code zu einer Config zusammenstellen und nginx danach reloaden
location /path {
        proxy_pass http://upstream;
        allow 1.2.3.4;
        allow 5.6.7.8;        
        deny all;
}
Die liste der IPs kannnst du ja auch in Config-Variablen schreiben und in den Blöcken verwenden.

Hier gibt's noch ne Methode
https://docs.nginx.com/nginx/admin-guide/security-controls/denylisting-i ...

Das wird zu fummelig und unübersichtlich.
Es ist eine GEO-IP-DB in MySQL, eine Liste von URLs die von sonstwoherkommen und noch eine Handvoll ausnahmen basierend aus einem Cookie...

Ein Exec wäre optimal.
ModSecurity kann ein Exec, aber nur lua...
137960
Lösung 137960 25.03.2022 um 14:19:46 Uhr
Goto Top
Wenn Du statt Apache HAproxy nimmst, dann könnte Dir die "Runtime API" von HAproxy weiterhelfen.

Eine Grundkonfiguration von HAproxy als Reverse Proxy ist nicht so schwer, es dürfte genügend Beispiel im Netz geben.

Für Zugriffe sind ACL (access control lists) zuständig. Da kann man sowas bauen wie "IP 1.2.3.4 darf ZIEL-URL" aufrufen.

Eventuell reicht auch die Übergabe einer Liste. Es gibt eine Konfigurationsoption die so ähnlich anwendbar ist wie das hier:

http-request allow if { src -f erlaubt.txt }


Die Textdatei würde dann IP-Adresse beinahlten. Die kann man dann weiter verarbeiten bzw. in andere ACLs füttern.

HAproxy selbst hat keine großen System- und Softwareanforderungen. Es gibt es sogar als Docker-Image.

Google einfach mal nach "haproxy", "acl", "dynamic"...
NordicMike
Lösung NordicMike 25.03.2022 um 14:36:02 Uhr
Goto Top
Geo-IP Filter kannst du auch als Einzeiler in die index.php einbauen, dann blockiert nicht die Firewall, sondern das PHP Script selbst beendet sich, wenn es den Quell-IP ausgelesen hat.
commodity
Lösung commodity 25.03.2022 um 18:36:55 Uhr
Goto Top
Hallo Stefan,
vielleicht geht es so?

https://www.lukasthiel.de/wiki/Blacklist_mit_Fail2Ban

Viele Grüße, commodity
StefanKittel
StefanKittel 25.03.2022 um 22:47:40 Uhr
Goto Top
Zitat von @NordicMike:
Geo-IP Filter kannst du auch als Einzeiler in die index.php einbauen, dann blockiert nicht die Firewall, sondern das PHP Script selbst beendet sich, wenn es den Quell-IP ausgelesen hat.

Die Software läuft unter PHP 5.2 auf einem Uralt-System.
Da fasse ich gar nix an face-smile

Oder meinst Du eine PHP-Datei im Reverse-Proxy?
Aber es geht ja nur Proxy oder PHP oder nicht?

Stefan
StefanKittel
StefanKittel 25.03.2022 um 22:49:37 Uhr
Goto Top
Zitat von @commodity:
Hallo Stefan,
vielleicht geht es so?
https://www.lukasthiel.de/wiki/Blacklist_mit_Fail2Ban
Hallo,
hmm...
Aber F2B liest doch Log-Dateien aus oder nicht?
Man könnte ggf. mit einem Skript die Access-Log auslesen und daraus eine Log-Datei für F2B machen.
Aber dabei hat man eine Verzögerung zwischen 1 und 60 Sekunden bei Nutzung mit Cron.
Nicht optimal.
Stefan
StefanKittel
StefanKittel 25.03.2022 um 22:50:46 Uhr
Goto Top
Btw...
Wenn nicht, dann nicht.

Ich würde mich nur ärgern wenn ich in 2-3 Jahren (wenn es nicht mehr benötigt wird) über die Lösung stolpere und es total easy wäre face-smile
commodity
Lösung commodity 26.03.2022 aktualisiert um 10:50:52 Uhr
Goto Top
Zitat von @StefanKittel:
Aber F2B liest doch Log-Dateien aus oder nicht?

Fail2Ban liest zwar Logs aus, aber nur für die Ban-Entscheidung . Gebannte IPs werden direkt und in Echtzeit durch iptables geblockt (oder per Routing). https://wiki.ubuntuusers.de/fail2ban/
Man könnte ggf. mit einem Skript die Access-Log auslesen und daraus eine Log-Datei für F2B machen.
Aber dabei hat man eine Verzögerung zwischen 1 und 60 Sekunden bei Nutzung mit Cron.

Bei Bedarf (hier m.E. nicht gegeben) kannst Du die Access-Logs auch direkt durch Fail2Ban auslesen lassen. Cron o.ä. wird da nicht gebraucht, jedenfalls, wenn das Format passt.

Nicht optimal.
Denke doch face-wink - und es sieht ziemlich easy aus face-smile

Viele Grüße, commodity
commodity
Lösung commodity 30.03.2022 um 20:01:38 Uhr
Goto Top
Und? Kommt hier noch Feedback?

Viele Grüße, commodity
2196421564
Lösung 2196421564 30.03.2022 um 22:17:41 Uhr
Goto Top
N`abend zusammen,

Und? Kommt hier noch Feedback?
Attacke!

Bestimmte IPs dürfen nur bestimmte URLs aufrufen.
Eventuell eine "Whitelist"?

BlueKobold
StefanKittel
StefanKittel 30.03.2022 um 22:24:49 Uhr
Goto Top
Zitat von @commodity:
Und? Kommt hier noch Feedback?
Nbur zäh...

Eine Lösung wäre ein Apache/NGinx Modul.
Das ist aber zu aufwendig.

Alternativ 1 eine WAF mit Regelwerk.
Das ist dem Kunden immer noch zu aufwendig.

Alternativ 2 eine PHP Funktion die mit php_prepend vor allen anderen Aufrufen läuft.
Ich mache das nicht an der uralten Software. Vermutlich Jemand beim Kunden direkt.

Stefan
commodity
Lösung commodity 30.03.2022 um 22:54:54 Uhr
Goto Top
Danke Stefan,

Was konkret sprach jetzt gegen die Lösung mit Fail2ban?

Viele Grüße, commodity
StefanKittel
StefanKittel 30.03.2022 um 23:29:00 Uhr
Goto Top
Zitat von @commodity:
Was konkret sprach jetzt gegen die Lösung mit Fail2ban?
Fail2Ban kennt halt nur IP-Adressen.
Ich will aber IP-Adressen in Kombination der URL und einem Cookie filtern.
Auch muss es schon beim 1. Zugriff funktionieren.
commodity
Lösung commodity 31.03.2022 um 08:32:36 Uhr
Goto Top
Auch muss es schon beim 1. Zugriff funktionieren.
Das tut es (s.o.)
Fail2Ban kennt halt nur IP-Adressen.
Das stimmt. Da wäre nachfolgende Verarbeitung nötig. Dann kannst Du das gleich auf Webserver-Ebene machen.

ok. Fehlschuss face-wink

Viele Grüße, commodity