科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道linux防火墙实现技术比较(5)

linux防火墙实现技术比较(5)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

此文着重阐述linux下的防火墙的不同实现之间的区别,以ipchains, iptables, checkpoint FW1为例。

作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章