我的 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/
答案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 的链名称。