Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。



多知道点

iptables实际包含五张表

大部分iptables的资料都介绍说iptables包含四张表、五条链,不过实际上iptables还有第五张表——security表,但 是这张表需要和selinux结合使用,而selinux虽然已经发布了十多年了但是直到现在还有很多人对他的理解不够透彻,甚至有很多人会将其关闭!

其实selinux的设计理念在安全上来说是非常优秀的,而且理解了其设计理念之后再去使用也没那么复杂,只不过其内置的规则是非常复杂的,等有 机会学生专门给大家介绍一下selinux,现在还回到iptables的五张表,他们分别是filter、nat、mangle、raw和 security。

filter表就是我们最常使用的过滤表;nat表主要用于数据包转发,比如局域网的电脑如果想连接互联网,那么就可以使用nat给转发一 下;mangle表的规则可以对数据包进行修改,比如修改ttl值等;raw表主要是为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工 的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率,当然,raw表的优先级也是最高的;security是跟selinux相 关的MAC模式的安全过滤。

当然,这些内容大家了解一下就行,即使不理解也可以使用将firewalld使用的很好。



firewalld和iptables的关系

firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。

firewalld的结构

我们这里所说的结构并不是firewalld软件的结构,而是配置文件的结构。

在具体介绍firewalld配置文件结构之前学生先来给大家介绍一下firewalld的配置模式,firewalld的配置模式设计的非常巧妙,而且这种设计思路也非常值得我们借鉴和学习。

firewalld的配置模式

firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置



1、/etc/firewalld/

2、/usr/lib/firewalld/



使用时的规则是这样的:当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。



firewalld的这种配置文件结构的主要作用是这样的:在第二个目录中存放的是firewalld给提供的通用配置文件,如果我们想修改配置, 那么可以copy一份到第一个目录中,然后再进行修改。这么做有两个好处:首先我们日后可以非常清晰地看到都有哪些文件是我们自己创建或者修改过的,其 次,如果想恢复firewalld给提供的默认配置,只需要将自己在第一个目录中的配置文件删除即可,非常简单,而不需要像其他很多软件那样在修改之前还 得先备份一下,而且时间长了还有可能忘掉之前备份的是什么版本。



当然,这种配置模式也并不是firewalld的首创,在其他很多地方也都有用到,比如java中用于记录日志的logback也是这种模式,他在 查找配置文件时会首先在根目录下找logback-test.xml文件,如果可以找到就直接使用,如果找不到就会接着找logback.xml文件,如 果还找不到就会使用自己包里边自带的配置文件,这样使用起来就非常方便了,比如我们可以把logback-test.xml和logback.xml两个 文件都创建出来,在开发机上使用logback-test.xml文件,然后在往服务器部署的时候直接将其删掉就可以了!当然还有很多产品也使用了这种配
置模式,spring的很多子框架也使用的是这种模式,比如spring MVC中的组件配置也是这样,如果没有配置的话就会使用默认的配置,当然,我们这里不是在讲Spring MVC所以就不展开了,如果想了解更多细节大家可以参考学生编写的《看透Spring MVC:源代码分析与实践》一书。



配置文件结构

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,关于zone学生稍后给大家详细介绍,默认值为public;

MinimalMark: 标记的最小值,linux内核会对每个进入的数据包都进行标记,目的当然是为了对他们进行区分,比如学生在前面给大家补充iptables五张表相关的内 容时候介绍说符合raw表规则的数据包可以跳过一些检查,那么是怎么跳过的呢?这里其实就是使用的标记,当然对数据包的标记还有很多作用。这里所设置的 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类型相关的配置文件



在firewalld的使用中最基础也是最重要的就是对zone的理解,不过现在还普遍理解的不是很透彻,下面学生就来给大家详细介绍一下zone到底是什么。



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之间是什么关系?他们分别适用用哪些场景呢?

