会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助。
简介
在Internet中,企业通过架设各种应用系统来为用户提供各种网络服务,如Web网站、电子邮件系统,FTP服务器,数据库系统等。那么,如何来保护这些服务器,过滤企业非授权的访问,甚至是恶意的入侵呢?
本章将开始学习Linux系统中的防火墙—netfilter和firewalld,包括防火墙的结构与匹配流程,以及如何编写防火墙规则。
本章重点
熟悉firewalld预定义的网络区域
使用firewall-config 配置防火墙
使用firewall-cmd配置防火墙
理论讲解
一,Linux防火墙基础
防火墙是指设置在不同网络与网络安全域之间的一系列部件的组合,也是不同安全域之间信息的唯一出口。通过监测、限制并更改跨越防火墙的数据流,尽可能地对外屏蔽网络内部的信息、结构和运行状态,且有选择地接受外部网络访问,在内外网之间架起一道屏障,以避免发生不可预知或潜在的入侵。从传统意义上来说防火墙技术分为三类:包过滤(Packet Filtering)、应用代理(Application Proxy).状态检测(Stateful inspection)。无论一个防火墙的实现过程有多复杂,归根结底都是在这三种技术的基础上进行扩展的。
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。在CentOS7系统中几种防火墙共存:firewalld.iptables.ebtables,默认使用firewalld 来管理netfilter 子系统,本书中重点讲解 firewalld。
netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于”内核态”(KermelSpace,又称为内核空间)的防火墙功能体系。
firewalld:指用于管理Linux防火墙的命令程序,属于“用户态”(User Space.又称为用户空间)的防火墙管理体系。
后续课程内容中不严格区分netfilter 与firewalld,两者均可表示为Linux防火墙。
二,firewalld概述
1.firewalld简介
firewalld的作用是为包过滤机制提供匹配规则(或称为策略),通过各种不同的规则.告诉netfilter对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式。为了更加方便地组织和管理防火墙,firewalld提供了支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具。它支持IPv4、IPv6防火墙设置以及以太网桥,并且拥有两种配置模式:运行时配置与永久配置。它还支持服务或应用程序直接添加防火墙规则接口。
2.firewalld网络区域
firewalld 将所有的网络数据流量划分为多个区域,从而简化防护墙管理。根据数据包的源IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。
若源地址关联到特定的区域,则执行该区域所制定的规则。
若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则。
若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则。
默认区域不是单独的区域,而是指向系统上定义的某个其他区域。默认情况下,默认区域是public,但是系统管理员可以更改默认区域。以上匹配规则,按照先后顺序,第一个匹配的规则胜出。
在每个区域中都可以配置其要打开或者关闭的一系列服务或端口,firewalld的每个预定义的区域都设置了默认打开的服务。
下面是每个区域的详解:
trusted(信任区域):可接收所有的网络连接,一般内部网络使用。
public(公共区域):除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝流量传入,在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。并且,该区域是新添加网络接口的默认区域。
work(工作区域):除非与传出流量相关,或与ssh、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入,用于工作区。相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接
home(家庭区域):除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpvo-client 预定义服务匹配,否则拒绝流量传入,用于家庭网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接。
internal(内部区域):除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpvo-client 预定义服务匹配,否则拒绝流量传入,用于内部网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接。
external(外部区域):除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入。通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
dmz:隔离区域也称为非除非与传出的流量相关,或与ssh预定义服务匹配,否则拒绝流量传入军事区域。
block(限制区域):除非与传出流量相关,否则拒绝所有传入流量。
drop(丢弃区域):除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含ICMP(Internet Control Message Protocol,互联网控制报文协议)的错误响应。
三,firewalld防火墙的配置方法
在CentOS7系统中,可以使用三种方式配置 firewalld防火墙:
firewall-config 图形工具。
firewall-cmd命令行工具。
/etc/firewalld/中的配置文件。
通常情况下,不建议直接编辑配置文件。所以本章我们只介绍firewall-config 图形工具与firewall-cmd命令行工具的配置方法。
1.firewall-config图形工具
firewall-config图形化配置工具支持防火墙所有的特性,系统管理员可以通过它来改变系统或用户策略。通过firewall-config图形化配置工具,可以实现配置防火墙允许通过的服务、端口、伪装、端口转发、ICMP过滤器等功能。在CnetOS7系统中单击“应用程序”中的“杂项”选择“防火墙”
即可打开如下图所示的firewall-config 工作界面,或者直接在终端中输入firewall-config命令也可以打开此界面。
首先要确保防火墙属于开启状态

