在同一区域中的两个 Firewalld 接口之间转发流量

在同一区域中的两个 Firewalld 接口之间转发流量

我的 CentOS 7.3.1611 系统中有四个接口,位于三个区域:

# firewall-cmd --get-active-zones
dmz
  interfaces: ens192
internal
  interfaces: ens256 ens161
external
  interfaces: ens224

我想要两个系统内部的区域能够互相交谈。

我尝试添加双向直接规则:

# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -o ens256 -i ens161 -j ACCEPT
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens256 -o ens161 -j ACCEPT

...因为这就是我允许内部网络之一与 dmz 网络通信的方式,但是 A) 这似乎在区域内情况下不起作用; B)由于该命令不接受该--permanent标志,我怀疑这样的命令能否在重新启动后继续存在。

两个内部接口可以与外部(互联网)区域正确通信。

如何允许同一区域中两个接口之间的流量流动?

答案1

对于带有 nftables 的 firewalld,--add-forward两天前合并了一个新标志 [1],以允许区域中的接口之间进行转发。它可以这样配置

# firewall-cmd --zone=internal --add-forward

2020/09/03 更新:新版本 0.9.0 包含该功能 \o/

[1]https://github.com/firewalld/firewalld/pull/613

答案2

在谷歌搜索有关 Firewalld 的类似多接口防火墙主题时发现了您的问题。大约一年后,您的问题仍未得到解答,我想知道您遇到的 --permanent 问题是否与参数顺序有关。

在 Enterprise Linux 7.5 的 0.4.4.4 版本中,firewall-cmd 的手册页清楚地表明您需要在 --direct 之前添加 --permanent。这可能是因为 --direct 之后的任何参数都是 direct 的子参数,而不是firewall-cmd。所以像这样运行你的命令:

# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -o ens256 -i ens161 -j ACCEPT

关于两个内部接口的问题......一方面,您需要查看输出# iptables -L并绘制出链的流动方式。您在那里放置的命令会在链顶部的转发链中插入一条规则,优先级为 0。我猜测还有另一个具有更高优先级的链,例如“FORWARD_IN_ZONES”,最终会丢弃您的数据包。

此外,在最新版本的 firewalld 中,您可以运行# firewall-cmd --set-log-denied=all来查看有关丢弃数据包的信息。日志应包含创建 drop 的链名称。

相关内容