firewalld,一个基于动态区的iptables/nftables守护程序,自2009年左右开始开发,CentOS7基于 firewalld-0.6.3
, 发布于2018年10月11日。主要的开发人员是托马斯·沃纳,他目前为红帽公司工作。这是因为为Federal 18 的默认防火墙机制, 随后在 Rhel7 和 Centos 7 中使用。
firewalld比旧的 iptable 机制有许多优势。值得注意的是,它解决了 iptable 要求每次更改时重新启动防火墙的问题,从而中断了任何状态连接。它还提供了丰富的 D-Bus 方法、信号和属性。
这里并不是从firewalld操作使用方式来介绍firewalld的改名,想反,是介绍firewalld D-Bus API来检索信息或更改设置。
firewalld被配置为系统 D-Bus 服务,注意看 systemd file中的" Type=dbus
“参数。
|
|
实际上,手动运行 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid --debug
效果是一样的,这里的注册是通过dbus 高级API操作的。
此时由于已经了解到了,firewalld 服务 是基于D-Bus接口的,所以需要找到对应的 dbus interface
|
|
org.fedoraproject.FirewallD1
这个就是firewalld注册的dbus interface了。
dbus-send
命令可以向 D-Bus消息总线发送消息并显示该消息的返回结果。有两个众所周知的消息总线:system bus(Option -System
) 和每个用户session bus( -session
)。使用 firewall-cmd
也是通过 dbus interface 进行交互的。在使用dbus-send
时,必须指定其对应的消息接口 -dest
,该参数是连接到对应总线上的接口名称,以将消息发送到对应的dbus firewalld-server进行对应iptables规则的翻译。
现在有了dbus接口,需要了解改接口支持的方法 methods
,属性 properties
,信号signals
等信息。
|
|
通过上述输出列出了通过防火墙 D-Bus 接口提供的所有方法、单一和属性。这是基于D-Bus DTD 的输出格式。所有 dbus服务都需要实现 org.freedesktop.DBus.Introspectable.Introspect
方法。
知道了 方法 属性 信号,就可以直接对firewalld进行一个操作了。现在开始第一个例子。获取默认zone。
|
|
通过dbus接口来检索区域列表
|
|
最常用的命令:查看当前zone所有策略
|
|
获得inerface的properties
其实这里在命令行根本用不到,但是在封装时却会可以用到。
|
|
还可以通过其他的接口来查看对应的属性值
|
|
查询规则
查询接口
|
|
创建一个新zone
|
|
获得一个zone的所有规则(zonesettings
)
|
|
添加一个port
|
|
对应设置firewalld 面板所有属性的命令
|
|
执行远程命令
dbus接口支持远程命令的,通过dbus-send发送时,根据配置dbus的监听来完成远程的操作
|
|
根据上述,参考加上官方文档,了解如何通过D-Bus接口操作FirewallD,虽然此处是使用了 dbus-send
,但是也可以通过 qt 或者 其他的来管理 基于 dbus api的应用了。