Выбор ответа Senior Балансировка и nginx обновлено

Реальный IP клиента

Вопрос

Приложение за nginx берёт IP клиента из первого значения заголовка X-Forwarded-For для лимитов на вход. В чём проблема?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Клиент может сам прислать заголовок с любым IP и обойти лимиты. $proxyaddxforwardedfor дописывает адрес к тому, что пришло от клиента, поэтому первое значение контролирует клиент.

Варианты ответа

  1. nginx по умолчанию удаляет этот заголовок перед проксированием
  2. В первом значении заголовка всегда IP самого балансировщика
  3. Клиент может сам прислать заголовок с любым IP и обойти лимитыправильный ответ
  4. Заголовок не передаётся по HTTP/2, у части клиентов он пуст

Разбор

$proxy_add_x_forwarded_for дописывает адрес к тому, что пришло от клиента, поэтому первое значение контролирует клиент. Доверять можно только адресам, добавленным своими прокси: брать последний недоверенный адрес справа или использовать X-Real-IP $remote_addr с внешнего балансировщика (в nginx модуль realip с set_real_ip_from). nginx заголовок не удаляет, с HTTP/2 он работает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.