封禁特定 IP:筑牢安全防線
- 基于配置文件的 IP 封禁:在 Nginx 主配置文件(通常是
/etc/nginx/nginx.conf)或特定虛擬主機配置文件(如/etc/nginx/sites-enabled/default)里,利用deny指令可直接拒絕指定 IP 訪問。例如,檢測到某惡意 IP 持續發起攻擊,要封禁192.168.1.10,在server塊或http塊內添加deny 192.168.1.10;,重啟 Nginx 服務(service nginx restart)后,該 IP 請求將被拒之門外,返回 403 Forbidden 狀態碼。若要封禁一批連續 IP 段(如192.168.1.0/24子網),則用deny 192.168.1.0/24;,簡潔高效,適合應對來自特定區域網絡的惡意掃描等場景。 - 結合動態模塊封禁:利用
ngx_http_access_module配合geo模塊能實現更靈活封禁。在配置中定義geo塊識別惡意 IP 集,像geo $bad_ips { default 0; 192.168.2.5 1; 10.0.0.0/8 1; },將可疑 IP 標記為1(0代表正常),隨后在server段用deny結合geo變量,if ($bad_ips) { return 403; },如此一來,后續若有新惡意 IP,只需更新geo塊配置,無需重啟 Nginx,保障業務連續性同時強化防護。
解封 IP:恢復合法訪問
誤封或惡意行為停止后,解封勢在必行。同樣在配置文件操作,將
deny對應 IP 語句注釋掉,便能恢復其訪問權限。例如之前封禁的192.168.1.10解封,把deny 192.168.1.10;前加#變為注釋行,再service nginx reload(平滑重載配置,避免重啟服務中斷業務),流量即可正常流入。進階:基于訪問頻率封禁
僅靜態 IP 封禁有局限,高頻惡意請求偽裝多變。借助
ngx_http_limit_req_module按訪問頻率管控,在http塊設limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;,針對每個 IP($binary_remote_addr)劃分 10MB 內存空間(zone),每秒限 10 次請求(rate)。在server塊對關鍵路徑(如登錄接口/login)應用規則location /login { limit_req zone=mylimit burst=20 nodelay; },超burst(20 次突發請求)后延遲響應,持續違規則封禁,綜合腳本監控請求頻率、結合deny指令靈活處置,強化縱深防御。日志聯動與自動化運維
Nginx 的
access.log記錄訪問詳情,結合腳本(如 Python 的pandas、re模塊處理日志)定期分析,提取高頻異常 IP,自動更新封禁配置。以 Shell 腳本為例,解析日志抓頻繁 404、500 錯誤 IP,依策略添進deny列表,再nginx -s reload,從被動防御邁向主動智能運維,保障 Web 系統在復雜網絡環境下穩健、安全運行,讓 Nginx 封解禁機制成為守護數字資產的堅固盾牌。