我正在使用 Centos 7 从 iptables 迁移到 firewalld。在过去,我常常在 中编写(永久的)iptables 规则/etc/sysconfig/iptables
,它还用于在前面添加注释#
(以提醒我们为什么限制这个或那个 ip,等等)。
现在,似乎当前(永久)配置是从/etc/firewalld/
文件(尤其是/etc/firewalld/zones/*.xml
)读取的。我想我可以在那里添加 xml 注释,但似乎好的做法不是直接编辑这些文件,而是通过firewall-cmd
(不是吗?)。
因此,我不确定哪种是向规则添加注释的标准或推荐方法。
有什么建议么?
已编辑:根据记录,我已经验证 xml 注释不会在firewall-cmd
修改后保留下来。
答案1
仔细想想,我觉得这个firewalld-cmd
东西有点傻。毕竟,XML 配置文件是人为可编辑的。对我来说,这没什么意义,因为必须学习一层额外的命令(好吧,一个命令,但有无数的争论) 仅用于编辑一些简单整洁的 XML 文件 (*)。
我打字时感觉有点笨
firewall-cmd --permanent --zone=work --add-port=445/tcp
只需将以下行添加到/etc/firewalld/zones/work.xml
<port protocol="tcp" port="445"/>
因此,至少就目前而言,考虑到 XML 元素不包含注释属性(有一些 要求在那个方向上)我倾向于以下策略:忘记 firewalld-cmd
(甚至删除它),自己编辑 XML 文件,并自由添加 XML 注释。
(*) 确实,firewalld-cmd
还允许添加动态(非永久)规则。但我敢打赌,这种情况并不常见。
答案2
截至 2022 年 10 月,我认为firewalld
使用范围足够广泛,注释规则的难易程度(无论是来自firewall-cmd
还是来自)firewall-config
非常重要,原因已在 OP 中讨论过。
建议我们以内容管理系统,通过firewall-cmd --direct
,通过ipset或手动编辑区域文件,都会使管理变得复杂,并firewalld
违背使防火墙配置更加透明。
因此,在firewall-cmd --comment
可用之前,我将通过选项注释我的规则log prefix
。firewall-cmd --add-rich-rule
例如,
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.103.224 reject log prefix='Onsite NIDS 1'"
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.103.225 reject log prefix='Onsite NIDS 2'"
生成的注释作为副作用出现在我的系统日志中,但是现在的输出firewall-cmd --list-all-zones
是自文档化的:
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: dhcpv6-client http https ssh
ports: 1515/tcp 1514/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.103.224" log prefix="Onsite NIDS 1" reject
rule family="ipv4" source address="192.168.103.225" log prefix="Onsite NIDS 2" reject
该评论也记录在我的区域文件中:
# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="http"/>
<service name="https"/>
<port protocol="tcp" port="1515"/>
<port protocol="tcp" port="1514"/>
<rule family="ipv4">
<source address="192.168.103.224"/>
<log prefix="Onsite NIDS 1"/>
<reject/>
</rule>
<rule family="ipv4">
<source address="192.168.103.225"/>
<log prefix="Onsite NIDS 2"/>
<reject/>
</rule>
</zone>
我意识到即使这种方法也使配置过于复杂通过引入丰富的规则,但相信注释的好处目前是值得的。
答案3
尽管在防火墙命令手册页中,有一节关于直接选项的部分,允许您提供参数,但您可以执行以下操作:
firewall-cmd --direct --add-rule <table> <chain> <priority> <args> -c <some comment>
但正如迈克尔·汉普顿所说,这可能不是最好的事情。