扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:51cto 2007年10月17日
关键字:
在本页阅读全文(共2页)
5.3 FW1
FW1 登记了一个字符设备,通过它来进行用户空间与内核空间的交互。相关代码(从汇编代码翻译成的C程序)如下:
static unsigned int fw_major=0;
static struct file_operations fw_fops=
{
NULL, /* lseek */
fw_read, /* read */
fw_write, /* write */
NULL, /* readdir */
fw_poll, /* poll */
fw_ioctl, /* ioctl */
NULL, /* mmap */
fw_open, /* open */
NULL, /* flush */
fw_release /* release */
NULL, /* fsync */
};
int init_module()
{
...
/*man register_chrdev
On success, register_chrdev returns 0 if major is a number
other then 0, otherwise Linux will choose a major number and
return the chosen value.*/
if(fw_major=register_chrdev(UNNAMED_MAJOR, “fw”, &fw_fops))
return -1;
...
}
void cleanup_module()
{
...
unregister_chrdev(fw_major, "fw");
...
}
fw_ioctl()用来做配置工作。
六 碎片的处理
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基本相同。
八 函数指针的问题
许多初读内核的人对函数指针的应用很不适应,在netfilter中更是用的非常广泛。大量register函数的应用,使得netfilter非常的模块化,但是给初学者带来的问题也不小。
这里是linuxforum上的一份帖子,如果看代码时对函数指针的指向总是糊里糊涂的话,可借鉴一下这个思路(当然关键还是要找到指针初始化的地方):
>Linux内核技术
>herze (stranger ) 01/15/01 02:54 PM
>高手指点:PPP的发送函数在那里?
>在Linux内核2.4.0中对于PPP数据包已经打好的包,内核中的ppp_generic.c文件中发送的流程好像如下
>ppp_file_write()->ppp_xmit_process()->ppp_push()(可能也由其它的发送流程,但是最后都是
>用到了ppp_push())这个函数,而这个函数调用了一个struct channel中struct ppp_channel中的
>struct ppp_channel_ops 中的一个函数指针
>int (*start_xmit)(struct ppp_channel *, struct sk_buff *)来进行发送的,但是下面我就不明白了。
>虽然在drivers/char/cyclades.c和drivers/char/serial167.c中找到了
>start_xmit( struct cyclades_port *info )但是函数说明都不相同。
>请教:
>int (*start_xmit)(struct ppp_channel *, struct sk_buff *)
>到底这个函数指针是指到了什么地方?
>是不是和具体的硬件有关,但是我怎么在内核中找不到对应的函数?
>Linux内核技术
>yawl (stranger ) 01/15/01 11:31 PM
>思路这样 [re: herze]
>内核中常有这样的类似处理,查找这种函数指针的一个好办法,就是找那种结构的实例,对于你的问题,就是找
>ppp_channel_ops,最终会找到async_ops(ppp_async.c)和sync_ops(ppp_synctty.c),没看过这块的
>具体代码,不敢多说,但思路如此。
九 后记
尽管此文中是在【12】的基础之上完成的,但是在内容上并未完全包括前者,感兴趣的朋友在那篇文章上可能能找到一些有趣的原始信息。由于时间关系,本文在此主题上的探讨仍显粗浅,对此只能说抱歉了。
十 参考文献
【1】了解Check Point FW-1状态表
http://magazine.nsfocus.com/detail.asp?id=538
【2】A Stateful Inspection of FireWall-1
http://www.dataprotect.com/bh2000/
【3】Linux IPCHAINS-HOWTO
http://www.linuxdoc.org
【4】防火墙新生代:Stateful-inspection
http://www.liuxuan.com/safe/anquan/html/firewall/04.htm
【5】netfilter站点上的文档
http://netfilter.kernelnotes.org
【6】Application Gateways and Stateful Inspection:A Brief Note Comparing and Contrasting
http://www.avolio.com/apgw+spf.html
【7】Internet Firewalls:Frequently Asked Questions
http://www.interhack.net/pubs/fwfaq
【8】Writing a Module for netfilter
http://www.linux-mag.com/2000-06/gear_01.html
【9】ipchains的源代码分析
http://www.lisoleg.net/lisoleg/network/ipchains.zip
【10】内核防火墙netfilter入门
http://magazine.nsfocus.com/detail.asp?id=637
【11】Check Point Firewall-1 on Linux, Part Two
http://www.securityfocus.com/frames/?focus=linux&content=/focus/linux/articles/checkpoint2.html
【12】防火墙技术分析讲义
http://bj.aka.org.cn/Lectures/003/Lecture-3.1.1/Lecture-3.1.1/firewall.txt
【13】IP分片重组的分析和常见碎片攻击 v0.2
http://magazine.nsfocus.com/detail.asp?id=584
【14】利用LLKM处理网络通信---对抗IDS、Firewall
http://security.nsfocus.com/showQueryL.asp?libID=431
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者