收敛ECS实例的公网暴露风险

避免直接为ECS实例分配弹性公网 IP(EIP)或固定公网 IP 地址并通过它来访问 Internet 或提供网络服务。

安全风险

ECS实例直接分配公网IP(EIP或固定公网IP)后,该实例即具备访问Internet以及被Internet访问的能力,这会直接扩大来自互联网的攻击面,带来以下安全风险:

  • 被动扫描与发现:一旦ECS实例在公网暴露服务端口,就可能被扫描发现,进而面临DDoS攻击,或因端口对应服务存在远程漏洞而被攻击者利用,导致主机被入侵。

  • 高危端口攻击:敏感端口的暴露显著增加安全风险。若安全组配置不当,可能导致登录、运维或管理类端口意外暴露在公网上,例如SSH(22端口)、RDP(3389端口)、SMB(445端口)等。这些端口一旦暴露在Internet上,极易遭受暴力破解、口令猜测、凭据泄露等攻击,进而导致主机失陷、数据泄露等严重后果。

  • 增加管理复杂性:实例直接绑定公网IP意味着需以实例为单位独立管理公网IP地址和访问控制策略,增加了网络运维的复杂性。当实例数量较多时,更易出现配置错误、策略遗漏等安全风险,并可能形成单点故障,影响整体系统的可用性与安全性。

  • 不符合等保合规要求:网络安全性是企业合规体系建设的重要组成部分。例如,《信息安全技术—网络安全等级保护基本要求》等相关标准明确要求,所有公网访问必须做到安全、可控、可审计。企业应避免将云主机直接暴露于公网,优先采用负载均衡、NAT网关、堡垒机等安全架构,实现对公网访问的集中管控与防护。

最佳实践

正确使用安全组

讨论高级网络方案之前,先掌握ECS最基础、最核心的安全防线——安全组。它是一种虚拟防火墙,用于控制单台或多台ECS实例的入站和出站流量。

核心原则:最小权限 无论配置入方向还是出方向规则,都应该严格遵循“非必要,不授权”的原则。这意味着:

  • 明确授权对象: 授权IP地址时,应尽可能使用具体的IP地址或IP段(如公司的出口IP、其他云资源的私网IP),坚决避免使用0.0.0.0/0,除非业务确实需要对全网开放(如Web服务的80/443端口)。

  • 明确授权端口: 只开放业务必需的端口,对于远程管理、数据库等端口,绝不能对公网开放。

反面案例:

用户小A为图省事,给ECS实例绑定了公网IP,并在安全组中将SSH(22)和Redis(6379)端口的源地址都设置为0.0.0.0/0。同时,他为root用户设置了弱口令,Redis也未设置密码。结果,在公网IP绑定后不到5分钟,其服务器就被自动化工具扫描发现并成功入侵,最终导致数据被窃取。

如果小A22端口的源IP限制为仅公司IP访问,将6379端口限制为仅VPC内网访问,那么即使存在弱口令,攻击者也无法从公网直接利用这些漏洞。

常见高危端口列表 在配置安全组时,请对下表中的端口保持高度警惕,务必限制其访问源IP范围。

端口类别

端口号/协议

服务名称

核心风险

远程管理

22/TCP, 3389/TCP

SSH, RDP

暴力破解,获取服务器完全控制权

数据库

3306/TCP, 6379/TCP, 1433/TCP

MySQL, Redis, SQL Server

未授权访问,数据泄露,远程代码执行(RCE)

文件共享

445/TCP, 139/TCP

SMB, NetBIOS

蠕虫病毒传播(如永恒之蓝),文件窃取

Web应用管理

7001/TCP, 8080/TCP

WebLogic, Tomcat

后台弱口令,反序列化漏洞,导致RCE

安全地远程连接ECS实例

业务场景: 以命令行或图形界面的方式远程登录并管理LinuxWindows ECS实例。

直接暴露SSH(22)或RDP(3389)端口到公网容易让主机受到攻击。阿里云提供了多种安全、便捷的运维工具,完全无需暴露这些高危端口。

为了更好地选择,下表对比了三种主要方案:

方案

适用场景

Workbench终端连接

快速、临时的日常管理,适合新手

会话管理

开发者、运维人员的日常使用,零端口暴露

堡垒机

企业级、有严格合规和审计需求

方案一(便捷易用):使用Workbench远程连接

通过Workbench连接实例是推荐的日常管理方式。它允许直接在浏览器中打开一个安全的ShellRDP会话来管理实例。

方案二(灵活强大):使用会话管理

在控制台通过会话管理连接实例是一种更为灵活且零端口暴露的管理方式。

