firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。FirewallD允许服务或者应用程序直接添加防火墙规则的接口。
iptables防火墙是静态的,添加修改规则后都必须重启防火墙。即内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而firewalld不同,它拥有运行时配置和永久配置选项,在运行时配置规则后立即生效,永久配置规则是基于firewalld的守护进程,将规则载入至Netfilter模块,不会对Netfilter模块进行卸载和重新启动,避免破坏状态防火墙和确立的连接, 所以说firewalld 可以动态管理防火墙。
FirewallD 使用服务(service) 和区域(zone)来代替 iptables 的规则(rule)和链(chain)。
firewalld将网卡分为不同的区域(区域),这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一 些安全 策略从而保证系统在被访问或传输数据时的安全。
默认情况下,有以下的区域(zone)可用:
firewalld 的默认区域是 public。
启动服务
#systemctl enable firewalld.service
#systemctl start firewalld.service
查看防火墙状态
#systemctl status firewalld
终端键入firewall-config即可打开图形化工具,firewall-config 支持防火墙的所有特性。firewall-config 可以配置防火墙允许通过的服务、端口 、伪装 、端口转发 、 ICMP 过滤器和调整 zone(区域)
firewall-config工作界面:
在底部状态栏显示四个信息:连接状态、默认区域、锁定状态、应急模式。
在配置选项处有运行时和永久两个选项,即两种配置:
选项子菜单包括以下几个部分:
重载防火墙:重载防火墙规则。若现在运行的配置规则如果没有在永久配置中操作,那么系统重载后会丢失。
更改连接区域:更改网络连接的默认区域。
改变默认区域:更改网络连接的所属区域和接口。
应急模式:应急模式意味着丢弃所有的数据包。
锁定:锁定可以对防火墙配置就行加锁,只允许白名单上的应用程序进行改动。锁定特性为 firewalld 增加了锁定本地应用或者服务配置的简单配置方式。它是一种轻量级的应用程序策略。
firewall-cmd命令格式(可以在man手册中查看):
#显示支持的区域
firewall-cmd --get-zones
block drop work internal external home dmz public trusted
#设置trusted区域为当前区域
firewall-cmd --set-default-zone=trusted
#查看当前的区域
firewall-cmd --get-active-zones
#根据接口查询区域
firewall-cmd --get-zone-of-interface=ens33
#设置当前的区域的接口
firewall-cmd --get-zone-of-interface=ens33
#显示所有公共区域
firewall-cmd --zone=public --list-all
#显示所有的区域规则
firewall-cmd --list-all-zones
#使用命令查看所有支持的服务
[root@localhost ~]# firewall-cmd --get-services
#添加服务
[root@mail ~]# firewall-cmd --add-service=http
#显示当前服务
[root@mail ~]# firewall-cmd --list-services
dhcpv6-client ssh
#移除服务
[root@mail ~]# firewall-cmd --remove-service=ssh
#设置服务超时时间,即服务的开启时间,单位秒
[root@mail ~]# firewall-cmd --add-service=http --timeout=10
#添加一个端口
[root@mail ~]# firewall-cmd --add-port=8080/tcp
#删除端口
[root@mail ~]# firewall-cmd --remove-port=8080/tcp
#配置端口转发
[root@mail ~]# firewall-cmd --add-forward-port=port=22:protocol=tcp:toport=2222
#启用紧急模式(所有的 规则出入都拒绝)
[root@mail ~]# firewall-cmd --panic-on
#禁用紧急模式
[root@mail ~]# firewall-cmd --panic-off
#查询紧急模式状态
[root@mail ~]# firewall-cmd --query-panic
#添加当前源地址
[root@mail ~]# firewall-cmd --add-source=192.168.10.1/24
#删除源地址
[root@mail ~]# firewall-cmd --remove-source=192.168.10.1/24
#启用伪装功能,但因为内核限制,只支持ipv4
[root@mail ~]# firewall-cmd --add-masquerade
#列出所支持的ICMP类型
[root@mail ~]# firewall-cmd --get-icmptype
#添加禁止icmp报文
[root@mail ~]# firewall-cmd --add-icmp-block=echo-request
以上都为运行时生效,配置永久生效要在在firewall-cmd后加一个–permanent,配置后重载防火墙
#添加规则
[root@mail ~]# firewall-cmd --permanent --add-service=http
#重新加载防火墙
[root@mail ~]# firewall-cmd --reload
富规则是firewalld管理防火墙的常用手段,管理方式有图形界面和命令行界面,图形界面简单易懂,命令行格式需要多练习
#添加一个富规则
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
#删除一个富规则
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
#查询一个富规则
firewall-cmd [--zone=zone] --query-rich-rule='rule'
示例:
#禁止172.16.10.0/24 域的用户对server和desktop进行ssh访问
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.16.10.0/24" service name="ssh" reject'
[root@system1 ~]# firewall-cmd --reload
#配置端口转发,172.24.8.0/24网段中的主机,访问server的本地端口1111将被转发到80端口
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.24.8.0/24" forward-port port="1111" protocol="tcp" to-port="80"'
[root@system1 ~]# firewall-cmd --reload