Вчера мы подверглись DDoS-атаке, достигнувшей нашего веб-сервера (apache2). Интерфейс состоит из соединений haproxy для балансировки нагрузки с веб-серверами. В access.log apache мы увидели тысячи запросов от двух IP-адресов, и через пару часов мы поняли, что это были поддельные / подделанные, а не настоящие IP-адреса.
Для пояснения мы сделали "curl GET /" с IP-адресом "137.137.136.136", и действительно, этот IP-адрес (поддельный) мы видели в наших веб-журналах
Теперь, в другом кластере, где мы используем nginx в качестве обратного прокси, изменение / создание заголовка X-Forwarded-For не работает. Это означает, что даже если вы введете случайный IP-адрес в конкретный заголовок, nginx все равно будет передавать правильный IP-адрес внутреннему веб-серверу?
Это связано с haproxy?
Кто-нибудь может подтвердить, что созданные заголовки X-Forwarded-For могут проходить через haproxy?
Почему этого не происходит в nginx?
Как это предотвратить?
В haproxy, если у вас нет ничего, что могло бы предотвратить это, это нормально, я не знаю, как с этим бороться в nginx, но я решил таким образом, используя haproxy:
в параметрах по умолчанию:
forwardfor
В моем определении интерфейса haproxy у меня есть:
reqidel ^X-Forwarded-For:.*
Это удаление X-Forwarded-For
в HTTP-запросе, если клиент пытается подделать и haproxy вернет настоящий заголовок в HTTP-ответе с истинным IP-адресом
Если вы хотите использовать X-Forwarded-For
чтобы проверить IP-адрес HTTP-клиентов, вам необходимо удалить его, если он существует в HTTP-запросе, потому что клиент, который использует HTTP-прокси, иногда устанавливает локальный IP-адрес в X-Forwarded-For