nGinX Forbidden 仍會觸發請求限制

nGinX Forbidden 仍會觸發請求限制

在請求限製配置之前我有一些“拒絕”規則。如果被封鎖的使用者(透過拒絕規則)正在對網站進行 ddos​​sing,他仍然會觸發請求限制,因此會建立數千個日誌條目。為什麼?我預計它不會超出拒絕規則。

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

日誌顯示一個禁止錯誤,緊接著是數百個請求限制錯誤。這一遍又一遍地重複。

答案1

當nginx處理一個請求時,會經過幾個階段。他們之中 :預訪問使用權階段。 預訪問是通常limit_req起作用的地方,而訪問是allow/deny指令起作用的地方。這意味著速率限制已完成如果兩個指令在同一上下文中聲明,則進行 IP 過濾。

因此,如果您的意願是嘗試使用本機指令在 nginx 中直接工作一些類似於fail2ban的進程(考慮到您的其他問題返回代碼 444),這本質上是不可能的。

答案2

這個問題有點老了,但是對於任何遇到這個問題的人來說,我找到的針對這種情況的最佳解決方案是使用 amap和 anif而不是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 列入白名單的映射,除了 中的 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; 

相關內容