Falsche IP-Adresse des Nutzers bei Betrieb von SW hinter einem Load Balancer / Proxy

Liebes Forum,

ich bräuchte mal bitte mal Eure Einschätzung zu einem Thema.

Wir betreiben SW (5.2) in der Amazon Cloud hinter einem Load Balancer. Dadurch wird anscheinend die PHP Umgebungsvariable $_SERVER['REMOTE_ADDR'] “falsch” gesetzt, nämlich mit der IP des Load Balancers statt des Kunden. Dies hat z.B. negative Auswirkungen auf die Shopware Statistiken.

  1. Kann das jemand bestätigen und hat jemand vielleicht eine Lösung (ohne den Core zu verändern)?

  2. Wäre es aus Eurer Sicht auch sinnvoll, dass der SW-Core konsequent auf die Nutzung von $_SERVER['REMOTE_ADDR'] verzichtet, sondern statdessen z.B. die bereits im Core integrierte ZEND-Methode Zend_Controller_Request_Http::getClientIp(true) nutzt (nicht getestet, sieht aber gut aus)? Ich würde dann ein Ticket aufmachen.

Danke im Voraus und viele Grüße

Stephan

Lässt sich der AWS Loadbalancer nicht so konfigurieren, dass der X-Forwarded-For Header weiter gereicht wird?

Oder greift sich SW das Ding nicht?

[Papercut][SW-14342] Use helper methode to get the IP of customer by mitelg · Pull Request #769 · shopware/shopware · GitHub Hier wurde getClientIp(true) aufgrund möglicher security issues abgelehnt.

1 „Gefällt mir“

Wir haben ein ähnliches Setup, allerdings noch mit Varnish zwischen Load Balancer und PHP Apache Server. Hast Du denn in Deiner config.php folgendes stehen?

 $config['trustedProxies'] = ['12.3.4.5']; // ersetzen mit IP-Adressen/Range des Loadbalancer und/oder Varnish
1 „Gefällt mir“

@hhmarco73 schrieb:

Wir haben ein ähnliches Setup, allerdings noch mit Varnish zwischen Load Balancer und PHP Apache Server. Hast Du denn in Deiner config.php folgendes stehen?

$config[‚trustedProxies‘] = [‚12.3.4.5‘]; // ersetzen mit IP-Adressen/Range des Loadbalancer und/oder Varnish

Vielen Dank für den Hinweis… die Option war mir noch nicht geläufig. Wenn ich die Beschreibung in den DevDocs richtig verstehe, wird dadurch ermöglicht, dass der Proxy (LB) den Header HTTP_X_FORWARDED_FOR setzt bzw. diesem vertraut wird. Jedoch wird nicht automatisch die $_SERVER[REMOTE_ADDR]durch den Header ersetzt, die SW für die User IP ausliest, oder? Ich werde es trotzdem mal ausprobieren, danke!

 

@tschersich schrieb:

Lässt sich der AWS Loadbalancer nicht so konfigurieren, dass der X-Forwarded-For Header weiter gereicht wird?

Oder greift sich SW das Ding nicht?

Soweit ich es im Quellcode sehe, wird z.B. in der sOrder nur die $_SERVER[REMOTE_ADDR]verwendet und der HTTP_X_FORWARDED_FOR ignoriert.

$_SERVER wird aber hier vendor/symfony/http-foundation/Request.php:519 überschrieben

Symfony wertet vorher trustedProxies aus und überschreibt dadurch dann ggf. \_SERVER[REMOTE\_ADDR] mit dem Wert aus _SERVER[HTTP_X_FORWARDED_FOR]

@hhmarco73 schrieb:

$_SERVER wird aber hier vendor/symfony/http-foundation/Request.php:519 überschrieben

Symfony wertet vorher trustedProxies aus und überschreibt dadurch dann ggf. $_SERVER[REMOTE_ADDR] mit dem Wert aus $_SERVER[HTTP_X_FORWARDED_FOR]

Ah, spannend, sieht vielversprechend aus. Ich werde es mal ausprobieren! Danke!

Hier noch ein paar mehr Hintergrundinformationen:

Nochmal vielen Dank! Nachdem wir nun endlich das Update fahren konnten, funktioniert die Weitergabe der IP Adresse einwandfrei.

Hier nocheinmal die Zusammenfassung für alle anderen Interessierten:
Wie von hhmarco73 beschrieben, wird \_SERVER[REMOTE\_ADDR] automatisch mit dem Wert von aus _SERVER[HTTP_X_FORWARDED_FOR] überschrieben, sofern die IP Adresse des Proxy in der config['trustedProxies'] eingetragen ist. Der Proxy muss natürlich den Header _SERVER[HTTP_X_FORWARDED_FOR] auch richtig setzen. Das ganze findet direkt im Symfony Framwork statt und ist deshalb in den Shopware Controllern nicht zu finden.