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-Key: 2280532322

Url: https://administrator.de/contentid/2280532322

Printed on: April 26, 2024 at 10:04 o'clock

Member: NordicMike
Solution NordicMike Mar 25, 2022 at 12:20:05 (UTC)
Goto Top
Reverse Proxy ist doch schon das Stichwort, oder nicht?

Oder WAF (Web Application Firewall)

Dann nach "Rules" schauen.
Mitglied: 1915348599
Solution 1915348599 Mar 25, 2022 updated at 12:34:04 (UTC)
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 ...
Member: StefanKittel
StefanKittel Mar 25, 2022 at 12:58:07 (UTC)
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
Member: StefanKittel
StefanKittel Mar 25, 2022 at 12:59:52 (UTC)
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...
Mitglied: 137960
Solution 137960 Mar 25, 2022 at 13:19:46 (UTC)
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"...
Member: NordicMike
Solution NordicMike Mar 25, 2022 at 13:36:02 (UTC)
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.
Member: commodity
Solution commodity Mar 25, 2022 at 17:36:55 (UTC)
Goto Top
Hallo Stefan,
vielleicht geht es so?

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

Viele Grüße, commodity
Member: StefanKittel
StefanKittel Mar 25, 2022 at 21:47:40 (UTC)
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
Member: StefanKittel
StefanKittel Mar 25, 2022 at 21:49:37 (UTC)
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
Member: StefanKittel
StefanKittel Mar 25, 2022 at 21:50:46 (UTC)
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
Member: commodity
Solution commodity Mar 26, 2022 updated at 09:50:52 (UTC)
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
Member: commodity
Solution commodity Mar 30, 2022 at 18:01:38 (UTC)
Goto Top
Und? Kommt hier noch Feedback?

Viele Grüße, commodity
Mitglied: 2196421564
Solution 2196421564 Mar 30, 2022 at 20:17:41 (UTC)
Goto Top
N`abend zusammen,

Und? Kommt hier noch Feedback?
Attacke!

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

BlueKobold
Member: StefanKittel
StefanKittel Mar 30, 2022 at 20:24:49 (UTC)
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
Member: commodity
Solution commodity Mar 30, 2022 at 20:54:54 (UTC)
Goto Top
Danke Stefan,

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

Viele Grüße, commodity
Member: StefanKittel
StefanKittel Mar 30, 2022 at 21:29:00 (UTC)
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.
Member: commodity
Solution commodity Mar 31, 2022 at 06:32:36 (UTC)
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