一次安全组配错引发的安全事件复盘
【摘要】 事件概述某次线上环境例行检查时,监控告警显示一台 ECS 的 22 端口在 10 分钟内收到了 2,300+ 次来自境外 IP 的登录尝试。幸运的是,SSH 使用了密钥认证,攻击者未能登录成功。但这件事暴露了一个严重问题:安全组规则配错了,22 端口对公网完全敞开。 根因分析出问题的安全组规则是这样的:方向:入方向 (ingress)协议:TCP端口:22源地址:0.0.0.0/0 ←...
事件概述
某次线上环境例行检查时,监控告警显示一台 ECS 的 22 端口在 10 分钟内收到了 2,300+ 次来自境外 IP 的登录尝试。幸运的是,SSH 使用了密钥认证,攻击者未能登录成功。但这件事暴露了一个严重问题:安全组规则配错了,22 端口对公网完全敞开。
根因分析
出问题的安全组规则是这样的:
方向:入方向 (ingress)
协议:TCP
端口:22
源地址:0.0.0.0/0 ← 问题在这
策略:允许
0.0.0.0/0 意味着允许任意 IP 访问。这条规则最初是为了"方便远程调试"临时加上的,后来忘了收紧,就一直挂在线上。
为什么会犯这个错?
- 图省事:开发阶段不想逐个加白名单 IP,直接放通所有。
- 没有回收机制:临时规则加完没有工单跟踪,没人记得删。
- 对安全组的认知偏差:把安全组当防火墙策略随便加规则,没有遵循最小权限原则。
影响评估
| 维度 | 实际影响 |
|---|---|
| 数据泄露 | 未发生(SSH 密钥认证挡住) |
| 暴力破解 | 2,300+ 次尝试,持续约 10 分钟 |
| 资源消耗 | CPU 短时波动,未影响业务 |
| 合规风险 | 安全审计不通过,需整改报告 |
| 信任损失 | 客户得知后要求安全说明 |
如果当时用的是密码认证而非密钥认证,后果不堪设想。
整改措施
1. 立即收紧安全组规则
将 0.0.0.0/0 替换为运维团队的固定出口 IP:
方向:入方向
协议:TCP
端口:22
源地址:203.0.113.10/32 ← 仅允许运维出口 IP
策略:允许
2. 用 Terraform 管理安全组,杜绝手动改
resource "huaweicloud_networking_secgroup" "ops_sg" {
name = "ops-ssh-restricted"
description = "仅允许运维出口 IP 访问 SSH"
}
resource "huaweicloud_networking_secgroup_rule" "ssh_rule" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "203.0.113.10/32" # 绝不写 0.0.0.0/0
security_group_id = huaweicloud_networking_secgroup.ops_sg.id
}
用 IaC 管理的好处:所有规则有版本记录,谁改的、改了什么、什么时候改的,一查便知。
3. 建立安全组巡检机制
定期用脚本扫描所有安全组,发现 0.0.0.0/0 规则立即告警:
# 简易巡检:列出所有放通 0.0.0.0/0 的安全组规则
hcloud ECS ListSecurityGroups --query 'SecurityGroups[].SecurityGroupRules[?remote_ip_prefix==`0.0.0.0/0`]' --output table
4. 更优方案:跳板机 + 私有子网
根本解法是不让 ECS 直接暴露 SSH:
- ECS 放在私有子网,不绑 EIP
- 通过**跳板机(Bastion)**统一接入,跳板机安全组仅允许指定 IP
- 或使用华为云 DataSec / 云堡垒机(CBH) 统一管控运维入口
经验总结
| 教训 | 行动项 |
|---|---|
0.0.0.0/0 是安全组最大的坑 |
永远不要对管理端口(22/3389/3306)放通全部 |
| 临时规则容易忘记回收 | 所有临时变更走 Terraform + 代码评审 |
| 手动改配置不可追溯 | 安全组必须 IaC 管理,禁止控制台直接改 |
| 密码认证是最后一道防线薄弱点 | 管理端口一律用密钥/证书认证 |
| 单台暴露风险可控,批量暴露是灾难 | 巡检脚本定期扫描,发现即告警 |
一句话总结
安全组不是防火墙策略,它是你云上资产的最后一道门。每一扇门都应该知道该让谁进——
0.0.0.0/0等于把门卸了。
本文为原创技术心得,基于真实事件复盘整理。如果你也遇到过类似的安全组配置问题,欢迎交流。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)