Centos
從 iptables 和 ipset 命令添加 IP 地址時,ipset 的行為有所不同
我有一個在命令下面創建的列表
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 ….