
你买了台云服务器,第一时间把22、80、443端口都开放了,还顺手加了一条“允许所有IP访问所有端口”。网站能跑了,但你不知道的是,你的服务器已经暴露在公网上了。不到24小时,扫描器就会找上门,开始暴力破解你的SSH密码。
安全组是云服务器的第一道防线,它在网络边缘拦截恶意流量,你的防火墙还没看到包,它就已经被挡回去了。安全组配错了,后面所有安全措施(密钥登录、fail2ban、iptables)都形同虚设。
安全组是什么?
安全组是云厂商提供的虚拟防火墙,控制流入和流出服务器的网络流量。它运行在云基础设施层面,你在操作系统里配的iptables是第二道墙。
关键区别:安全组拒绝的流量根本到不了你的服务器,不消耗任何资源。攻击者扫你22端口,如果安全组拦了,你的服务器甚至不知道有人扫过。
最小开放原则
安全组配置只有一个核心原则:只开必需的端口,只给必需的IP。
什么端口必需?
- 22(SSH):远程管理
- 80(HTTP):网站访问
- 443(HTTPS):加密网站访问
什么IP必需?
- 22端口只对你自己的IP开放(或公司出口IP)
- 80/443对全网开放(0.0.0.0/0)
其他端口一律不开,除非你有明确的业务需求。
高危端口:永远不要对全网开放
| 端口 | 服务 | 风险 |
|---|---|---|
| 22 | SSH | 暴力破解,服务器沦陷 |
| 3389 | Windows RDP | 同上 |
| 3306 | MySQL | 数据库暴露,数据泄露 |
| 6379 | Redis | 无密码时可被入侵 |
| 27017 | MongoDB | 默认无密码,易被勒索 |
| 21 | FTP | 明文传输密码 |
这些服务的设计假设是运行在内网。如果你必须远程管理数据库,用SSH隧道,而不是把3306端口直接暴露给公网。
安全组配置实操
场景一:Web服务器
推荐配置:
| 方向 | 协议端口 | 源地址 | 说明 |
|---|---|---|---|
| 入方向 | TCP 22 | 你的IP | SSH管理 |
| 入方向 | TCP 80 | 0.0.0.0/0 | HTTP |
| 入方向 | TCP 443 | 0.0.0.0/0 | HTTPS |
| 入方向 | 全部拒绝 | 0.0.0.0/0 | 默认拒绝 |
| 出方向 | 全部允许 | 0.0.0.0/0 | 服务器访问外网 |
场景二:数据库服务器
数据库服务器不应该有公网IP。如果必须有,安全组只允许应用服务器的内网IP访问3306端口:
| 方向 | 协议端口 | 源地址 | 说明 |
|---|---|---|---|
| 入方向 | TCP 3306 | 192.168.1.0/24 | 仅内网应用服务器 |
| 入方向 | 全部拒绝 | 0.0.0.0/0 | 拒绝所有外网访问 |
出方向规则:被忽视的安全漏洞
大多数人只关心入方向,出方向默认全部允许。这个疏忽可能带来严重问题:服务器被入侵后,恶意程序通过开放的出方向规则与外部C2服务器通信、窃取数据,或利用服务器作为跳板攻击其他目标。
建议:生产环境出方向规则也遵循最小权限原则——只允许业务必需的出站流量(如HTTP/HTTPS访问外部API、NTP时间同步等),其余全部拒绝。
安全组 vs iptables:两层都要配
| 对比 | 安全组 | iptables |
|---|---|---|
| 位置 | 云网络边缘 | 操作系统内部 |
| 生效时机 | 先于iptables | 后于安全组 |
| 控制粒度 | IP+端口 | 更精细(协议、状态、模块) |
| 适用场景 | 粗粒度访问控制 | 细粒度流量管理 |
两者不是替代关系,是互补关系。安全组做第一层拦截,iptables做第二层精细控制。
规则顺序:拒绝优先于允许
如果你先加了一条“允许所有IP访问22端口”,再加一条“拒绝某个IP访问22端口”,拒绝规则需要更高的优先级才能生效。实际操作中,默认拒绝所有流量,然后只开放必要的端口是最安全的做法。
安全组配置常见错误
错误一:开放全部端口(0.0.0.0/0 且 -1或0-65535)
这是最危险的配置。某公司测试服务器这样配了3小时,就被暴力破解植入挖矿程序,公网IP被云平台封禁24小时。
攻击者可以持续暴力破解。即使你用了强密码,日志也会被塞满,CPU被消耗。
错误三:3306/6379端口对全网开放
数据库和缓存服务暴露在公网,数据泄露的风险极高。
服务器被入侵后,恶意程序可通过开放出方向规则外联C2服务器,窃取数据或发起攻击。
一个真实案例
一家初创公司,安全组配置了“允许所有IP访问所有端口”。3小时内遭受SSH暴力破解攻击,服务器被植入挖矿程序,CPU持续100%,公网IP被云平台封禁。
如果安全组只开放了22端口且限制来源IP,攻击者连端口都扫不到,更谈不上入侵。
最后一句
安全组是云服务器的第一道门。你把门开大了,后面的锁再好也没用。
去检查你的安全组规则:22端口对谁开放?3306呢?Redis呢?不该开给全网的,马上关掉。SSH只留你的IP,数据库端口删掉。
安全组配错了,公网IP被封只是时间问题。你的服务器不会提醒你,但扫描器每分钟都在提醒它。




