首頁 >運維 >Nginx >怎麼設定Nginx伺服器防止Flood攻擊

怎麼設定Nginx伺服器防止Flood攻擊

王林
王林轉載
2023-05-15 18:52:06807瀏覽

測試

我會簡單的告訴你如何配置nginx的限制請求模組並且它是如何保護你的網站,防止你被攻擊與ddos或是其他基於http的拒絕服務攻擊。

這個測試中,我將樣本頁在保存在blitz.io(現在是免費服務)命名為about.html,用於測試limit_req指令.

首先,我在blitz上使用下面的指令,用來發起1075個並發請求並且持續一分鐘,回應超時設定為2分鐘,區域為加州,同時設定了除掉狀態200以外的其他狀態全部為異常狀態,甚至是503都被認為是沒有成功.

-p 1-1075:60 --status 200 -t 2000 -r california http://kbeezie.com/about.html

怎麼設定Nginx伺服器防止Flood攻擊

# 還不算壞,對不對? 但如果這是一個php文檔. 很可能有用戶會造成php進程的502/504狀態,讓伺服器一直崩潰或無響應. 尤其是你使用了沒有任何保護的vps或其他廉價伺服器,故障率會更高。 (原文廣告,此處封鎖)

當然你可以使用快取或其他工具來提高伺服器效能與回應能力, 就比如你使用wordpress你肯定要使用wordpress caching plugin. da for those type of people we can use the limit request module.

在nginx中我們建立一個區域http { },我叫他blitz設定每秒5次請求, 最大容納資料量為10mb.我使用$binary_remote_addr當作session變數讓你自己比$remote_addr的正常訪客可以存取大於10mb的空間.

複製程式碼 程式碼如下:

limit_req_zone $binary_remote_addr zone=blitz:10m rate=5r/s;

然週在伺服器中定義上這些規則:

複製程式碼 程式碼如下:

location = /about.html {
 limit_req zone=blitz nodelay;
}


然後重新載入nginx配置,看看效果:

怎麼設定Nginx伺服器防止Flood攻擊

# 你會發現現在大於只有285人可以存取伺服器,每秒請求數為4.75 ,沒有超過我們設定的5次每秒,檢查日誌你會發現沒有訪問到的請求都是http 503,訪問到的都是http 200.

使用這樣的設定對於想限制地區存取是很有幫助的,它也可以應用在所有的php請求上.

#php 應用程式請求限制

如果你想限制所有的php應用限制,你可以這樣做:

複製程式 程式碼如下:

location ~ \.php {
 limit_req   zone=flood;
 include php_params.conf;
 fastcgi_pass unix:/tmp/php5-fpm.sock;
}

它可以幫你玩意些設定項像加速或減速,以應對突發或無延遲需求. 配置項詳情,猛擊這裡: httplimitreqmodule.
註:

你可能注意到上面的圖表測試了1075個用戶請求,這裡有個誤導,因為所有的訪問請求都來自與位於加州的同一個ip(50.18.0.223).


我很難實現一個真實的高流量網路或ddos (分散式拒絕服務攻擊).這也就是為什麼我們訪問成功的用戶的數量跟ip不是很大. 伺服器負載也會影響測試用戶的訪問數或地區. 使用免費版本你可以最多並發訪問到的用戶數是50個. 當然你可以花每天$49美刀讓1000個用戶訪問你的網站.

如果你有足夠的記憶體跟頻寬,用單一ip位址測試是很容易的. 用這個工具就可以實現: 高並發量, ab, openload等等. 只不過是在終端界面,沒有ui而已.

當然你要自己測試, 記得要使用status flag,因為blitz會在5秒左右後回應存取請求.

更好的替換方案

這裡不會深入講解更多細節, 如果你認真的想阻止攻擊你伺服器的ddos或multi-service attack,還有其他很棒的軟體工具像iptables (linux), pf (packet filter for bsd) , 或者你的伺服器提供硬體的話,你可以使用你的硬體防火牆. 上述的限制模組只會阻止透過http請求過來的洪水攻擊,它不會阻止ping包洪水攻擊或其他的漏洞,對於這些情況你可以關閉不需要的服務和不需要的端口,以防止別人的突破.

舉個例子,我的服務器對外網公開的端口只有http/https和ssh. 像mysql這些服務之綁定本機連線. 也可以將一些通用服務設定成不常用的連接埠上,這樣就不會被嗅探器(iptables/pf會對這種情況有幫助).

以上是怎麼設定Nginx伺服器防止Flood攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除