Как заблокировать IPv4 и IPv6 с помощью ipset в Ubuntu 16.04?

Итак, у меня есть следующий сценарий, который блокирует 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, я получаю следующую ошибку - Синтаксическая ошибка: не удается проанализировать 2003: e6: 6f03: 7b80: 21dc: 54c8: ac26: 552b: не удалось выполнить преобразование в адрес IPv4

Как могу ли я заставить этот сценарий читать оба типа IP-адресов?

0
задан 21 February 2019 в 10:05
1 ответ

Вам необходимо создать ipset с помощью следующей команды:

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

Семейство опций {inet | inet6} определяет семейство протоколов IP-адресов, которые будут храниться в наборе. По умолчанию это inet (IPv4). Для получения дополнительной информации см. man ipset .

Кроме того, вам необходимо использовать ip6tables вместо iptables . В противном случае вы получите ошибку, аналогичную этой (я создал ipset test6 с семейством inet6)

iptables v1.6.0: Семейство протоколов set test6 - IPv6, т.е. не применимо.

1
ответ дан 4 December 2019 в 15:45

Теги

Похожие вопросы