现在我来做这个:
create blockipset hash:ip
add blockipset 192.168.1.5 -exist
add blockipset 192.168.3.115 -existiptables和ipset是否有可能阻止ip、端口和ip?例如,该列表包含:
192.168.1.5
192.168.3.115
192.168.1.55,80
192.168.1.53,22发布于 2020-01-14 11:04:22
不能使用ipset命令将不同类型的元素放在同一个集合中。但是您可以使用不同的集合,每种类型都使用一组(ipset help提供的完整列表):
hash:ip
hash:ip,port例如:
ipset create blocklistip hash:ip
ipset create blocklistipport hash:ip,port
ipset add blocklistip 192.0.2.3
ipset add blocklistipport 192.0.2.2,80
ipset add blocklistipport 192.0.2.3,udp:53注意,在默认情况下,除非显式声明,否则端口的协议是TCP (udp:用于UDP,sctp:用于SCTP,.)。
现在,您的脚本必须检查它得到了哪种类型的元素,才能知道它将在什么ipset中添加它。这里的一个简单示例是检查,是否知道将其放在何处,同时从文件blocklist.txt中读取列表:
while read -r element; do
if echo $element|grep -q ,; then
ipset add blocklistipport $element
else
ipset add blocklistip $element
fi
done < blocklist.txt您可以阻止列表中的所有内容,例如:
iptables -A INPUT -m set --match-set blocklistip src -j DROP
iptables -A INPUT -m set --match-set blocklistipport src,dst -j DROP上面的src,dst意味着在查找hash:ip,port集合中的匹配时,沿着数据包中的目标端口地址使用源IP地址。
另外,ipset有一个特殊的集合list:set,它由其他集合的列表组成。这不会改变使用ipset命令单独填充集合的方式,但您可以这样做:
ipset create blocklist list:set
ipset add blocklist blocklistip
ipset add blocklist blocklistipport并将前两条iptables规则替换为以下规则:
iptables -A INPUT -m set --match-set blocklist src,dst -j DROP这与您的目标是一致的:这个单独的iptables规则将正确地使用带有或不带端口的set元素,如记录在ipset中。
https://unix.stackexchange.com/questions/561964
复制相似问题