为了弄明白这些问题大家需要先明白zone的本质含义。学生在上一节给大家介绍防火墙时说过防火墙就相当于一个门卫,门卫对具体某个来访的人判断是否应该放行是依靠规则来判断的,而我们这里的zone其实就是一套规则集,或者说是一套判断的方案。

理解了这层含义firewalld就容易了,比如上面的九个zone其实就是九种方案,而且起决定作用的其实是每个xml文件所包含的内容,而不是 文件名,所以大家不需要对每种zone(每个文件名)的含义花费过多的精力,比如trusted这个zone会信任所有的数据包,也就是说所有数据包都会 放行,但是public这个zone只会放行其中所配置的服务,其他的一律不予放行,其实我们如果将这两个文件中的内容互换一下他们的规则就换过来了,也 就是public这个zone会放行所有的数据包,下面我们来看一下这两个文件的内容

public.xml

<?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>

trusted.xml

<?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(这种方案)只有其中配置过的服务才可以通 过。

其他的zone大家可以自己打开xml文件来看一下,这里学生就不一一介绍了,关于zone配置文件的详细结构及含义后面学生再给大家进行讲解,下面学生再给大家介绍一下firewalld中的service。



service

service是firewalld中另外一个非常重要的概念,不过其含义是非常简单的。学生还是拿门卫的例子来给大家做解释,在iptables 的时代我们给门卫下达规则时需要告诉他“所有到22号楼的人全部予以放行”、“所有到80号楼的人全部予以放行”等等,不过到了firewalld的时代 就不需要这样了,而是可以直接下达像“到销售部的全部予以放行”这样的命令,然后门卫再一查发现销售部在80号楼,那么所有到80号楼的人门卫就都会放行 了。我们这里的楼牌号和端口号相对应,部门名和服务名相对应,这样大家应该就可以理解service的作用了。

从端口号改为服务名主要有两个好处:首先是使用服务名配置的语义清晰,不容易出错;其次在对某个服务的端口号进行修改的时候只需要修改相应的 service文件就可以了,而不需要再修改防火墙方案——zone。这其实跟DNS将ip地址和域名关联了起来是一样的道理。下面学生再来给大家介绍一 下service的配置文件。

service配置文件的命名规则是<服务名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是 http.xml等,他们默认保存在“/usr/lib/firewalld/services/”目录下,常见的服务其中都可以找到,如果我们想修改某 个服务的配置,那么可以复制一份到“/etc/firewalld/services/”目录下然后进行修改就可以了,要想恢复默认配置直接将我们自己的 配置文件删除就可以了。我们来看一下ssh服务的ssh.xml文件

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>
	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.
</description>
<port protocol="tcp" port="22"/>
</service>

可以看到这里配置了tcp的22号端口,所以将ssh服务配置到所使用的zone(默认public)中后tcp的22号端口就开放了。如果我们想将ssh的端口修改为222,那么只需要将ssh.xml复制一份到“/firewalld/services/”中,然后将端口号修改为222就可以了。当然直接修改“/usr/lib/firewalld/services/”中的配置文件也可以实现,但是强烈建议不要那么做,原因相信大家都明白。



明白原理之后使用起来就可以非常灵活了,比如我们将“/etc/firewalld/services/ssh.xml”文件复制一份到“/etc/firewalld/services/”中,然后将名字改为abc.xml,并且将abc这个服务配置到所使用的zone中,这时22端口就会开放。也就是说在zone中所配置的服务其实跟实际的服务并不存在直接联系,而是和相应配置文件中配置的内容有关系。



配置方法

firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具,而对于linux来说大家应该更习惯使用命令行方式的操作,所以 firewall-config我们就不给大家介绍了。具体的配置方法学生在下一节给大家进行介绍。



参考文献

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html

