Есть ли способ добавить 0.0.0.0/0 к ipset type hash:net,port? Похоже, он поддерживает только длину префикса от 1 до 32, но что делать, если я хочу, чтобы запись в моем ipset hash поддерживала весь ip-трафик на заданном порту? Например
ipset create testset hash:net,port
ipset add testset 0.0.0.0,22
iptables -I INPUT 1 -m set --match-set testset src, src -j ACCEPT
iptables -I INPUT 2 -j LOG --log-prefix "** FIREWALL **"
ничего не сделает. Трафик SSH попадет на брандмауэр и сгенерирует журнал. 0.0.0.0/0 не принимается как допустимая нотация CIDR, хотя, кажется, они добавили ее в hash:net,iface в ревизии 2. Я знаю, что могу сохранить порт в bitmap:port и применить его к его собственному правилу iptables. Однако я специально хотел бы сохранить порты в хэше, поскольку некоторые порты могут заботиться об IP-адресе src, а другие — нет, и я не хочу поддерживать отдельный набор для 0.0.0.0/0.
решение1
Правильным синтаксисом было бы использовать 0.0.0.0/0, поскольку 0.0.0.0 по умолчанию равно 0.0.0.0/32. Увы, как вы обнаружили, это не поддерживается:
# ipset add testset 0.0.0.0/0,22
ipset v7.3: The value of the CIDR parameter of the IP address is invalid
Вместо этого вы можете использовать тот же трюк, который используется в OpenVPN при переопределении маршрутов: разделить 0.0.0.0/0 пополам: 0.0.0.0/1 и 128.0.0.0/1:
ipset add testset 0.0.0.0/1,22
ipset add testset 128.0.0.0/1,22
Примечание:
Обычно для сервера, на котором запущенаместныйssh-сервер,iptablesпараметры, вероятно, должны быть такими:
iptables -I INPUT 1 -m set --match-set testset src,dst -j ACCEPT
Так как мы находимся вВХОДцепь, значениеполучение, src,dst
означает проверку удаленного (исходного) IP и локального (целевого) порта, в то время как src,src
будет означать проверку удаленного (исходного) IP и удаленного (исходного) порта. Единственным использованием этого будет разрешение ответного трафика от удаленных серверов ssh, но это обычно уже обрабатывается в -m conntrack --ctstate ESTABLISHED
другом месте.