防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。 动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zone”,以分配对一个网路及其相关连接和界面的支持 它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。 在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。 netfilter才是防火墙,firewalld和iptables是两种不同的防火墙管理工具,其底层都是iptables命令
|
|||||||||||||
firewalld跟iptables比起来至少有两大好处: 1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效; |
|||||||||||||
ZONE |
数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如上图来自eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone3。一张网卡同时只能绑定到一个zone。大家就可以把这些zone想象成进入火车站(地铁)的安检,不同的入口检测的严格度不一样 |
||||||||||||
阻塞区域(block):任何传入的网络数据包都将被阻止。 |
|||||||||||||
配置模式 |
firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置 |
||||||||||||
当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用否则会继续到第二个目录中查找。 在第二个目录中存放的是firewalld给提供的通用配置文件,如果我们想修改配置, 那么可以copy一份到第一个目录中,然后再进行修改。 这么做有两个好处:首先我们日后可以非常清晰地看到都有哪些文件是我们自己创建或者修改过的, 其 次,如果想恢复firewalld给提供的默认配置,只需要将自己在第一个目录中的配置文件删除即可,非常简 单,而不需要像其他很多软件那样在修改之前还 得先备份一下,而且时间长了还有可能忘掉之前备份的是什 么版本 |
|||||||||||||
配置文件结构 | 文件:firewalld.conf、lockdown-whitelist.xml 目录:zones、services、icmptypes 另外,如果使用到direct,还会有一个direct.xml文件。我们要注意,在保存默认配置的目录“/usr/lib/firewalld/”中只有我们这里所说的目录,而没有firewalld.conf、lockdown-whitelist.xml和direct.xml这三个文件,也就是说这三个文件只存在于“/etc/firewalld/”目录中。 |
||||||||||||
文件和目录的作用 | firewalld.conf |
firewalld的主配置文件,是键值对的格式,不过非常简单,只有五个配置项
|
|||||||||||
lockdown-whitelist.xml | 当Lockdown为yes的时候用来限制可以通过D-BUS接口操作firewalld的程序 | ||||||||||||
direct.xml | 通过这个文件可以直接使用防火墙的过滤规则,这对于熟悉iptables的用户来说会非常顺手,另外也对从原来的iptables到firewalld的迁移提供了一条绿色通道 | ||||||||||||
zones | 保存zone配置文件 | ||||||||||||
services | 保存service配置文件 | ||||||||||||
icmptypes | 保存和icmp类型相关的配置文件 | ||||||||||||
zone概念 |
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下 |
||||||||||||
上面的九个zone其实就是九种方案,而且起决定作用的其实是每个xml文件所包含的内容,而不是 文件名,所以大家不需要对每种zone(每个文件名)的含义花费过多的精力,比如trusted这个zone会信任所有的数据包,也就是说所有数据包都会 放行,但是public这个zone只会放行其中所配置的服务,其他的一律不予放行,其实我们如果将这两个文件中的内容互换一下他们的规则就换过来了,也 就是public这个zone会放行所有的数据包,下面我们来看一下这两个文件的内容 public:
tusted:
我们要特别注意trusted.xml中zone的target,就是因为他设置为了ACCEPT,所以才会放行所有的数据包,而 public.xml中的zone没有target属性,这样就会默认拒绝通过,所以public这个zone(这种方案)只有其中配置过的服务才可以通 过 |
|||||||||||||
service | 从端口号改为服务名主要有两个好处:首先是使用服务名配置的语义清晰,不容易出错;其次在对某个服务的端口号进行修改的时候只需要修改相应的 service文件就可以了,而不需要再修改防火墙方案——zone。这其实跟DNS将ip地址和域名关联了起来是一样的道理。下面学生再来给大家介绍一 下service的配置文件。 service配置文件的命名规则是<服务名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是 http.xml等,他们默认保存在“/usr/lib/firewalld/services/”目录下,常见的服务其中都可以找到,如果我们想修改某 个服务的配置,那么可以复制一份到“/etc/firewalld/services/”目录下然后进行修改就可以了,要想恢复默认配置直接将我们自己的 配置文件删除就可以了 |
||||||||||||
配置方法 | firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具 | ||||||||||||
命令 | |||||||||||||
区域 | 显示支持的区域列表 | firewall-cmd --get-zones | |||||||||||
设置当前区域的接口 | firewall-cmd --get-zone-of-interface=enp03s | ||||||||||||
查看当前区域 | firewall-cmd --get-active-zones | ||||||||||||
查看所有域 |
firewall-cmd --list-all-zones |
||||||||||||
查看指定域的信息 | firewall-cmd --zone=public --list-all | ||||||||||||
设定默认域 | firewall-cmd --set-default-zone=work | ||||||||||||
临时修改网络接口(enp0s3)为内部区域(internal) | firewall-cmd --zone=internal --change-interface=enp03s | ||||||||||||
永久修改网络接口enp03s为内部区域(internal) | firewall-cmd --permanent --zone=internal --change-interface=enp03s | ||||||||||||
端口 | 打开端口 | firewall-cmd --add-port=443/tcp | |||||||||||
永久打开3690/TCP端口 永久打开端口需要reload一下 |
firewall-cmd --permanent --add-port=3690/tcp | ||||||||||||
永久打开一个端口段 永久打开端口需要reload一下 |
firewall-cmd --permanent --add-port=1000-2000/tcp | ||||||||||||
查看防火墙,添加的端口 | firewall-cmd --list-all | ||||||||||||
删除端口 | firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp | ||||||||||||
服务 | 删除服务 | firewall-cmd --permanent --zone=public --remove-service=https | |||||||||||
显示服务列表 | firewall-cmd --get-services | ||||||||||||
允许SSH服务通过 | firewall-cmd --enable service=ssh | ||||||||||||
禁止SSH服务通过 | firewall-cmd --disable service=ssh | ||||||||||||
打开TCP的8080端口 | firewall-cmd --enable ports=8080/tcp | ||||||||||||
显示当前服务 | firewall-cmd --list-services | ||||||||||||
添加HTTP服务到内部区域 | firewall-cmd --permanent --zone=internal --add-service=http | ||||||||||||
临时允许Samba服务通过600秒 | firewall-cmd --enable service=samba --timeout=600 | ||||||||||||