扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:51CTO.COM 2007年11月9日
关键字: 防火墙 Linux CheckPoint iptables ipchains
--->sys_socketcall(net/socket.c)
--->sys_setsockopt(net/socket.c)
--->inet_setsockopt(net/ipv4/af_inet.c)
--->sock_setsockopt(net/core/sock.c)
--->raw_setsockopt(net/ipv4/raw.c)
--->ip_setsockopt(net/ipv4/ip_sockglue.c)
--->ip_fw_ctl(net/ipv4/ip_fw.c)
6.0 综述
关于分片重组的实现可参看【13】。
6.1 ipchains
在2.2内核中除非设置了alway_defrag,否则包过滤模块不会对经过的包进行重组。它采用的办法是只看第一片,因为只有这一片中有完整的头信息,而后序的分片一律允许通过。为了防止分片欺骗(比如第一片极小,把传输层信息放到了第二片中),对这种正常情况中不可能出现的包做了而外的处理(太小的分片会被丢弃)。
6.2 iptables
在2.4内核有些变化,如果启动了conncetion track,所有到达防火墙的碎片都会重组,这点在以后可能会变化,正如howto 中说的,现在考虑的还只是功能的完备性,效率还要在以后的版本中改进。检测点也有了变化,输入检测在改在重组之后。
6.3 FW1
FW1对分片也做了额外处理,但目前尚未对其实现做仔细的分析。
七 状态检测
7.0 综述
基于状态的检测对管理规则提出了非常大的方便,现在已成了防火墙的一项基本要求。但目的明确之后,其实现可以选择多种不同的方法。
7.1 ipchains
ipchains本身不能完成状态检测,但有几份pacth为它做了一下这方面的补充,采用的是简单的动态添加规则的办法,这是作者对其的介绍:
>I believe it does exactly what I want: Installing a temporary
>"backward"-rule to let packets in as a response to an
>outgoing request.
7.2 iptables
在2.4内核中,基于状态的检测已经实现,利用的是connection track模块。此模块检查所有到来的数据包,将得到的状态(enum ip_conntrack_status)保留在sk_buff结构中(即skb->nfct,可通过ip_conntrack_get()得到)。
在规则中要指明状态信息(作为一个ipt_match),既实际上仍是比较每一条规则。从效率上,这种处理方式感觉不如下面FW1采用的方式好。
7.3 FW1
这段的代码没有做分析,但有一些文章通过黑箱操作的办法“猜测“出了它的实现原理,如【1】。除规则表以外,FW1另外维护一份状态表。当一个新的连接发生的时候,FW1与规则表配备,如果允许通过的话,则在状态表中建立相应表项。以后的数据过来的时候首先匹配状态表,如果它属于一个连接,便允许通过,而不再检查规则表。
草草看了一下BSD下的防火墙ipfilter的howto,感觉它的实现与FW1基本相同。
八 函数指针的问题
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。