在 Ubuntu 下如何增大 iptables 的 rt_recent 記錄表格大小

最近在研究如何使用 iptables 限制每個 IP 位址每分鐘可以連線多少次,以避免有人利用DDOS進行服務阻斷攻擊。但是發現不是出現錯誤訊息(使用 dmesg 觀看錯誤訊息),就是根本無法工作正常,錯誤訊息如下:

xt_recent: hitcount (200) is larger than packets to be remembered (20)

在網路上查了一下發現原來系統 iptables 也是有限制的,例如 Ubuntu 作業系統預設值是只能記錄最近的 100 個 IP 位址,而每個 IP 只能記錄最近的 20 筆記錄,所以你要 iptables 記錄最近 200 筆資料已經遠遠超出它可以記錄的預設值 20 筆了。而這些數值都在 /sys/module/xt_recent/parameters 目錄底下的,ip_list_tot (記錄最近幾個 IP位址),和 ip_pkt_list_tot(每個IP位址記錄最近的幾個封包)。

/sys/module/xt_recent/parameters/ip_list_tot = 100 --> 所以只能記錄最近 100 個 IP 位址
/sys/module/xt_recent/parameters/ip_pkt_list_tot = 20 --> 所以只能記錄每個IP位址最近 20 個封包

如果要更改這些設定,我找了很久,因為Linux版本很多,我尚無一個明確的方法,更糟糕的是這兩個虛擬檔案預設值只能讀取,不能寫入。所以還必須更改其寫入權限,所以我把它寫到 /etc/rc.local ,讓系統一開機時就可以更改。

# nano /etc/rc.local

在檔案尾部增加

chmod 600 /sys/module/xt_recent/parameters/ip_list_tot
chmod 600 /sys/module/xt_recent/parameters/ip_pkt_list_tot
echo "200" > /sys/module/xt_recent/parameters/ip_list_tot
echo "200" > /sys/module/xt_recent/parameters/ip_pkt_list_tot

這樣每次開機時就可以使 iptables 記錄 200 個 IP 位址,每個 IP 位址可以記錄 200 個封包記錄,但是這肯定會增加記憶體用量以及 CPU 的負載,所以副作用還不得而知,先試試看。建議各位不要設定太大!

我有看過核心 Kernel 編譯時的一些參數,這兩個數值不要超過 255,不然可能導致系統崩潰。而且此方法只能適用在 Ubuntu,其他的版本尚無驗證過!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *