Mod_remoteip позволяет Apache2 получать IP посетителя из запросов, полученных от прокси-серверов и балансировщиков нагрузки. Это дает вам реальный IP посетителя. Сервер происхождения восстанавливает фактическую информацию и регистрирует оригинальный IP-адрес посетителя вместо IP-адреса прокси-сервера.
Это руководство объяснит, как установить и настроить mod_remoteip на Apache2 в дистрибутиве Ubuntu (Debian) для восстановления оригинальной информации о посетителях с Cloudflare. Также в руководство включена более старая альтернатива, mod_cloudflare, которая не является частью основных дистрибутивов.
Как получить реальный IP-адрес клиента от Cloudflare
CloudFlare - это популярная сеть доставки контента. Их бесплатный тарифный план включает услугу обратного прокси, которая ускоряет время загрузки страниц и кэширует статические ресурсы. Как следствие, при регистрации запросов внутренний сервер возвращает IP-адреса CloudFlare. Оригинальный IP-адрес посетителя отображается в дополнительном HTTP-заголовке CF-Connecting-IP.
Кроме того, план Enterprise от CloudFlare предоставляет еще один HTTP-заголовок True-Client-IP для передачи исходного IP-адреса клиента (посетителя) на исходный веб-сервер. Согласно базе данных статьи Cloudflare, между этими двумя заголовками нет никакой разницы, они несут одну и ту же информацию.
Настройка модуля mod_remoteip
Включите модуль mod_remoteip, введя следующую команду, и перезапустите apache
1 | sudo a2enmod remoteip && systemctl restart apache2 |
Для каждого виртуального домена, настроенного через CloudFlare, добавьте директиву RemoteIPHeader, установленную в CF-Connecting-IP. Если вы хотите добавить ее к настройкам по умолчанию, отредактируйте nano /etc/apache2/sites-available/000-default.conf
1 2 3 4 5 | ServerAdmin webmaster@localhost DocumentRoot /var/www/html RemoteIPHeader CF-Connecting-IP ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined |
В основном конфигурационном файле Apache apache.conf в директивах Log Format найдите и замените %h на %a. Наберите nano /etc/apache2/apache2.conf. Вывод будет выглядеть следующим образом:
1 2 3 4 5 | LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent |
Добавьте IP-адрес(ы) доверенного прокси в файл конфигурации Определите адреса доверенного прокси, создав файл /etc/apache2/conf-available/remoteip.conf, введя следующий код и IP-адреса Cloudflare:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | RemoteIPHeader CF-Connecting-IP RemoteIPTrustedProxy 173.245.48.0/20 RemoteIPTrustedProxy 103.21.244.0/22 RemoteIPTrustedProxy 103.22.200.0/22 RemoteIPTrustedProxy 103.31.4.0/22 RemoteIPTrustedProxy 141.101.64.0/18 RemoteIPTrustedProxy 108.162.192.0/18 RemoteIPTrustedProxy 190.93.240.0/20 RemoteIPTrustedProxy 188.114.96.0/20 RemoteIPTrustedProxy 197.234.240.0/22 RemoteIPTrustedProxy 198.41.128.0/17 RemoteIPTrustedProxy 162.158.0.0/15 RemoteIPTrustedProxy 104.16.0.0/12 RemoteIPTrustedProxy 172.64.0.0/13 RemoteIPTrustedProxy 131.0.72.0/22 RemoteIPTrustedProxy 2400:cb00::/32 RemoteIPTrustedProxy 2606:4700::/32 RemoteIPTrustedProxy 2803:f800::/32 RemoteIPTrustedProxy 2405:b500::/32 RemoteIPTrustedProxy 2405:8100::/32 RemoteIPTrustedProxy 2a06:98c0::/29 RemoteIPTrustedProxy 2c0f:f248::/32 |
Следующим шагом будет проверка конфигурации Apache2
1 | sudo apache2ctl configtest |
Перезапустите Apache2
1 | sudo systemctl restart apache2 |