方案三(企业级合规):使用堡垒机

对于有严格安全合规要求的企业,例如需要满足等保2.0中的“4A”审计要求(认证、授权、账号、审计),应使用堡垒机(Bastionhost)

核心价值:提供了集中的账号管理、权限控制、操作审计和会话录像等功能,是实现企业级安全运维治理的标准解决方案。

ECS实例安全地访问互联网(出站流量)

业务场景: ECS实例上运行的程序需要访问公网以下载软件包、更新系统、或调用第三方API服务。

推荐方案:使用NAT网关

image
  • 工作原理:

    • VPC内的多台ECS实例不绑定任何公网IP。

    • 所有出站流量通过VPC路由指向NAT网关。

    • NAT网关将源私网IP地址转换为其自身的公网IP地址,然后将请求发往互联网。

  • 核心优势:

    • 隐藏后端实例: 互联网只能看到NAT网关的公网IP,无法发现或直接访问后端的ECS实例,极大地降低了被攻击的风险。

    • 集中管理: 统一管理VPC的出站流量出口,简化网络配置。

    • 节约公网IP: 多台ECS可共享一个或多个公网IP访问互联网。

操作指南: 详细配置步骤请参考官方文档:使用公网NAT网关SNAT功能访问互联网

安全加固:配置出方向安全组规则

即使实例只能单向访问互联网,也存在安全风险。如果实例不幸被植入木马,恶意程序会主动连接外部的命令和控制服务器(C&C)服务器。通过配置安全组出方向规则,可以有效阻断此类恶意连接。

配置步骤:

  1. 设置默认拒绝策略: 在安全组出方向规则中,添加一条优先级最低(数值最大,如100)的规则,策略为“拒绝”,目标为0.0.0.0/0,所有端口。

  2. 放行必要的云服务: 添加高优先级的允许规则,放行ECS正常运行所需的基础云服务地址。例如:

    • 云安全中心 Agent: 100.100.0.0/16, 106.11.0.0/16 等,端口 80/443。

    • 云助手 Agent: 100.100.100.200:80 及各地域的云助手服务域名。

    • 阿里云镜像源/OSS/SLS: 根据所在地域,解析相应服务的域名并添加其IP地址。

  3. 放行业务所需的目标地址: 如果业务需要访问特定域名(如github.com),请先在该ECS上通过dignslookup命令解析出其IP地址,然后将这些IP地址添加到出方向的允许规则中。

安全地向公网提供服务(入站流量)

业务场景:ECS实例上部署了网站、App后端或API接口,需要为互联网用户提供稳定、可靠的服务。

推荐方案:使用负载均衡(SLB)

直接在ECS上绑定公网IP来提供服务,会将真实服务器暴露在公网,且不具备高可用性。生产环境的最佳实践是使用负载均衡(SLB)产品,如应用型负载均衡(ALB)或网络型负载均衡(NLB)。

  • 工作原理:

    1. 用户的请求首先到达负载均衡的公网服务地址。

    2. 负载均衡根据配置的转发规则和健康检查结果,将请求分发给后端一组健康的ECS实例进行处理。

    3. ECS实例不直接对公网暴露,只与负载均衡进行内网通信。

  • 核心优势:

    • 隐藏后端服务器: 用户的访问终点是负载均衡,无法得知后端ECS的真实IP,有效保护后端服务器。

    • 高可用性: 自动剔除不健康的ECS实例,实现故障转移,保障业务连续性。

    • 负载分发: 将流量分发到多台ECS,轻松实现水平扩展,应对高并发场景。

    • 安全防护集成: 可与WAF(Web应用防火墙)等安全产品联动,提供应用层防护。

操作指南: 详细配置步骤,请参见快速实现IPv4服务的负载均衡

安全组联动配置

为达到最佳安全效果,后端ECS实例的安全组应进行如下配置:

  • 入方向规则中,只允许来自负载均衡服务IP地址段的流量访问业务端口(如80/443)。

  • 拒绝所有其他来源IP访问该业务端口。

使用云助手远程端口转发实现本地访问云上服务

如果您的ECS实例规模较小,仅用于个人内网使用或临时试用(不对外提供互联网服务),对网络通信质量要求不高,且希望避免公网带宽费用,推荐使用云助手的端口转发功能。该方案适用于尚未建立完善安全防御体系、但需要小范围测试或远程调用服务的场景。

image

应用示例:通过本地访问ECS上的PostgreSQL服务

