iptables的核心是“表—链—规则”三级结构,四张主表(raw、mangle、nat、filter)按优先级介入数据包处理流程,五条内置链对应数据包生命周期,表与链有严格匹配约束,规则线性执行且依赖顺序。

iptables 的核心是“表—链—规则”三级结构,不是一堆命令堆砌出来的工具,而是一套有明确数据流向和职责分工的内核级控制机制。理解它,关键不在记命令,而在理清每个表在哪个链上起作用、处理什么阶段的数据包。
四张表各司其职,不能混用
iptables 默认提供四张主表(raw、mangle、nat、filter),它们按优先级从高到低依次介入数据包处理流程:
- raw 表:最先接触数据包,只用于关闭连接跟踪(NOTRACK),常见于高性能服务或需要绕过 conntrack 的场景
- mangle 表:负责修改数据包属性,比如 TTL、TOS、MARK 标记,常配合策略路由或 QoS 使用
- nat 表:专管地址转换,DNAT 在 PREROUTING 链做目标地址改写,SNAT/MASQUERADE 在 POSTROUTING 链做源地址改写
- filter 表:最常用,默认表,只做“放行/拒绝/拒绝并回复”,不改地址也不改内容,所有安全过滤逻辑都落在这里
五条内置链对应数据包生命周期
每条链代表 netfilter 框架中一个钩子点,数据包按固定路径流经其中部分链:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- PREROUTING:刚进网卡、还没做路由决策时,适合做 DNAT 或 raw/mangle 标记
- INPUT:目标是本机的数据包,在路由后进入,filter 表在此决定是否允许访问 SSH、HTTP 等本地服务
- FORWARD:目标不是本机、需转发出去的数据包,防火墙作网关时重点管控此链
- OUTPUT:本机程序发出的数据包,比如 curl 访问外网,或本地服务回包,nat 表 OUTPUT 链可做源地址转换
- POSTROUTING:即将发往网卡前的最后一站,SNAT 和 MASQUERADE 必须放在这里
表与链并非全部互通,搭配有约束
不是每个表都能挂到每条链上。错误绑定会导致规则无效:
- filter 表只支持 INPUT、FORWARD、OUTPUT 三条链
- nat 表只在 PREROUTING、OUTPUT、POSTROUTING 上生效,INPUT 和 FORWARD 不接受 nat 规则
- mangle 表覆盖全部五链,但实际使用中 PREROUTING 和 OUTPUT 最常用
- raw 表仅限 PREROUTING 和 OUTPUT,且仅支持 NOTRACK 目标
规则匹配是线性顺序执行,策略默认兜底
每条链都有默认策略(policy),比如 INPUT 链默认是 ACCEPT 或 DROP。规则逐条比对,一旦匹配就执行动作(ACCEPT/DROP/REJECT/JUMP),不再往下走。所以:
- 允许规则必须写在拒绝规则之前
- 高频访问的服务(如 22/80 端口)建议靠前放置,提升匹配效率
- 最后一条规则常设为“拒绝所有”,依赖默认策略不如显式写一条 -j DROP 更可控

















