- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux防火墙中mark模块研究和编写
Linux防火墙中mark模块研究和编写 摘 要:本文主要分析了linux下防火墙netfilter/iptables的结构和模块属性,主要解决系统在多线负载均衡和自己开发的防火墙不能共用mark时,提供了一种扩展模块应用。通过对netfilter/iptables程序结构的分析,期待解决Linux中防火墙系统在实际生活中的应用。
关键词:Netfilter/iptables结构;扩展match;Netfilter/iptables模块
中图分类号:TP393.08
在linux系统中为了更好的实现网络流量的管理,使用了内核的mark来标识网络流量。这样造成了用户层再使用mark来标记多线负载,两种mark会互相覆盖,达不到想要的结果。在此种情况下,通过研究发现可以扩展mark模块来解决这种冲突。
1 Iptables的结构和命令格式分析
1.1 Iptables的结构分析
Iptables是linux系统为用户提供的一个配置防火墙的工具。它提供一个命名规则集。在linux中iptables防火墙实现的核心模块是netfilter,它负责维护防火墙的规则链表,实现防火墙安全防御能力。Netfilter主要有三种功能:数据包过滤、网络地址转换(nat)以及数据包处理(mangle)。数据包过滤模块的功能是过滤报文,不作任何修改,或者接受,或者拒绝。Nat是网络地址转换,该模块以connection tracking模块为基础,仅对每个连接的第一个报文进行匹配和处理,然后交由connection tracking模块将处理结果应用到该连接之后的所有报文。Mangle是属于可以进行报文内容修改的ip tables,可供修改的报文内容包括mark、tos、ttl等。同时该模块带有用户空间和内核交流的接口。
1.2 Iptables命令格式分析
一个最简单的规则可以描述为拒绝所有转发报文,用iptables命令表示就是:iptables -A FORWORD -j DROP。Iptables应用程序将命令行输入转换为程序可读的格式,然后再调用libiptc库提供的iptc_commit()函数向核心提交该操作请求。它根据请求设置了一个struct ipt_replace结构,用来描述规则所涉及的表和HOOK点等信息,并在其后附接当前这条规则,一个struct ipt_entry结构。组织好这些数据后,iptc_commit()调用setsockopt()系统调用来启动核心处理这一请求。
2 Netfilter的结构分析
Netfilter是linux系统中的内核防火墙框架,主要进行包过滤,连接跟踪,地址转换的功能,是防火墙的基础。其主要通过表、链实现。在netfilter中,每种网络协议都有自己的一套hook函数。数据报经过协议栈的几个关键点时调用hook函数,hook函数标号和协议栈数据报作为参数,传递给netfilter框架。其主要框架如图1所示:
3 Netfilter和 Iptables相关模块属性分析
3.1 与netfilter有关的结构
Netfilter一个重大修正思想就是将netfilter作为一个协议无关的框架,表现在内核结构树中单独建立net/netfilter目录,在net/netfilter下的匹配和目标模块文件名称以“xt_”开头。
为了和iptables兼容,这些文件中增加了一个新的宏定义:module_alias,来表示模块的别名。所有扩展程序的名称也是以xt开头。
Netfilter扩展的程序框架:
Xt_kzmark.c:
Static unsigned int kzmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
Static int kzmark_tg_check(const struct xt_tgchk_param *par)
Static void kzmark_tg_destroy(const struct xt_tgdtor_param *par)
Static boool kzmark_mt(const struct sk_buff *skb, struct xt_action_param *par)
Static int kzmark_mt_check(const struct xt_mtchk_param *par)
Static void kzmark_mt_destroy(const struct xt_mtdtor_param *par)
Static str
文档评论(0)