firewalld详解
一:firewalld概述
支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具。
支持IPV4、IPV6防火墙设置以及以太网桥。
支持服务或应用程序直接添加防火墙规则接口。
拥有两种配置模式:运行时配置、永久配置
二:firewalld和iptables的关系
firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld/与/etc/firewalld | /etc/sisconfig/iptables |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失连接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
三:firewalld网络区域
3.1:区域介绍
网络区域名称 | 默认配置 |
---|---|
阻塞区域(block) | 任何传入的网络数据包都将被阻止。拒绝所有的网络连接 |
工作区域(work) | 相信网络上的其他计算机,不会损害你的计算机。仅接受ssh、dhcpv6-client服务连接 |
家庭区域(home) | 相信网络上的其他计算机,不会损害你的计算机。用于家庭网络,仅接受ssh、mdns、Samba-client和dhcpv6-client服务连接 |
公共区域(public) | 默认区域,仅接受ssh、dhcpv6-client服务连接 |
隔离区域(dmz) | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。仅接受ssh服务连接 |
信任区域(trusted) | 所有的网络连接都可以接受 |
丢弃区域(drop) | 任何传入的网络连接都被拒绝。接受的数据包都被抛弃,且没有任何回复 |
内部区域(internal) | 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。仅接受ssh、mdns、samba-client或dhcpv6-client服务连接 |
外部区域(external) | 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。仅接受ssh服务连接 |
区域如同进入主机的安全门,每个区域都具有不同限制程度的规则。
可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或端口。
默认情况下,public区域是默认区域,包含所有接口(网卡)。
3.2:firewalld数据处理流程
- 检查数据来源的源地址
- 若源地址关联到特定的区域,则执行该区域所指定的规则
- 若源地址未关联到特定的区域,则使用传入网络接口的区域,并执行该区域所指定的规则
- 若网络接口未关联到特定的区域,则使用默认区域,并执行该区域所指定的规则
四:firewalld防火墙的配置方法
4.1:运行时配置
- 实时生效,并持续至firewalld重新启动或重新加载配置
- 不中断现有连接
- 不能修改服务配置
4.2:永久配置
- 不立即生效,除非firewalld重新启动或重新加载配置
- 中断现有连接
- 可以修改服务配置
4.3:firewall-config图形工具
[root@promote ~]# firewall-config
可以在图形界面中对各个区域增加/删除服务、端口、协议等各种规则,此处不做介绍。
4.4:firewall-cmd命令行工具
4.4.1:开机自启、开机不自启、启动、停止、查看 firewalld 服务
[root@localhost ~]# systemctl start firewalld #启动 firewalld
[root@localhost ~]# systemctl enable firewalld #设置 firewalld 为开机自启动
[root@localhost ~]# systemctl status firewalld #查看firewalld 的状态
[root@localhost ~]# firewall-cmd --state #查看firewalld 的状态
[root@localhost ~]# systemctl stop firewalld #停止 firewalld
[root@localhost ~]#systemctl disable firewalld #设置 firewalld 开机不自启动
4.4.2:获取预定义信息
firewall-cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻 塞类型,具体的查看命令如下所示:
[root@promote ~]# firewall-cmd --get-zones #显示预定义的区域
block dmz drop external home internal public trusted work
[root@promote ~]# firewall-cmd --get-services #显示预定义的服务
RH-Satellite-6 amanda-client amanda-k5-client bacula ......
[root@promote ~]# firewall-cmd --get-icmptypes #显示预定义的icmp类型
address-unreachable bad-header communication-prohibited ......
firewall-cmd --get-icmptypes 命令的执行结果中各种阻塞类型的含义分别如下所示:
- destination-unreachable:目的地址不可达
- echo-reply:应答回应(pong)
- parameter-problem:参数问题
- redirect:重新定向
- router-advertisement:路由器通告
- router-solicitation:路由器征寻
- source-quench:源端抑制
- time-exceeded:超时
- timestamp-reply:时间戳应答回应
- timestamp-request:时间戳请求
4.4.3:区域管理
使用 firewall-cmd 命令可以实现获取和管理区域,为指定区域绑定网络接口等功能。
[root@promote ~]# firewall-cmd --get-default-zone #显示默认区域
public
[root@promote ~]# firewall-cmd --get-zone-of-interface=ens33 #显示网卡ens33所属的区域
public
[root@promote ~]# firewall-cmd --zone=internal --change-interface=ens33 #更改网卡的区域
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@promote ~]# firewall-cmd --zone=internal --list-interfaces #查看指定区域中包括哪些接口,不指定区域则默认public区域
ens33
[root@promote ~]# firewall-cmd --list-all #显示默认区域中的所有规则,若要查看指定区域加--zone=
public (active)
target: default
icmp-block-inversion: no
interfaces: ens36
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@promote ~]# firewall-cmd --get-active-zones #显示所有激活区域
internal
interfaces: ens33
public
interfaces: ens36
4.4.4:服务管理
为 了 方 便 管 理 , firewalld 预 先 定 义 了 很 多 服 务 , 存 放 在 /usr/lib/firewalld/services/ 目录中,服务通过单个的XML 配置文件来指定。这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如 ssh 服 务等。与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口。在最新版本的 firewalld 中默认已经定义了 70 多种服务供我们使用,对于每个网络区域,均可以配置允 许访问的服务。当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在/etc/firewalld/services/ 目录中。service 配置具有以下优点。
- 通过服务名字来管理规则更加人性化
- 通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服 务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式
[--zone=<zone>] --list-services 显示指定区域内允许访问的所有服务
[--zone=<zone>] --add-service=<service> 为指定区域设置允许访问的某项服务
[--zone=<zone>] --remove-service=<service> 删除指定区域已设置的允许访问的某项服务
[--zone=<zone>] --list-ports 显示指定区域内允许访问的所有端口号
[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> 为指定区域设置允许访问的某个/某段端口号 (包括协议名)
[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> 删除指定区域已设置的允许访问的端口号(包括 协议名)
[--zone=<zone>] --list-icmp-blocks 显示指定区域内拒绝访问的所有 ICMP 类型
[--zone=<zone>] --add-icmp-block=<icmptype> 为指定区域设置拒绝访问的某项 ICMP 类型
[--zone=<zone>] --remove-icmp-block=<icmptype> 删除指定区域已设置的拒绝访问的某项 ICMP 类 型
省略--zone=<zone>时表示对默认区域操作
4.4.5:端口管理
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自 动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp #在 internal 区域增加 443/TCP 端口
success
[root@localhost ~]#firewall-cmd --zone=internal --remove-port=443/tcp #在 internal 区域移除 443/TCP 端口
success
4.4.6:两种配置模式
前面提到 firewall-cmd 命令工具有两种配置模式:
-
运行时模式(Runtime mode)表示 当前内存中运行的防火墙配置,在系统或 firewalld 服务重启、停止时配置将失效
-
永久模式(Permanent mode)表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置 文件中的
firewall-cmd 命令工具与配置模式相关的选项有三个:
- –reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置
- –permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动 firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时 规则
- –runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性