Linux防火墙

来源:互联网 发布:进程调度算法c语言 编辑:程序博客网 时间:2024/05/01 13:38

关于网络安全的研究分析中,防火墙(Firewall)是被经常强调的重点,它基本功能是过滤并可能阻挡本地网络或者网络的某个部分与Internet之间的数据传送(数据包)。数据包其实就是一段段的数据,其中同时包括了用来把它们发送到各自的目的地所必须的信息。你可以把数据包想象成一个邮包:数据包本身就是邮包中的数据,而信封上则是所有用来把这些信息发送到正确的机器和正确的程序中去的书信抬头,它同时还包含着回信地址等方面的信息。在其具体的过滤工作过程中,防火墙将接管在此之前从网络内部存取Internet和从Internet存取该内部网络的路由设置。

我们的感觉是以前的防火墙专门用来过滤一些非法的数据包,要么为什么其中的一种类型称为包过滤型防火墙呢?发展到现在,它的功能是日益增多,不仅能够过滤数据包,还能够作网络地址转换,作代理等等。Linux内核2.4中防火墙实现NetFilter就是这样的。

先来看看防火墙所处的位置,我的理解是要么它装在一台机器上作个人防火墙,要么装在一台机器上为一个局域网提供网关的功能,而后种情况则如下图所示:

深入分析Linux防火墙(图一)

这副图概括了装在网关上的NetFilter的框架结构图,从图中可以看到一个数据包可能经过的路径,其中用[]扩起来的东东,称为检查点,当数据包到达这个点时,就要停下来进行一些检查。这里检查点的名称使用的是iptables中名称,具体到NetFilter中可能就要改为那些所谓的钩子 (Hook)函数了。

NetFilter概括起来说,它有下面的三个基本功能:

1、数据过滤(filter表)

2、网络地址转换(nat表)

3、数据包处理(mangle表)

根据这三个功能,将上面的五个检查点按功能进行了分类。由于每个功能在NetFilter中对应一个表,而每个检查点又有若干个匹配规则,这些规则组成一个链,所以就有下面的说法:“NetFilter是表的容器,表是链的容器,链是规则的容器”

一个链(chain)其实就是众多规则(rules)中的一个检查清单(checklist)。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。

而一个iptables命令基本上包含如下五部分:希望工作在哪个表上、希望使用该表的哪个链、进行的操作(插入,添加,删除,修改)、对特定规则的目标动作和匹配数据包条件。

0 0