linux防火墙基础及iptables数据流

1、什么是防火墙

      网络安全除了随时注意相关软件的漏洞以及网络上的安全通报之外,最好能够根据自己的环境来制定防火墙机制。这样对于网络环境,会比较有保障一点。那么什么是防火墙呢?其实防火墙就是通过制定一些有顺序的规则,并管制进入到我们网域内的主机(或者可以说是网域)数据封包的一种机制!更广义的来说,只要能够分析与过滤进出我们管理之网域的封包数据,就可以称为防火墙。

      防火墙又可以分为硬件防火墙与本机的软件防火墙。硬件防火墙是由厂商设计好的主机硬件,这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他不必要的功能拿掉。因为单纯作为防火墙功能而已,因此封包过滤的效率较佳。至于软件防火墙呢?就是我们接下来要学习的。软件防火墙本身就是在保护系统网络安全的一套软件(或称为机制),例如NetfilterTCP Wrappers都可以称为软件防火墙。

2、为什么需要防火墙

      在介绍为什么需要防火墙之前,大家先来认识一下网络封包进入主机的流程,如下图1所示:

           linux防火墙基础及iptables数据流_第1张图片 

1 网络封包进入主机的流程

      从上图1可以看出,当封包进入本机时,会先通过防火墙、服务器软件程序、SELinux与文件系统等。所以基本上,如果你的系统:(1)已经关闭不需要而且危险的服务;(2)已经将整个系统的所有软件都保持在最新的状态;(3)权限设定妥当且定时进行备份工作;(4)已经教育用户具有良好的网络、系统操作习惯。那么你的系统实际上已经颇为安全了!要不要架设防火墙?那就见仁见智了哈!

      但是,网络世界是很复杂的,而 Linux主机也不是一个简单的东西,说不定哪一天你在进行某个软件的测试时,主机突然间就启动了一个网络服务,如果你没有管制该服务的使用范围,那么该服务就等于对所有Internet开放,一旦被黑客抓住这个漏洞从而进行攻击你的主机,那就全完蛋了!由此可见,即使你觉得你的主机很安全,配置防火墙还是很有必要的,因为它能给我们规避

3、防火墙的功能

    防火墙能干什么呢?防火墙最大的功能就是帮助你“限制某些服务的存取来源”。 举例来说:(1)你可以限制文件传输服务(FTP)只在局域网的主机才能够使用,而不对整个Internet开放;(2)你可以限制整部Linux主机仅可以接受客户端的WWW要求,其他的服务都关闭;(3)你还可以限制整部主机仅能主动对外联机。反过来说,若有客户端对我们主机发送主动联机的封包状态(TCP封包的SYN flag)就予以抵挡等等。这些就是防火墙主要的功能了。

所以,防火墙最主要的功能是规划出:

  • 划分被信任 ( 如局域网 ) 与不被信任 ( Internet) 的网段;
  • 划分出可提供 Internet 的服务与必须受保护的服务;
  • 分析出可接受与不可接受的封包状态;

4、认识iptables

      iptables其实就是Linux下的一个开源的信息过滤程序,包括地址转换和信息重定向等功能的,信息过滤功能十分强大,而所谓的硬件防火墙也就是一个Linux核心加页面操作程序做出来的,可以用于添加、编辑和移除规则。

      不同Linux内核版本所使用的防火墙软件是不一样的,一下是Linux防火墙的演变过程:

  • Version 2.0 :使用 ipfwadm 这个防火墙机制;
  • Version 2.2 :使用的是 ipchains 这个防火墙机制;
  • Version 2.4 2.6 :主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4 版本的 distributions 当中,亦同时支持 ipchains( 编译成为模块 ) ,好让用户仍然可以使用来自 2.2 版的 ipchains 的防火墙规划。

      因为不同的Linux内核版本使用的防火墙机制不同,且支持的软件指令与语法也不相同,所以在Linux上面设定属于你自己的防火墙规则时,要注意啊,先用 uname -r 查询一下你的核心版本再说!不过如果你是安装2004年以后推出的distributions,那就不需要担心了,因为这些distributions几乎都使用kernel 2.6版的内核。现在都是2016年了,估计大家使用的都是2.6版本的内核了,只是提及一下。

5、封包进入流程:规则顺序的重要性

       前面一直谈到:“防火墙规则”,到底什么是规则?因为 iptables是利用封包过滤的机制,所以他会分析封包的首部信息。根据首部信息与定义的“规则”来决定该封包是否可以进入主机或者是被丢弃。意思就是说:根据封包的首部信息“比对”你预先设定的规则内容,若封包数据与规则内容相同则进行动作,否则就继续下一条规则的比对。重点在那个“比对与分析顺序”上。

      举个简单的例子,假设我预先设定10条防火墙规则好了,那么当Internet来了一个封包想要进入我的主机,那么防火墙是如何分析这个封包的呢?我们以下图2说明好了:

                                                                           linux防火墙基础及iptables数据流_第2张图片

2 封包过滤的规则动作及分析流程

      由上图2不难发现,当一个网络封包要进入到主机之前,会先经由NetFilter进行检查,那就是iptables的规则了。检查通过则接受(ACCEPT)进入本机取得资源,如果检查不通过,则可能予以丢弃(DROP)。上图中主要的目的是说明:“规则是有顺序的”。例如当网络封包进入Rule 1的比对时, 如果比对结果符合Rule 1,此时这个网络封包就会进行Action 1的动作,而不会理会后续的Rule 2,Rule 3.... 等规则的分析了。

