Любой способ заблокировать IP-адрес хоста спуфинга заголовка?

Я уже добавил следующее в мою конфигурацию nginx для работы с поддельными доменами:

    if ($host !~* ^(.*example.org|\d+\.\d+\.\d+\.\d+)$ ) {
            return 444;
    }

Прямо сейчас это заносит в белый список IP-адреса, так как мне нужно принять их для определенных запросов.

Это за AWS ELB, поэтому он также должен отвечать на IP-адрес.

В идеале я бы хотел, чтобы он принимал только свой собственный общедоступный и собственный частный IP-адрес. Однако я не хочу жестко кодировать это в конфигурации, так как это экземпляры AWS.

Поэтому я думаю, мне интересно, если кто-нибудь придумал решение для блокировки поддельных заголовков хоста, которое конкретно ограничивает желаемые IP-адреса.

Лучшая идея, которую я могу придумать, - это скрипт, который генерирует файлы конфигурации, добавляет правильные IP-адреса при запуске, а затем копирует их в папку конфигурации nginx. Но я чувствую, что должно быть более элегантное решение, которое не требует от меня написания сценария запуска.

Почему

Поскольку кто-то спросил, почему я хочу это сделать, у меня есть две цели:

  • устранить ошибки Django, которые я получаю в результате ошибок HOST_HEADER SuspiciousOperation
  • не позволяйте ботам (которые составляют 99,9% этих запросов на подделку) даже достичь уровня моего веб-приложения.

1 ответ

Решение

Ваш лучший вариант - создать часть файла конфигурации и включить ее, потому что nginx не может узнать авторизованные IP-адреса в заголовке Host без него.

server {

    listen 80;

    server_name mypublicdomain.com anotherdomain.com;
    include conf.d\domain-ips;  

    [ ... ]        

}

С файлом domain-ips, содержащим:

server_name x.x.x.x; # Public IP
server_name x.x.x.x; # Private IP
Другие вопросы по тегам