2012年6月15日 星期五

[Firewll][Iptables] Using iptables with module of recent. Blocking lot of request of connection


新版的 iptables 有個好用簡單又有效率的功能,可以設定它阻止瞬間連線太多的來源 IP。至於是新到多少版我實在懶得查文件,看到有一說是紅帽企業三版和 Centos 三版是不行的,都要4版以上。

這種阻擋功能在某些很受歡迎的站台,特別像是大型討論區網站,每個網頁都是重型運算負荷時,又遭到「無知卻故意」的人士,使用像是 HTTrack 或 Teleport 之類的軟體砍站。一瞬間太多的連線需求,每個需求又是重負荷的運算,導致伺服器呈現呆滯狀態。

這個時候,無辜的網站管理員和其他循規蹈矩的網友,就需要下列的三行指令來拯救了:

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 功能勾選。要重新勾選再編譯哦~~~另一個可能是,您使用的伺服器,該服務公司所提供的共享核心中,並沒有打開此功能,但因為是核心共享…所以…沒有權利重新編譯核心

Reference:



利用 iptables 加上 recent 模組,阻擋大量的連線請求

Related Posts:

0 意見:

張貼留言