如何在 Ubuntu 16.04 上使用 ipset 阻止 IPv4 和 IPv6?

如何在 Ubuntu 16.04 上使用 ipset 阻止 IPv4 和 IPv6?

因此我有以下阻止 IP 的脚本:

#!/bin/bash
# here's your list of IPS
CURRENT_BL=/path/to/my/ip_black_list.txt
# create/flush recreate the tables
iptables -F BLACKHOLE
iptables -N BLACKHOLE 
for BAD_IP in $(cat $CURRENT_BL)
do
        ipset add ipset-blacklist $BAD_IP 2>/dev/null || \
                echo "Failed to add ${BAD_IP}"
done
# REJECT the matching target
iptables -A BLACKHOLE -p all -m set --match-set ipset-blacklist src -j REJECT 
iptables -A BLACKHOLE -j RETURN
# assume your nginx is on 80 and 443
iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -j BLACKHOLE
iptables -A INPUT -p tcp -m multiport --destination-ports 80,443 -j ACCEPT

ipset 是使用以下命令创建的:

ipset create ipset-blacklist hash:ip

现在 IPv4 运行正常,但 IPv6 出现了问题,我收到以下错误 -Syntax error: cannot parse 2003:e6:6f03:7b80:21dc:54c8:ac26:552b: resolving to IPv4 address failed

我怎样才能使这个脚本读取这两种类型的 IP?

答案1

您需要使用以下命令来创建 ipset:

$ sudo ipset create ipset-blacklist hash:ip family inet6

该选项family { inet | inet6 }定义要存储在集合中的 IP 地址的协议系列。默认情况下为inet(IPv4)。有关更多信息,请参阅man ipset

另外,您需要使用ip6tables而不是iptables。否则,您将收到类似这样的错误(我创建了一个带有系列 inet6 的 test6 ipset)

iptables v1.6.0: set test6 的协议系列为 IPv6,不适用。

相关内容