Внешние DNS‑резолверы¶
Gixy Check ID: resolver_external
Использование публичных DNS в директиве resolver может делать nginx уязвимым для отравления кэша и поддельных ответов. Поддельные DNS‑ответы могут отравить кэш nginx и направить проксирование на хосты, контролируемые атакующим.
Небезопасный пример¶
# Публичные внешние резолверы (небезопасно)
resolver 1.1.1.1 8.8.8.8;
# Разрешение переменной бэкенда зависит от resolver
set $backend upstream.internal.example;
location / {
proxy_pass http://$backend;
}
Более безопасные варианты¶
- Поднять локальный кэширующий резолвер и указывать только loopback:
# Использовать только локальные резолверы
resolver 127.0.0.1 [::1] valid=10s;
resolver_timeout 5s;
- По возможности предпочитайте статические upstream (избегайте переменного
proxy_pass) - Держите
validмаленьким; локальный резолвер должен быть доверенным и усиленным
Зачем это важно¶
- Внешние резолверы увеличивают поверхность атаки для подделки ответов
- Отравленный кэш может незаметно уводить трафик на произвольные upstream
- Локальный резолвер (например,
unbound,dnsmasq) на loopback значительно снижает риск
Укрепляйте NGINX с поддерживаемыми RPM
Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.