亚马逊云实名 AWS EC2安全组规则配置
安全组:EC2的"门卫"先生
什么是安全组?别搞错它和防火墙的区别
AWS EC2的安全组就像给服务器配了个私人保镖,不是那种在大街上巡逻的保安,而是寸步不离的贴身保镖。每个实例都可以绑多个安全组,但和传统防火墙不同——防火墙是整片区域的"小区大门",而安全组是"每家每户的防盗门"。举个栗子:你有台Web服务器和数据库,Web服务器的安全组允许HTTP/HTTPS,数据库的安全组只允许Web服务器的IP访问。这样即使攻击者攻破了Web层,也摸不到数据库,层层防护才叫安全。
默认规则:关紧大门,才敢开门
新手最容易犯的错误就是以为"默认允许所有流量"。错!安全组的默认规则是:所有入站流量拒绝,所有出站流量允许。这就像你家大门,平时关得死死的,外人进不来,但你想出去散步随时可以。所以如果你配置了SSH规则却还是连不上,先检查安全组是否绑定了实例,再看是否漏了入站规则——毕竟默认是关着门的,不主动开锁,钥匙再好也进不去。
配置安全组的正确姿势
规则优先级?其实没优先级,但有顺序!
很多人以为安全组规则有优先级,比如"允许的规则优先于拒绝的"。其实安全组是按规则顺序从上到下匹配的,匹配到就停止,后面规则统统无效。想象一下你在小区门口排队:保安先看你的通行证,如果第一道规则是"192.168.1.0/24允许",那其他IP直接被挡;如果第一道是"拒绝所有",那后面允许的规则就形同虚设。所以配置时一定要把精确的规则放在前面,宽泛的放在后面,别让"放行所有"的规则压在顶上,否则整栋楼都得关门大吉。
端口开放的"黄金法则"
记住:能不开放的端口绝不开放。比如SSH(22端口)只允许公司IP,Web服务(80/443)开放给全网但别开其他端口。别为了省事把22端口放开给0.0.0.0/0,否则你的服务器分分钟被扫描到,变成僵尸网络的"打工人"。曾经有个同事为了方便远程,把22全开,结果服务器被挖矿病毒占领,月底账单高达$800,他一边骂骂咧咧一边删规则,从此对安全组敬畏三分。
典型错误:谁把大门敞开了?
最常见的"敞门"错误有三个:一是把SSH端口22开给全网,二是数据库3306直接暴露公网,三是数据库账号密码明文存储。尤其是第三种,开了端口还用admin/admin,简直是在门口贴个"欢迎光临"的牌子。去年有家公司数据库被拖库,原因就是安全组允许0.0.0.0/3306,且密码弱得像"123456"。黑客不费吹灰之力就拿到了客户数据,公司股价暴跌,CEO在董事会上哭晕。所以记住:安全组+强密码+最小权限,三管齐下才保险。
实战案例:从0到1配置安全组
场景1:Web服务器,只开放80/443
假设你用EC2部署了个WordPress网站,安全组配置如下:入站规则允许TCP 80(HTTP)和443(HTTPS),来源0.0.0.0/0;出站规则默认允许。这样全世界的用户都能访问你的网站,但其他端口(比如22、3306)全部被封锁。注意:出站规则默认允许,所以网站能正常返回数据,但如果出站限制了,比如只允许80/443出站,那你的服务器可能连不上更新源,导致软件无法升级。所以出站一般保持默认,除非有特殊需求。
场景2:SSH远程登录,限制来源IP
如果你需要远程管理服务器,千万别把22端口全开放。正确的做法是只允许你的公司IP或动态IP段。比如公司IP是123.123.123.0/24,安全组入站规则:协议TCP,端口22,来源123.123.123.0/24。如果出差,可以用AWS Systems Manager的Session Manager,免SSH直接在控制台操作,彻底规避暴露端口的风险。记住:多花1分钟配置IP白名单,少花100小时修复被黑的服务器。
场景3:数据库只对应用服务器开放
数据库安全组的配置要极度谨慎。假设应用服务器的安全组ID是sg-123456,数据库的安全组入站规则:协议MySQL(3306),来源sg-123456。这样只有应用服务器能访问数据库,其他任何IP都无效。即使攻击者攻破了应用服务器,也无法直接连数据库——因为数据库只认"自家兄弟"的安全组ID。这种方式比用IP更灵活,因为应用服务器IP可能变动,但安全组ID不变,省去了反复改规则的麻烦。
安全组的"隐藏技能":动态规则和标签管理
标签管理:给安全组起个好名字
别用"sg-123456"这种编号当名字,而是打上Tag: Name=Web-Server-SG。这样在控制台一眼就能找到,比在一堆编号里摸黑找钥匙强多了。而且可以用标签筛选,比如快速找出所有带"Prod"标签的安全组,批量检查风险。另外,安全组之间可以用"引用安全组"代替IP,比如数据库只允许"Web-SG"访问,这样即使Web服务器IP变了,规则也无需调整,省心省力。
安全组引用:让规则"自己动"
亚马逊云实名 想象一下,你有多个应用服务器,每个都需要访问数据库。如果每个服务器都单独配IP白名单,IP一变就得全改,头大。但如果数据库的安全组设置为"允许来自应用服务器安全组的流量",那么只要应用服务器属于同一个安全组,不管IP怎么变,都能自动访问。这种方式比IP更可靠,也更安全——毕竟安全组ID是AWS唯一标识,比IP更稳定。
常见问题解答:你可能踩过的坑
问题1:规则配了但连不上?
先检查三点:1. 安全组是否绑定到实例?2. 规则顺序是否正确?3. 源IP是否写错?比如把192.168.1.1写成192.168.0.1,或者CIDR写成/32却实际是/24。另外,出站规则可能被限制——比如你配置了入站允许SSH,但出站拒绝了所有,导致连接无法返回。记住:入站和出站是双向的,缺一不可。
问题2:为什么能SSH但访问不了Web?
可能是Web端口没开,或者出站规则限制了80/443。检查安全组入站是否允许80/443,出站是否允许80/443出站(通常默认允许)。如果用Nginx/Apache,还要确认服务是否运行,防火墙是否冲突(比如Linux的ufw)。有时候问题不在AWS,而在服务器本地的防火墙,所以要层层排查。
终极建议:安全组不是万能的,但不配置会死
安全组只是安全的第一道防线,不是全部。它不能防止DDoS攻击,不能替代IAM权限,更不能加密数据。但如果你连安全组都不配,那你的服务器就像没锁门的房子,小偷随便进。建议:1. 最小权限原则,只开必要端口;2. 定期审计安全组规则,删除冗余配置;3. 结合CloudTrail日志,监控安全组变更;4. 用AWS Trusted Advisor检查安全风险。记住:安全无小事,今天多花10分钟配置,明天就能少掉100个头发。你的服务器,值得更好的保护。

