🌐 Nginx может сохранять исходный IP клиента даже за цепочкой прокси



👁 В сложной инфраструктуре запрос может пройти через балансировщик, CDN и несколько прокси. Если доверять заголовку X-Forwarded-For без ограничений, клиент сможет подменить свой IP и повлиять на журналирование, ограничения запросов и правила доступа.

📝 Доверяем только известным прокси:

Модуль Real IP позволяет восстановить адрес клиента из заголовка, но доверенными нужно объявлять только реальные адреса промежуточных узлов.



set_real_ip_from 10.20.0.0/16;
set_real_ip_from 192.0.2.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

📝 Используем восстановленный IP для ограничений:

После обработки Real IP переменная $binary_remote_addr содержит бинарное представление восстановленного адреса. Её удобно применять для ограничения частоты запросов без лишних затрат на хранение ключей.



http {
limit_req_zone $binary_remote_addr
zone=per_ip:10m rate=10r/s;

server {
location /api/ {
limit_req zone=per_ip burst=20 nodelay;
proxy_pass http://backend;
}
}
}

📝 Проверяем, какой адрес Nginx считает клиентским:

Добавьте отдельный формат журнала, чтобы видеть исходный адрес соединения и восстановленный адрес клиента. Это помогает обнаружить ошибочную настройку доверенных прокси.



log_format client_ip
'peer=$realip_remote_addr '
'client=$remote_addr '
'xff="$http_x_forwarded_for" '
'request="$request" status=$status';

access_log /var/log/nginx/client_ip.log client_ip;

❗️ Главное правило: set_real_ip_from должен содержать только доверенные узлы, которые действительно контролируют передаваемые заголовки. Если разрешить доверие произвольным адресам, клиент сможет подделать IP, а ограничения и журналы потеряют достоверность.

tags: #nginx #разработка #devops

🧭 @recura_tech
Просмотры: 282
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти