Ubuntu
如何在 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?
您需要使用以下命令創建 ipset:
$ sudo ipset create ipset-blacklist hash:ip family inet6
該選項
family { inet | inet6 }
定義要儲存在集合中的 IP 地址的協議族。預設情況下是inet
(IPv4)。有關更多資訊,您可以查看man ipset
。此外,您需要使用
ip6tables
而不是iptables
. 否則,你會得到類似這樣的錯誤(我用family inet6創建了一個test6 ipset)iptables v1.6.0:set test6的協議族是IPv6,不適用。