1. 優化Nginx自身配置:限制請求速率與并發連接
Nginx內置的limit_req
(請求速率限制)和limit_conn
(并發連接限制)模塊是基礎防護手段,可有效減緩DDoS攻擊的影響。
http
塊中創建共享內存區域,用于存儲客戶端IP的請求速率信息(如zone=my_limit:10m
表示分配10MB內存,支持約1.6萬個IP地址)。設置允許的基礎速率(如rate=1r/s
表示每秒1個請求)和突發容量(如burst=5
表示允許5個突發請求)。server
或location
塊中使用limit_req
指令,結合nodelay
參數立即處理突發請求(避免延遲響應)。例如:http {
limit_req_zone $binary_remote_addr zone=my_limit:10m rate=1r/s;
server {
location / {
limit_req zone=my_limit burst=5 nodelay;
# 其他配置...
}
}
}
limit_conn
模塊限制每個IP的并發連接數(如limit_conn addr 10
表示每個IP最多10個并發連接),防止單個IP占用過多資源。需在http
塊中定義共享內存區域(如limit_conn_zone $binary_remote_addr zone=addr:10m;
),并在location
塊中應用。這些配置能有效降低惡意流量的沖擊,保障正常用戶的訪問體驗。2. 配置系統防火墻:過濾異常流量
使用ufw
(Uncomplicated Firewall)或iptables
過濾無效或惡意流量,僅允許必要的端口(如HTTP 80、HTTPS 443、SSH 22)對外開放。
sudo apt install ufw
),啟用防火墻(sudo ufw enable
),允許Nginx流量(sudo ufw allow 'Nginx Full'
),并限制SSH訪問(sudo ufw allow 22/tcp
)。通過sudo ufw status
查看規則是否生效。sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
)和每IP最大連接數(sudo iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j DROP
),防止大量無效連接耗盡服務器資源。需保存規則(sudo apt install iptables-persistent
,安裝時選擇“是”保存)。3. 部署Fail2Ban:自動封禁惡意IP
Fail2Ban通過監控Nginx日志(如access.log
),識別頻繁請求、異常User-Agent等行為,自動將惡意IP加入防火墻黑名單(如iptables),并設置封禁時間(如600秒)。
sudo apt install fail2ban
。/etc/fail2ban/jail.local
,添加Nginx監控規則:[nginx]
enabled = true
filter = nginx
action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
bantime = 600 # 封禁600秒
findtime = 600 # 600秒內檢測
maxretry = 3 # 3次違規封禁
sudo systemctl start fail2ban
,并設置開機自啟(sudo systemctl enable fail2ban
)。4. 使用CDN服務:分布式防御與流量清洗
將Nginx服務器置于CDN(如Cloudflare、Akamai)后方,利用CDN的分布式節點吸收和過濾惡意流量(如SYN Flood、UDP Flood),僅將合法流量轉發至源服務器。CDN還能緩存靜態內容(如圖片、CSS、JS),減少源服務器的負載壓力。配置時需將域名解析至CDN提供的CNAME記錄,并在CDN控制臺開啟DDoS防護功能(如Cloudflare的“防護中心”)。
5. 定期更新與監控:提升安全性與響應速度
sudo apt update && sudo apt upgrade
,安裝最新的安全補丁,修復已知漏洞(如Nginx的緩沖區溢出漏洞),降低被攻擊的風險。access.log
、error.log
),識別異常流量模式(如短時間內大量來自同一IP的請求),及時采取應對措施。