Назад | Перейти на главную страницу

Межсетевой экран IPv6 на маршрутизаторе Linux

У меня есть туннель IPv6 (he.net) на моем маршрутизаторе NAT. У меня также есть простой брандмауэр и настройка маршрутизации, позволяющая хостам за маршрутизатором использовать адресное пространство IPv6. К сожалению, для этих хостов работает только исходящее соединение и входящий icmp.

#!/bin/bash
PUBIF="he-ipv6"
LOCIF="vmbr0"
echo "Starting IPv6 firewall..."
ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X

ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

ip6tables -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

ip6tables -A INPUT -m rt --rt-type 0 -j DROP
ip6tables -A FORWARD -m rt --rt-type 0 -j DROP
ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP

ip6tables -A INPUT -s fe80::/10 -j ACCEPT
ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT

ip6tables -A INPUT -d ff00::/8 -j ACCEPT
ip6tables -A OUTPUT -d ff00::/8 -j ACCEPT

ip6tables -A INPUT -i $LOCIF -j ACCEPT
ip6tables -A OUTPUT -o $LOCIF -j ACCEPT

ip6tables -A FORWARD -i $LOCIF -o $PUBIF -j ACCEPT
ip6tables -A FORWARD -i $PUBIF -o $LOCIF -p icmpv6 -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

ip6tables -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT

ip6tables -A INPUT -i $PUBIF -p tcp --destination-port 65000 -j ACCEPT

ip6tables -A INPUT -i $PUBIF -j LOG
ip6tables -A INPUT -i $PUBIF -j DROP

Что я здесь пропустил?

Вы разрешаете только ICMP внутрь!

ip6tables -A FORWARD -i $PUBIF -o $LOCIF -p icmpv6 -j ACCEPT

Сравните это с предыдущим правилом, в котором вы разрешаете весь исходящий трафик.

ip6tables -A FORWARD -i $LOCIF -o $PUBIF -j ACCEPT

Кстати, эти правила избыточны; ядро Linux автоматически сбрасывает этот трафик примерно с версии 2.6.25 (2007 г.). Вы можете смело их удалить. И вам следует переоценить любой учебник, в котором вы их нашли, поскольку он, вероятно, очень устарел.

ip6tables -A INPUT -m rt --rt-type 0 -j DROP
ip6tables -A FORWARD -m rt --rt-type 0 -j DROP
ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP