Linux 网络中的 IP 过滤、防火墙与软中断机制解析
1. IP 过滤与防火墙
在 IP 过滤和防火墙的实现中,当进行规则匹配分支操作时,需要在分支前将当前链的后向指针指向当前链的下一个条目(第 353 行)。这是为了在分支链中没有规则匹配时,能够从当前链的下一个条目开始继续匹配。同时,由于后向指针已被修改,需要将当前链的后向指针偏移量存储在下一个条目的comefrom字段中(第 350 行),然后开始遍历新的分支链。
当目标是非标准目标时,会为该目标设置一个目标回调例程,并在第 364 行调用。目标的返回值要么是最终裁决结果,要么是IPT_CONTINUE。如果是最终裁决结果,则带着该裁决返回例程;否则,继续处理链中的下一个条目。
IPT_MATCH_ITERATE宏用于遍历钩子条目的协议特定规则列表。这些匹配规则位于ipt_entry对象的末尾,目标位于协议特定规则列表的末尾。从偏移量(即ipt_entry对象的大小)开始访问第一个规则(第 305 行,cs 16.40)。在每次迭代中,通过加上当前规则的大小来计算下一个规则条目的偏移量(第 307 行)。循环迭代直到到达钩子条目的目标起始位置(第 306 行)。对于每个规则,使用函数指针在第 310 行处理过滤规则。如果匹配当前规则,则继续匹配下一个规则;否则,在第一次不匹配时返回(第 311 行)。
Netfilter 框架用于在 Linux 中实现防火墙,不仅可以使用防火墙,还可以使用 Netfilter 钩子来实现 IP 堆栈的任