我刚刚安装了 Fedora 19,并且使用 firewalld 而不是 iptables,但我很难解释新的术语。
我有 2 个 NIC。在 ifcfg-* 文件中,一个指定 ZONE="internal",另一个指定为 "external",我在 /etc/sysctl.conf 中设置了 ipv4.forwarding = 1,然后运行了firewall-cmd --zone=external --add-masquerade
但是,当我尝试从内部网络上的任何机器进行路由时,我得到了“目标主机被禁止”的信息,当然,如果我禁用防火墙,错误就会消失,但我就会失去伪装。
在 iptables 中有一个名为 FORWARD 的规则集,但在firewalld 中我只能找到 --add-port-forward,这不是一回事。
如何在firewalld中允许路由?
...我取得了一些进展...
#firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens4 -o eth1 -j ACCEPT
允许路由,但不是持久的,并且不允许 --permanent 选项。如何让它在重启后持久?
答案1
最后,我找到了答案......
# cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
[ <rule ipv="ipv4" table="filter" chain="FORWARD_direct" priority="0"> -i eth0 -o eth1 -j ACCEPT </rule> ]
</direct>
该功能出现在firewalld-0.3.4-1.fc19中,但目前尚不支持firewall-cmd,手册页也被省略了,但它确实有效
最终在以下邮件列表中找到了它 http://www.spinics.net/linux/fedora/fedora-security/msg01688.html
答案2
从 Fedora25 开始,可以使用 Firewalld Rich Rules 解决这个问题。Firewalld Rich Rules 类似于 iptables DSL,但灵活性更高。
它们也遵循与 iptables 类似的链式操作。更多详细信息请参见此处:- https://fedoraproject.org/wiki/Features/FirewalldRichLanguage#firewalld_Rich_Language