DDOS 是一種通過大流量的請求對目標進行轟炸式訪問,導致提供服務的服務器資源耗盡進而無法繼續提供服務的攻擊手段。這篇文章主要介紹了使用Nginx、Nginx Plus抵御DDOS攻擊的方法,感興趣的小伙伴們可以參考一下
DDOS 是一種通過大流量的請求對目標進行轟炸式訪問,導致提供服務的服務器資源耗盡進而無法繼續提供服務的攻擊手段。
一般情況下,攻擊者通過大量請求與連接使服務器處于飽和狀態,以至于無法接受新的請求或變得很慢。
一、應用層DDOS攻擊的特征
應用層(七層/HTTP層)DDOS 攻擊通常由木馬程序發起,其可以通過設計更好的利用目標系統的脆弱點。例如,對于無法處理大量并發請求的系統,僅僅通過建立大量的連接,并周期性的發出少量數據包來保持會話就可以耗盡系統的資源,使其無法接受新的連接請求達到 DDOS 的目的。其他還有采用發送大量連接請求發送大數據包的請求進行攻擊的形式。因為攻擊是由木馬程序發起,攻擊者可以在很短時間內快速建立大量的連接,并發出大量的請求。
以下是一些DDOS的特證,我們可以據此特征來抵抗 DDOS(包括但不限于):
攻擊經常來源于一些相對固定的 IP 或 IP 段,每個 IP 都有遠大于真實用戶的連接數和請求數。(備注:這并不表明這種請求都是代表著 DDOS 攻擊。在很多使用NAT的網絡架構中,很多的客戶端使用網關的 IP 地址訪問公網資源。但是,即便如此,這樣的請求數和連接數也會遠少于 DDOS 攻擊。) 因為攻擊是由木馬發出且目的是使服務器超負荷,請求的頻率會遠遠超過正常人的請求。 User-Agent 通常是一個非標準的值 Referer 有時是一個容易聯想到攻擊的值
二、使用Nginx、Nginx Plus抵抗DDOS攻擊
結合上面提到的 DDOS 攻擊的特征,Nginx、Nginx Plus有很多的特性可以用來有效的防御 DDOS 攻擊,可以從調整入口訪問流量和控制反向代理到后端服務器的流量兩個方面來達到抵御 DDOS 攻擊的目的。
限制請求速度
設置 Nginx、Nginx Plus 的連接請求在一個真實用戶請求的合理范圍內。比如,如果你覺得一個正常用戶每兩秒可以請求一次登錄頁面,你就可以設置 Nginx 每兩秒鐘接收一個客戶端 IP 的請求(大約等同于每分鐘30個請求)。
limit_req_zone?binaryremoteaddrzone=one:10mrate=30r/m;server...location/login.htmllimitreqzone=one;...‘limitreqzone‘命令設置了一個叫one的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端IP(binary_remote_addr zone=one:10m rate=30r/m; server { ... location /login.html { limit_req zone=one; ... } }`limit_req_zone` 命令設置了一個叫 one 的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端 IP(binaryr?emotea?ddrzone=one:10mrate=30r/m;server...location/login.htmllimitr?eqzone=one;...‘limitr?eqz?one‘命令設置了一個叫one的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端IP(binary_remote_addr)。location 塊中的?limit_req?通過引用 one 共享內存區來實現限制訪問 /login.html 的目的。
限制連接數量
設置 Nginx、Nginx Plus 的連接數在一個真實用戶請求的合理范圍內。比如,你可以設置每個客戶端 IP 連接 /store 不可以超過10個。
limit_conn_zone $binary_remote_addr zone=addr:10m; server { … location /store/ { limit_conn addr 10; … } }
limit_conn_zone?命令設置了一個叫 addr 的共享內存區來存儲特定鍵值的狀態,在上面的例子中是客戶端 IP( $binary_remote_addr)。location 塊中?limit_conn?通過引用 addr 共享內存區來限制到 /store/ 的最大連接數為10。
關閉慢連接
有一些 DDOS 攻擊,比如 Slowlris,是通過建立大量的連接并周期性的發送一些數據包保持會話來達到攻擊目的,這種周期通常會低于正常的請求。這種情況我們可以通過關閉慢連接來抵御攻擊。
文章來源:http://www.iis7.com/b/ssyqdq/