Symfony2 использует неправильное "x-forwarded-for" для адресов AWS Load Balancer / 2 Ip

Простой / маленький вопрос.

Мой Amazon AWS ELB отправляет мне следующие заголовки.

x-forwarded-for     84.134.167.231, 172.31.17.157
x-forwarded-host    app.example.org
x-forwarded-port    443
x-forwarded-proto   https
x-forwarded-server  ip-172-31-11-2.eu-central-1.compute.internal

Но запрос использует второй, IP-адрес локальной машины. - 172.31.17.157

Кто-нибудь знает, как решить эту проблему? Можно ли переписать функции Get IP в Symfony?

Заранее спасибо!

// edit 1 - Конфигурация HTTP

    files:
      /etc/httpd/conf.d/ssl.conf:
        mode: "000644"
        owner: root
        group: root
        content: |
          LoadModule ssl_module modules/mod_ssl.so
          Listen 443
          <VirtualHost *:443>
            <Proxy *>
              Order deny,allow
              Allow from all
            </Proxy>

            SSLEngine             on
            SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
            SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
            SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
            SSLProtocol           All -SSLv2 -SSLv3
            SSLHonorCipherOrder   On
            SSLSessionTickets     Off

            Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
            Header always set X-Frame-Options DENY
            Header always set X-Content-Type-Options nosniff

            ProxyPass / http://localhost:80/ retry=0
            ProxyPassReverse / http://localhost:80/
            ProxyPreserveHost on
            RequestHeader set X-Forwarded-Proto "https" early

          </VirtualHost>

0 ответов

Да, вам нужно будет переписать функцию getIP (или что-нибудь подобное), чтобы она работала для ELB. Обратите внимание, только для ELB.

Основная проблема заключается в том, что не существует универсального согласованного стандарта для X-Forwarded-For,

Большинство прокси инструментов, таких как Nginx, установят X-Forwarded-For: client, proxy1, proxy2, Тем не менее, ELB установит X-Forwarded-For: proxy1, proxy2, client,

Поэтому большинство веб-фреймворков будут иметь проблему с подделкой IP при использовании ELB.

Исправление простое, просто нужно выбрать последнюю часть X-Forwarded-For, Но, как вы можете себе представить, если запрос направляется через несколько прокси-серверов, использующих разные стандарты, тогда нет простого способа найти настоящий IP-адрес.

Другие вопросы по тегам