支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
支持IPv4,IPv6防火墙设置以及以太网桥
支持服务或应用程序直接添加防火墙规则接口
拥有两种配置模式
firewalld是7.0才开始有,6.0一直都是iptables
防火墙工作在第四层传输层,和端口有关,经常和TCP、UDP协议打交道
低安全区域访问高安全区域,防火墙是不允许的
高安全区域访问低安全区域,防火墙是允许的
同等级别访问也是不允许的- 大型数据中心用的背靠背方式–两个硬防火墙
按区域进行定义:高安全区域和低安全区域(例如公司内部是一个高安全区域,外部是一个低安全区域),此外允许访问的公司服务在 DMZ 区域(非军事化区域)
外部网络只能访问非军事化区域,不能访问内部区域
做一个入站规则,DMZ区域往高安全区域
非军事化区域安全性介于两个区域之间
运行时配置是临时配置,不会保存
Firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld/、/etc/firewalld/ | etc/sysconfig/iptables |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失连接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
服务本身配置文件/etc/firewalld
偏于用户管理配置文件/usr/lib/firewalld
firewalld :放到不同区域匹配不同规则,可以动态调整
iptables :一条一条敲,敲完重启
区域介绍
Firewalld数据处理流程
若源地址关联到特定的区域,则执行该区域所指定的规则
若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则
若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则
运行时配置 (相当于mount)
不中断现有连接
不能修改服务配置
永久配置(相当于fstab)
不立即生效,除非Firewalld重新启动或重新加载配置
终端现有连接
可以修改服务配置
Firewaall-config图形工具
Firewall-cmd命令行工具
/etc/firewalld/中的配置文件
Firewalld会优先使用/etc/firewalld/中的配置.如果不存在配置文件,则使用/usr/lib/firewalld/中的配置
/etc/firewalld/:用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
/usr/lib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/中的配置
4、修改默认区域
"服务"子选项卡
block 阻塞区域
dmz 非军事化区域,介于高安全区域和低安全区域之间
drop 丢失区域
external 外部区域
home 家区域
internel 内部
trusted 信任区域
work 工作区域
7、"服务"选项卡
1、实验环境
一台客户端(CentOS 7.6)与一台Firewalld防火墙直接连接
客户端IP:20.0.0.21
Firewalld防火墙IP:20.0.0.20
2、需求描述
禁止主机ping服务器
只允许192.168.8.130主机访问SSH服务
允许所有主机访问Apache服务
3、实验步骤
安装相关软件
yum -y install firewalld
yum -y install firewall-config
4、网络参数配置
输入firewall-config 命令,出现防火墙图形界面
[root@localhost ~]# firewall-config
实现—禁止主机ping服务器
实现—只允许192.168.8.130主机访问SSH服务
实现—允许所有主机访问Apache服务
开启Firewalld防火墙
[root@Firewalld ~]# systemctl restart firewalld ===>重启防火墙
[root@Firewalld ~]# systemctl status firewalld ===>查看防火墙状态
在安装 CentOS7 系统时,会自动安装 firewalld 和图形化工具 firewall-config。执行 以下命令可以启动 firewalld 并设置为开机自启动状态。
[root@localhost ~]# systemctl start firewalld '启动 firewalld'
[root@localhost ~]# systemctl enable firewalld '设置 firewalld 为开机自启动 '
如果 firewalld 正在运行,通过 systemctl status firewalld 或 firewall-cmd 命令 可以查看其运行状态。
[root@localhost ~]# systemctl status firewalld
firewall-cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻 塞类型,具体的查看命令如下所示。
[root@localhost ~]# firewall-cmd --get-zones '//显示预定义的区域 '
work drop internal external trusted home dmz public block
[root@localhost ~]# firewall-cmd --get-service '//显示预定义的服务 '
RH-Satellite-6 amanda-client amanda-k5-client baculabacula-client cephceph
mondhcp dhcpv6 dhcpv6-client dnsdocker-registry dropbox-lansyncfreeipa-ldap
freeipa-ldapsfreeipa-replication ftp high-availability http https imapimaps
ippipp-clientipseciscsi-target kadminkerberoskpasswdldapldapslibvirt
libvirt-tlsmdns mosh mountdms-wbtmysqlnfsntpopenpmcdpmproxypmwebapi
pmwebapis pop3 pop3s postgresqlprivoxy proxy-dhcpptppulseaudiopuppetmaster
radiusrpc-bindrsyncd samba samba-client sane smtpsmtpssnmpsnmptrap squid ssh
synergy syslog syslog-tls telnet tftptftp-client tinc tor-socks transmission
clientvdsmvnc-serverwbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
[root@localhost ~]# firewall-cmd --get-icmptypes '//显示预定义的 ICMP 类型 '
destination-unreachable echo-reply echo-request parameter-problem redirect router
-advertisement router-solicitation source-quench time-exceeded timestamp-reply
timestamp-request
firewall-cmd --get-icmptypes 命令的执行结果中各种阻塞类型的含义分别如下所示。
使用 firewall-cmd 命令可以实现获取和管理区域,为指定区域绑定网络接口等功能。
选项 | 说明 |
---|---|
- -get-default-zone | 显示网络连接或接口的默认区域 |
- -set-default-zone=< zone> | 设置网络连接或接口的默认区域 |
- -get-active-zones | 显示已激活的所有区域 |
- -get-zone-of-interface=< interface> | 显示指定接口绑定的区域 |
- -zone=< zone> - -add-interface=< interface> | 为指定接口绑定区域 |
- -zone=< zone> - -change-interface=< interface> | 为指定的区域更改绑定的网络接口 |
- -zone=< zone> - -remove-interface=< interface> | 为指定的区域删除绑定的网络接口 |
- -list-all-zones | 显示所有区域及其规则 |
[- -zone=< zone >] - -list-all | 显示所有指定区域的所有规则,省略- -zone=< zone>时表示仅对默认区域操作 |
对默认区域操作
具体操作如下所示。
(1)显示当前系统中的默认区域。
[root@localhost ~]# firewall-cmd --get-default-zone
public
(2)显示默认区域的所有规则。
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
(3)显示网络接口 ens33 对应区域。
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
(4)将网络接口 ens33 对应区域更改为 internal 区域。
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens33
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
(5)显示所有激活区域。
[root@localhost ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
为了方便管理,firewalld 预先定义了很多服 务,存放在 /usr/lib/firewalld/services/ 目录中,服务通过单个的 XML 配置文件来指定。
这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如 ssh 服 务等。与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口。在最新版本的 firewalld 中默认已经定义了 70 多种服务供我们使用,对于每个网络区域,均可以配置允 许访问的服务。当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在 /etc/firewalld/services/ 目录中。
service 配置具有以下优点。
通过服务名字来管理规则更加人性化。
通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服 务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。
firewall-cmd 命令区域中服务管理的常用选项说明
选项 | 说明 |
---|---|
[- -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 >时表示对默认区域操作 |
具体操作如下所示。
(1)为默认区域设置允许访问的服务。
[root@localhost ~]# firewall-cmd --list-services '//显示默认区域内允许访问的所有服务 '
dhcpv6-clientssh
[root@localhost ~]# firewall-cmd --add-service=http '//设置默认区域允许访问 http 服务success '
[root@localhost ~]#firewall-cmd --add-service=https '//设置默认区域允许访问 https 服务 '
success
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-clientssh https http
(2)为 internal 区域设置允许访问的服务。
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql '//设置 internal 区域允许访问 mysql 服务 '
success
[root@localhost~]#firewall-cmd --zone=internal --remove-service=samba-client '//设置 internal 区域不允许访问 samba-client 服务 '
success
[root@localhost ~]# firewall-cmd --zone=internal --list-services '//显示 internal 区域内允许访问的所有服务 '
sshmdns dhcpv6-client mysql
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。例如,执行以下操作 即可实现在 internal 区域打开 443/TCP 端口。
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
若想实现在 internal 区域禁止 443/TCP 端口访问,可执行以下命令。
[root@localhost ~]#firewall-cmd --zone=internal --remove-port=443/tcp
success
前面提到 firewall-cmd 命令工具有两种配置模式:运行时模式(Runtime mode)表示当前内存中运行的防火墙配置,在系统或 firewalld 服务重启、停止时配置将失效;永久模式(Permanent mode)表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置
文件中的。
firewall-cmd 命令工具与配置模式相关的选项有三个。