很多团队第一次在阿里云上部署服务器,习惯把端口全部放开,图的是省事。测试环境能跑通,上线后却可能被扫描器盯上,数据库端口暴露在公网,排查起来非常被动。安全组是 ECS 实例最靠近业务的一道网络防线,创建之前先想清楚它要保护什么,比事后补救省力得多。

安全组是一组有状态的访问控制规则,作用在实例的网卡层面。它管两个方向:哪些流量能进入实例(入方向),哪些流量能从实例发出去(出方向)。入方向是日常最需要动手的地方,后面的配置思路基本都围绕它展开。
创建安全组的操作步骤
登录阿里云控制台,进入 ECS 管理页面,在左侧导航栏依次选择“网络与安全”,再进入“安全组”,点击“创建安全组”。页面上主要需要填写以下内容:
- 名称与描述:建议带上业务和环境信息,例如 sg-order-prod。名字写清楚,过几个月再看也知道它管哪套服务。
- 网络类型:目前推荐选择专有网络 VPC,并指定所属的 VPC,与实例所在网络保持一致。选错 VPC,后面绑定实例时就会对不上。
- 安全组类型:普通安全组适合常规业务,企业安全组支持更细粒度的管理,按实际需要选。
创建完成后,安全组只有基础规则。入方向通常只允许同一安全组内的实例互相访问,出方向默认放行。也就是说,外部用户要访问的网站端口、运维要登录的管理端口,都得自己手动加授权规则。没加的端口,外面一律进不来,这是很多人第一次配置时最容易困惑的地方。
规则设计的基本思路
每条规则主要包含授权策略、优先级、协议类型、端口范围和授权对象。前几项相对直观,授权对象最容易出问题,因为写成 0.0.0.0/0 的时候,等于对整个互联网开放。
以一个典型的 Web 应用为例,假设服务器只对外提供 HTTP 和 HTTPS 服务,管理员还需要通过 SSH 登录维护。规则可以这样拆:
- TCP 80 和 443 对 0.0.0.0/0 开放,供用户访问网站。
- TCP 22 只对运维人员的办公出口 IP 开放,例如 203.0.113.10/32。出口 IP 变动时记得同步更新规则,否则运维自己也登不上去。
- MySQL 3306 不对公网开放,只允许应用服务器所在的内网地址段访问。数据库本身不需要被外网直接连接,应用通过内网访问即可。
这样设计的好处很直接。陌生地址连 SSH 的端口都碰不到,即使账号密码被泄露,攻击者也很难从外部直接登录。数据库即使设置了弱口令,也只在内网可达,攻击面明显缩小。反过来想,多放开一个端口,就多一条被扫描到的路径,这个代价没有必要。
规则写完后,最好从外部网络实际测试一次。80 和 443 应该能通,3306 和 22 应该不通,或者只有办公网能通。别只看控制台上的列表,连通性才是最终结果。
一个真实场景的复盘
某电商团队曾把测试环境的安全组设置成全端口对公网开放,理由是方便联调。上线前没有收回这些规则,三周后云监控发现某台实例的 CPU 持续高位运行,排查后发现是被植入了挖矿程序。入侵路径正是通过开放的 Redis 端口进入的。
这件事的根子是临时规则没人收回。联调阶段放开端口本身可以理解,但没有留下收回的动作,临时就变成了长期风险。
事后团队做了三件事。第一,把安全组按环境拆分,生产与测试互不共用,避免测试放开的规则影响生产。第二,规则中禁止 0.0.0.0/0 指向非 80、443 的端口,改动需要经过审查。第三,每次变更通过工单审批,并保留记录,出了问题能快速回溯到是谁、在什么时候改的。
安全组需要随着业务变化持续维护,配完就不管是行不通的。
用命令行批量创建
实例数量较多时,手动点击容易遗漏,也难以复制到其他地域。可以借助阿里云 CLI 完成创建和授权,示例如下,其中的地域、VPC 和安全组 ID 请替换为实际值:
aliyun ecs CreateSecurityGroup –RegionId cn-hangzhou –VpcId vpc-xxxxxxxx –SecurityGroupName sg-web-prod –Description “web prod”
aliyun ecs AuthorizeSecurityGroup –RegionId cn-hangzhou –SecurityGroupId sg-xxxxxxxx –IpProtocol tcp –PortRange 443/443 –SourceCidrIp 0.0.0.0/0 –Policy accept –Priority 1
执行前建议先在测试环境验证参数,确认返回结果符合预期,再应用到生产。把命令保存进脚本,既方便复用,也让每次变更有据可查。
上线前的检查清单
- 确认安全组已关联到目标 ECS 实例。同时检查实例是否挂载了多个安全组,不同组的规则会叠加,容易互相干扰,排查时要一起看。
- 逐条检查入方向规则,确认没有不必要的 0.0.0.0/0 授权,尤其是非 80、443 的端口。
- 管理端口如 SSH、RDP 只开放给固定办公 IP 或堡垒机。
- 定期清理已下线服务的历史规则,测试期间加的临时规则更要记得删。
- 开启操作审计,记录每次安全组变更的人和时间。
安全组创建并不复杂,难的是长期保持规则清晰、最小化。先从小范围开放开始,按需增加,比一开始全部放开再回收要稳妥得多。