很多团队把云服务器跑起来、域名解析好之后,才想起看安全组,有的干脆沿用默认设置。阿里云 ECS 的安全组可以理解为实例外面的一层虚拟防火墙,管的是哪些流量能进实例,哪些能从实例发出去。配得好,大部分扫描和误访问在门口就被拦下;配得随意,服务器在公网上几乎等于裸奔。

这篇文章拿一个小型业务做例子,讲清楚阿里云设置安全组时的基本思路、具体操作,以及上线前后要留意的地方,适合正在搭环境的开发者照着做。
先搞清楚安全组的几个概念
安全组是有状态的。入方向放行了某个连接,对应的返回流量会自动放行,出方向不用再单独加一条。刚接触的人经常忽略这一点,排查网络问题时容易往错误的方向绕。
一条规则由几部分组成:方向、协议类型(TCP、UDP、ICMP 等)、端口范围、授权对象和优先级。授权对象可以是单个 IP 或 IP 段,也可以是另一个安全组,还可以是地址前缀列表。优先级数值越小越先匹配,优先级相同时按规则顺序判定。
还有一点要分清:安全组和网络 ACL 是两层不同的控制,安全组作用于实例网卡,网络 ACL 作用于子网。多数业务只用安全组就够了,先把它配明白。
场景:一个 Web 应用加数据库的小环境
假设一个做电商的小团队在阿里云华东地域部署了三台实例:负载均衡后面的 Web 服务器、一台后台管理服务器,以及一台 MySQL 数据库。团队成员分布在不同城市,办公网出口 IP 是固定的,客户通过公网访问前台页面。
按最小权限的思路,这套环境的访问需求大致是:
- 前台用户通过 80 和 443 端口访问 Web 服务器
- 运维只能从办公出口 IP 通过 22 端口登录服务器
- 后台管理服务只让 Web 服务器访问,不对公网开放
- 数据库 3306 端口只接受应用服务器的连接
四条需求对应四组规则,逐个配就行。
操作步骤:按角色分别建安全组
第一步:为不同角色建独立安全组
进入 ECS 控制台,在左侧“网络与安全”下找到“安全组”,点击“创建安全组”。名字按角色来起,比如 sg-web、sg-admin、sg-db,半年后回头查规则时,一眼就能看出它管的是谁。创建时选的 VPC 要和实例一致,否则绑定不上。
第二步:Web 安全组的入方向规则
在 sg-web 里添加入方向规则,授权对象填 0.0.0.0/0,协议选 TCP,端口分别填 80/80 和 443/443。前台用户就能正常访问网站,其他端口默认全部拒绝。
如果负载均衡要做健康检查,把健康检查的来源地址段加进授权对象即可,没必要为了它直接放开全网。
第三步:收窄 SSH 的登录来源
22 端口是被扫描最勤的端口之一。运维在 sg-admin 里新增一条入方向规则,端口填 22/22,授权对象填办公网出口 IP,例如 203.0.113.10/32。如果办公室有多个出口,可以逐条添加,或者用地址前缀列表统一维护,免得规则散落在好几个安全组里。
有团队图省事把 22 端口设成 0.0.0.0/0,没过几天服务器上就堆满了暴力破解的登录日志。改成固定 IP 之后,异常尝试基本消失。限定来源这件事,比出了事再补划算得多。
第四步:数据库只认应用服务器
分层设计里这一步最关键。在 sg-db 的入方向规则中,3306 端口的授权对象不填 IP,改选安全组类型,指向 sg-web。这样不管 Web 服务器的内网 IP 怎么变,只要实例在 sg-web 里,就能连上数据库;不在的实例,即便知道内网 IP,也连不进去。
好处是扩容时只需把新的应用节点加入 sg-web,数据库侧的规则不用动。
第五步:收紧出方向
阿里云默认的出方向规则通常是全部放行。数据库服务器可以按实际需要收紧,比如只允许访问内网的 NTP 时间服务和安全更新源。出方向收紧后,即使服务器被植入木马,向外回连的路径也会少很多。但动手前要先把依赖理清楚,否则系统更新和监控上报会先出问题。
验证与排查
配完别只看控制台显示正常就收工,逐条验证更可靠。从办公网执行 ssh 登录,从其他网络确认 22 端口不通;用公网访问 80 和 443,确认业务正常;在 Web 服务器上执行数据库连接命令,确认 3306 可达;再从其他实例连数据库,确认会被拒绝。
遇到连接超时,可以按下面几步查:
- 确认实例确实绑定了目标安全组。一台实例可以绑多个安全组,规则会叠加,有时“明明加了规则还是不通”,就是绑错了组。
- 检查规则的方向、协议和端口。出方向和入方向写反是常见错误。
- 查看系统本地防火墙,比如 firewalld 或 iptables 有没有在拦流量。
- 确认服务监听的地址是否正确。有些服务默认只监听 127.0.0.1,外部怎么连都不通。
长期维护的几点建议
安全组不是配一次就结束的东西,要当成需要持续维护的资产来看。定期审计规则,删掉不再使用的端口和授权对象,人员离职、办公网出口变更之后尤其要查一遍。0.0.0.0/0 这类全网授权,应该写清楚业务理由并记录下来,没有理由的就收回。
阿里云的云安全中心可以查看安全组风险提示,会标出开放了高危端口的实例。把它放进日常巡检,比出了事再回头处理省心。
阿里云设置安全组本身并不复杂,难的是守住最小权限,让每一条放行规则都能对应到具体的业务需求。按角色分组,用安全组引用代替 IP 硬编码,把运维入口限死,这三件事做到位,常见的云上网络风险大部分能挡住。