在Nginx日志中識別并阻止DDoS攻擊可以通過以下幾個步驟來實現:
首先,你需要定期分析Nginx的訪問日志。常見的日志文件路徑是 /var/log/nginx/access.log。
remote_addr: 客戶端的IP地址request_time: 請求處理時間status: HTTP狀態碼body_bytes_sent: 發送的字節數http_referer: 引用頁面http_user_agent: 用戶代理通過以下幾種方式來識別異常流量:
檢查單個IP地址在短時間內發起的請求數量。如果某個IP地址在短時間內發起了大量請求,可能是DDoS攻擊。
awk '{print $1, $4}' /var/log/nginx/access.log | cut -d: -f1 | sort | uniq -c | sort -nr
檢查單位時間內的請求數量。
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1 | sort | uniq -c | sort -nr
檢查返回的狀態碼,如404、502等,這些可能是攻擊者嘗試訪問不存在的資源。
awk '{print $9}' /var/log/nginx/access.log | cut -d'"' -f2 | sort | uniq -c | sort -nr
一旦識別出惡意IP,可以使用Nginx的deny指令來阻止這些IP。
fail2banfail2ban是一個自動化工具,可以監控日志文件并阻止惡意IP。
fail2ban:sudo apt-get install fail2ban
fail2ban:編輯/etc/fail2ban/jail.local文件,添加以下內容:
[nginx-ddos]
enabled = true
filter = nginx-ddos
action = iptables-multiport[name=DDoS, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 600
編輯/etc/fail2ban/filter.d/nginx-ddos.conf文件,添加以下內容:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" 404 80
ignoreregex =
fail2ban:sudo systemctl restart fail2ban
如果你不想使用fail2ban,可以手動在Nginx配置文件中阻止IP。
/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf):server {
...
deny 192.168.1.1; # 替換為惡意IP
...
}
sudo nginx -s reload
持續監控Nginx日志和系統性能,根據實際情況調整阻止策略和閾值。
通過以上步驟,你可以有效地識別并阻止DDoS攻擊,保護你的Nginx服務器免受惡意流量的影響。