
你买了一台云服务器,默认安全组规则是“允许所有IP访问所有端口”。你知道这不对,但懒得改。或者你改了,但开了一大堆端口,自己都记不清哪些开着。
安全组是云服务器的第一道防火墙。它配错了,后面的安全配置(SSH密钥、fail2ban、防火墙)都白搭,因为攻击者根本进不到那一步。今天聊安全组怎么配,哪些端口该开,哪些不该开。
先看一个数据
某云厂商统计,超过60%的被入侵服务器,安全组规则存在明显问题。最常见的是:22端口对全网开放、3306端口对全网开放、Redis端口对全网开放且无密码。
这不是黑客技术多高,是你把门开着了。
安全组是什么?
安全组是云厂商提供的虚拟防火墙,在云基础设施层面控制进出服务器的流量。它工作在操作系统之前,你的iptables、firewalld还没见到包,安全组就决定放行或拒绝。
安全组规则有两个关键参数:
- 协议端口:比如TCP 22、UDP 53
- 来源IP:允许哪些IP访问(单个IP、IP段、安全组)
和操作系统防火墙的区别:安全组在云网络边缘,流量进不来就不消耗服务器资源。你把22端口对全网开放,攻击者能对你发起暴力破解,消耗你的CPU和带宽。
安全组拒绝,攻击者的包压根到不了你服务器。
最小开放原则
安全组配置的核心原则:只开必需的端口,只给必需的IP。
什么端口必需:
- 80(HTTP):网站访问
- 443(HTTPS):加密网站访问
- 22(SSH):远程管理
其他端口一律不开,除非你知道为什么开。
什么IP必需:
- 22端口只对你自己的IP开放,或对你公司的出口IP开放
- 80/443对全网开放(0.0.0.0/0)
常见端口清单
| 端口 | 服务 | 是否必需 | 建议来源IP |
|---|---|---|---|
| 22 | SSH | 是 | 你的IP 或 VPN IP段 |
| 80 | HTTP | 是(有网站时) | 0.0.0.0/0 |
| 443 | HTTPS | 是(有网站时) | 0.0.0.0/0 |
| 3306 | MySQL | 否 | 只允许内网IP或应用服务器IP |
| 6379 | Redis | 否 | 只允许内网IP |
| 27017 | MongoDB | 否 | 只允许内网IP |
| 21 | FTP | 否 | 你的IP,且建议用SFTP替代 |
| 25 | SMTP | 视情况 | 你的IP或特定服务商 |
| 3389 | Windows RDP | 视情况 | 你的IP |
规则:数据库、缓存、消息队列这类服务,永远不要对全网开放。它们设计时假设在内网运行,没考虑公网攻击。
各云厂商安全组配置位置
阿里云:控制台 → 云服务器ECS → 安全组 → 配置规则
腾讯云:控制台 → 云服务器 → 安全组 → 编辑规则
华为云:控制台 → 弹性云服务器 → 安全组 → 配置规则
AWS:控制台 → EC2 → 安全组 → 入站规则
界面略有不同,核心操作一样:添加入方向规则、授权策略(允许/拒绝)、协议端口、来源。
推荐的安全组配置
以下配置假设标准Web服务器:
入方向规则
| 优先级 | 协议端口 | 来源IP | 说明 |
|---|---|---|---|
| 1 | TCP:22 | 你的办公IP/公司出口IP | SSH管理,只对你开放 |
| 2 | TCP:80 | 0.0.0.0/0 | HTTP,全网开放 |
| 3 | TCP:443 | 0.0.0.0/0 | HTTPS,全网开放 |
| 4 | 全部拒绝 | 0.0.0.0/0 | 默认拒绝其他所有流量 |
出方向规则
一般保持默认:允许所有出站流量。服务器需要主动访问外网(更新软件、调用API)。如果你有特殊安全要求,可以限制出站,但99%场景不需要。
特殊场景配置
只允许特定IP访问80/443
公司内部系统(后台管理系统、监控面板),不希望被公网访问。来源IP设成办公网络出口IP,或配置VPN。
数据库服务器
数据库服务器不应该有公网IP。如果必须有,安全组只允许应用服务器的内网IP访问3306,且设置非常严格的来源IP。
跳板机架构
只允许从跳板机IP访问22端口。登录服务器时先连跳板机,再跳转到目标服务器,这是企业标配方案。
安全组 vs iptables
两个都要配吗?安全组是云网络层面的墙,iptables是操作系统层面的墙。安全组拒绝,包进不来。安全组放行,iptables还能再过滤。推荐:安全组做粗粒度控制(什么IP能进来),iptables做细粒度控制(什么端口、什么行为)。
常见配置错误
错误一:22端口对全网开放
你的SSH端口暴露给全世界。攻击者可以暴力破解。修改建议:来源IP改成你的IP。如果是动态IP,用安全组的IP地址簿功能定期更新。或配置VPN。
错误二:3306端口对全网开放
MySQL暴露在公网,任何人都能尝试连接。暴力破解数据库密码、利用漏洞。修改建议:删除该规则。如果需要远程管理数据库,用SSH隧道或VPN。
错误三:Ping协议对全网开放
虽然不直接危险,但ICMP协议可能被用于探测网络结构。不加限制时攻击者可批量扫描存活主机。修改建议:允许Ping方便你自己测试,但对来源加限制或评估业务是否需要。大部分情况可关闭。
错误四:规则过于宽松
来源IP写成0.0.0.0/0但端口范围写成1-65535。这是把服务器全权交给公网。修改建议:逐个端口添加,不用范围。
错误五:出方向完全不限制
如果服务器被入侵,出方向不限制,攻击者可以往外传数据。生产环境可以限制出方向,只允许必要的端口(HTTP/HTTPS、NTP、DNS)。
真实案例
一家创业公司,数据库服务器安全组规则配错了,3306端口对全网开放。攻击者扫描到开放端口,用弱密码字典爆破出root密码,拖走了整个用户表。用户数据泄露,公司被罚款,声誉受损。
事后复盘:如果安全组只允许应用服务器的内网IP访问3306,攻击者根本连不上数据库。
最后一句
安全组是云服务器的第一道门。你把门开大了,后面的锁再好也没用。
去检查一下你的安全组规则:22端口对谁开放?3306呢?Redis呢?不该开给全网的,马上关掉。SSH只留你的IP。数据库端口删掉。
配安全组不花时间。不配,可能花很多时间。




