FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。
安装和管理
1. 启动服务,并在系统引导时启动该服务
$ sudo systemctl start firewalld $ sudo systemctl enable firewalld
2. 停止并禁用
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld
3.检查防火墙状态
$ sudo firewall-cmd --state
4.要查看 FirewallD 守护进程的状态
$ sudo systemctl status firewalld
5.重新加载 FirewallD 配置:
$ sudo firewall-cmd --reload
配置FireWallD
配置文件位于两个目录中:
/usr/lib/FirewallD
下保存默认配置,如默认区域和公用服务。 避免修改它们,因为每次 firewall 软件包更新时都会覆盖这些文件。/etc/firewalld
下保存系统配置文件。 这些文件将覆盖默认配置。
配置集
FirewallD 使用两个配置集:“运行时”和“持久”。 在系统重新启动或重新启动 FirewallD 时,不会保留运行时的配置更改,而对持久配置集的更改不会应用于正在运行的系统。
默认情况下,firewall-cmd
命令适用于运行时配置,但使用 --permanent
标志将保存到持久配置中。要添加和激活持久性规则,你可以使用两种方法之一。
1. 将规则同时添加到持久规则集和运行时规则集中。
$ sudo firewall-cmd --zone=public --add-service=http --permanent $ sudo firewall-cmd --zone=public --add-service=http
2. 将规则添加到持久规则集中并重新加载 FirewallD。
$ sudo firewall-cmd --zone=public --add-service=http --permanent $ sudo firewall-cmd --reload
reload
命令会删除所有运行时配置并应用永久配置。因为 firewalld 动态管理规则集,所以它不会破坏现有的连接和会话。
允许或者拒绝任意端口/协议
$ sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent $ sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
丰富规则
允许来自主机 192.168.0.14 的所有 IPv4 流量。
$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。
$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
常用用法:
允许192.168.142.166访问50070端口
$ firewall-cmd --permanent --add-rich-rule "rule family="ipv4" source address="192.168.31.111" port protocol="tcp" port="50070" accept" $ firewall-cmd --reload
配置文件:
firewalld 配置文件所在路径/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"/> <port protocol="tcp" port="80"/> <rule family="ipv4"> <source address="192.168.31.111"/> <port protocol="tcp" port="50070"/> <accept/> </rule> <rule family="ipv4"> <source address="192.168.31.112"/> <port protocol="tcp" port="50070"/> <accept/> </rule> </zone>