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:
| Header | Inhalt |
|---|---|
X-Real-IP | Immer genau eine Adresse: die IP des Besuchers, wie smoxy sie am Edge ermittelt hat. |
X-Forwarded-For | Die 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:
RemoteIPHeader X-Real-IPIm Log-Format %a (Client-IP nach mod_remoteip) statt %h (Peer-Adresse) verwenden.
nginx
Das realip-Modul nutzen:
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:
$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.
