nGinX Forbidden все еще вызывает ограничение запросов

nGinX Forbidden все еще вызывает ограничение запросов

У меня есть несколько "запрещающих" правил перед конфигурацией лимита запросов. Если заблокированный пользователь (по правилам запрета) делает ddoss на сайт, он все равно запускает лимит запросов и, следовательно, создает тысячи записей в журнале. Почему? Я ожидал, что он не выйдет за пределы правил запрета.

    include        /etc/nginx/blacklist.conf;
    limit_req zone=limit burst=3 nodelay;

В журнале отображается ошибка "запрет" и сразу за ней сотни ошибок ограничения запросов. Это повторяется снова и снова.

решение1

Когда nginx обрабатывает запрос, он проходит черезнесколько фаз. Среди них :предварительный доступидоступфазы. Предварительный доступобычно там, где limit_reqработает, в то время как доступ там, где работают директивы allow/ deny. Это означает, что ограничение скорости выполняетсядоФильтрация IP, если обе директивы объявлены в одном и том же контексте.

Так что если вы хотите попытаться заставить какой-нибудь процесс, подобный fail2ban (учитывая код возврата 444 в вашем другом вопросе), работать непосредственно в nginx с использованием собственных директив, то это просто невозможно по своей природе.

решение2

Эта проблема немного устарела, но для тех, у кого она есть, лучшее решение, которое я нашел для этого случая, — использовать a mapс ifвместо denyправил (хотя я стараюсь избегать использования ifsв nginx), потому что, какКсавье Лукассказал:

ограничение скорости выполняется до фильтрации IP

Вы можете изменить свой blacklist.confфайл:

deny 1.2.3.4;

к:

1.2.3.4 0;

Создайте файл whitelist.conf:

if ( $whitelist = 0 ) {
    return 403;
}

Затем в nginx.conf, включите карту, которая добавляет в белый список все IP-адреса, за исключением тех, что указаны в blacklist.conf:

http {
    geo $whitelist {
        /etc/nginx/blacklist.conf;
        default 1;
    }

    ...
}

Наконец, также nginx.confдобавьте перед каждой директивой сервера whitelist.confфайл:

server {
    server_name ...;
    listen 443 ssl;

    include /etc/nginx/whitelist.conf;

    ssl_certificate       /etc/ssl/bundle.crt;
    ssl_certificate_key   /etc/ssl/server.key;

    ...
}

...

Запросы с IP-адресов, занесенных в черный список, будут немедленно возвращены.и не будет зафиксировано в файле журнала ошибок.

Вы также можете остановить регистрацию запросов с этих IP-адресов в файле журнала доступа с помощью:

access_log /path/to/file if=$whitelist; 

Связанный контент