在 iptables
里,INPUT
、OUTPUT
、FORWARD
是最核心的三个链(Chain) ,它们定义了数据包在本机处理过程中的三个关键路径。下面我会通俗地解释它们的含义和作用:
🔁 总体概念:什么是链(Chain)?
iptables 把数据包的处理过程分为多个"链",每条链就是一组规则,规则之间按顺序匹配。三大最常用的链如下:
链名称 | 作用方向 | 数据包路径 |
---|---|---|
INPUT |
进入本机 | 外部数据包 → 本地程序 |
OUTPUT |
从本机发出 | 本地程序 → 外部网络 |
FORWARD |
本机转发(不处理) | 外部设备 → 外部设备(经由本机) |
📥 1. INPUT 链
作用:控制访问本机的网络流量
-
只要是别人访问你(比如你开了一个 web 服务,别人访问你的 80 端口),就会经过
INPUT
链。 -
适用于:SSH、HTTP、HTTPS、Ping 等所有入站连接。
示例:
bash
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许其他主机访问本机的 22 端口(SSH)。
📤 2. OUTPUT 链
作用:控制本机发出的流量
- 当你在本机执行 curl、ping、apt-get、wget、ssh 等命令时,这些"出站"请求都会经过
OUTPUT
链。
示例:
bash
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
允许本机访问外部 HTTP(80 端口)网站。
🔀 3. FORWARD 链
作用:控制"路由转发"流量(本机作为中转,不是源也不是目的)
-
本机如果做了网关、路由器、NAT、VPN、Docker 桥接等转发行为,就会用到
FORWARD
链。 -
比如一个包从网卡 eth0 进来,经由本机,从网卡 eth1 转出去,就会用到
FORWARD
链。
示例:
bash
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -j ACCEPT
允许本机转发来自 192.168.1.* 到 10.0.0.* 的流量。
🧠 总结对比
链名称 | 流量方向 | 是否发给本机 | 是否来自本机 | 示例 |
---|---|---|---|---|
INPUT | 入站流量 | ✅ 是 | ❌ 否 | 别人访问你 |
OUTPUT | 出站流量 | ❌ 否 | ✅ 是 | 你访问别人 |
FORWARD | 转发流量 | ❌ 否 | ❌ 否 | 本机充当中转(如路由器) |