Iptables

Linux 路由器上的 IPv6 防火牆

  • March 3, 2019

我的 NAT 路由器上有 IPv6 隧道(he.net)。我還有一個簡單的防火牆和路由設置,允許路由器後面的主機使用 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

順便說一句,這些規則是多餘的;自 2.6.25(2007 年左右)以來,Linux 核心已自動丟棄此流量。您可以安全地刪除它們。而且您應該重新評估您在其中找到它們的任何教程,因為它可能已經過時了。

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

引用自:https://serverfault.com/questions/956552