输入firewall-config打开管理防火墙界面

firewall-config工作界面主要分为三个部分,上面是主菜单,中间是配置选项,下面是区域、服务、Psets、ICMP类型、直接配置、锁定白名单设置选项卡。其中,ICMP类型、直接配置和锁定白名单选项卡只在从“查看”下拉菜单中选择之后才能看见。最底部是状态栏从左到右显示了四个信息,
依次是连接状态.默认区域、锁定状态、应急模式。
firewall-config主菜单包括四个菜单项:文件、选项、查看、帮助。其中,“选项”菜单是最重要的,主要包括以下几个选项。
重新加载防火墙:重新加载防火墙规则,当前的永久配置将变成新的运行时配置。例如,所有的当前运行的配置规则如果没有在永久配置中操作,系统重新加载后就会丢失。
更改连接区域:更改网络连接的所属区域和接口。
改变默认区域:更改网络连接的默认区域。
应急模式:表示丢弃所有的数据包。
锁定:可以对防火墙的配置进行加锁,只允许白名单上的应用程序进行修改。
上图“配置”选项包括运行时和永久两种。运行时配置为当前使用的配置规则,永久配置规则在系统或服务重启时生效。在firewall-config界面中主要需要了解的是区域、服务、ICMP等设置的选项卡。
1)“区域”选项卡
“区域”选项卡是一个主要设置的界面。“区域”选项卡下面还包含服务、端口、协议、源端口、伪装等一系列子选项卡。所以说,区域是服务、端口、协议、IP伪装、ICMP过滤等组合的意思,同时区域也可以绑定到接口和源地址。
①“服务”子选项卡可以定义区域中哪些服务是可信的,可信的服务可以被绑定到该区域的任意连接,接口和源地址访问,如下图所示:

②端口”子选项卡用于设置允许访问的主机或网络访问的端口范围,如下图所示:

③“协议”子选项卡用于添加所有主机或网络均可访问的协议。如下图所示:

④“源端口(Source Prots)”子选项卡可以添加额外的源端口或范围,连接到这台主机的所有主机或网络均可访问,设置源端口时,可以设置某一个端口号或者是端口范围,同时还需要选择对应的TCP或UDP协议。如下图所示:

⑤“伪装”子选项卡用于把私有网络地址映射到公有的IP地址,该功能目前只适用于lPv4,如下图所示:

⑥“端口转发”子选项卡可以将指定端口映射到另个端口或其他主机的指定端口,在设置端口转发时同样需要选择协议类型,且该功能也仅支持IPv4,如下图所示:

⑦ ICMP过滤器 子选项卡:ICMP主要用于在联网的计算机间发送出错信息,但也发送类似ping请求以及回应等信息。在“ICMP过滤器”子选项卡中可以选择应该被拒绝的ICMP类型,其他所有的ICMP类型则被允许通过防火墙。默认设置是没有限制,如下图所示:

“区域”选项卡中除了上文中所描述的子选项卡,还有其他的子选项卡。这里仅介绍了常用的其他的就不多做介绍了。
2)“服务”选项卡
服务是端口、协议、模块和目标地址的组合,并且“服务”选项卡只能在“永久”配置视图中修改,“运行时”配置中的服务是不可以修改的。与“区域”选项卡不同,服务”选项卡仅包含五个子选项卡。其中.“端口”“协议”“源端口”这些子选项卡的作用及配置方法与“区域”选项卡中的相同。
“模块”子选项卡是用于设置网络过滤的辅助模块.
“目标”子选项卡:如果某服务指定了目标地址,服务项目仅限于目标地址和类型.
2.firewall-cmd命令
1)启动、停止,查看firewalld服务
在安装CentOS7系统时,会自动安装firewalld 和图形化工具firewall-config.执行以下命令可以启动firewalld并设置为开机自启动状态。

如果想要禁用firewalld,执行以下命令即可实现:

2)获取预定义信息
firewal-cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的ICMP阻塞类型.
显示预定义的区域

显示预定义的服务

显示预定义的ICMP类型

firewall-cmd--get-icmptypes命令的执行结果中各种阻塞类型的含义分别如下所示。
destination-unreachable:目的地址不可达。
echo-reply:应答回应(pong)。>parameter-problem:参数问题。
redirect:重新定向。
router-advertisement:路由器通告。>router-solicitation;路由器通告。
source-quench:源端抑制。
time-exceeded:超时。
timestamp-reply:时间戳应答回应。
timestamp-request:时间戳请求。
3)区域管理
使用firewall-cmd命令可以实现获取和管理区域,为指定区域绑定网络接口等功能。表2-2中列出了firewall-cmd命令的区域管理选项说明

