Centos

從 iptables 和 ipset 命令添加 IP 地址時,ipset 的行為有所不同

  • June 28, 2016

我有一個在命令下面創建的列表

ipset create foo hash:ip maxelem 40000000 timeout 180

這就是空 foo 的樣子

#ipset list foo
Name: foo
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 40000000 timeout 180
Size in memory: 16504
References: 0
Members:

然後我添加了一個 /16 子網,這意味著 65535 個 IP 地址。正如我們在下面的命令中看到的,hashsize 動態變化並且 IP 地址添加成功。

#ipset add foo 192.168.0.0/16


#ipset list foo | head -10
Name: foo
Type: hash:ip
Revision: 1
Header: family inet hashsize 32768 maxelem 40000000 timeout 180
Size in memory: 2925208
References: 0
Members:
192.168.165.92 timeout 175
192.168.241.240 timeout 175
192.168.84.49 timeout 175

# ipset list foo | wc -l
65543

現在我正在銷毀這個集合併使用上面的相同命令再次創建,以便我再次將 hashsize 均衡為 1024。然後我將以下規則添加到 iptables 並使用 hping3 發送隨機包

iptables -A PREROUTING -t raw -j SET --add-set foo src

hping3  --flood  --rand-source <server-ip>

雖然攻擊仍在繼續,但看起來 iptables 在某個時間點後無法添加更多 IP 地址。並且 hashsize 保持不變

# ipset list foo |  wc -l
12295

# ipset list foo |  head -10
Name: foo
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 40000000 timeout 180
Size in memory: 262264
References: 1
Members:
5.125.171.17 timeout 174
92.5.220.202 timeout 174
164.124.160.24 timeout 174

如果我通過手動增加 hashsize 來重複這個測試,它會使 iptables 可以添加更多的 IP 地址。

我在 CentOS 7 上使用以下版本進行了此測試

kernel 3.15.9
ipset 6.19
iptables 1.4.21

我的問題是,這個引用的原因是什麼?這是安全預防措施還是什麼?

看起來iptables在某個時間點後無法添加更多 IP 地址

這是引言中手冊ipset中描述的雜湊表的預期行為:

…當 iptables/ip6tables 的 SET 目標添加條目時,雜湊大小是固定的,即使無法將新條目添加到集合中,集合也不會重複。

沒有給出任何理由,但有人可能會推測,防止防火牆可能聲稱無限量的記憶體是一件好事TM ….

引用自:https://serverfault.com/questions/786668