web-dev-qa-db-ja.com

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
Emmanuel-Ab

次のコマンドを使用してipsetを作成する必要があります。

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

オプションfamily { inet | inet6 }は、セットに格納されるIPアドレスのプロトコルファミリを定義します。デフォルトではinet(IPv4)です。詳しくは、man ipsetをご覧ください。

また、iptablesの代わりにip6tablesを使用する必要があります。そうしないと、これと同様のエラーが発生します(ファミリーinet6を使用してtest6 ipsetを作成しました)

iptables v1.6.0:セットtest6のプロトコルファミリーはIPv6であり、適用されません。

2
Khaled