一、linux防火墙基础:
防火墙是指设置在不同网络与网络安全域之间的一系列部件的组合,也是不同安全域之间信息的唯一出口。通过监测、限制并更改跨越防火墙的数据流,尽可能地对外屏蔽网络内部的信息、结构和运行状态,且有选择地接受外部网络访问。在内外网之间架起一道屏障.以避免发生不可预知或潜在的入侵。从传统意义上来说防火墙技术分为三类,包过滤(Packet Filtering)、应用代理(Application Proxy)、状态检测〈Stateful hspection)。
Linux的防火墙体系主要工作在网络层.针对TCP/P数据包实时过滤和限制.属于典型的包过滤防火墙〈或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现.具有非常稳定的性能和高效率.也因此获得广泛的应用.在CentOS7系统中几种防火墙共存:firewalld 、iptables 、 ebtables,默认使用firewalld来管理netfilter子系统。
netfilter:指的是Linux内核中实现包过滤防火墙的内部结构.不以程序或文件的形式存在.属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
firewalld:指用于管理Linux防火墙的命令程序,属于“用户态”(User Space,又称为用户空间〉的防火墙管理体系。
1.2 firewalld 概述:
firewalld 的作用是为包过滤机制提供匹配规则(或称为策略),firewalld 提供了支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具。它支持IPv4、IPv6防火墙设置以及以太网桥,并且拥有两种配置模式:运行时配置与永久配置。
1.3 firewalld 网络区域:
firewalld将所有的网络数据流量划分为多个区域,从而简化防护墙管理.根据数据包的源Р地址或传入网络接口等条件.将数据流量转入相应区域的防火墙规则.对于进入系统的数据包.首先检查的就是其源地址。
若源地址关联到特定的区域.则执行该区域所制定的规则.
若源地址未关联到特定的区域.则使用传入网络接口的区域并执行该区域所制定的规则.
若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则.
默认区域不是单独的区域,而是指向系统上定义的某个其他区域。默认情况下,默认区域是public,但是系统管理员可以更改默认区域、以上匹配规则.按照先后顺序.第一个匹配的规则胜出。
dmz(隔离区域也称为非除非与传出的流量相关,或与ssh预定义服务匹配,否则拒绝流量传入军事区域)
block(限制区域)除非与传出流量相关,否则拒绝所有传入流量
drop(丢弃区域)除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含ICMP(Intenet ControlMessage Protocol,互联网控制报文协议)的错误响应
二、firewalld防火墙的配置方法:
在CentOS 7系统中,可以使用三种方式配置firewalld防火墙:
firewall-config图形工具
firewall-cmd命令行工具
/etc/firewalld/中的配置文件
通常情况下,不建议直接编辑配置文件。所以本章我们只介绍firewall-config图形工具与firewall-cmd命令行工具的配置方法。
2.1firewalld-config图形化工具:
firewall-config图形化配置工具支持防火墙所有的特性.系统管理员可以通过它来改变系统或用户策略.通过firewall-config 图形化配置工具,可以实现配置防火墙允许通过的服务、端口、伪装.端口转发、ICMP过滤器等功能。在终端中输入firewall-config命令可以打开此界面。
查看防火墙状态:
root@localhost ~]# systemctl status firewalld.service
使用firewalld-config进入图形化工具:
[root@localhost ~]# firewall-config
firewall-config 主菜单包括四个菜单项:文件、选项.查看、帮助,其中,"选项”菜单是最重要的.主要包括以下几个选项.
重新加载防火墙;重新加载防火墙规则.当前的永久配置将变成新的运行时配置。例如.所有的当前运行的配置规则如果没有在永久配置中操作,系统重新加载后就会丢失.
更改连接区域:更改网络连接的所属区域和接口。
改变默认区域:更改网络连接的默认区域.
应急模式:表示丢弃所有的数据包。
锁定:可以对防火墙的配置进行加锁.只允许白名单上的应用程序进行修改。
2.3 firewalld-cmd 命令行:
如果firewalld 正在运行,通过systemctl status firewalld或firewall-cmd命令可以查看其运行状态。
[root@localhost ~]# systemctl status firewalld.service
或
[root@localhost ~]# firewall-cmd --state
如果想要禁用firewalld,执行以下命令即可实现.
[root@localhost ~]# systemctl stop firewalld.service ##关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service ##开机自关闭
获取预定义信息
firewall-cmd预定义信息主要包括三种:可用的区域.可用的服务以及可用的ICMP阻塞类型.具体的查看命令如下所示。
[root@localhost ~]# firewall-cmd --get-zones ##显示所有区域
[root@localhost ~]# firewall-cmd --get-service ##显示所有服务
[root@localhost ~]# firewall-cmd --get-icmptypes ##显示预定义的ICMP类型
firewall-cmd --get-icmptypes命令的执行结果中各种阻塞类型的含义分别如下所示。
destination-unreachable:目的地址不可达.
echo一reply:应答回应〈pong).
parameter-problem;参数问题.redirect:重新定向。
router—advertisement:路由器通告.
router—solicitation:路由器征寻。
source-quench;源端抑制.
time-exceeded:超时。
tinestamp-reply:时间戳应答回应.timestamp-request:时间戳请求。
2.4 区域管理:
使用firewall--amd命令可以实现获取和管理区域.为指定区域绑定网络接口等功能.
示例:
(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对应区域更改为internal区域.
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
(5)显示所有激活区域.
[root@localhost ~]# firewall-cmd --get-active-zones
2.5 服务管理:
为了方便管理,firewalld预先定义了很多服务,存放在/usr /lib/firewalld/ services/目录中,服务通过单个的XM._配置文件来指定。这些配置文件则按以下格式命名:service-name , xml,每个文件对应一项具体的网络服务当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将service 配置文件放置在/etc/firewalld/services/目录中。service 配置具有以下优点.
通过服务名字来管理规则更加人性化.
通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口.则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式.
[--zonc<Zonc>]--add-icmp-block=<icmptype>为指定区域设置拒绝访问的基项ICMP类型
[--zone=<zone>]--remove-icmp-block=<icmptype>删除指定区域已设置的拒绝访问的某项ICMP类型,省略--zonc=<zone>时表示对默认区域操作
示例:
为默认区域设置允许访问的服务:
[root@localhost ~]# firewall-cmd --list-services ##显示默认区域内允许访问的所有服务
ssh dhcpv6-client
[root@localhost ~]# firewall-cmd --add-service=http ##默认区域添加http服务
success
[root@localhost ~]# firewall-cmd --list-services
ssh dhcpv6-client http
为internal区域设置允许访问的服务.
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql ##设置internal区域允许访问 mysql服务
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=samba-client ##设置internal区域不允许访问samba-client服务
[root@localhost ~]# firewall-cmd --zone=internal --list-service ##显示internal区域内允许访问的所有服务
2.6 端口管理:
在进行服务配置时.预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开.但是.对于非预定义的服务只能手动为指定的区域添加端口。
例如.执行以下操作即可实现在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
2.7两种配置模式
前面提到 firewall-cmd命令工具有两种配置模式:运行时模式〈Runtime mode)表示当前内存中运行的防火墙配置.在系统或firewalld服务重启.停止时配置将失效;永久模式《Permanent mode)表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewall-cmd命令工具与配置模式相关的选项有三个.
--reload:重新加载防火墙规则并保持状态信息.即将永久配置应用为运行时配置。
--permanent:带有此选项的命令用于设置永久性规则.这些规则只有在重新启动firewalld
或重新加载防火墙规则时才会生效;若不带有此选项.表示用于设置运行时规则。
--untime--1o-permanent;将当前的运行时配置写入规则配置文件中.使之成为永久性配遗。