EC2安全组配置——别让你的服务器在互联网“裸奔”

一、一张截图暴露的“0.0.0.0/0”惨案

我刚入行做云架构师那会儿,为了给客户赶一个Demo演示,随手在安全组里加了一条“所有TCP协议(All TCP) / 源地址0.0.0.0/0”(即允许全世界访问这台机器的所有端口)。演示完我合上电脑去赶末班地铁了。第二天早上,客户火急火燎打电话说网站打不开了。登录服务器一查,系统被植入了门罗币(XMR)挖矿病毒CPU跑满100%,SSH密码被篡改,/var/log下的日志被黑客删得干干净净。

黑客用的就是Shodan(全球最臭名昭著的物联网搜索引擎),专门实时扫描全网开放22端口(SSH)和3389端口(RDP)的IP。你的实例上线不到10分钟,公网IP就已经被收录进了扫描列表,成为全球脚本小子的活靶子。

二、安全组(Security Group)不是防火墙,是“白名单门禁系统”

很多从传统IDC机房转过来的运维,习惯把安全组当物理防火墙配——又是配入站、又是配复杂的出站规则,结果把自己卡得死死的。

记住AWS安全组最重要的特性:有状态(Stateful)
用人话翻译就是:只要你允许了“入站请求”,那么该请求的“出站响应”数据包自动被允许,不需要你配任何出站规则。 你在出站规则里配“全放行(All)”就行了,别自己给自己找麻烦。

黄金原则:最小权限原则(Principle of Least Privilege)。不是问自己“我需要开哪些端口”,而是问自己“我绝对、必须开哪几个端口”。除此之外,一律禁止。

三、2026标准企业级安全组规划表(照抄作业,直接保命)

安全组名称

绑定的实例角色

入站规则(Inbound Rules)——核心配置

出站规则(Outbound)

关键深度解析

SG-WEB

Nginx / 前端React/Vue

TCP 80 (源: 0.0.0.0/0), TCP 443 (源: 0.0.0.0/0)

全放行(All)

公网入口,只开Web端口,坚决不开SSH。

SG-APP

Node.js / Java后端 / PHP-FPM

TCP 9000 / 8080 (源地址填写SG-WEB的安全组ID, 如sg-123abc

全放行

精髓所在:源不填IP,填安全组ID。这样Web层的实例无论IP怎么变,APP层都能连通,这是云原生的动态安全策略。

SG-DB

MySQL / PostgreSQL / Redis

TCP 3306 / 6379 (源地址填写SG-APP的安全组ID

全放行

数据库对公网完全隐身,只接受来自APP层的请求。彻底杜绝公网暴力破解数据库的可能。

SG-BASTION

跳板机/堡垒机

TCP 22 (源地址只限公司固定出口公网IP/32

全放行

唯一开放SSH的入口,且只允许公司办公网IP连接。强烈建议把SSH默认22端口改成60022等高位端口,可躲避99%的自动化扫描。

四、2026年必开的“保命”进阶操作

1. 开启VPC Flow Logs(VPC流日志)
VPC控制台为这个安全组开启流日志,将日志投递到CloudWatch Logs。然后创建一条Metric Filter(指标过滤器),监控被拒绝(REJECT)的连接次数。一旦5分钟内被拒绝的SYN包超过100次,触发CloudWatch Alarm,自动执行Lambda函数,将该攻击IP写入NACL(网络访问控制列表)的黑名单,实现无人值守的自动封禁

2. 使用Reachability Analyzer(可达性分析器)
当你配完安全组发现“哎,怎么连不上”的时候,别瞎改规则。去VPC控制台打开Reachability Analyzer,填上你的电脑公网IP和EC2的私有IP,选择TCP端口22。系统会在几秒内帮你模拟出网络路径,精准告诉你到底是安全组拦了,还是路由表配错了。这个工具免费,是排障神器。

人性化的提醒:配置安全组时,请务必打开控制台的 “模拟流量测试(Reachability Analyzer)” 功能。它像一把尺子,能帮你测量从源IP到目标实例的路径是否通畅,免得你配完一脸懵,到处问“为什么连不上”。

如果需要更深入咨询了解可以联系全球代理上TG:jinniuge  他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。