iptables核心详解:彻底搞懂表、链、规则和动作的关系
在上一篇总览中,我们把Linux内核中的网络框架Netfilter比作一位兢兢业业的“网络门卫”,而iptables命令则是我们与这位门卫沟通的“对讲机”。现在,是时候走近这位门卫,看看他到底是如何工作的了。
要让他听懂我们的指令,我们必须先了解他的工作语言和工作流程。这位门卫的工作体系由四个核心部分构成:表 (Table)、链 (Chain)、规则 (Rule) 和 动作 (Target)。理解了这四个概念以及它们之间环环相扣的关系,你就拿到了通往iptables世界大门的钥匙。
1.1 核心比喻重温:网络门卫 Netfilter
- Netfilter (门卫):真正干活的内核模块,它在Linux网络协议栈的关键位置设置了多个“钩子”(Hooks),所有网络数据包经过时都会被它检查。
- iptables (对讲机):用户空间的工具,我们用它来编写一套详细的“指令集”,然后发送给Netfilter,告诉它在这些“钩子”上具体要做什么。
现在,让我们看看门卫手里的“家伙事儿”,这正是理解iptables表、链、规则和动作关系的第一步。
1.2 “门卫”的四本规则手册:表 (Table)
想象一下,我们的门卫为了应对不同的安保场景(比如防火、防盗、访客登记),备有好几本不同用途的工作手册。在iptables中,这些分门别类的“工作手册”就是表 (Table)。iptables主要有四本“手册”:
iptables filter nat mangle raw表作用详解
① filter 表 (过滤手册) - 最核心、最常用
- 作用:这是门卫最常用的手册,专门负责“过滤”,也就是决定一个数据包是放行 (ACCEPT) 还是丢弃 (DROP)。我们日常配置防火墙,比如“开放80端口”、“禁止某个IP访问”,99%的操作都是在filter表里完成的。
- 场景:当一个访客(数据包)到来,门卫首先会翻开这本手册,看看他是否在黑名单上,或者他要去的地方(端口)是否允许访问。
② nat 表 (地址翻译手册)
- 作用:nat是“Network Address Translation”(网络地址转换)的缩写。这本手册专门负责修改数据包的源地址或目的地址。
- 场景:
- 共享上网 (SNAT/MASQUERADE):办公室里所有电脑通过一个公网IP上网。当电脑的数据包要出门时,门卫会翻开nat手册,把数据包的源地址(内网IP)偷偷换成路由器的公网IP,这样外部世界才能回应。这叫源地址转换(SNAT)。
- 端口转发 (DNAT/REDIRECT):你有一台公网服务器,但真正的服务运行在内网的一台机器上。当外部请求访问服务器的80端口时,门卫会翻开nat手册,把数据包的目的地址改成内网那台机器的IP和端口。这叫目的地址转换(DNAT)。
 
