firewalld(firewall daemon)是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。

Firewall 能将不同的网络连接归类到不同的信任级别,Zone(域)供了以下几个级别:

drop(丢弃): 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接

block(限制): 拒绝所有外部发起的连接,允许内部发起的连接
public(公共): 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。

external(外部): 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。

dmz(非军事区): 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。

work(工作区): 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。

home(家庭):用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。

internal(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。

trusted(信任): 可接受所有的网络连接。

服务管理命令

1
2
3
4
5
6
systemctl start firewalld         启动,
systemctl enable firewalld 开机启动
systemctl stop firewalld 关闭
systemctl restart firewalld 重启
systemctl disable firewalld 取消开机启动
systemctl status firewalld 查看运行状态

常用状态命令

1
2
3
4
5
6
7
8
firewall-cmd --state 查看运行状态
firewall-cmd --get-actvie-zones 查看已被激活的 Zone 信息
firewall-cmd --get-zone-of-interface=eth0 查看指定接口的 Zone 信息
firewall-cmd --zone=public --list-interfaces查看指定级别的接口
firewall-cmd --zone=public --list-all 查看指定级别的开放的接口
firewall-cmd --get-service 查看所有级别被允许的信息
firewall-cmd --get-service --permanent 查看重启后所有 Zones 级别中被允许的服务,即永久放行的服务
cat /etc/services 查看所有开放的接口

管理规则

1
2
3
4
5
6
7
8
9
10
firewall-cmd --panic-on           丢弃
firewall-cmd --panic-off 取消丢弃
firewall-cmd --query-panic 查看丢弃状态
firewall-cmd --reload 更新规则,不重启服务
firewall-cmd --complete-reload 更新规则,重启服务

添加某接口至某信任等级,譬如添加 eth0 至 public,再永久生效
irewall-cmd --zone=public --add-interface=eth0 --permanent
设置 public 为默认的信任级别
firewall-cmd --set-default-zone=public

端口管理

1
2
3
4
5
列出 public 级别的被允许的进入端口
firewall-cmd --zome=public --list-ports
添加8080端口到public级别(带 --permanent为永久生效)
firewall-cmd --zone=public --add-port=8080/tcp [ --permanent]
添加规则之后需要更新规则,不重启服务

管理服务

1
2
3
4
添加 smtp 服务至 work Zone
firewall-cmd --zone=work --add-service=smtp
移除 work zone 中的 smtp 服务
firewall-cmd --zone=work --remove-service=smtp

配置端口转发,(20–>3573)

1
2
3
4
5
6
7
8
9
10
11
要打开端口转发,则需要先
firewall-cmd --zone=external --add-masquerade

然后转发 tcp 22 端口至 3753
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753

转发 22 端口数据至另一个 ip 的相同端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100

转发 22 端口数据至另一 ip 的 2055 端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100

参考资料

https://fedoraproject.org/wiki/FirewallD/zh-cn#.E4.BD.BF.E7.94.A8_FirewallD_.E6.9E.84.E5.BB.BA.E5.8A.A8.E6.80.81.E9.98.B2.E7.81.AB.E5.A2.99