现在我执行这个:
create blockipset hash:ip
add blockipset 192.168.1.5 -exist
add blockipset 192.168.3.115 -exist
iptables 和 ipset 是否可以阻止 ip、端口和 ip?例如,该列表包含:
192.168.1.5
192.168.3.115
192.168.1.55,80
192.168.1.53,22
答案1
您不能使用该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,...)。
现在您的脚本必须检查它获得的元素类型,以了解其内容IP集它会添加它。这里的一个简单示例是,
在从文件中读取列表时检查以了解将其放在哪里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
意味着在数据包中查找匹配项时,使用数据包中的源 IP 地址和目标端口地址hash:ip,port
。
还,IP集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规则将正确地处理带有或不带有端口的集合元素,如记录在 ipset 中。