Vibe Tutorial
云服务器运维与项目部署

13.7 安全组配置

Tip

你的家门上不仅有一把锁(密码),还有一道防盗门(防火墙)。Security Group (安全组) 就是这道云时代的防盗门。它决定了谁能敲你的门。


1. 为什么要学这个?

你买了个阿里云服务器,装好了 Nginx,但死活打不开网页。 你在服务器里 curl localhost 正常。 换台电脑 ping 也通。

千万别重装系统。99% 的原因是:云厂商默认只开了 22 端口,80 端口被安全组拦截了。


2. 核心概念:Inbound / Outbound

2.1 Inbound (入站)

  • 谁进得来?
  • 默认:全部拒绝 (Deny All)
  • 必须显式添加规则:允许所有人 (0.0.0.0/0) 访问 TCP 80 端口。

2.2 Outbound (出站)

  • 谁出得去?
  • 默认:全部允许 (Allow All)
  • 你的服务器要下载包、调 API,通常不需要限制出站。

3. 解决方案 (HOW)

3.1 通用配置策略 (最小权限原则)

不要开全端口 (All Traffic)。只开需要的。

Port Protocol Source 用途 备注
22 TCP 0.0.0.0/0 (或特定IP) SSH 连接 必须开,建议设为仅限自己 IP
80 TCP 0.0.0.0/0 HTTP 网站访问
443 TCP 0.0.0.0/0 HTTPS 网站访问
3306 TCP 禁用 / 仅限内网 MySQL 千万别开公网

3.2 流量过滤示意图

graph TD
    Hacker["黑客"] --"Port 3306"--> Firewall
    User["正常用户"] --"Port 443"--> Firewall
    
    Firewall{"安全组 (Security Group)"}
    
    Firewall --"Block"--> Drop["丢弃 (黑客无法连接)"]
    Firewall --"Allow"--> Server["你的服务器"]
    
    style Drop fill:#ffcdd2,stroke:#c62828
    style Server fill:#c8e6c9,stroke:#2e7d32

4. 避坑指南

❌ 不要这样做 ✅ 应该这样做 为什么
Allow All 白名单模式 上来就 Allow All TCP,你以为省事了,其实是把服务器裸奔在互联网上。
默认 SSH 端口 改 SSH 端口 SSH 一直用 22。全球的扫描脚本都在扫 22 端口,改成 2222 可以避开 99% 的骚扰。
数据库公网 数据库内网 数据库开公网访问是勒索软件的最爱。数据库只应该被 WebServer 通过内网 IP 访问。

5. 真实案例

Story

2017年,MongoDB 勒索事件

2017年,数万个公网 MongoDB 被清洗,数据被删,只留下一封勒索信:“支付 0.2 比特币恢复数据”。 原因是 MongoDB 默认没有密码,且很多开发者为了方便调试,在安全组里开放了 27017 端口给 0.0.0.0/0。 黑客不需要任何高深技术,只需要一个扫描脚本就能把这些数据库洗劫一空。

Vibe 心法:内网是舒适区,公网是修罗场。安全组的配置应遵循“最小化原则”,只针对必要的服务开启必要的窗口。封锁非必要的数据库端口,是防止黑客勒索、确保业务存续的最廉价保险。


6. 本章小结

  1. 默认拒绝:安全组是默认拒绝的,不开就进不来。
  2. 按需开放:用一个开一个,用完记得关。
  3. 内网优先:能走内网通信的 (App->DB),绝不走公网。