Cloudflare: Восстанавливаем реальные IP-адреса посетителей

Когда трафик сайта направляется через сеть Cloudflare, то в логи попадает не реальный адрес пользователя, а адреса серверов Cloudflare. Фактически Cloudflare выполняет роль обратного прокси сервера.

Это связано с механизмом работы: Все запросы принимают сервера Cloudflare, если есть кешированные данные, то они их возвращают. При необходимости осуществляется блокировка запросов или роутинг.

Cloudflare proxy

 

Реальный адрес посетителя содержится в заголовке: CF-Connecting-IP передающийся с каждым запросом.

Актуальный список серверов Cloudflare

Актуальный список серверов можно взять по адресу: https://www.cloudflare.com/ips/

Так же можно использовать для автоматизации:

Только IPv4: https://www.cloudflare.com/ips-v4

Только IPv6: https://www.cloudflare.com/ips-v6

Настройка Apache

Для восстановления реальных адресов посетителей ранее использовался модуль Apache - mod_cloudflare, но его поддержка прекращена.

Есть стандартный модуль Apache который позволить решит эту задачу: mod_remoteip

Проверить наличие:

модуль подключен, все хорошо.

Создаем файл /etc/httpd/conf.d/remoteip.conf

Со следующим содержимым:

после чего перезапускаем Apache

Журналы доступа и ошибок Apache (необязательно)

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

Зайдите на страницу вашего сайта, чтобы создать запись в журнале доступа, затем просмотрите журнал доступа, чтобы увидеть, показывает ли он ваш IP или IP прокси Cloudfare:

Если он не показывает ваш IP, продолжите ниже. Чтобы реальный IP клиента (CF-Connecting-IP) появился в access.log и error.log, мы должны внести небольшое изменение в apache2.conf.

Отредактируйте файл apache2.conf:

в CentOS файл httpd.conf

Нажмите CTRL + W и найдите пункт LogFormat.

Формат журнала по умолчанию должен выглядеть примерно так, как показано ниже:

Переменная %h - это удаленный IP. Нам просто нужно изменить ее на %a, который является IP-адресом клиента, определенным модулем mod_remoteip.

Сохранить и выйти (нажмите CTRL + X, нажмите Y и затем нажмите ENTER).

Перезапустите Apache.

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

Настройка Nginx

Для Nginx необходимо использовать модуль ngx_http_realip_module

В секцию server добавить следующий конфиг

и перезапускаем NGINX

Понравилась статья? Поделиться с друзьями:
Добавить комментарий