You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2实例无法联网的ACL配置原因及受限入站解决方法

问题

我有一台绑定了ACL的EC2实例,要求仅允许IP地址10.20.30.40通过22、80、443端口访问该实例,因此配置了如下入站规则:

1.  95  TCP  22     10.20.30.40/32  Allow
2. 100  TCP  443    10.20.30.40/32  Allow
3. 105  TCP  80     10.20.30.40/32  Allow
4. *    All  All         0.0.0.0/0  Deny

出站规则配置如下:

1. 100  All  All         0.0.0.0/0  Allow
2. *    All  All         0.0.0.0/0  Deny

按配置应该可以正常访问互联网,但实际无法联网。仅当添加至少如下入站规则或允许全部入站流量时,联网才恢复正常:

5.  110  ICMP-IPv4  All  0.0.0.0/0  Allow

请问该现象的原因是什么?如何在不向其他IP开放实例的前提下限制入站流量?

现象原因

核心原因有两点:

  1. TCP响应流量被拦截:EC2实例访问互联网时,会随机使用1024-65535范围内的临时端口发起请求,目标服务器的响应流量会以这些临时端口为目标端口返回。但现有入站规则只允许10.20.30.40访问22/80/443端口,所有外部服务器的响应流量直接被最后的Deny规则阻断,导致TCP连接无法完成握手或传输数据。
  2. 路径MTU发现失败:网络通信中,路径MTU发现依赖ICMP的「目的地不可达(需要分片但DF位已置位)」报文,用来自动调整数据包大小。如果入站规则拒绝这类ICMP报文,当遇到MTU不匹配的网络路径时,TCP连接会直接中断,表现为无法联网。添加全量ICMP规则后恢复联网,就是因为解决了MTU发现的问题,但TCP响应被拦截的本质问题其实也存在,只是部分场景下未暴露。

优化配置方案

要在严格限制外部主动访问的同时保证实例正常联网,只需调整入站规则,允许必要的响应流量和特定ICMP报文:

最终入站规则(按优先级从高到低)

1.  95  TCP  22            10.20.30.40/32  Allow  # 允许指定IPSSH访问
2. 100  TCP  443           10.20.30.40/32  Allow  # 允许指定IPHTTPS访问
3. 105  TCP  80            10.20.30.40/32  Allow  # 允许指定IPHTTP访问
4. 110  TCP  1024-65535    0.0.0.0/0       Allow  # 允许外部TCP响应流量(临时端口)
5. 115  ICMP-IPv4  类型3,代码4  0.0.0.0/0  Allow  # 允许MTU发现所需ICMP报文
6. *    All  All            0.0.0.0/0       Deny   # 默认拒绝所有其他入站流量

配置说明

  • 规则4开放的1024-65535是EC2实例发起TCP请求的默认临时端口段,确保外部服务器的响应能正常返回实例,解决联网的核心问题。
  • 规则5仅允许ICMP类型3、代码4的报文,而非全量ICMP,既满足路径MTU发现的需求,又最小化入站开放范围,避免不必要的风险。
  • 原有针对10.20.30.40的访问规则完全保留,只有该IP能主动访问实例的22/80/443端口,其他IP无法主动发起连接,符合初始需求。

内容的提问来源于stack exchange,提问作者pto3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:31:01