Bootstrap

firewalld(3)zone配置

简介

前面文章我们已经介绍了firewalld的安装,配置文件介绍、简单的规则查询,本篇文章主要介绍zone的配置。前面我们介绍了firewalld默认的zone和不同zone的功能,下面我们就直接进入zone的具体配置使用。

配置zone的方式    

图形配置工具 firewall-config
这是一个图形用户界面(GUI)工具,它允许用户通过点击和拖动来配置防火墙。通过firewall-config,您可以添加、编辑或删除区域(zones),并为这些区域配置服务、端口和ICMP类型等。

命令行工具 firewall-cmd
firewall-cmd是一个命令行接口(CLI),用于动态地管理firewalld。您可以使用firewall-cmd来添加、删除、激活或禁用区域,以及为这些区域配置规则。这些更改可以立即生效,并且可以被永久保存,后面我们的配置都是基于firwall-cmd来配置。

D-BUS接口
firewalld使用D-BUS作为其内部通信机制,因此,您也可以使用D-BUS接口来与firewalld进行交互。这通常是通过编写脚本或使用其他支持D-BUS的应用程序来完成的。

配置文件
/usr/lib/firewalld/zones目录包含默认和回退配置。/etc/firewalld/zones目录用于存储用户创建和自定义的配置文件。可以直接编辑这些XML文件来添加或修改区域。但是,请注意,直接编辑配置文件通常需要更多的技术知识,并且任何错误都可能导致防火墙配置出现问题。

firewalld如何选择使用哪个zone 

在第一篇文章介绍firewalld时我们就介绍了firewalld处理数据的一些原则,我们在这里在回顾一下。

每个 zone 就是一套规则集,但是有那么多 zone,对于一个具体的请求来说应该使用哪个 zone(哪套规则)来处理呢?

对于一个接受到的请求具体使用哪个 zone,firewalld 是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf 中配置的默认 zone 优先级最低

这三个的优先级按顺序依次降低,也就是说如果按照 source 可以找到就不会再按 interface 去查找,如果前两个都找不到才会使用第三个,即 firewalld.conf 中配置的默认zone。

配置zone

默认zone是public,并且我电脑的接口目前还没有划入到任何zone中

修改默认zone

firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --list-all #查看此区域内的所有配置,类似与iptables -Ln
firewall-cmd --set-default-zone=     #更改默认的区域
当我们把默认zone修改为block后,block默认就是REJECT动作,如果此时该zone中有接口,那么这些接口所收到的数据包都会被REJECT

 添加自定义zone

firewalld中,可以添加自定义的zone。自定义的zone允许你根据特定的需求定义一组防火墙规则。

这里的--permanent选项确保该zone在重启后仍然存在。在定义了新的zone之后,你需要重新加载firewalld服务以使更改生效。增加完成后就可以按照下面添加zone规则的方式在该zone中添加规则

删除zone

要删除firewalld中的zone,首先,需要确认要删除的zone的名称。然后,你需要确认要删除的zone的名称,一旦确定了要删除的zone没有绑定到任何接口,可以使用以下命令来删除它

通过--delete-zone删除了zone后,需要重新加载防火墙配置才能生效
当我们去删除系统内置的zone时,会发现提示是系统内置的不能删除,其实是不能通过firewall-cmd命令删除。

修改zone默认target

通过--set-target设置该zone的默认动作,我这里设置为REJECT,但是设置后并没有生效,因为针对设置默认target后需要重载防火墙规则
此时该zone的target已经设置成功

将接口划入zone

将网卡(interface) 或 源 IP 添加到一个 zone 即激活这个域

firewall-cmd --zone=your_zone --add-interface=your_interface
将接口加入zone

firewall-cmd --zone=your_zone --remove-interface=your_interface
将接口从zone中移除

firewall-cmd --zone=your_zone --list-interfaces
查看zone中的接口

firewall-cmd --get-active-zones
查看所有zone中的接口
我本机有2个接口,ens33是我连接内网的网口,ens36是我连接外网的网口,现在我将ens36加入到public zone中通过--add-interface=ens36  --zone=public即可将接口加入zone中。同理我会将ens33加入到trusted zone中。注意:我没有增加--permanent参数,所以该配置重启后就没有了。
查看接口绑定在哪个zone中
此时直接通过ens33即trusted接口去连接和访问该主机,都是可以访问的,因为默认情况下trusted zone接受所有连接
标题

zone添加规则

        在public zone中,默认只允许如下图所示服务通过,那么想要让其他服务或者ip地址可以通过public zone访问应该如何设置呢?

此时我们public zone,默认target是default,只允许dhcpv6-client 和ssh服务通过,而其他服务默认是不通过的
此时我们可以看到访问170.200的80端口是不能访问的,但是可以ssh,因为默认放行了ssh服务。

放行http服务规则

通过--add-service=http添加http服务放行规则
此时就可以访问170.200的http服务了,注意此时是所有人都可以访问,那么如何限制某个ip才能访问呢?

放行IP地址 

增加了源ip地址后,那么只有源ip地址范围内的访问我们放行服务的流量才能通过,那么我如果只想要允许源地址为192.168.1.1-192.168.1.10的ip地址呢?这个不像iptables直接可以通过扩展模块iprange实现,我们在后面的rich rule会有详细介绍

     同样的如果要添加协议需要使用--add-protocol= ,添加端口使用--add-port= 等,在配置的时候可以通过table命令查看后面的参数

--add后面可以添加很多参数根据自己的需要进行对应的选择

放行端口

通过使用--add-port=端口/协议来增加端口,可以通过100-200来添加端口范围
可以通过--query-port=10/tcp查看tcp端口号10在public中是否配置,也可以直接通过--list-ports列出public中所有端口

zone中删除规则

        前面我们介绍了添加规则,那么删除规则的方式是一样的,--add对应添加,那么--remove对应删除,如下图所示    

通过--remove-service删除了dhcpv6-client规则

保存配置

通过firewall-cmd将runtime配置迁移到永久配置,然后重新加载防火墙配置文件
此时前面配置的规则都依旧存在,如果不迁移配置,那么当使用--reload参数后,所配置的规则就是丢失。

通过配置文件修改规则

我们通过firewall-cmd命令配置的参数最终都是写入到对应的配置文件中,上面我们修改的public zone的参数配置配置文件就在/etc/firewalld/zone/public.xml中

直接编辑该文件也可以配置firewalld规则
通过编辑public.xml文件修改了firwalld规则后,--reload重新加载配置文件,我们通过firewall-cmd命令查看时依旧可以生效

总结

本片文章主要介绍的是zone的配置、包括默认zone,自定义zone,zone中添加规则,如添加IP、端口、服务以及配置保存。上面所有的操作都是基于zone的最基础的操作,更复杂的规则以及策略的应用我们将在后面的文章中逐步介绍。

;