假设您已在ECS实例上部署了 PostgreSQL 服务,并监听在默认的 5432 端口。此时,您无需为ECS绑定公网IP,也无需在安全组中开放5432端口给任何外部IP,即可实现本地安全访问。

通过通过会话管理CLI的端口转发访问无公网实例,可将ECS实例的远程端口(如 5432)映射到本地计算机的某个端口(如 8080)。当您访问本地 127.0.0.1:8080 时,流量会经由云助手服务与ECS上的云助手Agent建立加密通道,实现安全的端到端转发。

  1. 在本地计算机中执行以下命令,将目标ECS实例的 5432 端口映射到本地 8080 端口。

    ali-instance-cli.exe portforward -i <instance_id> -r <target_port> -l <local_port>

    instance_id:实例ID。

    target_port:目标实例的端口。

    local_port:本地端口。

  2. 如下图,在同一台本地机上启动pgAdmin连接 127.0.0.1:8080。此时,所有请求将通过云助手安全通道转发至ECS实例的5432端口,实现对数据库的安全远程访问。

    image.png

合规能力

检查

查询绑定公网IPECS实例

  1. 前往云安全中心控制台

  2. 在左侧菜单栏选择风险治理 > 云安全态势管理,选择云产品配置风险页签,查找名为使用SSH密钥对登录的检查项,单击操作列的扫描按钮。

    image

    若状态显示为未通过,表示存在未使用密钥认证登录的Linux实例,可单击详情进行查看。

检查有敏感端口暴露的问题安全组

  1. 前往ECS使用成熟度评估与洞察

  2. 选择安全性能力页签,单击检查项安全组的特定端口无限制访问,可以查看敏感端口无限制访问的实例。

    image.png

拦截

禁止为ECS实例绑定公网IP

  • 针对企业用户:

    1. 使用阿里云主账号登录资源目录控制台,单击左侧菜单栏的管控策略创建自定义权限策略,粘贴以下JSON内容。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Deny",   #拒绝
                  "Action": [
                      "ecs:RunInstances",  #创建实例
                      "ecs:CreateInstance",  #创建实例
                      "ecs:ModifyInstanceSpec",  #修改实例
                      "ecs:ModifyInstanceNetworkSpec"   #修改网卡
                  ],
                  "Resource": "*",    #对于所有资源
                  "Condition": {
                      "Bool": {
                          "ecs:AssociatePublicIpAddress": [   #绑定公网IP
                              "true"
                          ]
                      }
                  }
              },
              {
                  "Effect": "Deny",   #拒绝
                  "Action": [
                      "vpc:AllocateEipAddress",    #申请EIP
                      "vpc:AllocateEipAddressPro",   #申请EIP
                      "vpc:AllocateEipSegmentAddress",   #申请连续EIP
                      "eipanycast:AllocateAnycastEipAddress"   #申请Anycast EIP
                  ],
                  "Resource": "*"   #对于所有资源
              }
          ]
      }
    2. 在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。

  • 针对非企业用户:

    1. 使用阿里云主账号登录RAM控制台,单击左侧菜单栏的权限策略,创建一条与上述内容相同的自定义策略。

    2. 通过管理权限策略授权将该条权限策略授权给RAM用户、RAM用户组或RAM角色。

限制敏感端口被任意地址访问

  • 针对企业用户:

    1. 使用阿里云主账号登录资源目录控制台,单击左侧菜单栏的管控策略创建自定义权限策略,粘贴以下JSON内容。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Deny",   #拒绝
                  "Action": [
                      "ecs:AuthorizeSecurityGroup",    #增加安全组入方向规则
                      "ecs:ConfigureSecurityGroupPermissions",   #添加或修改安全组规则
                      "ecs:ModifySecurityGroupRule"   #修改安全组规则
                  ],
                  "Resource": "acs:ecs:*:*:securitygroup/*",   #对于全部安全组
                  "Condition": {
                      "StringEquals": {
                          "ecs:SecurityGroupSourceCidrIps": [   #访问来源IP
                              "0.0.0.0/0",
                              "::/0"
                          ]
                      },
                      "ForAllValue:StringEquals": {  
                          "ecs:SecurityGroupPort" : [    #包含以下目的端口号
                              "22",  
                              "3389",
                              "445"
                          ]
                      }
                  }
              }
          ]
      }
    2. 在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。

  • 针对非企业用户:

    1. 使用阿里云主账号登录RAM控制台,单击左侧菜单栏的权限策略,创建一条与上述内容相同的自定义策略。

    2. 通过管理权限策略授权将该条权限策略授权给RAM用户、RAM用户组或RAM角色。

修复:为ECS实例解绑公网IP