防火墙firewalld

防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。

动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zone”,以分配对一个网路及其相关连接和界面的支持

它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。

在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。

netfilter才是防火墙,firewalld和iptables是两种不同的防火墙管理工具,其底层都是iptables命令

firewall_stack.png

systemctl start firewalld   ##启用
systemctl enable firewalld   ##开机自启动
systemctl disable firewalld  ##开机禁启动
systemctl stop firewalld     ##关闭

 

firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能

ZONE

  数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如上图来自eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone3。一张网卡同时只能绑定到一个zone。大家就可以把这些zone想象成进入火车站(地铁)的安检,不同的入口检测的严格度不一样

 阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接

配置模式

firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置
1、/etc/firewalld/
2、/usr/lib/firewalld/

 

当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用否则会继续到第二个目录中查找。
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的主配置文件,是键值对的格式,不过非常简单,只有五个配置项

DefaultZone 默认使用的zone,默认值为public
MinimalMark  标记的最小值,linux内核会对每个进入的数据包都进行标记,目的当然是为了对他们进行区分,这里其实就是使用的标记,当然对数据包的标记还有很多作用。这里所设置的 MinimalMark值就是标记的最小值,默认值为100,一般情况下我们不需要对其进行修改,但是如果我们有特殊需要的时候就可以通过对其进行修改来 告诉linux所使用标记的最小值了,比如我们需要给符合某条件的数据包标记为123,这时候为了防止混淆就需要将MinimalMark设置为一个大于 123的值了
CleanupOnExit 这个配置项非常容易理解,他表示当退出firewalld后是否清除防火墙规则,默认值为yes;
Lockdown 这个选项跟D-BUS接口操作firewalld有关,firewalld可以让别的程序通过D-BUS接口直接操作,当Lockdown设置为yes的 时候就可以通过lockdown-whitelist.xml文件来限制都有哪些程序可以对其进行操作,而当设置为no的时候就没有限制了,默认值为 no;
IPv6_rpfilter 其功能类似于rp_filter,只不过是针对ipv6版的,其作用是判断所接受到的包是否是伪造的,检查方式主要是通过路由表中的路由条目实现的,更多详细的信息大家可以搜索uRPF相关的资料,这里的默认值为yes
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:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>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.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
</zone>

tusted:

<?xml version="1.0" encoding="utf-8"?>
<zone target="ACCEPT">
  <short>Trusted</short>
  <description>All network connections are accepted.</description>
</zone>

我们要特别注意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
     
   
   
   
   
   
   
   
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章