FORWARD链仅在主机开启IP转发且数据包确经其路由转发时生效,用于按源/目的CIDR等条件单向阻断跨VPC流量,需配合conntrack状态提升可靠性,云环境中优先使用CEN策略路由等原生能力。

iptables 的 FORWARD 链本身不直接感知“VPC”概念,它工作在 Linux 内核网络栈,只处理经过本机转发的数据包。所谓“跨 VPC 流量单向阻断”,实际是指:当某台 ECS(或网关类主机)作为路由节点、NAT 设备或防火墙中间节点,承载了来自一个 VPC 的流量并将其转发至另一个 VPC(例如通过 VPC 对等连接、CEN 或自建隧道)时,你可以在该节点上用 FORWARD 链规则,按源/目的 CIDR、协议、端口等维度,实现有方向性的放行或拦截。
明确流量路径与 FORWARD 链生效前提
只有满足以下全部条件,FORWARD 链规则才起作用:
- 主机已开启 IP 转发:echo 1 > /proc/sys/net/ipv4/ip_forward,且建议写入 /etc/sysctl.conf 持久化
- 数据包确经该主机路由转发(即不是发给本机、也不是从本机发出,而是“穿行”而过)
- 流量未被更早的链(如 PREROUTING 的 DNAT)或更高优先级模块(如 conntrack 状态异常)绕过
按源 VPC 单向阻断出向流量(推荐场景)
例如:禁止 VPC-A(10.1.0.0/16)内所有资源访问 VPC-B(172.16.0.0/16),但允许 VPC-B 主动访问 VPC-A(即只阻断 A→B,不限制 B→A)。这属于典型的“单向阻断”需求:
- iptables -A FORWARD -s 10.1.0.0/16 -d 172.16.0.0/16 -j DROP
- 若需更精细控制,可叠加协议和端口,例如仅封禁 TCP 80/443:-p tcp --dport 80 -j DROP
- 务必确保该规则在 ACCEPT 规则之前插入(使用 -I 而非 -A),否则可能被宽泛的放行规则覆盖
结合连接状态提升可靠性
单纯靠地址匹配可能被伪造或绕过。建议配合 conntrack 状态做二次校验,尤其防范已建立连接的回程包被误拦:
- 先放行已建立和相关连接:iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- 再针对新连接做源目限制:iptables -A FORWARD -m conntrack --ctstate NEW -s 10.1.0.0/16 -d 172.16.0.0/16 -j DROP
- 这样既防止新建非法跨 VPC 连接,又不干扰已有合法会话的回程流量
注意云环境特性和替代方案
在阿里云等公有云中,纯靠 ECS 上的 iptables 控制跨 VPC 流量存在局限:
- 若流量走的是 CEN + TR(Transit Router)策略路由,实际转发发生在云网络设备层,ECS 的 FORWARD 链根本收不到包
- 此时应优先使用云原生能力:如 CEN 的 策略路由+防火墙 Attachment,或 NAT 边界防火墙对出方向做统一管控
- iptables 更适合作为补充手段,部署在自建网关、跳板机或容器宿主机等明确承担转发角色的节点上

















