利用 iptables 加上 recent 模塊,阻擋大量的請求

利用 iptables 加上 recent 模塊,阻擋大量的請求
新版的 iptables 有個好用簡單又有效率的功能,可以設定它阻止瞬間聯機太多的來源 IP。這種阻擋功能在某些很受歡迎的,特別像是大型討論區網站,每個網頁都遭到「無知卻故意」的人士。一瞬間太多的鏈接訪問,導致服務器呈現呆滯狀態。
這時,就需要下列的三行指令:
iptables -I INPUT -p tcp --dport 80 -d SERVER_IP -m state --state NEW -m recent --name httpuser --set

iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j LOG --log-prefix 'HTTP attack: '

iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j DROP
其中 SERVER_IP 換上被***的服務器 IP。
1.    第一行的意思是:-I,將本規則插入到 INPUT 鏈裏頭的最上頭。什麼樣的規則呢?只要是 TCP 性質的聯機,目標端口是80,目標 IP 是我們機器的IP,剛剛新被建立起來時,我們就將這個聯機列入 httpuser 這分清單中。
2.    第二行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。只要是60秒內,同一個來源連續產生多個聯機,到達第9個聯機時,我們對此聯機留下 Log記錄。記錄行會以 HTTP attack 開頭。每一次的本規則比對, –update 均會更新 httpuser 清單中的列表。
3.    第三行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。同樣的比對條件,但是本次的動作則是將此聯機給斷掉。
所以,這三行規則表示,我們允許一個客戶端,每一分鐘內可以接上服務器8個。具體數值可以看管理者決定。這些規則另外也可以用在其它對 Internet 開放的聯機服務上,例如 port 22 (SSH), port 25 (smtp email)。
爲什麼新版的 iptables 它在阻擋上很有效率呢?因爲在舊版的 iptables 中,並沒有這些新模塊功能,導致我們得需要使用操作系統的 Shell 接口,週期性地執行網絡檢查與攔阻動作。 前者只動用到網絡層的資源,而後者已經是應用層的大量(相對而言)運算。試想,服務器都已經給白目客戶操翻天了,哪還有餘力週期性地呼叫軟件層級的計算,來阻擋白目客戶呢?
如果下上述指令時,得到下列錯誤:
iptables: No chain/target/match by that name
這表示, kernel 在編譯時,沒有將 iptables module 功能勾選。要重新勾選再編譯哦~~~另一個可能是,您使用的服務器,該服務公司所提供的共享核心中,並沒有打開此功能,但因爲是核心共享…所以…沒有權利重新編譯核心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章