
Ich habe Serverfault durchsucht, konnte aber keine Antwort darauf finden. Vielleicht kenne ich einfach nicht das richtige Schlüsselwort oder es handelt sich um ein konzeptionelles Missverständnis. Für jede Hilfe wäre ich dankbar!
Die Situation:
- Meine lokalen Dienste laufen hinter einem NGINX Reverse Proxy
- Ich benutze einLAN-DNS auf dem Router (Draytek)um lokale Anfragen an *.example.com direkt an meinen lokalen Server (192.168.1.2) aufzulösen.
Auch wenn keine Internetverbindung besteht, werden die Domains auf den lokalen Server aufgelöst und alle Dienste sind erreichbar. Deshalb nutze ich den LAN DNS. Soweit, so gut.
Nun möchte ich lokalen Clients nur den Zugriff auf bestimmte Dienste erlauben, indem ichNGINX-Zugriffsmodulmit:
allow 192.168.1.0/24;
deny all;
NGINX sieht jedoch nur die öffentliche IP des Routers und nicht die IP des Clients (192.168.1.100) und daher wird jede Anfrage abgelehnt:
[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"
Meine Frage ist:
Wie kann ich in diesem Szenario zwischen lokalen und Remote-Clients auf NGINX unterscheiden?
Antwort1
Zunächst eine Annahme/Bedingung, nämlich zu prüfen, ob Ihr Router dieX-Weitergeleitet-FürHeader oder etwas Ähnliches (behält die Spur der tatsächlichen Client-IP bei)
Sie sollten zuerst die Client-IP auflösen, durchngx_http_realip_module
Die dort bereitgestellte Beispielkonfiguration:
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
set_real_ip_from 2001:0db8::/32;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
Damit sollte die für die Zugriffsprüfung verwendete IP die richtige (des tatsächlichen Clients) sein.
Eine Einschränkung besteht darin, dass mit einer solchen Konfiguration Versuche, den Router zum X-Forwarded-For-Header hinzuzufügen, nicht durchgeführt werden könnenautomatischmit proxy_add_x_forwarded_for, da die hinzugefügte IP durch die vorherige Anweisung geändert wurde. Dieser spezielle Fall wurde besprochenbei Stapelüberlauf