Nginx中CC攻擊與DDoS防御的高級策略指南
一、分層防御體系架構(gòu)
二、CC 攻擊防御策略
1. 請求頻率限制(核心防御)
# 在 http 塊中定義限制區(qū)域 http { # 定義請求限制區(qū)域 limit_req_zone $binary_remote_addr zone=req_perip:10m rate=10r/s; limit_req_status 429; # 自定義限流狀態(tài)碼 # 定義并發(fā)連接限制 limit_conn_zone $binary_remote_addr zone=conn_perip:10m; }
2. 關(guān)鍵位置應(yīng)用限流
server { # 登錄接口嚴(yán)格限制 location = /login { limit_req zone=req_perip burst=5 nodelay; limit_conn conn_perip 3; proxy_pass http://backend; } # API 接口限制 location /api/ { limit_req zone=req_perip burst=10; limit_conn conn_perip 5; proxy_pass http://backend; } # 靜態(tài)資源寬松限制 location ~* \.(js|css|png|jpg)$ { limit_req zone=req_perip burst=20; access_log off; # 減少日志壓力 } }
3. 人機驗證挑戰(zhàn)
location / { # 當(dāng)請求超過閾值時重定向到驗證頁面 error_page 429 = @verify; limit_req zone=req_perip burst=15 nodelay; # 正常請求處理 proxy_pass http://backend; } location @verify { # 返回驗證碼挑戰(zhàn) add_header Content-Type text/html; return 200 '<html><body> <h1>請驗證</h1> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script> <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div> </body></html>'; }
三、DDoS 防御策略
1. 連接限制配置
# 全局連接限制 events { worker_connections 4096; # 根據(jù)服務(wù)器性能調(diào)整 } http { # 限制單個IP的連接數(shù) limit_conn_zone $binary_remote_addr zone=conn_limit_perip:10m; limit_conn conn_limit_perip 50; # 限制每個連接的速率 limit_rate 500k; # 全局默認(rèn)限速 # 限制請求體大小 client_max_body_size 10m; }
2. 慢連接防護
http { # 防止慢速攻擊 client_body_timeout 10s; # 請求體超時 client_header_timeout 10s; # 請求頭超時 keepalive_timeout 15s; # 保持連接超時 send_timeout 10s; # 發(fā)送響應(yīng)超時 # 關(guān)閉不必要的HTTP方法 if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } }
3. 高級防護模塊
# 啟用Nginx Plus或第三方模塊 load_module modules/ngx_http_modsecurity_module.so; load_module modules/ngx_http_geoip2_module.so; http { # 使用GeoIP限制地區(qū)訪問 geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_country_code country iso_code; } map $geoip2_country_code $allowed_country { default 0; CN 1; # 只允許中國IP US 1; JP 1; } server { # 應(yīng)用地區(qū)限制 if ($allowed_country = 0) { return 403; } # 啟用WAF modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; } }
四、Nginx 調(diào)優(yōu)增強防御
1. 內(nèi)核級優(yōu)化 (sysctl.conf)
# 防止SYN洪水攻擊 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 4096 # 加快TIME-WAIT回收 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 # 連接追蹤優(yōu)化 net.netfilter.nf_conntrack_max = 1000000 net.netfilter.nf_conntrack_tcp_timeout_established = 1200
2. Nginx 工作進程優(yōu)化
# 調(diào)整工作進程 worker_processes auto; # 自動匹配CPU核心 worker_rlimit_nofile 65535; # 每個進程最大文件描述符 # 使用多核處理連接 events { use epoll; worker_connections 4096; multi_accept on; }
3. 緩存優(yōu)化減少后端壓力
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m; server { location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating; # 緩存鎖定防止緩存擊穿 proxy_cache_lock on; proxy_cache_lock_timeout 5s; } }
五、云平臺集成防御
1. 阿里云/騰訊云集成
# 通過HTTP頭傳遞真實客戶端IP real_ip_header X-Forwarded-For; set_real_ip_from 100.64.0.0/10; # 云平臺內(nèi)網(wǎng)段 # 啟用云平臺WAF location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 云平臺特定頭 proxy_set_header Ali-CDN-Real-IP $remote_addr; proxy_set_header Qcloud-Real-IP $remote_addr; }
2. Cloudflare 集成
# 只接受來自Cloudflare IP的請求 include /etc/nginx/cloudflare-ips.conf; server { listen 80; server_name yourdomain.com; # 僅允許Cloudflare IP訪問 allow 103.21.244.0/22; allow 103.22.200.0/22; # ... 其他Cloudflare IP段 deny all; location / { proxy_pass http://backend; } }
六、監(jiān)控與自動化響應(yīng)
1. 實時監(jiān)控配置
# 啟用狀態(tài)監(jiān)控 server { listen 127.0.0.1:8080; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } }
2. 自動封禁腳本
#!/bin/bash # 自動封禁高頻IP LOG_PATH="/var/log/nginx/access.log" THRESHOLD=100 # 每分鐘請求閾值 BAN_TIME=3600 # 封禁時間(秒) tail -F $LOG_PATH | while read LINE do IP=$(echo $LINE | awk '{print $1}') COUNT=$(grep $IP $LOG_PATH | wc -l) if [ $COUNT -gt $THRESHOLD ]; then # 添加到防火墻 iptables -A INPUT -s $IP -j DROP # 定時解封 (sleep $BAN_TIME && iptables -D INPUT -s $IP -j DROP) & fi done
3. Prometheus + Grafana 監(jiān)控面板
# nginx-prometheus-exporter 配置 scrape_configs: - job_name: 'nginx' static_configs: - targets: ['nginx-host:9113'] metrics_path: /metrics
監(jiān)控指標(biāo):
- 請求率
- 活動連接數(shù)
- 錯誤率
- 帶寬使用
- 上游響應(yīng)時間
七、應(yīng)急響應(yīng)計劃
攻擊發(fā)生時的處理流程:
1.啟用緊急模式:
# 在http塊添加 limit_req_zone $binary_remote_addr zone=emergency:10m rate=5r/s; server { location / { limit_req zone=emergency burst=10 nodelay; } }
2.切換至靜態(tài)維護頁面:
location / { root /var/www/emergency; try_files $uri /maintenance.html; }
3.啟用云平臺DDoS防護:
- 阿里云:啟用DDoS高防IP
- 騰訊云:啟用大禹BGP高防
- AWS:啟用Shield Advanced
4.分析攻擊模式:
# 分析訪問日志 awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20 # 實時監(jiān)控 tail -f access.log | grep -E ' (429|444|503) '
最佳實踐總結(jié)
- 分層防御:網(wǎng)絡(luò)層 + Nginx層 + 應(yīng)用層
- 速率限制:基于IP和關(guān)鍵端點
- 連接管理:限制并發(fā)和超時
- 自動封禁:實時監(jiān)控 + 自動響應(yīng)
- 云平臺集成:利用云WAF和DDoS防護
- 定期演練:每季度進行防御壓力測試
關(guān)鍵建議:對于大規(guī)模DDoS攻擊,建議結(jié)合云服務(wù)商的DDoS防護服務(wù)(如阿里云高防IP、Cloudflare Pro),這些服務(wù)提供TB級的清洗能力,遠超單臺Nginx服務(wù)器的防御能力。
最終部署前,務(wù)必進行壓力測試:
# 使用wrk進行壓力測試 wrk -t12 -c400 -d30s --timeout 10s https://yourdomain.com
根據(jù)測試結(jié)果調(diào)整限流閾值和防護策略,確保在防護攻擊的同時不影響正常用戶訪問。
到此這篇關(guān)于Nginx中CC攻擊與DDoS防御的高級策略指南的文章就介紹到這了,更多相關(guān)Nginx防御CC攻擊與DDoS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx限制某個IP同一時間段的訪問次數(shù)和請求數(shù)示例代碼
nginx可以通過ngx_http_limit_conn_module和ngx_http_limit_req_module配置來限制ip在同一時間段的訪問次數(shù).具體示例代碼大家參考下本文2017-08-08NGINX 配置內(nèi)網(wǎng)訪問的實現(xiàn)步驟
本文主要介紹了NGINX 配置內(nèi)網(wǎng)訪問的實現(xiàn)步驟,Nginx的geo模塊限制域名訪問權(quán)限,僅允許內(nèi)網(wǎng)/辦公室IP訪問,具有一定的參考價值,感興趣的可以了解一下2025-05-05Windows系統(tǒng)下Nginx服務(wù)器的基本安裝和配置方法介紹
這篇文章主要介紹了Windows系統(tǒng)下Nginx服務(wù)器的基本安裝和配置方法,文中給出了一個配置文件的實例并作出了些說明,需要的朋友可以參考下2015-12-12Nginx配置之實現(xiàn)多臺服務(wù)器負(fù)載均衡
這篇文章主要介紹了Nginx配置之實現(xiàn)多臺服務(wù)器負(fù)載均衡,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07