iptables核心详解:彻底搞懂表、链、规则和动作的关系

发布于 2025-10-29 分类: Linux

在上一篇总览中,我们把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)

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):一旦数据包的特征与匹配条件完全吻合,门卫应该执行的操作。

门卫会按顺序逐条检查手册里的规则,一旦找到一条完全匹配的,就立即执行对应的动作,并且不再检查该链中的后续规则。

常见动作 (Target)

  • ACCEPT接受。门卫大手一挥:“欢迎光临!”,数据包被允许通过。
  • DROP丢弃。门卫默默地把数据包扔进了碎纸机,并且不给任何回应。发送方只会觉得石沉大海,最终连接超时。
  • REJECT拒绝。门卫把数据包退回,并附上一张“禁止入内”的纸条(例如发送一个 icmp port-unreachable 消息)。发送方会立刻知道自己被拒绝了。

重点分析:iptables ACCEPT和DROP的区别

  • REJECT 会明确告诉对方:“我在这里,但我不让你进来。” 这虽然礼貌,但也暴露了你的存在和端口状态,可能被用于端口扫描。
  • DROP 则让对方完全无法判断是你拒绝了他,还是网络不通,还是你根本就不存在。这是一种更安全的策略,因为它不会泄露任何信息。在构建面向公网的防火墙时,通常推荐对不信任的流量使用 DROP
  • 其他动作:除了这三个基本动作,还有很多其他动作,通常与特定的表关联,例如:
    • LOG: 记录日志。把数据包的信息记录到系统日志中,然后交给下一条规则处理。常用于调试。
    • SNAT: 源地址转换。nat 表专用。
    • DNAT: 目的地址转换。nat 表专用。

-- 感谢阅读 --