Firewalld 阻止 IPv6,忽略配置

kgi*_*dov 6 firewall ipv6 centos firewalld centos7

我正在尝试使用 NGINX 在 CentOS 7.2 上设置 IPv6 Web 服务器。我已经测试了我的 IPv6 连接传出和传入 - 一切正常。我的 IP、AAAA 记录等也很好。基本上一切正常,直到我启用 FirewallD。

我已将其设置为默认为具有 eth0 接口的放置区。我已启用 dhcpv6-client、http、https 和 ssh(ssh 在自定义端口上)。启用防火墙后,没有 IPv6 流量可以离开或进入机器。Traceroute6 到任何东西(甚至网关)只到本地主机。如果我禁用防火墙,一切都很好。

我不知道为什么会这样。我在网上找不到任何东西以使 FirewallD 将相同的 IPv4 配置应用于 IPv6 流量。我个人认为,它会自动执行此操作,因为它的所有命令都与 IP 协议无关。

任何帮助深表感谢。

小智 8

我遇到了同样的问题。在通过 firewalld 放入的规则遵循逻辑后,我发现放置区正在阻止查找 ipv6 邻居所需的 ipv6 icmp。有一条规则允许所有 ipv6 icmp 但 firewalld 将它放在输入区域之后,这是丢弃规则所在的位置。

如果你想亲眼看看这个,只需看看'ip6tables -L -n -v'的输出

因此,一个快速而肮脏的解决方法是这样做:

firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -p icmpv6 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

Firewalld 将直接规则放在其他输入规则之前,以便在丢弃规则之前发生。如果您想阻止诸如 ping 之类的事情,您还可以使用直接规则,但您需要在上述规则之前使用它。

你会做这样的事情:

firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -p icmpv6 --icmpv6-type 128 -j DROP
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 1 -p icmpv6 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

优先事项将使它们井然有序。

  • 据记录,最新版本的firewalld可以通过“firewall-cmd --zone public --add-protocol ipv6-icmp”允许icmpv6。[此处更改规则](https://github.com/firewalld/firewalld/commit/f329311ac858a0d96d0dac99d7227c6dae643b75)。积分归erig@freenode所有 (2认同)