FirewallD
FirewallD介绍
firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。FirewallD允许服务或者应用程序直接添加防火墙规则的接口。
与iptables相比较
iptables防火墙是静态的,添加修改规则后都必须重启防火墙。即内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而firewalld不同,它拥有运行时配置和永久配置选项,在运行时配置规则后立即生效,永久配置规则是基于firewalld的守护进程,将规则载入至Netfilter模块,不会对Netfilter模块进行卸载和重新启动,避免破坏状态防火墙和确立的连接, 所以说firewalld 可以动态管理防火墙。
FirewallD 使用服务(service) 和区域(zone)来代替 iptables 的规则(rule)和链(chain)。
FirewallD区域
firewalld将网卡分为不同的区域(区域),这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一 些安全 策略从而保证系统在被访问或传输数据时的安全。
默认情况下,有以下的区域(zone)可用:
- trust(信任):可接受所有的网络连接;
- home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;
- internal(内部):用于内网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;
- work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;
- public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;
- external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;
- dmz(隔离区):仅接受ssh服务;
- block(限制):拒绝所有的网络服务;
- drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。
firewalld 的默认区域是 public。
预定义服务/添加端口
- 直接编辑配置文件/etc/firewalld/firewalld.conf
- 使用firewall-config图形工具,通过这个图形工具,可以更改和检查firewalld内存中的配置(Runtime),也可以修改磁盘上的持久配置(Permanent)
- 使用firewall-cmd命令
启动服务
#systemctl enable firewalld.service
#systemctl start firewalld.service
查看防火墙状态
#systemctl status firewalld
FirewallD图形化工具管理防火墙
终端键入firewall-config即可打开图形化工具,firewall-config 支持防火墙的所有特性。firewall-config 可以配置防火墙允许通过的服务、端口 、伪装 、端口转发 、 ICMP 过滤器和调整 zone(区域)
firewall-config工作界面:
在底部状态栏显示四个信息:连接状态、默认区域、锁定状态、应急模式。
在配置选项处有运行时和永久两个选项,即两种配置:
- 运行时:运行时配置为当前使用的配置规则。运行时配置并非永久有效,在重新加载时可以被恢复,而系统或者服务重启、停止时,这些选项将会丢失。
- 永久:永久配置存储在配置文件中,永久配置规则在系统或者服务重启的时候使用,若要配置后立即生效,在上方选项菜单栏中点击重载防火墙。
![](https://i-blog.csdnimg.cn/blog_migrate/562ad83329d43ddce8621f3ca59f583d.png)
选项子菜单包括以下几个部分:
重载防火墙:重载防火墙规则。若现在运行的配置规则如果没有在永久配置中操作,那么系统重载后会丢失。
更改连接区域:更改网络连接的默认区域。
改变默认区域:更改网络连接的所属区域和接口。
应急模式:应急模式意味着丢弃所有的数据包。
锁定:锁定可以对防火墙配置就行加锁,只允许白名单上的应用程序进行改动。锁定特性为 firewalld 增加了锁定本地应用或者服务配置的简单配置方式。它是一种轻量级的应用程序策略。
使用firewall-cmd命令管理防火墙
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
rich rule(富规则)
富规则是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