Linux操作系统-第2版-RHEL8-CentOS8——6.6.1 firewalld简介

 

新版:Linux操作系统(第二版)(RHEL 8/CentOS 8)

 

6.6.1  firewalld简介

RHEL 8中有几种防火墙共存:iptables、ip6tables、ebtables和nftables。它们其实并不具备防火墙功能,它们的作用都是在用户空间中管理和维护规则,不过它们的规则结构和使用方法不一样,真正利用规则进行数据包过滤是由内核中的netfilter子系统负责。它们之间的关系如图6-16所示。

Linux操作系统-第2版-RHEL8-CentOS8——6.6.1 firewalld简介_第1张图片

图6-16  firewalld整体架构

RHEL 8采用firewalld管理netfilter子系统,默认情况,firewall的后端是nftables,而非iptables,底层调用的是nft命令,而非iptables命令。不同的防火墙软件相互间存在冲突,使用某个时应禁用其它的防火墙软件。从RHEL 7开始,用firewalld服务替代了iptables服务。firewalld更为简单易用。firewalld相对于iptables的主要优点有:① firewalld可以动态修改单条规则,不需要像iptables那样,修改规则后必须全部刷新才可生效;② firewalld在使用上比iptables更人性化,即便不明白“五张表五条链”,不理解TCP/IP协议也可以实现大部分功能。

firewalld的配置文件一般有两个存储位置:① /etc/firewalld/(存放修改过的配置,优先查找,找不到再找默认的配置)和 ② /usr/lib/firewalld/(存放默认的配置)。当需要一个配置文件时,firewalld会优先使用第一个目录中的。如果要修改firewalld配置,只需将/usr/lib/firewalld中的配置文件复制到/etc/firewalld中,然后进行修改。如果要恢复配置,直接删除/etc/firewalld中的配置文件即可。

在这两个配置目录(/etc/firewalld/、/usr/lib/firewalld/)中,主要是两个文件(firewalld.conf、lockdown-whitelist.xml)和三个目录(zones、services、icmptypes)。zones目录中存放zone配置文件,services目录中存放service配置文件,icmptypes目录中存放icmp类型相关的配置文件。

firewalld主配置文件/etc/firewalld/firewalld.conf的前5个配置项:① DefaultZone,默认使用的zone,默认值为public;② MinimalMark,标记的最小值,默认为100;③ CleanupOnExit,退出后是否清除防火墙规则,默认为yes;④ Lockdown,是否限制别的程序通过D-BUS接口直接操作firewalld,默认为no,当Lockdown设置为yes时,/etc/firewalld/lockdown-whitelist.xml规定哪些程序可以对firewalld进行操作;⑤ IPv6_rpfilter,判断接收的包是否是伪造的,默认为yes。

1zone(区域)

一个zone就是一个可信等级,某一等级对应一套过滤规则(规则集合),数据包必须要经过某个zone才能入站或出站。不同zone中规则粒度粗细、安全强度都不尽相同。每个zone单独对应一个xml配置文件,文件名为.xml。自定义zone只需要添加一个.xml文件,然后在其中添加过滤规则即可。每个zone都有一个处理行为(default、ACCEPT、REJECT、DROP)。通过将网络划分成不同的zone,制定出不同zone之间的访问控制策略来控制不同程序区域间传送的数据流。总之,防火墙的网络区域定义了网络连接的可信等级,可以根据不同场景来调用不同的firewalld区域,一般情况下,firewalld提供了9个默认zone,根据区域的信任级别从不信任到可信,见表6-7。

表6-7  firewalld提供了9个zone

zone

默认规则策略

drop

丢弃所有进入的数据包,不做任何响应。仅允许传出连接

block

拒绝所有进入的数据包,返回icmp-host-prohibited报文(ipv4)或icmp6-adm-prohibited报文(ipv6)。仅允许传出连接

public

