iptables仅处理IPv4流量,IPv6需用独立工具ip6tables(同样四表五链),二者规则互不兼容;必须分别配置INPUT默认DROP、放行必要端口、禁用FORWARD、限制ICMPv6及异常扩展头,并持久化保存规则。

iptables 本身不处理 IPv6 流量,它仅作用于 IPv4 协议栈。所有针对 IPv6 的包过滤、连接控制和隐蔽通道防护,必须使用 ip6tables —— 这是专为 IPv6 设计的独立工具,架构与 iptables 完全对应(同样有四表五链),但规则互不兼容、互不影响。
确认 IPv6 是否启用并被攻击面利用
很多管理员误以为禁用 IPv4 防火墙就能覆盖全部风险,却忽略了系统默认可能已启用 IPv6:
- 检查内核是否启用 IPv6:
sysctl net.ipv6.conf.all.disable_ipv6,返回 0 表示启用(即存在 IPv6 攻击面) - 查看当前 ip6tables 规则:
sudo ip6tables -L -n -v,若输出为空或策略为 ACCEPT,说明 IPv6 流量几乎无防护 - 扫描自身主机的 IPv6 开放端口:
nmap -6 -sT [your-ipv6-address],确认是否有 SSH(22)、RDP(3389)等服务在 IPv6 上监听
堵住 IPv6 隐蔽通道的关键链与默认策略
IPv6 爆破常通过伪造源地址、滥用 ICMPv6、或复用 HTTP/HTTPS 端口(如 80/443)建立隧道。防护重点不是“识别隧道”,而是收紧入口和转发:
-
INPUT 链设为 DROP 默认策略:
sudo ip6tables -P INPUT DROP(这是最基础且有效的防线) -
显式放行必需流量:只允许本机明确需要的服务,例如
sudo ip6tables -A INPUT -i lo -j ACCEPT(本地回环)
sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT(已有连接)
sudo ip6tables -A INPUT -p tcp --dport 22 -s 2001:db8::/64 -j ACCEPT(仅限管理网段 SSH) -
禁用 FORWARD 链(除非是路由器):
sudo ip6tables -P FORWARD DROP,防止被用作 IPv6 中继或隧道跳板
针对性阻断常见 IPv6 隐蔽手法
部分攻击会刻意构造非常规 IPv6 包绕过简单规则,需补充匹配层:
- 丢弃含异常扩展头的包(如路由头 RH0,曾被用于放大攻击):
sudo ip6tables -A INPUT -m rt --rt-type 0 -j DROP - 限制 ICMPv6 类型,只保留必需项(如邻居发现):
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type 133 -j ACCEPT(RS)sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type 134 -j ACCEPT(RA)sudo ip6tables -A INPUT -p icmpv6 -j DROP(其余全部拒绝) - 封禁已知恶意 IPv6 地址段(如 ULA 内部地址被滥用于隧道):
sudo ip6tables -A INPUT -s fc00::/7 -j DROP
持久化与协同加固
ip6tables 规则是内存级的,重启即失效:
- 保存规则到文件(Debian/Ubuntu):
sudo ip6tables-save > /etc/iptables/rules.v6 - 确保开机加载(systemd):
sudo systemctl enable ip6tables - 注意:若系统同时运行 firewalld 或 nftables,它们会接管底层 netfilter,直接调用 ip6tables 可能被覆盖 —— 此时应统一通过 firewalld 的
--ipset或 nft 的inetfamily 配置 IPv6 规则











