REMOTE_ADDR auf X-Forwarded-For in Apache setzen

8

In einer Situation, in der Apache hinter einem Reverse-Proxy (wie Squid) sitzt, erhält die CGI-Umgebungsvariable REMOTE_ADDR die Adresse des Proxy und nicht den Client.

Der Proxy setzt jedoch eine Kopfzeile namens X-Forwarded-For , die die ursprüngliche IP-Adresse des Clients enthält, damit Apache sie sehen kann.

Die Frage ist, wie wir Apache dazu bringen, REMOTE_ADDR durch den Wert in der Kopfzeile X-Forwarded-For zu ersetzen, damit alle Webanwendungen die korrekte Adresse transparent sehen können?

    
tylerl 11.02.2010, 20:05
quelle

7 Antworten

11

Sie können mod_rpaf dafür verwenden. Ссылка

    
maciekb 06.08.2010, 17:22
quelle
6

Beachten Sie, dass der Header X-Forwarded-For möglicherweise eine Liste von IP-Adressen enthält, wenn die Anforderung mehr als einen Proxy durchlaufen hat. In diesem Fall möchten Sie normalerweise die IP ganz links. Sie können dies mit einem SetEnvIf:

extrahieren %Vor%

Beachten Sie die Verwendung von $ 1 , um die XFFCLIENTIP-Umgebungsvariable so festzulegen, dass sie den Inhalt der ersten Gruppe in der Regex (in den Klammern) enthält.

Dann können Sie den Wert der Umgebungsvariablen verwenden, um Header festzulegen (oder sie in Apache-Protokollformaten zu verwenden, damit die Protokolle die tatsächliche Client-IP enthalten).

    
Ben Last 27.04.2012 06:53
quelle
3

Zusätzlich zu mod_rpaf , wie bereits erwähnt, scheint mod_extract_forwarded führt diese Funktion ebenfalls aus.

Ein Vorteil von mod_extract_forwarded ist, dass es von EPEL für RHEL / CentOS-Server verfügbar ist, während mod_rpaf nicht verfügbar ist.

Es scheint, dass keines dieser beiden Module Ihnen erlaubt, ein ganzes Subnetz von Proxy-Servern auf die weiße Liste zu setzen. Deshalb haben die CloudFlare-Leute ihr eigenes Plugin erstellt: mod_cloudflare , das, wie zu bemerken ist, nicht ein Universalwerkzeug wie die anderen beiden ist; Es enthält eine fest codierte Liste von CloudFlare-Subnetzen.

    
tylerl 27.04.2012 08:51
quelle
2

Leider

Zum Zeitpunkt der Erstellung dieses Artikels funktionierte keiner der Backports und Forks auf freshports.org, people.apache.org oder gist.github.com. Sie basierten alle auf einer frühen Alpha-Version von Apache httpd 2.3, die weder mit den aktuellen Versionen 2.2 noch 2.4 kompatibel war.

Nach stundenlanger Zeitverschwendung beim Versuch, die Backports anzupassen, um eine wirklich funktionierende für httpd 2.2 zu erstellen, entschied ich mich, zu httpd 2.4 zu wechseln. Innerhalb von httpd 2.4 funktioniert mod_remoteip problemlos, selbst wenn ein Load Balancer permanente Keepalive-Verbindungen hat, die er verwendet, um Anfragen von verschiedenen tatsächlichen Client-IP-Adressen an das Backend zu übertragen. Ich bin nicht sicher, ob die anderen Module diese Situation behandeln können (Ändern der Client-IP-Adressen bei jeder Anfrage innerhalb derselben Verbindung).

    
Marten Lehmann 27.08.2012 19:33
quelle
2

Ja, wir können das machen.

Fügen Sie einfach eine auto_prepend_file in Ihrer PHP.ini hinzu wie auto_prepend_file = "c:/prepend.php" und fügen Sie in dieser Datei Folgendes hinzu:

%Vor%

Sie benötigen MOD_REMOTEIP in der Apache-Breite RemoteIPHeader X-Real-IP .

Prost,

Guiremach

    
Guiremach 26.05.2012 15:33
quelle
1

Denken Sie daran, dass dieser Wert gefälscht werden kann. Siehe Ссылка für ein Beispiel aus dem wirklichen Leben mit Auswirkungen auf das Cross-Site-Scripting.

    
Daniel Miller 22.04.2011 20:22
quelle
0

Sie können das Modul mod_extract_forwarded installieren und den Parameter MEFaccept auf alle setzen.

    
freemanpolys 22.05.2015 08:27
quelle

Tags und Links