У меня есть список, созданный ниже командой
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-адресов. Как видно из приведенных ниже команд, размер хеш-кода изменился динамически, и 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-адресов.
Я провел этот тест на CentOS 7 со следующими версиями
kernel 3.15.9
ipset 6.19
iptables 1.4.21
У меня вопрос, в чем причина этой цитаты? Это мера безопасности или что-то в этом роде?
это выглядит как
iptables
не может добавить больше IP-адресов через некоторое время
Это ожидаемое поведение для ipset
хеш-таблица, как описано в руководство во введении:
... Когда записи добавляются целью SET iptables / ip6tables, тогда размер хэша фиксированный и набор не будет дублироваться, даже если новая запись не может быть добавлена в набор.
Причина не указана, но можно предположить, что предотвращение потенциального использования брандмауэром неограниченного объема памяти - это хорошо.TM ....