第11周:Netfilter 框架与 iptables 原理
目标:理解 Netfilter 框架的五个钩子点,掌握 conntrack 机制,能编写内核模块在钩子点过滤数据包。
1. Netfilter 架构概览
1.1 五个钩子点
1 | 数据包流向: |
1.2 iptables 表与钩子点对应
1 | Table ────── Hook 点 ───────────────── 用途 |
2. iptables 常用命令
1 | # === 基本操作 === |
3. Conntrack(连接跟踪)
3.1 工作原理
1 | 每个通过 Netfilter 的包会被 conntrack 记录: |
3.2 Conntrack 状态机
1 | +------------+ |
3.3 Conntrack 参数调优
1 | # 查看当前连接跟踪表大小 |
3.4 Conntrack 限制
1 | 1. 表大小限制(nf_conntrack_max) |
4. 编写 Netfilter 内核模块
4.1 Netfilter Hook 注册
1 | // netfilter_hook.c |
1 | # Makefile |
1 | # 编译 |
4.2 使用多个钩子点
1 | // 多钩子点注册 |
4.3 优先级常量
1 | // 优先级(值越小越先执行) |
5. nf_tables(现代替代方案)
5.1 nftables 基础
1 | # nftables 是 iptables 的现代替代(使用通用 netlink 接口) |
5.2 nftables vs iptables
| 特性 | iptables | nftables |
|---|---|---|
| 内核接口 | 每个表独立 netlink | 通用 netlink |
| 规则存储 | 内核每个表分开 | 统一的规则集 |
| 性能 | O(n) 匹配 | O(log n) 匹配 |
| 集合 | 有限支持 | 原生支持集合 |
| 动态更新 | 需替换整个表 | 增量更新 |
| 脚本 | 每行一个规则 | 结构化 |
6. 内核模块动态规则管理
6.1 /proc 接口动态控制
1 | // dynamic_nf.c — 带 /proc 控制接口的 netfilter 模块 |
1 | # 测试 |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/07/16/第11周:Netfilter 框架与 iptables 原理/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!