具体操作如下所示。
① 显示当前系统中的默认区域。

②显示默认区域的所有规则。

③ 显示网络接口ens33对应区域。

④ 将网络接口ens32对应区域更改为internal区域


⑤ 显示所有激活区域。

4)服务管理
为了方便管理,firewalld 预先定义了很多服务,存放在/usr/lib/firewalld/services/目录中,服务通过单个的XML配置文件来指定。这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如ssh服务等。与之对应的配置文件中记录了各项服务所使用的tcp/udp端口。在最新版本的firewalld中默认已经定义了70多种服务供我们使用,对于每个网络区域,均可以配置允许访问的服务。当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将service配置文件放置在/etc/firewalld/services/目录中。service配置具有以下优点。
通过服务名字来管理规则更加人性化。
通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。
下图列出了firewall-cmd命令区域中服务管理的常用选项说明。


具体操作如下所示。
① 为默认区域设置允许访问的服务。

② 为internal区域设置允许访问的服务。

5)端口管理
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。
但是,对于非预定义的服务只能手动为指定的区域添加端口。例如,执行以下操作即可实现在internal区域打开443/TCP端口。

若想实现在intermal区域禁止443/TCP端口访问,可执行以下命令。

6)两种配置模式
前面提到firewall-cmd命令工具有两种配置模式:
运行时模式(Runtime mode):表示当前内存中运行的防火墙配置,在系统或firewalld服务重启、停止时配置将失效。
永久模式(Permanent mode):表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。
firewall-cmd命令工具与配置模式相关的选项有三个。
--reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
--permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动firewalld或重新加载防火墙规则时才会生效:若不带有此选项,表示用于设置运行时规则。
--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。
四,firewalld防火墙配置应用
了解了firewalld防火墙的基本配置方法,下面通过一个企业案例实际配置一下frewalld防火墙。

实验需求
网关服务器连接互联网网卡ens32地址为100.1.1.10,为公网IP地址,分配到firewall的external(外部)区域;
连接内网网卡ens34地址为192.168.1.1.分配到firewall的trusted(信任)区域:
连接服务器网卡ens35地址为192.168.2.1.分配到firewall的dmz(非军事)区域。
1.实验环境
四台虚拟机分别为Centos01,Centos02,Centos03,Centos04
其实,Centos01为网关服务器,三块网卡
Centos02为内网
Centos03为Internet测试机
Centos04为网站服务器
2.准备环境
1)为网关服务器Centos01添加两块网卡

2)Centos03网卡改为VMnet2模式

3)Centos04网卡改为VMnet3模式

3.配置网关服务器Centos01
1)开启路由功能



2)开启防火墙

3)修改默认区域为truted

4)将ens32网卡加入到external区域

5)将ens34网卡加入到trusted

5)将ens35网卡加入到dmz

6)为确保正确性。检查一遍

7)配置ens32网卡信息


8)配置ens34网卡信息


9)配置ens35网卡信息



10)重启网卡

11)查看各网卡IP信息确保无误
ens32:

ens34:

ens35:

4.配置内网服务器Centos02
1)开启防火墙

2)设置默认区域为trusted区域

3)将ens32网卡加入trusted区域

4)配置ens32网卡信息


5)重启网卡

6)测试是否能够ping通网关

5.配置测试用机Centos03
1)开启防火墙

2)将默认区域修改为external

3) 将ens32网卡加入到external区域

4)修改ens32网卡信息


5)重启网卡

6)测试是否能够ping通自己网关

6.配置网站服务器Centos04
1)开启防火墙

2)将默认区域设置为dmz

3)将ens32网卡加入到dmz区域中

4)配置ens32网卡信息


5)重启网卡

6)测试是否能够ping通自己网关

7.安装http
1)在网站服务器安装httpd和mod_ssl软件包。

2)写入测试网页

3)重启服务

网站服务器和网关服务器均通过SSH来远程管理,为了安全,将SSH默认端口改为12345。
网站服务器修改ssh端口号


重启服务

查看端口号

网关服务器修改端口号



网站服务器配置支持12345端口


测试是否能通登录

网站服务器开启https,过滤未加密的http流量。

网站服务器拒绝ping。

测试是否能够访问dmz,如果能,则为正确

测试是否能够ping通网站服务器,不能ping通极为正确

至此,结束~
故事很短,道理很长,学无止境,不忘初心,砥砺前行
微信搜索 “徐阿马” 关注公众号,期待你的关注!





