以下のコマンドで作成したリストがあります
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:
次に、65535のIPアドレスを意味する/ 16サブネットを追加しました。以下のコマンドを見るとわかるように、ハッシュサイズは動的に変更され、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
今、私はこのセットを破棄し、上記と同じコマンドで再度作成して、ハッシュサイズを再び1024に等しくします。次に、以下のルールをiptablesに追加し、hping3でランダムパッケージを送信しました
iptables -A PREROUTING -t raw -j SET --add-set foo src
hping3 --flood --Rand-source <server-ip>
攻撃が続いている間、iptablesはある時点以降IPアドレスを追加できないようです。そしてハッシュサイズは同じままです
# 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
手作業でハッシュサイズを増やしてこのテストを繰り返すと、iptablesがさらにIPアドレスを追加できるようになります。
以下のバージョンのCentOS7でこのテストを行いました
kernel 3.15.9
ipset 6.19
iptables 1.4.21
私の質問は、この引用の理由は何ですか?これはセキュリティ上の予防措置か何かですか?
iptables
はある時点以降にIPアドレスを追加できないようです
これは、「はじめに」の 手動 で説明されているように、ipset
ハッシュテーブルで予想される動作です。
... iptables/ip6tablesのSETターゲットによってエントリが追加された場合、ハッシュサイズは固定され、セットは複製されません。新しいエントリをセットに追加することはできません。
理由は示されていませんが、ファイアウォールが無制限の量のメモリを要求する可能性を防ぐことは良いことだと推測されるかもしれません。TM ..。