【Centos7】5分钟理解防火墙firewalld的更多相关文章

  1. CentOS7 默认防火墙firewalld

    firewalld基础 firewalld是CentOS7源生支持的防火墙,firewalld最大的好处有两个:支持动态更新,不用重启服务:第二个就是加入了防火墙的“zone”概念. firewall ...

  2. fedora/centos7防火墙FirewallD详解

    1 使用 FirewallD 构建动态防火墙 1.1 “守护进程” 1.2 静态防火墙(system-config-firewall/lokkit) 1.3 使用 iptables 和 ip6tabl ...

  3. Centos 7防火墙firewalld开放80端口(转)

    开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 命令含义: --zone #作用域 -- ...

  4. linux 防火墙--firewalld学习

    firewalld是centos7默认的防火墙,相比于iptables重要的优势: 1 支持动态更新: 2 不用重启服务: 同时增加了防火墙的“zone”概念,具体差异没做过多了解,这篇文章只记录fi ...

  5. centos7开放端口和防火墙设置

    centos7开放端口和防火墙设置. 查看防火墙状态: firewall-cmd --state 如果显示: not running 打开防火墙服务: systemctl start firewall ...

  6. centos7使用iptables作为防火墙方法

    centos7使用iptables作为防火墙方法查看firewalld状态: systemctl status firewalld将centos7默认的firewalld停止,并将iptables作为 ...

  7. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了: 但对于 ...

  8. (转)每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

    背景:在redis集群中,有关于一致性哈希的使用. 一致性哈希:桶大小0~(2^32)-1 哈希指标:平衡性.单调性.分散性.负载性 为了提高平衡性,引入“虚拟节点” 每天进步一点点——五分钟理解一致 ...

  9. 十分钟理解Java中的动态代理

    十分钟理解 Java 中的动态代理   一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...

随机推荐

  1. Iterator、for..of,for...in和自定义遍历器**

    Iterator.for..of,for...in和自定义遍历器 Iterator: var arr = [1,2,3,4,5]; var ite = arr[Symbol.iterator](); ...

  2. 某天U盘插在笔记本打不开了,是U盘坏了还是电脑的问题?

    五六月份忙着毕业设计与毕业论文,U盘在这个时候就是大功臣啦! 然而打印完最终版本论文上交后,再次把U盘插在自己的笔记本上读取失败了... 只有一个空白的图标,打不开,也无法格式化. 试着删除,拔了又插 ...

  3. HTTP权威指南-连接管理

    现在已经开始学习到第四章咯,坚持就是胜利哟~!ok,废话少说,继续写笔记. 本章中我们要介绍到HTTP的连接.好,现在有几个问题,我列出来了,带着这几个问题,我们进入本章的学习. 1.HTTP是如何使 ...

  4. strtok函数 分类: c++ 2014-11-02 15:24 214人阅读 评论(0) 收藏

    strtok函数是cstring文件中的函数 strtok函数是cstring文件中的函数 其功能是截断字符串 原型为:char *strtok(char s[],const char *delin) ...

  5. FFT_ad采样速率

    调用quartus的ip核测量频率和幅值,可以把程序分成四大部分.第一部分是AD采样模块,本次实验用的是ad828,最高采样率为70M, 根据奈贵斯特采样定律 Fs > 2Fc,即采样率要大于信 ...

  6. webIDE 第二篇博文

    这是我做webIDE过程中的第二篇博文,之所以隔了这么长时间没更,因为确实是没有啥进度啊,没什么可写的,现在虽然依然没啥进度,但中途遇到很多坑,这些坑还是有记录下来的必要的. 因个人水平问题,可能有的 ...

  7. 基于NFS实现WordPress

    实验内容: (1)主机IP nfs server IP :192.168.29.120 nfs server IP: 192.168.29.110 (2)要求 nfs server共享/data/we ...

  8. dubbo源码分析(二):超时原理以及应用场景

    dubbo超时原理以及应用场景 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: ...

  9. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  10. mybatis 详解(五)------动态SQL

    前面几篇博客我们通过实例讲解了用mybatis对一张表进行的CRUD操作,但是我们发现写的 SQL 语句都比较简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ...