深入解析IP过滤与防火墙:iptables技术详解
1. 规则匹配与分支处理
在规则匹配过程中,若分支链中没有规则匹配,我们需要返回到分支点所在的链,并从离开的位置开始扫描该链中的下一条规则。若未设置分支,我们会查看simplebranch字段来决定下一步操作:
- 若该字段设置为FW_SKIP,则跳过当前链中的下一条过滤规则。
- 若设置为FW_SKIP+1,则在第764行从当前链分支,停止扫描当前列表。
- 对于其他值,只需检查是否需要退出进一步扫描。在第766行,我们会清除当前链中CPU槽的回溯指针信息。
2. ip_rule_match()函数
ip_rule_match()函数用于进行规则匹配。ip_fwkernel对象包含所有需要匹配的规则,宏FWINV是处理反向规则的有效方式。反向规则表示除匹配项之外的任何内容,ip_fwkernel对象的fw_invflag字段为每个反向规则实体设置了一位。FWINV可同时处理反向和简单匹配,匹配结果传递给宏,并与实体的反向位进行异或运算。若实体的反向标志位被设置,则匹配结果取反;否则保持不变。若任何规则不匹配,则返回。
匹配过程如下:
1. 从第295行开始匹配源和目标IP/网络ID。若掩码全为1,则精确匹配IP地址;否则比较网络ID。
2. 若在第313行设置了通配