监控 Nginx 日志以防御 DDoS 的实操方案
一 监控体系与告警设计
二 基于日志的自动封禁与联动处置
#!/usr/bin/env bash
acc_log="/var/log/nginx/access.log"
blockip="/usr/local/nginx/conf/vhost/blockip.conf"
tmp=$(mktemp)
tail -n50000 "$acc_log" | \
awk '{print $1,$7,$9}' | \
grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou|360|bing|soso|403|api" | \
awk '{print $1}' | sort | uniq -c | sort -rn | \
awk '$1>5000{print "deny "$2";"}' > "$tmp"
# 排除公司网段
sed -i '/116\.228\.62\.38/d' "$tmp"
# 写入黑名单并热加载
cat "$tmp" > "$blockip"
/usr/local/nginx/sbin/nginx -s reload
rm -f "$tmp"
提示:阈值与扫描窗口需结合业务基线调优,避免误封搜索引擎或内网网段。三 Nginx 内置限流与访问控制加固
http {
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=10r/s;
server {
location / {
limit_req zone=per_ip burst=20 nodelay;
proxy_pass http://backend;
}
}
}
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 30;
proxy_pass http://backend;
}
}
}
location /admin {
allow 192.168.1.0/24;
deny all;
}
deny 203.0.113.45;
四 分层防护与持续优化