Linux 2.6 的 iptables 是一个强大的包过滤和防火墙工具,它基于 netfilter 框架。本文将深入探讨 iptables 在 Linux 2.6.28.10 内核中的实现细节,包括用户空间的处理流程以及内核中的数据结构。 **用户空间的iptables处理流程** 1. **解析命令行参数**:iptables 命令行工具首先解析用户输入的参数,这些参数可以是添加、删除或修改规则,或者显示当前的规则集。 2. **既存规则的取出和重构**:在用户空间中,iptables 会读取已存在的规则并进行重组,以准备将其更新到内核空间。 3. **规则的输出和用户空间规则的设置**:这一步涉及构建新的规则结构,并准备将其写入内核空间。 4. **更新规则到内核空间**:iptables 将经过处理的规则发送到内核,由内核的 netfilter 模块处理并应用到相应的表中。 **内核中的iptables数据结构** 在内核空间,iptables 使用一系列数据结构来存储和管理规则。关键的数据结构包括 `net` 结构体、`xt_table` 和 `ipt_entry`。 **net结构体与xt_table** 1. **net结构体**:在内核中,`net` 结构体代表了一个网络命名空间,其中包含了网络相关的各种信息。`net` 结构体中的 `xt` 成员是一个 `netns_xt` 类型,包含了一个 `list_head` 数组 `tables`,用于存储不同协议族的表。 2. **xt_table结构**:每个 `xt_table` 结构代表一张iptables表,如 `filter`、`nat` 等。`xt_table` 中的 `private` 成员是一个 `xt_table_info` 结构,存储了表的大小、规则数和规则入口等信息。 **xt_table_info与ipt_entry** 1. **xt_table_info**:`xt_table_info` 描述了表的详细信息,包括 `entries` 字段,这是一个指针数组,实际上表示了规则表的入口。在内存分配时,会为每个处理器分配一个额外的指针,形成一个连续的 `ipt_entry` 结构链。 2. **ipt_entry结构**:`ipt_entry` 是规则的实际载体,每个 `ipt_entry` 对应链上的一条规则。这些 `ipt_entry` 结构按照处理器组织,且按hook点分组。 **链表和hook点** 每个 `xt_table` 的 `valid_hooks` 字段是一个位向量,标识了该表影响的hook点,如 `NF_INET_NUMHOOKS` 定义的五个主要hook点:PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING。每个hook点对应一组 `ipt_entry`,它们决定了数据包在通过网络栈时被检查的顺序。 **读写锁和规则改变通知** iptables 表使用 `rwlock_t` 读写锁来保护数据的并发访问。当规则发生改变时,`rules_changed` 函数会被调用,以便执行相应的更新操作。`module` 成员记录了表是否在模块中定义,便于模块管理。 总结来说,iptables 在Linux 2.6内核中的实现是一个复杂而精细的系统,涉及到用户空间与内核空间的交互、内存管理和并发控制等多个方面。通过理解这些核心数据结构和处理流程,我们可以更好地设计和优化网络策略,确保系统的安全性和效率。
剩余18页未读,继续阅读
- shenletongxue2014-03-19东西挺多挺全的,可以看看
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助