Почему опция 'nomatch' в ipset не работает в этом случае?
Я использую ipset 6.23-2 на Debian Jessie. Я создал набор hash:net для и правило iptables, чтобы отбрасывать весь трафик для адресов в наборе.
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere match-set Example-Set src
Я использовал опцию "nomatch", чтобы добавить к ней сеть моих внутренних серверов. Я предполагал, что это будет работать как исключение, так что это в основном защита от дурака, и я не случайно блокирую себя от своих серверов (или одного из моих коллег).
Name: Example-Set
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536 comment
Size in memory: 3424
References: 1
Members:
10.50.7.0/24 nomatch comment "# 2017-09-14"
Тем не менее, он все равно совпадает, когда я добавляю конкретный IP, например, внутри подсети, например, 10.50.7.30, и отбрасывает весь трафик с этого ip.
Name: Example-Set
Type: hash:net
Revision: 7
Header: family inet hashsize 1024 maxelem 65536 comment
Size in memory: 3424
References: 1
Members:
10.50.7.0/24 nomatch comment "# 2017-09-14"
10.50.7.21 comment "# 2017-09-14"
Я полагаю, я ошибаюсь, как работает "nomatch"?
Это работает только для исключения меньших подсетей из большей?
Есть ли способ решить эту проблему без создания дополнительных наборов?
1 ответ
В документации ipset говорится следующее (1):
С точки зрения совпадения установленного сетевого фильтра поиск совпадения всегда начинается с наименьшего размера сетевого блока (наиболее конкретного префикса) до самого большого (наименее определенного префикса), добавленного к набору.
Таким образом, он начинает поиск отдельного хоста и сопоставление с ним, потому что хост меньше сетевого блока, чем подсеть.