Mediawiki за обратным прокси заполняет IP-адрес пользователя адресом прокси.

Вопрос или проблема

У меня работает 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-адрес оригинального клиента. Задача сервера назначения — правильно обработать этот заголовок и использовать его информацию.

Пример

  1. Настройка Apache: Модуль mod_proxy_http Apache автоматически добавляет заголовок X-Forwarded-For с IP-адресом клиента. Однако, чтобы убедиться в этом, следует проверить конфигурацию Apache и добавить следующие строки в соответствующий виртуальный хост:

    ProxyPreserveHost On
    X-Forwarded-For header should be automatically sent
  2. Конфигурация MediaWiki: MediaWiki имеет встроенную поддержку для обработки заголовков X-Forwarded-For. Для этого в LocalSettings.php необходимы следующие изменения:

    $wgUsePrivateIPs = true;
    $wgSquidServers = array( 'proxy fqdn', 'proxy ip address' );

    Эти настройки указывают MediaWiki, что нужно читать IP-клиента из заголовка X-Forwarded-For.

  3. Модуль mod_extract_forwarded: Если вышеуказанные настройки не решают проблему, можно использовать модуль Apache — mod_extract_forwarded. Он перехватывает заголовки и модифицирует данные соединения, чтобы для всех последующих обработчиков запроса этот запрос выглядел так, будто пришел непосредственно от клиента.

    Установка и активация этого модуля производится с помощью команды:

    # yum install mod_extract_forwarded
  4. Настройка $wgCdnServersNoPurge: Этот параметр MediaWiki указывает, доверять ли X-Forwarded-For заголовки. Это позволит MediaWiki использовать их как адрес клиента для указанных в этом массиве "клиентов", которыми являются реверс-прокси-серверы.

    $wgCdnServersNoPurge = array( 'proxy ip address' );

Применение

Каждый из вышеуказанных шагов направлен на решение проблемы с некорректным отображением IP-адресов в MediaWiki, работающей за реверс-прокси. Важно правильно сконфигурировать как прокси-сервер, так и сервер назначения, чтобы обеспечить корректную обработку IP-адресов. Учитывая, что MediaWiki содержит встроенные механизмы для работы с прокси-серверами и заголовками X-Forwarded-For, при правильной настройке можно добиться значительного улучшения функциональности и безопасности системы. Это особенно актуально для организаций, которые ведут детализированный учет действий пользователей и требуют точного определения каждого соединения.

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

Оцените материал
Добавить комментарий

Капча загружается...