8. 扩展模块的应用 通过前面的描述,可以看出扩展一个匹配模块需要做的工作。下面以扩展匹配模块为例,扩展动作模块的操作类似,主要包括以下内容: 用户空间: (1).定义一个iptables_match模块并初始化相应的参数值,在模块的加载函数中调用register_match()将iptables_match模块注册到全局链表iptables_matches中; (2).定义用户态与内核态共用的数据结构ipt_XX_info,其主要用于交互数据; 内核空间: (1).定义一个ipt_match模块并初始化相应的参数值,在模块的加载函数中调用xt_register_match()将ipt_match模块注册到xt_af的相应链表中; 当完成前面的工作后,就需要修改程序的编译文件及内核配置文件,以目前我分析的内核版本2.6为例,则需要修改如下文件: (1).在iptables/extensions/Makefile文件的PF_EXT_SLIB中新加模块名XX; (2).在linux/net/ipv4/netfilter/Makefile中新加一行:obj-$(CONFIG_IP_NF_MATCH_XX) += ipt_XX.o
(3).在linux/net/ipv4/netfilter/Kconfig中新加以下行:
config IP_NF_XX
tristate "……"
depends on ……
help
…...
To compile it as a module, choose M here. If unsure, say N.
完成以上步骤后,重新配置内核并选取该模块,编译后即可使用该扩展模块了。
9. 总结 本文主要目的是分析netfilter/iptables实现机制的大框架,很多细节问题并未涉及到,希望通过此分析文档对进一步了解该机制提供帮助,并为使用该机制提供指导。由于自身水平有限,其中存在的问题望读者谅解并不吝指正。
|