„Quell-IP“ aus einer weitergeleiteten Verbindung lesen

„Quell-IP“ aus einer weitergeleiteten Verbindung lesen

Meine Firewall funktioniert einwandfrei: Die Verbindung vom Internet wird an einen NGINX-Server weitergeleitet, der sie dann entsprechend verteilt, und der Anwendungsserver funktioniert mit Ausnahme der internen LOGs ordnungsgemäß.

Mein Problem betrifft die von unserem Anwendungsserver empfangene IP: Es handelt sich nicht um die „Client-IP“, sondern derzeit um die NGINX-IP.

Betrachten Sie dieses Netzwerk: Client-IP 1, Firewall-IP 2, NGINX-IP 3, Webserver-IP 4.

An der Firewall sehen wir, dass die Pakete an NGINX weitergeleitet werden, bei NGINX tcpdumpsehen wir jedoch eingehende Verbindungen von der eigenen NGINX-IP 3 statt der ursprünglichen Quell-IP 1.

Der Punkt ist, dass wir bei Webserver-LOGS unsere Eingangsverbindungen als IP 3 sehen, erwartet wird jedoch IP 1.

Handelt es sich um eine Fehlkonfiguration der Firewall oder von NGINX? Irgendwelche Ideen, wie man das Problem lösen kann?

Aktuelle Konfiguration ( /etc/nginx/sites-enabled/app.domain.com):

...
location ^~ / {
proxy_pass      http://10.0.0.11;
proxy_set_header        Host                    $host;
proxy_set_header        X-Real-IP               $remote_addr;
proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto       $scheme;
}
...

Antwort1

Dies ist der normale Vorgang. Wenn nginx ein Reverse-Proxy ist, öffnet es eine Verbindung zum endgültigen Ziel und leitet den Proxy vom Client zum Anwendungsserver weiter. Die Quell-IP kann nichts anderes als die IP-Adresse von nginx sein, sonst würde die TCP-Verbindung nicht funktionieren.

Sie müssen den Anwendungsserver so einrichten, dass er die im X-Real-IPHeader angegebene IP-Adresse anstelle der IP-Adresse der TCP-Verbindung verwendet.

Antwort2

Die Lösung für diesen Fall bestand darin, den C#-Code wie unten beschrieben zu ändern. Es wurden keine Änderungen an der Firewall oder Nginx vorgenommen.

var userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

Bisherige erfolglose Versuche:

var userIP = Request.ServerVariables["X_FORWARDED_FOR"];
var userIP = Request.ServerVariables["X-REAL-IP"];
var userIP = Request.ServerVariables["REMOTE_ADDR"];
var userIP = Request.UserHostAddress;

Vielen Dank an alle Mitwirkenden, die zur Klärung beigetragen haben, dass das Problem weder an der Firewall noch an der Nginx-Konfiguration lag.

verwandte Informationen