1.firewalld简介
firewalld的作用是为包过滤机制提供匹配规则(或称为策略),通过各种不同的规则,告诉 netfiter对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式。
为了更加方便地组织和管理防火墙,firewalld 提供了支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具。它支持IPv4 、IPv6 防火墙设置以及以太网桥,并且拥 有两种配置模式:运行时配置与永久配置。它还支持服务或应用程序直接添加防火墙规则接口。
2.firewalld和iptables的关系
firewalld自身并不具备防火墙的功能,而是和iptables 一样需要通过内核的netilter 来实现。也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
系统提供了图形化的配置工具 firewall-config 、system-config-firewall, 提供命令行客户端firewall-cmd,用于配置 firewalld永久性或非永久性运行时间的改变:它依次用 iptables 工具与执行数据包筛选的内核中的 Netfilter 通信。。
Firewalld 和 iptables 关系图
从图中可以看到,iptables服务和firewalld都是通过iptables命令与内核的netfilter进行交互的。在centos7中,我们仍然可以使用iptables命令来管理我们的防火墙。唯一不同的是当我们重启服务器或重启firewalld 时,iptables 命令管理的规则不会自动加载,反而会被firewalld的规则代替。
3.firewalld 与iptables service 的区别
iptables service 在 letc/sysconfigliptables 中储存配置,而 firewalld 将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里。
> 使 用 iptables service 每一个单独更改意味着清除所有旧有的规则和从 letclsysconfigliptables 里读取所有新的规则,然而使用 firewalld 却不会再创建任何新的 规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。
Firewalld网络区域
firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙管理。根据数据包的 源 IP 地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。
>若源地址关联到特定的区域,则执行该区域所制定的规则。
>若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则。
>若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则。
默认区域不是单独的区域,而是指向系统上定义的某个其他区域。默认情况下,默认区 域 是public,但是系统管理员可以更改默认区域。以上匹配规则,按照先后顺序,第一个匹配的规则胜出。
在每个区域中都可以配置其要打开或者关闭的一系列服务或端口,firewalld的每个预定义的区域都设置了默认打开的服务。
firewalld的预定义区域说明 | |
区域 | 说明 |
trusted(信任区域) | 可接收所有的网络连接 |
public(公共区域) | 除非与传出流量相关,或与ssh 或dhcpv6-client预定义服务匹配,否则拒绝流量传 入,在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收 经过选择的连接。并且,该区域是新添加网络接口的默认区域 |
work(工作区域) | 除非与传出流量相关,或与ssh 、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入,用于工作区。相信网络内的其他计算机不会危害计算机,仅接受经过选择的连接 |
home (家庭区域) | 除非与传出流量相关,或与ssh、ipp-client 、mdns 、samba-client 、dhcpv6-client预 定义服务匹配,否则拒绝流量传入,用于家庭网络。信任网络内的其他计算机不会危 害计算机,仅接收经过选择的连接 |
internal(内部区域) | 除非与传出流量相关,或与ssh、ipp-client 、mdns 、samba-client 、dhcpv6-client预 定义服务匹配,否则拒绝流量传入,用于内部网络。信任网络内的其他计算机不会危 害计算机,仅接收经过选择的连接 |
external (外部区域) | 除非与传出流量相关,或与ssh 预定义服务匹配,否则拒绝流量传入。通过此区域转 发的 IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络 |
dmz (隔离区域也称为非军事区域) | 除非与传出的流量相关,或与ssh 预定义服务匹配,否则拒绝流量传入 |
block(限制区域) | 除非与传出流量相关,否则拒绝所有传入流量 |
drop(丢弃区域) | 除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含 ICMP(InternetControl Message Protocol,互联网控制报文协议)的错误响应 |
Firewalld防火墙的配置方法
在Ce ntOS7 系统中,可以使用三种方式配置firewalld 防火墙:
firewall-config 图形工具。
firewall-cmd 命令行工具。
/etc/firewalld/中的配置文件。
通常情况下,不建议直接编辑配置文件。
firewall-cmd命令
1.firewalld 服务管理
在安装CentOS7系统时,会自动安装firewalld和图形化工具firewall-config。执行以下命令可以启动firewalld 并设置为开机自启动状态。
[root@localhost ~]# systemctl start firewalld //启动 firewalld
[root@localhost ~]# systemctl enable firewalld //设置firewalld为开机自启动
如果firewalld正在运行,通过systemctl status firewalld 或 firewall-cmd 命令可以查看其运行状态。
2.获取预定义信息
firewall-cmd预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻塞类型,具体的查看命令如下所示
[root@localhost ~]# firewall-cmd --get-zones /显示预定义的区域
[root@localhost~]#firewall-cmd --get-service /显示预定义的服务
[root@localhost~]#firewall-cmd --get-icmptypes //显示预定义的ICMP 类型
3. 区域管理
使用firewall-cmd 命令可以实现获取和管理区域,为指定区域绑定网络接口等功能。
firewall-cmd 命令的区域管理选项说明 | |
选项 | 说明 |
--get-default-zone | 显示网络连接或接口的默认区域 |
--set-default-zone= | 设置网络连接或接口的默认区域 |
-get-active-zones | 显示已激活的所有区域 |
--get-zone-of-interface= | 显示指定接口绑定的区域 |
--zone=--add-interface= | 为指定接口绑定区域 |
--zone=--change-interface= | 为指定的区域更改绑定的网络接口 |
--zone=--remove-interface= | 为指定的区域删除绑定的网络接口 |
--list-all-zones | 显示所有区域及其规则 |
[--zone=]--list-all | 显示所有指定区域的所有规则,省略--zone=时表示仅 对默认区域操作 |
(1)显示当前系统中的默认区域。
[root@localhost ~]#firewall-cmd --get-default-zone
(2)显示默认区域的所有规则。
[root@localhost ~]#firewall-cmd --list-all
(3)显示网络接口ens33对应区域。
[ root@localhost ~]#firewall-cmd -get-zone-of-interface=ens33
(4)将网络接口ens33 对应区域更改为指定区域。
[root@localhost ~]#firewall-cmd --zone=internal -change-interface=ens33
(5)显示所有激活区域。
[root@localhost ~]#firewall-cmd --get-active-zones
4.服务管理
为了方便管理,firewalld预先定义了很多服务,存放在/usr/ib/firewalld/services/ 目 录中,服务通过单个的 XML 配置文件来指定。这些配置文件则按以下格式命名:
service-name.xml, 每个文件对应一项具体的网络服务,如 ssh 服务等。与之对应的配置文件中记录了各项服务所使用的tcp/udp端口。在最新版本的firewalld 中默认已经定义了70多种服务供我们使用,对于每个网络区域,均可以配置允许访问的服务。当默认提供的 服务不适用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在letc/firewalld/services/ 目录中。service 配置具有以下优点。
通过服务名字来管理规则更加人性化。
> 通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服
务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。
firewall-cm d 命令区域中服务管理的常用选项说明 | |
选项 说明 | |
[-zone=]-list-services [--zone=]--add-service= [--zone=]--remove-service= [-zone=]--list-ports | 显示指定区域内允许访问的所有服务 为指定区域设置允许访问的某项服务 删除指定区域已设置的允许访问的某项服务 显示指定区域内允许访问的所有端口号 |
[-zone=]--add-port=[-]为指定区域设置允许访问的某个/某段端口号(包括 | |
[-zone=] --remove-port=[-]/ [--zone=]-list-icmp-blocks [-zone=]--add-icmp-block= [--zone=]--remove-icmp-block= | 协议名) 删除指定区域已设置的允许访问的端口号(包括协 议名) 显示指定区域内拒绝访问的所有ICMP类型 为指定区域设置拒绝访问的某项ICMP类型 删除指定区域已设置的拒绝访问的某项ICMP类 型,省略--zone=时表示对默认区域操作 |
(1)为默认区域设置允许访问的服务。
[root@localhost ~]#firewall-cmd --add-service=http
(2)为internal 区域设置允许访问的服务。
[root@localhost~]#firewall-cmd --zone=internal --add-service=mysql
[root@localhost~]#firewall-cmd-zone=internal -remove-service=samba-client //设置internal区域不允许访问samba-client服务
5 .端口管理
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自 动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。例如,执行以下操作即可实现在 internal区域打开443/ TCP 端口。
[root@localhost ~]# firewall-cmd --zone=internal -add-port=443/tcp
若想实现在 internal区域禁止443/TCP 端口访问,可执行以下命令。
[root@localhost~]#firewall-cmd --zone=internal --remove-port=443/tcp
6.两种配置模式
前面提到 firewall-cmd 命令工具有两种配置模式:运行时模式 (Runtime mode) 表 示 当前内存中运行的防火墙配置,在系统或 firewalld 服务重启、停止时配置将失效;永久模 式 (Permanent mode) 表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewall-cmd 命令工具与配置模式相关的选项有三个。
--reload: 重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
--permanent: 带有此选项的命令用于设置永久性规则,这些规则只有在重新启动 firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。
--runtime-to-permanent: 将当前的运行时配置写入规则配置文件中,使之成为永久性配置。