⚠️ WAF обходится подменой X-Real-IP, если команды не договорились о настройках прокси Классическая картина: перед сервисом DDoS-защита, за ней балансировщик, потом WAF. Исходный адрес клиента теряется на каждом шаге, потому что обратный прокси инициирует новую сессию. Чтобы его восстановить, в запрос добавляют X-Forwarded-For и X-Real-IP. Проблема в том, что настройка этих заголовков идёт вручную, и разные команды делают это по-разному. Один прокси берёт из цепочки первый адрес, другой — последний, а третий вообще смотрит в незаполненный заголовок. В недавнем разборе на стенде с HAProxy и двумя nginx вскрыли два опасных сценария. Первый: WAF использует заголовок X-Real-IP, но вышестоящий прокси его не добавляет. Тогда WAF не находит заголовок и берёт src-адрес пакета от предыдущего прокси, который часто попадает в доверенную подсеть. Итог — блокировка просто не срабатывает. Второй и более хитрый: HAProxy добавляет X-Real-IP только если его ещё нет в запросе, через конструкцию http-request set-header X-Real-IP %[src] if !{ req.hdr(X-Real-IP) -m found }. Атакующий проставляет этот заголовок сам с адресом из белого списка WAF — и тот принимает подставной IP за истинный. • nginx 1.28.2, собранный на стенде, в дефолтном access_log пишет $remote_addr — тот самый, что может оказаться подставным. • Реальный модуль ngx_http_realip_module в конфиге WAF использовал директиву real_ip_header X-Real-IP без фильтра доверенных отправителей для этого заголовка. • Команда для проверки своей цепочки: curl http://целевой-сервис/ -H "X-Real-IP: адрес из белого списка". По данным разбора на Хабре, эффект такого обхода масштабнее, чем кажется: злоумышленник не только пробивает белый список WAF, но и получает нефильтруемый доступ к административным разделам, закрытым по IP. WAF просто перестаёт анализировать его трафик, пропуская любые инъекции без сигнатурного контроля. При этом в логах чисто: nginx фиксирует доверенный IP и ничего подозрительного. Главная слепая зона таких конфигураций — не в синтаксисе, а в отсутствии сквозной проверки. Большинство команд смотрят в логи WAF, но не сверяют их с тем, что видит балансировщик. Я бы на месте CISO сделал обязательным тестовый стенд с эхо-сервисом, который на каждый запрос отдаёт все прилетевшие заголовки: так расхождение между ожидаемым и реальным IP видно сразу. Только этот сервис нужно держать строго внутри и выключать после теста — иначе вы подарите атакующему карту своих прокси. #WAF #XRealIP #XForwardedFor #мисконфиг #AppSec