Сервер сайта

Реальный IP посетителя

Как передавать на сайт IP настоящего посетителя

Зачем это настраивать

После подключения защиты посетитель сначала попадает на сервер GUJ. Он проверяет запрос и только потом передает его на ваш сервер сайта.

Если не сделать эту настройку, сайт будет видеть IP сервера GUJ вместо IP реального посетителя.

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

Как передается IP

GUJ добавляет IP посетителя в заголовок запроса. Это обычная служебная строка, которую читает Nginx или Apache.

X-Real-IP: реальный IP посетителя
X-Forwarded-For: список IP, через которые прошел запрос
X-Forwarded-Proto: исходная схема, http или https

В большинстве случаев используйте X-Real-IP. В нем один адрес: IP посетителя.

X-Forwarded-For нужен только для сложной схемы, когда между посетителем и сайтом есть еще один или несколько промежуточных серверов.

Важно: доверяйте только IP GUJ

Принимайте эти заголовки только от IP серверов GUJ. Иначе любой человек сможет отправить поддельный заголовок и выдать себя за другой IP.

Какой IP указывать

Указывайте IP сервера GUJ. Это сервер, с которого ваш сайт получает уже проверенный трафик. Список ниже уже содержит нужные IP.

Не указывайте IP посетителя и не указывайте IP вашего сайта.

В Nginx это строки set_real_ip_from, в Apache - RemoteIPTrustedProxy или RPAFproxy_ips.

Если вы используете свой отдельный сервер защиты, укажите его публичный IP. Его видно в панели в разделе Мои ноды.

IP серверов GUJ

Разрешите вашему веб-серверу доверять этим IP:

82.202.171.236

Nginx

Основной файл Nginx обычно находится здесь: /etc/nginx/nginx.conf.

На Debian и Ubuntu сайты часто лежат в /etc/nginx/sites-available/, а дополнительные общие настройки можно вынести в /etc/nginx/conf.d/real-ip.conf.

Модуль realip должен быть включен при сборке Nginx. В популярных дистрибутивах он обычно уже есть. Проверить можно так:

nginx -V 2>&1 | grep -- --with-http_realip_module

Добавьте настройки в блок http. Если используете отдельный файл в /etc/nginx/conf.d/, убедитесь, что он подключается внутри блока http из nginx.conf.

Для GUJ обычно достаточно варианта с X-Real-IP: он берет один готовый IP посетителя.

set_real_ip_from 82.202.171.236;

real_ip_header X-Real-IP;

Вариант с X-Forwarded-For тоже рабочий, но обычно он нужен только для схемы с несколькими промежуточными серверами:

set_real_ip_from 82.202.171.236;

real_ip_header X-Forwarded-For;
real_ip_recursive on;

real_ip_recursive on нужен только для X-Forwarded-For, потому что там может быть несколько IP через запятую. Если коротко: он помогает Nginx выбрать IP посетителя, а не IP последнего промежуточного сервера.

Проверьте конфигурацию и перезагрузите Nginx:

nginx -t
systemctl reload nginx

Apache 2.4 и новее

Этот раздел нужен, если сайт принимает запросы сразу в Apache и перед ним не стоит Nginx.

На Debian и Ubuntu конфигурации Apache находятся в /etc/apache2/. Для remoteip удобно создать файл /etc/apache2/conf-available/remoteip.conf.

На CentOS, AlmaLinux, Rocky Linux и других RedHat-based системах каталог обычно /etc/httpd/, служба называется httpd, а файл можно создать как /etc/httpd/conf.d/remoteip.conf.

На Debian и Ubuntu выключите старый rpaf, если он был включен, и включите remoteip:

a2dismod rpaf
a2enmod remoteip

Добавьте в /etc/apache2/conf-available/remoteip.conf:

<IfModule remoteip_module>
    RemoteIPHeader X-Real-IP
    RemoteIPTrustedProxy 82.202.171.236
</IfModule>

Включите конфигурацию, проверьте синтаксис и перезагрузите Apache:

a2enconf remoteip
apache2ctl configtest
systemctl reload apache2

Для RedHat-based систем команды обычно такие:

httpd -t
systemctl reload httpd

Apache до 2.4

Apache до 2.4 встречается редко. Если он все еще используется, обычно нужен mod_rpaf.

На Debian и Ubuntu настройки часто находятся в /etc/apache2/mods-enabled/rpaf.conf.

<IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 82.202.171.236
</IfModule>

Для стандартного mod_rpaf важно перечислить все IP серверов GUJ в RPAFproxy_ips. Если модуля нет, лучше обновить Apache до 2.4 или обратиться к администратору сервера.

Как проверить

  1. Откройте сайт через защищенный домен, а не напрямую по IP сервера сайта.
  2. Откройте журнал веб-сервера.
  3. Убедитесь, что в журнале виден ваш внешний IP, а не IP сервера GUJ.

Частые пути к журналам:

/var/log/nginx/access.log
/var/log/apache2/access.log
/var/log/httpd/access_log

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

Частые ошибки

  • Указывают IP посетителя. Так делать не нужно: посетителей много, они меняются, и заранее их знать невозможно.
  • Указывают IP сервера сайта. Это тоже неверно: доверенным должен быть сервер GUJ, с которого приходит очищенный трафик.
  • Доверяют всем адресам через 0.0.0.0/0. Так любой клиент сможет подделать свой IP через заголовок.
  • Меняют конфиг, но не перезагружают веб-сервер.
  • Проверяют прямой заход на сервер сайта, минуя GUJ. В этом случае настройка GUJ не участвует.

Помогла ли эта статья?

Ваш ответ поможет сделать документацию понятнее