要实现跨vpc流量单向阻断,需在三层网关节点启用ip转发,并配置iptables forward链规则:-a forward -i eth1 -o eth2 -s 10.10.0.0/16 -d 172.16.0.0/16 -m conntrack --ctstate new -j drop,同时必须配合云平台层安全组、网络acl及路由策略协同防御。

要实现跨VPC流量的单向阻断,核心不是单纯加一条 -A FORWARD,而是结合路由路径、IP段归属、连接状态和方向语义,精准识别“从染毒VPC来、向干净VPC去”的流量,并只丢弃这一方向。
明确跨VPC流量在Linux节点上的实际路径
你的Linux服务器必须是两个VPC之间的**三层网关节点**(比如自建NAT网关、中转跳板机、或VPC对等连接中的路由中继节点),且已启用IP转发(net.ipv4.ip_forward = 1)。此时跨VPC包才会经过FORWARD链。若只是普通ECS实例,流量不经过它,FORWARD规则完全无效。
确认方式:
- 运行
cat /proc/sys/net/ipv4/ip_forward,输出为1才有效 - 用
iptables -L FORWARD -n -v观察是否有包计数增长,验证流量真实经过
按源/目的网段+方向定义“单向”
假设染毒VPC网段是 10.10.0.0/16,干净VPC网段是 172.16.0.0/16,Linux网关有两块网卡:eth1 连染毒侧(IP如 10.10.1.1),eth2 连干净侧(IP如 172.16.1.1)。
单向阻断即:允许干净→染毒(便于排查),但禁止染毒→干净。对应规则应写成:
iptables -A FORWARD -i eth1 -o eth2 -s 10.10.0.0/16 -d 172.16.0.0/16 -j DROP
关键点:
-
-i eth1:限定流量**从染毒侧网卡进入** -
-o eth2:限定流量**从干净侧网卡发出** -
-s和-d进一步校验IP段,防伪装 - 这条规则不会影响反向流量(
-i eth2 -o eth1)
增强可靠性:叠加连接状态与协议限制
仅靠IP段可能被绕过。建议补充连接跟踪(conntrack)判断,只阻断新发起的会话,放行已有响应:
iptables -A FORWARD -i eth1 -o eth2 -s 10.10.0.0/16 -d 172.16.0.0/16 -m conntrack --ctstate NEW -j DROP
还可按需细化:
- 只阻断高危协议:加
-p tcp --dport 445(SMB)、--dport 3389(RDP)等 - 排除管理通道:在DROP前插入一条ACCEPT规则,放行运维IP到特定端口(如SSH)
- 记录日志便于溯源:把
-j DROP换成-j LOG --log-prefix "BLOCK-LATERAL: "+-j DROP
务必同步检查上游安全边界
iptables FORWARD 是最后一道防线。真正防横向移动,必须配合:
- VPC对等连接或CEN路由表中,**不配置反向路由**(即干净VPC不发布指向染毒VPC的路由)
- 两端ECS的安全组:干净VPC内ECS入方向,**显式拒绝**来自
10.10.0.0/16的所有端口 - 网络ACL(如果使用):在干净侧子网ACL入方向添加拒绝规则
- 确认无容器或Pod网段与对方VPC重叠(常见隐蔽冲突点)
单靠Linux主机iptables无法替代云平台层的安全组和网络ACL,必须多层协同。











