Linux防火墙的INPUT、FORWARD、OUTPUT三链按数据包身份与路径严格分工协作:INPUT处理目标为本机的入站包,FORWARD处理需转发的过路包,OUTPUT处理本机主动发出的出站包,三者依网络栈流向依次触发、不可替代。

Linux 防火墙规则链 INPUT、FORWARD 和 OUTPUT 并非独立运行,而是按数据包在网络栈中的实际流向严格分工、依次协作。理解它们如何协同,关键在于明确每个数据包的“身份”和“路径”——是发给本机?从本机发出?还是仅路过?
INPUT 链:只管“进门”的包
当一个数据包的目标 IP 是本机某个接口地址(比如 192.168.1.100),且最终要交给本机上运行的服务(如 sshd、nginx)时,它必须经过 INPUT 链。这条链不处理转发流量,也不处理本机主动发出的包。
- 典型用途:限制 SSH 登录来源、阻止对本机 Web 端口的非法访问、放行本地局域网管理请求
- 注意:即使包来自本机 loopback(127.0.0.1),也走 INPUT 链,不是 OUTPUT
- 常见误配:把应由 FORWARD 控制的内网访问规则错写在 INPUT 中,导致转发失效
FORWARD 链:专管“过路”的包
只要数据包目的地址不是本机,且本机已开启 IP 转发(net.ipv4.ip_forward=1),它就会进入 FORWARD 链。这是路由器、NAT 网关、DMZ 主机的核心控制点。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 典型用途:允许内网访问外网、限制某台主机的出站带宽、拦截可疑 ICMP 类型、跳转到自定义链做病毒特征过滤
- 注意:FORWARD 不检查源地址是否可信,只看路由决策结果;它的规则生效前提是路由层已判定该包需转发
- 常见误配:未启用 IP 转发却期望 FORWARD 生效,或在没有 NAT 规则配合时单独放行 FORWARD 导致内网暴露
OUTPUT 链:只管“出门”的包
所有由本机进程主动发起、准备发出的数据包,无论目标是本地、局域网还是互联网,都必须经过 OUTPUT 链。哪怕目标是 127.0.0.1,也在此链判断。
- 典型用途:限制本机程序外连特定端口(如禁止 curl 访问恶意域名)、强制本机 DNS 查询走指定服务器、标记本地生成的报文用于后续策略
- 注意:OUTPUT 在路由之前执行,所以规则中可用 -o eth0 指定出口网卡,但不能依赖目标路由结果(如 --dst 尚未确定)
- 常见误配:试图用 OUTPUT 控制外部访问本机的行为(那是 INPUT 的职责),或忽略本机服务响应包也走 OUTPUT(如 nginx 返回客户端的包)
三条链的真实协作顺序
一条 HTTP 请求从内网 PC 发往外网网站,经 Linux 网关转发时,会依次触发:
- PC → 网关:包目标为网关外网口 IP → 先走网关的 INPUT(若误配可能直接丢弃)
- 网关查路由,发现需转发 → 进入 FORWARD 链(执行转发放行、连接限制、ICMP 跳转等)
- 网关向外网发送响应或新请求 → 出口包走 OUTPUT 链(如限制网关自身更新行为)
- 外网返回响应 → 目标是网关外网口 → 再次进入 INPUT → 再次转发 → 再次走 FORWARD → 最终送达内网 PC
整个过程里,INPUT、FORWARD、OUTPUT 各司其职,互不越界。漏掉任一环节,或规则顺序颠倒(比如 DROP 放在 ACCEPT 前面),都会导致通信中断。

















