亚马逊云代充值 AWS亚马逊云安全组设置
你有没有过这种经历?
辛辛苦苦把网站代码上传到EC2,域名解析也配好了,浏览器一敲地址——‘连接已拒绝’。
你挠头:我明明开了80端口啊!查日志没报错,看实例状态是“运行中”,网络ACL也放行了……最后发现,安全组里只写了‘允许SSH(22端口)’,HTTP(80)和HTTPS(443)压根没加——像给别墅装了指纹锁,却忘了留大门钥匙孔。
这就是AWS安全组(Security Group)最真实的一面:它不声不响,但一出手就让你的服务器变成一座孤岛。
一、别被名字骗了:安全组不是‘组’,是‘规则清单’
先泼一盆冷水:安全组不是虚拟机集群的‘群组管理工具’,也不是类似Windows防火墙那种装在系统里的软件。它本质是一张有状态的、绑定到网卡(ENI)的入站/出站规则表。
关键词划重点:有状态(Stateful)。这意味着——你放行了入站的TCP 80端口,对应的响应流量(比如网页返回的HTML包)会自动放行,无需额外写一条“出站允许80”。这和传统无状态防火墙(比如iptables默认)完全不同,也是新手最容易搞混的逻辑起点。
再强调一遍:安全组是绑在网卡上的,不是绑在实例上。一个EC2可以有多个网卡,每个网卡可挂不同安全组;一个安全组也能同时挂给10台、100台实例——它只管‘谁来、能干啥’,不管‘你是谁家孩子’。
二、四条铁律,背不住就截图贴工位
- 默认全拒:新建安全组时,入站和出站规则都是空的——相当于一扇焊死的铁门。不主动开门,谁都进不来、也出不去(连DNS查询都失败)。
- 最小权限:别信“先全开,调通再说”。AWS账单不会骂你,但黑客会谢你。只开真正需要的端口+源IP段,比如SSH只允许可信办公IP,Web服务只开0.0.0.0/0的80/443(生产环境建议用ALB前置,再限制源为ALB安全组)。
- 规则不继承、不叠加:给实例挂了A、B两个安全组?那它的最终权限 = A规则 ∪ B规则(并集)。但A里禁止22端口,B里允许22端口——结果是允许。安全组之间没有优先级,只有“只要有一条说行,就算行”。
- IP不能写域名:想写“允许github.com拉代码”?不行。安全组只认CIDR(如192.168.1.0/24)或另一个安全组ID。想放行某服务?要么查它公布的IP段(且要定期更新),要么用VPC对等连接+安全组引用——这才是云原生玩法。
三、手把手:从零建一个‘能SSH+跑网站’的安全组
场景:一台Ubuntu EC2,需支持:①你在家用手机/笔记本SSH登录;②全世界能访问其Nginx首页。
Step 1:创建安全组
进入EC2控制台 → 左侧菜单「安全组」→ 「创建安全组」→ 填名称(比如web-server-sg)、描述(“Web+SSH,生产勿用!”)、选VPC。
Step 2:写入站规则(重点!)
| 类型 | 协议 | 端口范围 | 源 | 描述 |
|---|---|---|---|---|
| SSH | TCP | 22 | 你的公网IP/32(强烈建议!) | 仅限本人维护 |
| HTTP | TCP | 80 | 0.0.0.0/0 | 开放网页访问 |
| HTTPS | TCP | 443 | 0.0.0.0/0 | 开放加密访问 |
⚠️ 注意:0.0.0.0/0 是“所有IPv4”,::/0 才是所有IPv6。如果你没开IPv6,这条不用加。
Step 3:出站规则(别偷懒!)
默认是“允许所有出站”,但生产环境建议收紧:至少保留DNS(UDP 53)和HTTP/HTTPS(80/443)用于apt更新、curl拉资源。否则yum install可能卡死在“无法解析archive.ubuntu.com”。
四、那些年我们踩过的坑
- “我开了80端口,但curl localhost:80成功,外网curl失败”→ 八成是安全组没开80,或者开了但源填成了
127.0.0.1/32(只允许本机)。 - “SSH连不上,但ping得通”→ ping走ICMP,SSH走TCP 22,安全组默认不放行ICMP!检查是否漏了SSH规则,或源IP填错了(比如把家庭宽带动态IP记成去年的值)。
- 亚马逊云代充值 “换了个安全组,网站突然打不开”→ 检查新安全组是否覆盖了旧组?EC2只能挂新组,旧规则不会保留。务必确认新组含全部必要端口。
- “公司内网能访问,家里手机打不开”→ 安全组源填了公司内网段(如10.10.0.0/16),忘了加家庭宽带IP。解决方案:用AWS Systems Manager Session Manager替代SSH,彻底绕过端口暴露。
五、终极自查清单(打印出来,贴在显示器边)
- ✅ 实例所在VPC是否与安全组同VPC?(跨VPC不生效)
- ✅ 安全组是否已关联到该实例的主网卡?(有时挂到次要网卡,主网卡裸奔)
- ✅ 入站规则中,源字段是否精确?
0.0.0.0/0是万金油,但192.168.1.100/32才是安全感。 - ✅ 是否混淆了安全组和网络ACL?ACL是子网级、无状态、有编号规则;安全组是实例级、有状态、无序匹配。
- ✅ 实例操作系统防火墙(ufw/iptables)是否也放行了端口?安全组拦不住系统层拦截。
六、一句真·血泪忠告
在AWS里,安全组不是保险丝,而是第一道也是最后一道闸门。你可以在测试环境大胆试错,但一旦上了生产——请记住:
“允许所有IPv4入站”按钮旁边,应该飘着一行红色弹窗:‘点此等于邀请全世界黑产扫你端口’。
最后送你一个硬核技巧:用AWS CLI一键导出当前实例所有安全组规则:aws ec2 describe-security-groups --group-ids sg-xxxxxx --query 'SecurityGroups[0].IpPermissions' --output table
比在控制台一页页翻快十倍,也更防手抖。
云安全,从来不是堆功能,而是做减法。删掉每一条“可能用得上”的规则,世界就清净了。

