关于网络安全的研究分析中,防火墙(Firewall)是被经常强调的重点,它基本功能是过滤并可能阻挡本地网络或者网络的某个部分与Internet之间的数据传送(数据包)。数据包其实就是一段段的数据,其中同时包括了用来把它们发送到各自的目的地所必须的信息。
你可以把数据包想象成一个邮包:数据包本身就是邮包中的数据,而信封上则是所有用来把这些信息发送到正确的机器和正确的程序中去的书信抬头,它同时还包含着回信地址等方面的信息。在其具体的过滤工作过程中,防火墙将接管在此之前从网络内部存取Internet和从Internet存取该内部网络的路由设置。
我们的感觉是以前的防火墙专门用来过滤一些非法的数据包,要么为什么其中的一种类型称为包过滤型防火墙呢?发展到现在,它的功能是日益增多,不仅能够过滤数据包,还能够作网络地址转换,作代理等等。Linux内核2.4中防火墙实现NetFilter就是这样的。
先来看看防火墙所处的位置,我的理解是要么它装在一台机器上作个人防火墙,要么装在一台机器上为一个局域网提供网关的功能,而后种情况则如下图所示:
这副图概括了装在网关上的NetFilter的框架结构图,从图中可以看到一个数据包可能经过的路径,其中用[]扩起来的东东,称为检查点,当数据包到达这个点时,就要停下来进行一些检查。这里检查点的名称使用的是iptables中名称,具体到NetFilter中可能就要改为那些所谓的钩子 (Hook)函数了。
NetFilter概括起来说,它有下面的三个基本功能:
1、数据过滤(filter表)
2、网络地址转换(nat表)
3、数据包处理(mangle表)
根据这三个功能,将上面的五个检查点按功能进行了分类。由于每个功能在NetFilter中对应一个表,而每个检查点又有若干个匹配规则,这些规则组成一个链,所以就有下面的说法:“NetFilter是表的容器,表是链的容器,链是规则的容器”
一个链(chain)其实就是众多规则(rules)中的一个检查清单(checklist)。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。
而一个iptables命令基本上包含如下五部分:希望工作在哪个表上、希望使用该表的哪个链、进行的操作(插入,添加,删除,修改)、对特定规则的目标动作和匹配数据包条件。
基本的语法为:iptables -t table -Operation chain -j target match(es)(系统缺省的表为"filter")
基本操作如下:
-A 在链尾添加一条规则
-I 插入规则
-D 删除规则
-R 替代一条规则
-L 列出规则
基本目标动作,适用于所有的链:
ACCEPT 接收该数据包
DROP 丢弃该数据包
QUEUE 排队该数据包到用户空间
RETURN 返回到前面调用的链
foobar 用户自定义链
基本匹配条件,适用于所有的链:
-p 指定协议(tcp/icmp/udp/...)
-s 源地址(ip address/masklen)
-d 目的地址(ip address/masklen)
-i 数据包输入接口
-o 数据包输出接口
匹配条件扩展:
TCP-----匹配源端口,目的端口,及tcp标记的任意组合,tcp选项等。
UPD-----匹配源端口和目的端口
ICMP----匹配ICMP类型
MAC-----匹配接收到的数据的mac地址
MARK----匹配nfmark
OWNE----(仅仅应用于本地产生的数据包)来匹配用户ID,组ID,进程ID及会话ID
LIMIT---匹配特定时间段内的数据包限制。这个扩展匹配对于限制dos攻击数据流非常有用。
STATE---匹配特定状态下的数据包(由连接跟踪子系统来决定状态),可能的状态包括:
INVALID (不匹配于任何连接)
ESTABLISHED (属于某个已经建立的链接的数据包)
NEW (建立连接的数据包)
RELATED (和某个已经建立的连接有一定相关的数据包,例如一个ICMP错误消息或ftp数据连接)
TOS——匹配IP头的TOS字段的值。
【编辑推荐】