4、网络规划与安全组:VPC概念、子网划分、安全组规则配置、网络ACL与安全组的区别
聊到云平台的远程运维,网络这块是绕不开的坎。很多新手上来就开虚拟机,配个公网IP就完事了。但说实话,生产环境这么搞,迟早要出大问题。
我刚开始接触云平台时,也踩过不少坑。有一次,我把所有服务器都扔在同一个网段,结果一次误操作导致整个网络广播风暴,所有业务都挂了。从那以后,我深刻理解了网络隔离的重要性。
4.1 VPC概念:你的专属网络空间
VPC,全称是Virtual Private Cloud,翻译过来就是虚拟私有云。说白了,它就是在云平台上给你划出一块独立的、隔离的网络空间。
你可以把它想象成你在云上的一栋独立别墅。这栋别墅有围墙(网络隔离),有门牌号(IP地址段),你可以自由地设计里面的房间布局(子网划分)。
我个人习惯,每个项目或每个环境(开发、测试、生产)都创建独立的VPC。这样做的好处很明显:
- 逻辑隔离:不同VPC之间的网络默认是不通的,这天然防止了误操作影响其他环境。
- 自主可控:你可以自定义IP地址范围、路由表、网关等网络组件。
- 混合云扩展:VPC可以通过VPN或专线,跟你的本地数据中心打通,实现混合云架构。
核心要点:VPC是云上网络的基础单元。没有VPC,你的云服务器就像没有地基的房子,随时可能出问题。
4.2 子网划分:把大房子分成小房间
有了VPC这栋别墅,接下来就要考虑怎么划分房间了。子网(Subnet)就是干这个的。
子网划分的核心是CIDR(无类别域间路由)表示法。比如 10.0.0.0/16 这个网段,/16 表示前16位是网络位,后16位是主机位。这意味着这个网段里最多可以有 2^16 - 2 = 65534 个可用IP地址。
我在项目中遇到过一个问题:有个同事把整个VPC的CIDR设成了 10.0.0.0/24,结果只有254个可用IP。业务一扩容,IP地址就不够用了。所以,我建议你:
- 预留足够大的网段:生产环境至少用
/16或/20的掩码。 - 按功能划分子网:比如把Web服务器放在
10.0.1.0/24,数据库放在10.0.2.0/24,缓存放在10.0.3.0/24。 - 区分公网和私网子网:需要对外提供服务的,放在公网子网(关联路由表指向互联网网关);不需要的,放在私网子网。
小技巧:子网划分时,记得给未来留点余量。比如你现在只需要10台服务器,但最好分配一个 /24 的网段,因为业务增长往往比你想象的要快。
4.3 安全组规则配置:虚拟防火墙
安全组(Security Group)是云平台提供的一个虚拟防火墙。它工作在实例级别,也就是说,你可以为每一台云服务器单独配置安全组规则。
安全组的规则很简单:允许或拒绝某个来源的流量访问某个端口。比如,你只想让公司办公网的IP能SSH登录你的服务器,那就可以这样配:
# 允许公司办公网IP访问22端口
协议: TCP
端口: 22
来源: 203.0.113.0/24
策略: 允许
我记得有一次,一个客户反馈说他们的应用总是超时。排查了半天,发现是安全组规则里只允许了HTTP(80端口),但应用还需要WebSocket(8080端口)。加上之后,问题就解决了。
配置安全组时,有几个原则要记住:
- 最小权限原则:只开放必要的端口,只允许必要的来源IP。
- 状态化特性:安全组是有状态的。如果你允许了入站流量,那么对应的出站响应流量会自动被允许,不需要额外配置。
- 规则优先级:安全组规则是按顺序匹配的,从上到下。一旦匹配到允许规则,就立即放行;如果匹配到拒绝规则,就立即丢弃。
注意:安全组规则修改后是立即生效的,不需要重启实例。但如果你改了规则后,连接还是不通,可以检查一下是不是有更优先的拒绝规则在作怪。
4.4 网络ACL与安全组的区别
很多初学者容易把网络ACL和安全组搞混。它们虽然都是做访问控制的,但工作方式和适用场景完全不同。
网络ACL(Access Control List)工作在子网级别。也就是说,你给一个子网配了ACL规则,那么这个子网里的所有实例都会受到影响。
我画了一张图,帮你理清它们的关系:
从这张图可以看出来,网络ACL和安全组是层层递进的关系。流量要进入子网,先过网络ACL这一关;到了实例门口,还要过安全组这一关。
它们的主要区别,我整理了一个表格:
| 对比维度 | 安全组 | 网络ACL |
|---|---|---|
| 工作层级 | 实例级别(如云服务器) | 子网级别 |
| 规则类型 | 仅支持允许规则 | 支持允许和拒绝规则 |
| 状态特性 | 有状态(自动允许回程流量) | 无状态(需要显式配置回程规则) |
| 规则评估 | 所有规则一起评估 | 按规则编号从小到大顺序评估 |
| 适用场景 | 精细化的实例级访问控制 | 粗粒度的子网级访问控制 |
| 默认行为 | 默认拒绝所有入站,允许所有出站 | 默认允许所有入站和出站 |
你想想看,什么时候该用哪个?
- 安全组:适合做精细化的控制。比如,只允许特定的应用服务器访问数据库的3306端口。每个实例可以绑定多个安全组,灵活度很高。
- 网络ACL:适合做全局性的控制。比如,你想禁止某个IP段访问整个子网,或者你想在子网级别设置一个黑名单。
最佳实践:我一般建议,安全组和网络ACL配合使用。用网络ACL做第一道防线,挡住大部分恶意流量;再用安全组做第二道防线,实现精细化的访问控制。这样既安全又高效。
我曾经遇到过一个案例:有个客户的数据库被暴力破解了。排查下来,发现他们只配了安全组,允许了所有来源IP访问3306端口。我帮他们加了一条网络ACL规则,只允许公司办公网的IP段访问数据库子网,问题就解决了。你看,多一层防护,就多一分安全。
避坑指南:配置网络ACL时,记得要显式配置出站规则。因为它是无状态的,如果你只配了入站规则,没有配出站规则,那么响应流量会被丢弃,导致连接不通。我曾经就因为这个原因,折腾了一个下午才找到问题。
公众号:蓝海资料掘金营,微信deep3321