您好,登錄后才能下訂單哦!
這篇文章主要介紹“Nginx防御DDOS攻擊怎么配置”,在日常操作中,相信很多人在Nginx防御DDOS攻擊怎么配置問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Nginx防御DDOS攻擊怎么配置”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
下面是配置方法:
一. 限制每秒請求數
ngx_http_limit_req_module模塊通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會返回503錯誤。配置需要在兩個地方設置:
nginx.conf的http段內定義觸發條件,可以有多個條件
在location內定義達到觸發條件時nginx所要執行的動作
例如:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //觸發條件,所有訪問ip 限制每秒10個請求 ... server { ... location ~ \.php$ { limit_req zone=one burst=5 nodelay; //執行的動作,通過zone名字對應 } } }
參數說明:
$binary_remote_addr
二進制遠程地址
zone=one:10m
定義zone名字叫one,并為這個zone分配10m內存,用來存儲會話(二進制遠程地址),1m內存可以保存16000會話
rate=10r/s;
限制頻率為每秒10個請求
burst=5
允許超過頻率限制的請求數不多于5個,假設1、2、3、4秒請求為每秒9個,那么第5秒內請求15個是允許的,反之,如果第一秒內請求15個,會將5個請求放到第二秒,第二秒內超過10的請求直接503,類似多秒內平均速率限制。
nodelay
超過的請求不被延遲處理,設置后15個請求在1秒內處理。
二.限制ip連接數
ngx_http_limit_conn_module的配置方法和參數與http_limit_req模塊很像,參數少,要簡單很多
http { limit_conn_zone $binary_remote_addr zone=addr:10m; //觸發條件 ... server { ... location /download/ { limit_conn addr 1; // 限制同一時間內1個連接,超出的連接返回503 } } }
三.白名單設置
http_limit_conn 和http_limit_req模塊限制了單ip單位時間內的并發和請求數,但是如果nginx前面有lvs或者haproxy之類的負載均衡或者反向代 理,nginx獲取的都是來自負載均衡的連接或請求,這時不應該限制負載均衡的連接和請求,就需要geo和map模塊設置白名單:
geo $whiteiplist { default 1; 10.11.15.161 0; } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=one:10m rate=10r/s; limit_conn_zone $limit zone=addr:10m;
geo模塊定義了一個默認值是1的變量whiteiplist,當在ip在白名單中,變量whiteiplist的值為0,反之為1
如果在白名單中--> whiteiplist=0 --> $limit="" --> 不會存儲到10m的會話狀態(one或者addr)中 --> 不受限制
反之,不在白名單中 --> whiteiplist=1 --> $limit=二進制遠程地址 -->存儲進10m的會話狀態中 --> 受到限制
四.測試
使用ab命令來模擬cc攻擊,http_limit_conn 和http_limit_req模塊要分開測試,同時注意http_limit_conn模塊只統計正在被處理的請求(這些請求的頭信息已被完全讀入)所 在的連接。如果請求已經處理完,連接沒有被關閉時,是不會被統計的。這時用netstat看到連接數可以超過限定的數量,不會被阻止。
ab -n
請求數 -c 并發 http://10.11.15.174/i.php
如果被阻止前臺會返回503,同時在nginx的error_log中會看到如下錯誤日志:
被限制連接數:
2015/01/28 14:20:26 [error] 4107#0: *65525 limiting connections by zone "addr", client: 10.11.15.161, server: , request: "get /i.php?=phpe9568f35-d428-11d2-a769-00aa001acf42 http/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"
被限制請求數:
2015/01/28 14:18:59 [error] 4095#0: *65240 limiting requests, excess: 5.772 by zone "one", client: 10.11.15.161, server: , request: "get /i.php?=phpe9568f34-d428-11d2-a769-00aa001acf42 http/1.1", host: "10.11.15.174", referrer: ""
五.其它一些防cc的方法
1.nginx模塊 modsecurity、http_guard、ngx_lua_waf
modsecurity 應用層waf,功能強大,能防御的攻擊多,配置復雜
ngx_lua_waf 基于ngx_lua的web應用防火墻,使用簡單,高性能和輕量級
http_guard 基于openresty
2.軟件+iptables
fail2ban 通過分析日志來判斷是否使用iptables攔截
ddos deflate 通過netstat判斷ip連接數,并使用iptables屏蔽
開頭說過抗ddos是一個系統工程,通過優化系統和軟件配置,只能防御小規模的cc攻擊,對于大規模攻擊、四層流量攻擊、混合攻擊來說,基本上系統和應用軟件沒掛,帶寬就打滿了。下面是我在工作中使用過的防御ddos的方式:
1、高防服務器和帶流量清洗的isp
通常是美韓的服務器,部分isp骨干供應商有流量清洗服務,例如香港的pccw。通常可以防御10g左右的小型攻擊
2、流量清洗服務 例如:akamai(prolexic),nexusguard 我們最大受到過80g流量的攻擊,成功被清洗,但是費用非常貴
3、cdn 例如:藍訊 網宿 cloudflare
等,cdn針對ddos的分布式特點,將流量引流分散,同時對網站又有加速作用,效果好,成本相對低。
到此,關于“Nginx防御DDOS攻擊怎么配置”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。