Nginx防止DDOS攻擊方案

2022-09-07 01:09:13 字數 2403 閱讀 8528

一. 限制每秒請求數

ngx_http_limit_req_module模組通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會返回503錯誤。配置需要在兩個地方設定:

nginx.conf的http段內定義觸發條件,可以有多個條件

在location內定義達到觸發條件時nginx所要執行的動作

例如:http }}

引數說明:

$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和http_limit_req模組限制了單ip單位時間內的併發和請求數,但是如果nginx前面有lvs或者 haproxy之類的負載均衡或者反向**,nginx獲取的都是來自負載均衡的連線或請求,這時不應該限制負載均衡的連線和請求,就需要geo和map 模組設定白名單:

geo $whiteiplist

map $whiteiplist $limit

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 併發

如果被阻止前台會返回503,同時在nginx的error_log中會看到如下錯誤日誌:

被限制連線數:

被限制請求數:

五.其它一些防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的方式:

nginx防止DDOS攻擊

防禦ddos是乙個系統工程,攻擊花樣多,防禦的成本高瓶頸多,防禦起來即被動又無奈。ddos的特點是分布式,針對頻寬和服務攻擊,也就是四層流量攻擊和七層應用攻擊,相應的防禦瓶頸四層在頻寬,七層的多在架構的吞吐量。對於七層的應用攻擊,我們還是可以做一些配置來防禦的,例如前端是nginx,主要使用ngin...

Nginx防止DDOS攻擊配置

限制每秒請求數 ngx http limit req module模組通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會返回503錯誤。配置需要在兩個地方設定 例如 白名單設定 http limit conn和http limit req模組限制了單ip單位時間內的併發和請求數...

Nginx防止DDOS流量攻擊

ddos流量攻擊 頻繁的傳送請求,造成寬頻占用,其他客戶端無法訪問 nginx解決ddos流量攻擊,利用limit req zone限制請求次數 limit conn zone限制連線次數 限制ip的每秒請求次數 limit req zone binary remote addr zone one ...