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规则,那么这个子网里的所有实例都会受到影响。

我画了一张图,帮你理清它们的关系:

VPC (10.0.0.0/16) 子网A (10.0.1.0/24) 网络ACL-A Web服务器 安全组SG-Web App服务器 安全组SG-App 缓存服务器 安全组SG-Cache 子网B (10.0.2.0/24) 网络ACL-B 数据库主库 安全组SG-DB 数据库从库 安全组SG-DB 互联网网关 ■ 网络ACL(子网级别) ■ 安全组(实例级别) ■ 互联网网关

从这张图可以看出来,网络ACL和安全组是层层递进的关系。流量要进入子网,先过网络ACL这一关;到了实例门口,还要过安全组这一关。

它们的主要区别,我整理了一个表格:

对比维度 安全组 网络ACL
工作层级 实例级别(如云服务器) 子网级别
规则类型 仅支持允许规则 支持允许和拒绝规则
状态特性 有状态(自动允许回程流量) 无状态(需要显式配置回程规则)
规则评估 所有规则一起评估 按规则编号从小到大顺序评估
适用场景 精细化的实例级访问控制 粗粒度的子网级访问控制
默认行为 默认拒绝所有入站,允许所有出站 默认允许所有入站和出站

你想想看,什么时候该用哪个?

  • 安全组:适合做精细化的控制。比如,只允许特定的应用服务器访问数据库的3306端口。每个实例可以绑定多个安全组,灵活度很高。
  • 网络ACL:适合做全局性的控制。比如,你想禁止某个IP段访问整个子网,或者你想在子网级别设置一个黑名单。

最佳实践:我一般建议,安全组和网络ACL配合使用。用网络ACL做第一道防线,挡住大部分恶意流量;再用安全组做第二道防线,实现精细化的访问控制。这样既安全又高效。

我曾经遇到过一个案例:有个客户的数据库被暴力破解了。排查下来,发现他们只配了安全组,允许了所有来源IP访问3306端口。我帮他们加了一条网络ACL规则,只允许公司办公网的IP段访问数据库子网,问题就解决了。你看,多一层防护,就多一分安全。

避坑指南:配置网络ACL时,记得要显式配置出站规则。因为它是无状态的,如果你只配了入站规则,没有配出站规则,那么响应流量会被丢弃,导致连接不通。我曾经就因为这个原因,折腾了一个下午才找到问题。


公众号:蓝海资料掘金营,微信deep3321