Вопрос или проблема
У меня работает Apache на машине с фаерволом, который выполняет обратное проксирование различных папок на разные серверы бекэнда и также оборачивает соединение в SSL. …довольно распространенная настройка.
Предсказуемо, экземпляр MediaWiki на бекэнде считает, что доступ осуществляется с одного IP-адреса, IP-адреса обратного прокси. Поскольку значительная часть функциональности MediaWiki теряется, возможно ли передать правильный IP-адрес, который MediaWiki может использовать для управления пользователями и регистрации, то есть для проверки IP? Использование HTTP-заголовков имеет смысл.
Абсолютно.
Если вы используете mod_proxy_http, Apache, вероятно, уже отправляет реальный IP в заголовках X-Forwarded-For.
Похоже, что MediaWiki поддерживает это из коробки, включив переменную в вашем конфигурационном файле:
$wgUsePrivateIPs = true;
$wgSquidServers = array( 'proxy fqdn', 'proxy ip address' );
Больше информации: https://www.mediawiki.org/wiki/Manual:$wgUsePrivateIPs
Включение этого параметра заставит MediaWiki читать IP-адрес клиента из заголовков X-Forwarded-For.
Вы можете попробовать следующий модуль для Apache
# yum info mod_extract_forwarded
Name : mod_extract_forwarded
Arch : x86_64
Version : 2.0.2
Release : 8.el6
Size : 15 k
Repo : epel
Summary : Извлечение реального IP-источника для пересылаемых HTTP-запросов
URL : http://www.openinfo.co.uk/apache/
License : ASL 1.1
Description : mod_extract_forwarded внедряется в фазу разбора заголовков Apache и ищет
: заголовок X-Forwarded-For, который некоторые (большинство?) прокси добавляют к проксируемым
: HTTP-запросам. Он извлекает IP из X-Forwarded-For и модифицирует
: данные соединения, так чтобы для остальной части Apache запрос выглядел, будто он пришел с
: этого IP, а не IP прокси.
Установите $wgCdnServersNoPurge
на IP-адрес вашего обратного прокси. MediaWiki будет доверять заголовку X-Forwarded-For для «клиентов», указанных там, и использовать его как адрес клиента.
.
Ответ или решение
Чтобы решить проблему, при которой экземпляр MediaWiki, находящийся за реверсивным прокси-сервером, отображает пользовательский IP-адрес как IP-адрес прокси, необходимо предпринять несколько шагов. Это важно, так как правильное определение IP-адресов пользователей обеспечивает корректную работу таких функций, как управление пользователями и ведение журнала событий. Использование заголовков HTTP, таких как X-Forwarded-For, позволяет передать правильный IP-адрес клиента, что является эффективным способом решения этой задачи.
Теория
Когда веб-приложение, такое как MediaWiki, работает за реверс-прокси, оно принимает все запросы с IP-адреса прокси-сервера. Это означает, что вся статистика, логирование и другие функции, зависящие от IP-адреса клиента, не работают корректно. Однако существует решение — передавать реальный IP-адрес клиента через специальные заголовки HTTP, например, X-Forwarded-For. Многие прокси-серверы, включая Apache в связке с mod_proxy_http, уже отправляют этот заголовок, содержащий IP-адрес оригинального клиента. Задача сервера назначения — правильно обработать этот заголовок и использовать его информацию.
Пример
-
Настройка Apache: Модуль mod_proxy_http Apache автоматически добавляет заголовок X-Forwarded-For с IP-адресом клиента. Однако, чтобы убедиться в этом, следует проверить конфигурацию Apache и добавить следующие строки в соответствующий виртуальный хост:
ProxyPreserveHost On X-Forwarded-For header should be automatically sent
-
Конфигурация MediaWiki: MediaWiki имеет встроенную поддержку для обработки заголовков X-Forwarded-For. Для этого в
LocalSettings.php
необходимы следующие изменения:$wgUsePrivateIPs = true; $wgSquidServers = array( 'proxy fqdn', 'proxy ip address' );
Эти настройки указывают MediaWiki, что нужно читать IP-клиента из заголовка X-Forwarded-For.
-
Модуль mod_extract_forwarded: Если вышеуказанные настройки не решают проблему, можно использовать модуль Apache — mod_extract_forwarded. Он перехватывает заголовки и модифицирует данные соединения, чтобы для всех последующих обработчиков запроса этот запрос выглядел так, будто пришел непосредственно от клиента.
Установка и активация этого модуля производится с помощью команды:
# yum install mod_extract_forwarded
-
Настройка $wgCdnServersNoPurge: Этот параметр MediaWiki указывает, доверять ли X-Forwarded-For заголовки. Это позволит MediaWiki использовать их как адрес клиента для указанных в этом массиве "клиентов", которыми являются реверс-прокси-серверы.
$wgCdnServersNoPurge = array( 'proxy ip address' );
Применение
Каждый из вышеуказанных шагов направлен на решение проблемы с некорректным отображением IP-адресов в MediaWiki, работающей за реверс-прокси. Важно правильно сконфигурировать как прокси-сервер, так и сервер назначения, чтобы обеспечить корректную обработку IP-адресов. Учитывая, что MediaWiki содержит встроенные механизмы для работы с прокси-серверами и заголовками X-Forwarded-For, при правильной настройке можно добиться значительного улучшения функциональности и безопасности системы. Это особенно актуально для организаций, которые ведут детализированный учет действий пользователей и требуют точного определения каждого соединения.
Таким образом, интеграция и правильная настройка этих технологий позволяет сохранить ключевую функциональность MediaWiki, обеспечивая точное определение IP-адресов пользователей и, следовательно, надежное управление операциями пользователей и логирование.