Назад | Перейти на главную страницу

ipset по-разному ведет себя при добавлении IP-адреса из iptables и команды 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-адресов. Как видно из приведенных ниже команд, размер хеш-кода изменился динамически, и 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 ....