从 iptables 迁移到 Firewalld:评论规则

从 iptables 迁移到 Firewalld:评论规则

我正在使用 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 prefixfirewall-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>

但正如迈克尔·汉普顿所说,这可能不是最好的事情。

相关内容