Skip to content

Client-IP am Origin

Da der gesamte Traffic durch smoxy läuft, kommt jede Verbindung am Origin-Server von einer smoxy-Adresse - REMOTE_ADDR enthält nicht mehr die IP des Besuchers. smoxy übermittelt die echte IP-Adresse des Besuchers im Request-Header X-Real-IP. Der Origin sollte die Client-IP aus genau diesem Header lesen.


X-Real-IP verwenden, nicht X-Forwarded-For

smoxy sendet mit jeder Anfrage an den Origin zwei IP-bezogene Header:

HeaderInhalt
X-Real-IPImmer genau eine Adresse: die IP des Besuchers, wie smoxy sie am Edge ermittelt hat.
X-Forwarded-ForDie komplette Weiterleitungskette. Sie kann mehrere Adressen enthalten: Einträge, die der Client selbst gesendet hat, Hops eines vorgeschalteten CDN (z. B. Cloudflare) und smoxys eigene Hops.

X-Real-IP ist die Adresse, die smoxy selbst für Sicherheitsprüfungen, Logging und Load Balancing verwendet - und sie ist auch die Basis der GeoIP-Header. Sie stimmt auch dann, wenn ein weiteres CDN wie Cloudflare vor smoxy geschaltet ist.

X-Forwarded-For dagegen ist eine Kette, die mit jedem Hop wächst, und ihre ersten Einträge sind vom Client kontrollierbar - jeder kann einen X-Forwarded-For-Header mitsenden. Den Besucher daraus zu extrahieren heißt, Proxy-Hops korrekt zu zählen; ein Hop daneben, und Logs, IP-Allowlists und Rate Limits verwenden die Adresse eines Proxys statt des Besuchers. Der Header taugt als Audit-Trail, nicht als Quelle für die Client-IP.


Apache

mod_remoteip nutzen, damit Apache die übermittelte Adresse als Client-IP für Logging, Zugriffskontrolle (Require ip) und alles Weitere behandelt:

apache
RemoteIPHeader X-Real-IP

Im Log-Format %a (Client-IP nach mod_remoteip) statt %h (Peer-Adresse) verwenden.

nginx

Das realip-Modul nutzen:

nginx
set_real_ip_from <Adresse des Proxys vor dem Origin>;
real_ip_header X-Real-IP;

Applikationscode

Wenn sich die Webserver-Konfiguration nicht ändern lässt, den Header direkt auslesen, z. B. in PHP:

php
$clientIp = $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'];

Viele Frameworks bieten dafür eine "Trusted Proxies"-Einstellung; wo möglich, dort X-Real-IP konfigurieren.


Dem Header nur hinter smoxy vertrauen

Wie jeder weitergeleitete Header ist X-Real-IP nur vertrauenswürdig, wenn die Anfrage tatsächlich über smoxy kam. Ist der Origin zusätzlich direkt aus dem Internet erreichbar, das Vertrauen einschränken (RemoteIPTrustedProxy bei Apache, set_real_ip_from bei nginx) oder den Direktzugriff auf den Origin blockieren.