- 共享上网 (SNAT/MASQUERADE):办公室里所有电脑通过一个公网IP上网。当电脑的数据包要出门时,门卫会翻开
③ mangle 表 (标记手册)
- 作用:这本手册比较高级,它不负责放行或拒绝,也不主要做地址转换,而是专门给数据包“盖个章”,即修改数据包的IP头信息(比如TOS、TTL等)或打上特殊的内核标记。
- 场景:高级路由策略。比如,你可以给来自某个特定应用的数据包盖上一个“VIP”的章(修改TOS值),然后让路由器优先处理这些“VIP”包,以保证服务质量(QoS)。
④ raw 表 (优先处理手册)
- 作用:这本手册的优先级最高。它的主要任务是决定是否要对一个数据包豁免连接跟踪 (Connection Tracking)。连接跟踪是iptables实现状态防火墙(Stateful)的核心机制,但它会消耗性能。
- 场景:在非常高的网络负载下,比如一台负载均衡器,你可能希望对某些确定是安全的、大量的短连接数据包(如DNS查询)关闭连接跟踪,以提升性能。门卫拿到数据包,先翻这本手册,如果发现指令是“无需跟踪”,他就会直接放手,让数据包进入后续流程,不再记录它的状态。
记忆口诀:
过滤(filter)是根本,转换(nat)靠它混,标记(mangle)做点缀,原始(raw)最优先。
1.3 “门卫”的五个检查站:链 (Chain)
有了工作手册(表),门卫还需要在不同的位置进行检查。理解了这一点,iptables表和链的关系就清晰了一大半。不能所有访客都堵在大门口检查,对吧?从大楼外进来的人、从楼里出去的人、只是路过院子的人,检查的地点和时机都不同。在iptables中,这些预设的、位于数据包必经之路上的**“检查站”,就是链 (Chain)**。
iptables内置了五个默认的链,它们对应Netfilter在内核中的五个钩子:
图解iptables的五个链
- ① PREROUTING(路由前):数据包进入防火墙后,进行路由决策之前的第一个检查站。这是数据包的入口。所有进入的数据包都会先经过这里。
- ② INPUT(入站):数据包经过路由决策后,如果其目的地是本机,那么它会来到这个检查站。这里是专门检查“收给自己的信件”的地方。
- ③ FORWARD(转发):数据包经过路由决策后,如果其目的地不是本机,而是需要经过本机转发给其他主机(比如本机作为路由器或网关),它就会来到这个检查站。这里是检查“过路包裹”的地方。
- ④ OUTPUT(出站):由本机自己产生,准备发出去的数据包,会经过这个检查站。这里是检查“自己要寄出去的信件”的地方。
- ⑤ POSTROUTING(路由后):所有即将离开防火墙的数据包(无论是被转发的,还是本机产生的),在离开前的最后一个检查站。
专题讨论: 揭秘iptables表和链的真实关系
初学者最容易混淆的就是表和链的关系。请记住这个类比:
- 链 (Chain) 是 检查站的位置(在哪里检查)。
- 表 (Table) 是 检查时用的手册(检查什么内容)。
一个检查站(链)的门卫,在工作时可能会用到一本或多本手册(表)。并不是每个检查站都会使用所有四本手册。这种对应关系是固定的,也是理解iptables工作流程的关键。
例如:
- 在 INPUT检查站(目的地是本机),门卫主要关心的是“该不该放行”,所以他会重点翻阅filter手册。地址转换在这里通常没有意义。
- 在 PREROUTING检查站(刚进来,还没路由),门卫需要决定是否要做目的地址转换(DNAT),所以他会翻阅nat手册。
- 在 POSTROUTING检查站(马上要出去),门卫需要决定是否要做源地址转换(SNAT),所以他也会翻阅nat手册。
我们将在下一章用一张清晰的流程图,彻底讲清楚数据包在这些链和表之间的完整旅程。
1.4 “手册”里的具体规定:规则 (Rule) 与 动作 (Target)
现在我们已经理解了表和链的关系,那么手册里面具体写了什么呢?写的就是一条条的规则 (Rule),它将匹配条件与动作绑定在一起,构成了iptables最基本的执行单元。
- 规则 (Rule):一条规则就是门卫的一条具体指令,它由两部分组成:
- 匹配条件 (Match):规定了这条规则适用于什么样的数据包。比如,“源IP是 192.168.1.100”、“目的端口是22”、“协议是TCP” 等。
- 动作 (Target):一旦数据包的特征与匹配条件完全吻合,门卫应该执行的操作。
 
- 匹配条件 (Match):规定了这条规则适用于什么样的数据包。比如,“源IP是 
门卫会按顺序逐条检查手册里的规则,一旦找到一条完全匹配的,就立即执行对应的动作,并且不再检查该链中的后续规则。
常见动作 (Target)
- ACCEPT:接受。门卫大手一挥:“欢迎光临!”,数据包被允许通过。
- DROP:丢弃。门卫默默地把数据包扔进了碎纸机,并且不给任何回应。发送方只会觉得石沉大海,最终连接超时。
- REJECT:拒绝。门卫把数据包退回,并附上一张“禁止入内”的纸条(例如发送一个- icmp port-unreachable消息)。发送方会立刻知道自己被拒绝了。
重点分析:
iptables ACCEPT和DROP的区别
REJECT会明确告诉对方:“我在这里,但我不让你进来。” 这虽然礼貌,但也暴露了你的存在和端口状态,可能被用于端口扫描。
DROP则让对方完全无法判断是你拒绝了他,还是网络不通,还是你根本就不存在。这是一种更安全的策略,因为它不会泄露任何信息。在构建面向公网的防火墙时,通常推荐对不信任的流量使用DROP。
- 其他动作:除了这三个基本动作,还有很多其他动作,通常与特定的表关联,例如:
- LOG: 记录日志。把数据包的信息记录到系统日志中,然后交给下一条规则处理。常用于调试。
- SNAT: 源地址转换。- nat表专用。
- DNAT: 目的地址转换。- nat表专用。