简介:
这是一些在分析LINUX2.2.x网络安全实现时碰到的问题,有些是网友问的,有些是同事问的,有些是自己觉得比较重要的。现在将问题和答案一一列出,希望能够有点用处。
1. ipchains如何检查循环?
ipchains的链和规则都是单向链表,如下图所示:
[图1.1]
规则加在链上,规则的数据结构是ip_fwkernel。它的成员ip_fw是规则的参数,simplebranch是规则的返回值,branch指向其他的链。对传入ip_fw_check的包,它按下面的流程处理:
[图1.2]
从流程中可以看到,每次对传入的包进行匹配时,如果规则的目标是一个链,都会将当前链的指针保存在目标链中,以标记此链已检查过了。如果规则的目标是个动作,就会将此前所作的所有标记都清除。如果目标链上的规则都没有被匹配,在返回前一个链时,会将目标链上的标记清除。所以如果规则的目标是一个链,并且链上已做过标记,则说明规则中有循环。