firewalld默认的zone。用于不受信任的公共场所,不信任网络中其它计算机,可以允许选定的传入连接

external

用在路由器等启用伪装(NAT)的外部网络,仅允许选定的传入连接

internal

用在(NAT)内部网络,网络中的其它系统通常是可信的,仅允许选定的传入连接

dmz

允许非军事区(DMZ,内外网络之间增加的一层网络,起到缓冲作用)中的计算机有限的被外界网络访问,仅允许选定的传入连接

work

用在工作网络,网络中的其它计算机通常是可信的,仅允许选定的传入连接

home

用在家庭网络,网络中的其它计算机通常是可信的,仅允许选定的传入连接

trusted

接受所有网络连接,信任网络中的所有计算机

 

这9个zone配置文件都保存在/usr/lib/firewalld/zones/目录下。大致用法是:把可信任的IP地址添加到trusted区域,把不可信任的IP地址添加到block区域,把要公开的网络服务添加到public区域。比如/usr/lib/firewalld/zones/public.xml内容如下:

  Public

  For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.

  

  

  

/usr/lib/firewalld/zones/trusted.xml内容如下:

  Trusted

  All network connections are accepted.

/usr/lib/firewalld/zones/block.xml内容如下:

  Block

  Unsolicited incoming network packets are rejected. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.

trusted.xml和block.xml文件中的target属性为zone的默认处理行为,可选值:default、ACCEPT、%%REJECT%%、DROP。

 

2service服务

iptables使用端口号来匹配规则,但是如果某一个服务的端口号改变了,就要同时更改iptables规则,很不方便,同时也不方便阅读理解。一个service中可以配置特定的端口(将端口和service的名字关联)。zone中加入service规则就等效于直接加入了port规则,但是使用service更容易管理和理解。service配置文件的命名为.xml,在其中加入要关联的端口即可,比如ssh的配置文件是ssh.xml,/usr/lib/firewalld/services/ssh.xml内容如下:

  SSH

  Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

  

 

3zone文件中过滤规则

zone文件中的过滤规则见表6-8。过滤规则优先级:① source(最高);② interface(次之);③ firewalld.conf中配置的默认zone(最低)。

表6-8  zone文件中的过滤规则

规则

作用

source

根据数据包源地址过滤,相同的source只能在一个zone中配置

interface

根据接收数据包的网卡过滤

service

根据服务名过滤(实际是查找服务关联的端口,根据端口过滤),一个service可以配置到多个zone中

port

根据端口过滤

icmp-block

icmp报文过滤,可按照icmp类型设置

masquerade

ip地址伪装,即将接收到的请求的源地址设置为转发请求网卡的地址(路由器的工作原理)

forward-port

端口转发

rule

自定义规则,与iptables配置接近。rule结合--timeout可以实现一些有用的功能,比如可以写个自动化脚本,发现异常连接时添加一条rule将相应地址drop掉,并使用--timeout设置时间段,过了之后再自动开放

 

4数据包处理流程

firewalld提供了9个zone,过滤规则优先级决定进来的数据包会由哪个zone来处理,处理进来数据包的流程如下:

① 如果进来的数据包的源地址被drop或block这两个zone的source规则匹配,那么这个数据包不会再去匹配interface规则。如果数据包的源地址没有被drop和block 两个zone的source规则匹配,而是被其它zone的source规则匹配,那么数据包将会被该zone处理。

② 如果数据包通的接口被drop或block这两个zone的interface规则匹配,则不会交给默认zone处理。如果数据包通的接口没有被drop和block 两个zone的interface规则匹配,而是被其它zone的interface规则匹配,那么数据包将会被该zone处理。

③ 如果数据包没有被source规则和interface规则匹配,将会被默认zone处理(由/etc/firewalld/firewalld.conf中的配置项DefaultZone设置)。

你可能感兴趣的:(Linux操作系统-第2版-RHEL8-CentOS8——6.6.1 firewalld简介)