Forward链专用于处理经本机转发的“过路”数据包,实现跨VPC单向隔离需先启用IP转发(net.ipv4.ip_forward=1),设FORWARD默认策略为DROP,再按源/目的网段与连接状态精确放行:允许VPC-A→VPC-B的NEW/ESTABLISHED连接,及VPC-B→VPC-A的ESTABLISHED/RELATED响应,不放行反向NEW连接,并协同NAT与路由。

Forward链是iptables中专用于处理“经本机转发”的数据包的链,它不处理发给本机或从本机发出的流量,只管“过路”数据——这正是跨VPC流量隔离策略落地的核心执行点。要实现单向隔离(例如:VPC-A可访问VPC-B的服务,但VPC-B不能主动连接VPC-A),关键不在“加一条规则”,而在于精准控制转发路径、状态匹配与默认策略协同。
确认并启用内核IP转发
Linux默认禁止转发,必须显式开启,否则所有Forward规则都不生效:
- 临时开启:echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:在/etc/sysctl.conf中添加net.ipv4.ip_forward = 1,再运行sysctl -p
- 验证是否生效:sysctl net.ipv4.ip_forward返回值应为1
设置FORWARD默认策略为DROP
单向隔离的前提是“默认拒绝”,避免漏放。切勿依赖规则顺序兜底:
- iptables -P FORWARD DROP —— 将整个FORWARD链的默认动作设为丢弃
- 确保没有其他服务(如firewalld、nftables)覆盖该策略;建议停用firewalld:systemctl stop firewalld && systemctl disable firewalld
- SELinux若启用,需确认其不干预网络转发(setenforce 0 或配置对应策略)
按方向精确放行流量
单向性由源、目的网段和连接状态共同定义。以VPC-A(10.10.0.0/16)→ VPC-B(172.16.0.0/16)单向访问为例:
- 允许VPC-A发起的新连接进入VPC-B:iptables -A FORWARD -s 10.10.0.0/16 -d 172.16.0.0/16 -m state --state NEW,ESTABLISHED -j ACCEPT
- 允许VPC-B对已建立连接的响应返回(ESTABLISHED/RELATED):iptables -A FORWARD -s 172.16.0.0/16 -d 10.10.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT
- 不添加任何-m state --state NEW规则从172.16.0.0/16到10.10.0.0/16,即物理上阻断反向主动建连
补充NAT与路由协同
跨VPC通常涉及不同地址域,仅Forward规则不够,需配合NAT和底层路由:
- 若出口网卡为eth1,对出向流量做源地址伪装(SNAT/MASQUERADE):iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth1 -j MASQUERADE
- 确保系统有到达目标VPC的路由(如:ip route add 172.16.0.0/16 via 192.168.5.1 dev eth0),否则数据包甚至无法抵达FORWARD链
- 若使用DNAT暴露服务(如将公网请求转至VPC-B内网服务),DNAT应在PREROUTING链完成,且后续FORWARD规则须匹配转换后的地址










