Назад | Перейти на главную страницу

mod_rpaf за Amazon ELB

у меня есть mod_rpaf установлен, чтобы получить IP-адрес пользователя из X-Forwarded-For заголовок в PHP, журналах Apache и т. д.

К сожалению, похоже, что я должен явно указать, с каких IP-адресов этот заголовок будет соблюдаться через RPAFproxy_ips настройка.

Учитывая, что у ELB нет статического IP, как я могу определить mod_rpaf принимать заголовок с любого IP, а то и с любого 10. * IP?

Вы можете попробовать использовать mod_extract_forwarded вместо того mod_rpaf- поддерживает MEFaccept all (и если вы используете RHEL / CentOS / other-clone, пакет уже находится в EPEL). Один недостаток mod_extract_forwarded это то X-Forwarded-For и Forwarded-For имена заголовков жестко запрограммированы и не настраиваются, как в mod_rpaf.

Нет поддержки диапазонов IP-адресов даже в mod_extract_forwarded, но вы можете настроить брандмауэр, чтобы разрешить прямой доступ к Apache только с некоторых диапазонов IP-адресов, или проверьте MEF_RPROXY_ADDR переменная среды в mod_rewrite правила.


Подумав еще немного, я обнаружил проблему с этим mod_extract_forwarded config - пока mod_rpaf не поддерживает цепочки из нескольких прокси и берет только последний адрес из X-Forwarded-For заголовок mod_extract_forwarded пытается поддержать это и использует последний адрес, который не принадлежит к списку доверенных прокси-серверов (так что, если запрос прошел через несколько доверенных прокси-серверов, вместо предпоследнего прокси-адреса будет использоваться фактический адрес клиента). К сожалению, используя MEFaccept all Значит это mod_extract_forwarded будет доверять всем прокси, поэтому, если прокси ELB просто добавят свои данные в X-Forwarded-For заголовок, а не заменять его полностью, клиенты могут передавать любой поддельный IP-адрес, отправляя запросы со своими собственными X-Forwarded-For заголовки.

Однако я нашел еще один модуль для анализа X-Forwarded-For заголовки. Последние (нестабильные) версии Apache имеют mod_remoteip модуль, который, очевидно, поддерживает маски подсети для адресов прокси. Eсть обратный перенос на Apache 2.2 и spec-файл для Fedora; к сожалению, запрос на включение пакета в Fedora застопорился.

Судя по первому чтению, не похоже, что это возможно. Вы можете довольно легко взломать код, чтобы просто принять любой источник (путем стерилизации проверки в строке 163, которая выглядит как is_in_array(r->connection->remote_ip, cfg->proxy_ips) == 1, но это похоже на угрозу безопасности.

Есть ли способ спросить у Amazon, какие балансировщики нагрузки вы используете во время выполнения? Если это так, вы можете сгенерировать конфигурацию на лету ...

Я только что обнаружил, что CloudFlare создали свой собственный Модуль Apache для этого, и он поддерживает нотацию CIDR для диапазонов.

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

Комментарий в исходном коде указывает, что он был получен из mod_remoteip.c который доступен в Apache 2.3 (или 2,5 в зависимости от того, смотрите ли вы на URL или заголовок этой страницы.).