而如果这个封包并不符合 Rule 1 的比对,那就会进入 Rule 2的比对了!如此一个一个规则去进行比对。那如果所有的规则都不符合怎办?此时就会通过预设动作(封包政策, Policy) 来决定这个封包的去向。所以啦,当你的规则顺序排列错误时,就会产生很严重的后果。为什么这么说呢?下面再举个简单的例子:

      假设你的 Linux 主机提供了WWW 的服务,那么自然就要针对port 80 来启用通过的封包规则,但是你发现 IP来源为192.168.100.100老是恶意的尝试入侵你的系统,所以你想要将该 IP拒绝往来,最后,所有的非WWW的封包都给他丢弃,就这三个规则来说,你要如何设定防火墙检验顺序呢?

Rule 1 先抵挡 192.168.100.100

Rule 2 再让要求 WWW服务的封包通过;

Rule 3 将所有的封包丢弃。

这样的排列顺序就能符合你的需求,不过,万一你的顺序排错了,变成:

Rule 1 先让要求 WWW服务的封包通过;

Rule 2 再抵挡 192.168.100.100

Rule 3 将所有的封包丢弃。

      此时,那个 192.168.100.100就可以使用你的WWW服务。只要他对你的主机送出WWW要求封包,就可以使用你的WWW功能了,因为你的规则顺序定义第一条就会让他通过,而不去考虑第二条规则!这样可以理解规则顺序的意义了吗?现在再来想一想,如果Rule 1变成了“将所有的封包丢弃”,Rule 2才设定“WWW服务封包通过”,请问,我的client可以使用我的WWW服务吗?答案是:NO

6、iptables的表格 (table)与链 (chain)

      事实上,上图2中所列出的规则仅是iptables众多表格当中的一个链(chain)而已。 什么是链呢?这得由iptables 的名称说起。为什么称为ip"tables"呢?因为这个防火墙软件里面有多个表格(table),每个表格都定义出自己的默认政策与规则,且每个表格的用途都不相同。通过下图3稍微了解下:

                                                                   linux防火墙基础及iptables数据流_第3张图片

3 iptables 的表格与相关链示意图

      上图2的规则内容仅只是图3内的某个chain而已。而预设的情况下,咱们Linuxiptables至少就有三个表格,包括管理本机进出的filter、管理后端主机(防火墙内部的其他计算机)nat、管理特殊旗标使用的mangle (较少使用)。我们甚至还可以自定义额外的链。每个表格与其中链的用途分别是这样的:

filter (过滤器)主要跟进入Linux本机的封包有关,这个是预设的table喔!

  • INPUT :主要与想要进入我们 Linux 本机的封包有关;
  • OUTPUT :主要与我们 Linux 本机所要送出的封包有关;
  • FORWARD :可以“转发封包”到后端的计算机中,与下列 nat table 相关性较高。

nat (地址转换)Network Address Translation的缩写, 这个表格主要在进行来源与目的之 IPport的转换,与Linux本机较无关,主要与Linux主机后的局域网络内计算机较有相关。

  • PREROUTING :在进行路由判断之前所要进行的规则
  • POSTROUTING :在进行路由判断之后所要进行的规则
  • OUTPUT :与发送出去的封包有关

mangle (破坏者)这个表格主要是与特殊的封包的路由旗标有关,早期仅有PREROUTINGOUTPUT链,不过从kernel 2.4.18之后加入了 INPUT FORWARD链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用mangle 这个表格。

 

      所以说,如果你的 Linux 是作为 www 服务,那么要开放客户端对你的 www要求有响应,就得要处理filterINPUT链; 而如果你的Linux是作为局域网络的路由器,那么就得要分析nat的各个链以及filterFORWARD链才行。也就是说,其实各个表格的链结之间是有关系的!简单的关系可以由下图4说明:

             linux防火墙基础及iptables数据流_第4张图片

4 iptables 内建各表格与链的相关性

   上图4看起来有点复杂,不过基本上依旧可以看出来,我们的iptables可以控制三种封包的流向:

  • 封包进入 Linux 主机使用资源 ( 路径 A) :在路由判断后确定是向 Linux 主机要求数据的封包,主要就会通过 filter INPUT 链来进行控管;
  • 封包经由 Linux 主机的转递,没有使用主机资源,而是向后端主机流动 ( 路径 B) :在路由判断之前进行封包首部的修订作业后,发现到封包主要是要通过防火墙发送到后端计算机,此时封包就会通过路径 B 发送。也就是说,该封包的目标并非我们的 Linux 本机。主要经过的链是 filter FORWARD 以及 nat PREROUTING POSTROUTING
  • 封包由 Linux 本机发送出去 ( 路径 C) : 例如响应客户端的要求,或者是 Linux 本机主动送出的封包,都是通过路径 C 来发送。先是通过路由判断, 决定了输出的路径后,再通过 filter OUTPUT 链来传送的。当然,最终还是会经过 nat POSTROUTING 链。

提示:有没有发现有两个“路由判断”呢?因为网络是双向的,所以进与出要分开来看。因此,进入的封包需要路由判断,送出的封包当然也要进行路由判断才能够发送出去。

 

   由于 mangle 这个表格很少被使用,如果图4mangle去掉的话,那就容易看的多了如图5:

               linux防火墙基础及iptables数据流_第5张图片

5 iptables 内建各表格与链的相关性(简图)

      通过图5你就可以更轻松的了解到,事实上与本机最有关的其实是filter这个表格内的INPUTOUTPUT这两条链,如果你的iptables只是用来保护Linux主机本身的话,那nat的规则根本就不需要理它,直接设定为开放即可。

      不过,如果你的防火墙还要用来管制LAN(局域网)内的其他主机的话,那么你就必须要再针对filterFORWARD这条链,还有natPREROUTING, POSTROUTING以及OUTPUT进行额外的配置才行。nat表格的使用需要对路由的概念理解得很深刻才能设置好,有兴趣的孩纸可以深入研究。



你可能感兴趣的:(防火墙)