☁️ 第六章 云服务的安全性
📄 一句话概括

防火墙是数据中心最外圈的那道墙,它做的事说起来很简单:按一张规则表决定哪个包能过、哪个不能过。而它的第一原则不是【拦得多】,而是默认拒绝——没写进允许表的一律不通。这条原则之所以重要,是因为黑名单要求你先知道什么是坏的,而新攻击的特征还没人知道。

📝 本节和前面几节的关系

上一节讲的是物理边界(谁能走到机器跟前)。这一节开始讲网络边界(谁能碰到这台机器)——两节合起来,才是数据中心【墙】的完整含义。

它也接着 网络的虚拟化① VLAN 那条线:那一节讲的是把一个大网络切成很多小块(VLAN),这一节讲的是在块与块之间决定谁能过。分段是划线,防火墙是设卡——两个动作经常一起出现,但解决的不是同一个问题。

一、防火墙只做一件事:按规则决定放不放

不管防火墙后面挂了多少功能,最核心的动作只有一个:拿这条连接的几个特征,去规则表里逐条比对,命中哪条就按哪条处理。

老式防火墙比对的是【五元组】:

看什么 例子
源地址 从哪来
目的地址 去哪
源端口 从哪个口来
目的端口 去哪个服务
协议 TCP / UDP / ICMP

为什么要记住【五元组】这个概念:因为后面所有的变化(下一节的 DMZ、再后面的 NGFW)讲的都是在这个基础上加看什么。五元组是防火墙的最小视野——它只看得见【谁跟谁在通】,看不见【在聊什么】。

二、动手 Demo:五元组与默认拒绝

看到什么算成功:

==================================================================================================
【Demo 5】数据中心的【城墙】:防火墙
==================================================================================================
  防火墙是数据中心最外圈的那道墙。它的工作听起来很简单:
  按规则表决定,哪个包能过、哪个不能过。

  【一】老式防火墙只看五元组

  序号    源地址                  目的地址              目的端口        动作
  --------------------------------------------------------------------------------------------
  1       任意                    10.0.0.80             443             允许
  2       10.0.1.0/24             10.0.0.90             3306            允许
  3       10.0.1.0/24             10.0.0.80             22              允许
  ...     任意                    任意                  任意            拒绝

  最后一行就是第一原则:【默认拒绝】。
  没写进允许表的,一律不通——这叫白名单,比黑名单稳得多。

  【二】默认拒绝 vs 默认放行,被突破的概率差多少

  策略                放行的东西                        被漏进来的可能
  --------------------------------------------------------------------------------------------
  默认放行(黑名单)  除了知道坏的,其余全通            高:新东西一律先放进来
  默认拒绝(白名单)  只有写明的业务端口                低:新的东西要人先开口子

  黑名单的问题在于【你得先知道它坏】——而新攻击的特征还没人知道。

  【三】老式状态检测 vs 下一代防火墙(NGFW)

  对比项            老式状态检测                  下一代防火墙 NGFW
  ----------------------------------------------------------------------------------------
  看什么            五元组                        五元组 + 应用 + 用户 + 内容
  443 里面          只知道是 HTTPS                能认出这是哪个应用
  管得住吗          只能按 IP 段放或堵            按应用、按用户、按内容管
  能不能防隧道      不能:别的协议能塞进 443      能:应用识别(6000+ 种)
  交付形态          一台硬件设备                  硬件 / 虚拟 / 云服务(FWaaS)

  【四】为什么【只开 443】不等于安全

  允许 443 出站,本意是【只让大家上网页】。
  但任何协议都能伪装成 443:把别的流量塞进这条通道,
  老式防火墙只看到【一条 443 连接】,看不出里面装的是什么。
  这就是 NGFW 存在的第一个理由——把 443 拆开看,认出应用再决定放不放。

  一句话收束:防火墙的第一原则不是【拦住多少】,而是【默认拒绝】——
  把不知道的先关在门外,每开一个口子都要有人负责。

读结果:

三、从状态检测到下一代防火墙

防火墙这几十年的演进,其实就沿着一条线:看的东西越来越多。

代数 看什么 能管住什么
包过滤 五元组 按地址和端口放行
状态检测 五元组 + 连接状态 只放行【自己发起的连接的回包】
下一代(NGFW) + 应用 + 用户 + 内容 认出这是哪个应用、哪个人在用

每一步解决的都是前一步的漏洞:

而 NGFW 这一代还有两个值得注意的变化(写在 Demo 第三张表的最后一行):

四、为什么【只开 443】不等于安全

这一段值得单独展开,因为它是很多团队真实踩过的坑:

一个常见的出口策略是【只允许 443 出站】——本意是【只让大家上网页,别的不许】。听起来很严格。但问题在于:

这就是内容检测和应用识别存在的理由:光看【走哪个门】已经不够了,还要看【门里面走的是什么】。

一句话总结这一节:防火墙的第一原则是【默认拒绝】,第一视野是【五元组】,而它必须进化到【能看见门里面】——否则这道墙只挡住了不懂门道的人。

30 秒实验

打开你自己电脑的防火墙设置(Windows 是【Windows Defender 防火墙】,macOS 是【防火墙】),做两件事:

  1. 看【入站规则】里有多少条是【允许】,多少条是【阻止】(通常有几百条,绝大多数是系统预置的)。
  2. 找你最熟悉的一个软件(比如浏览器或聊天工具),看它自己加了哪些规则 ——注意它是给自己开了一个【端口】,还是开了一个【程序】。

做完你会对【默认拒绝】有具体的感受:你的电脑默认就是【入站全拒、出站全放】的——也就是说,别人主动连你连不上,但你主动连出去没人管。这也顺便解释了本节第四段:为什么【数据外传】这么难防——因为在出口这一侧,默认是放行的。

常见误区

  1. 错误:防火墙越严越好,规则越少越安全。——纠正:规则少不等于安全,也可能是【该开的没开】——而一个没开的业务口子会逼着人去找绕过去的办法(比如把服务挪到一个【已经开着的】端口上,或者干脆申请放开一大段)。所以规则表的质量标准不是【条数】,而是【每一条都能说出它为什么存在】。 定期复核时该问的是:这条规则是谁开的、为哪个业务开的、现在还开着的必要是什么。

  2. 错误:防火墙是网络设备,和业务系统没关系。——纠正:防火墙规则表其实就是业务关系的书面版本。哪台机器能访问数据库、哪个网段能连到支付接口——这些都是业务规则,只是写成了网络语言。所以改防火墙规则这件事,本质上是在改业务边界,必须让业务方参与。现实中很多故障不是被攻击,而是一次没通知的规则变更把某个接口掐断了。

  3. 错误:有了下一代防火墙,老式的五元组规则就不用管了。——纠正:NGFW 是【在五元组之上】做判断,不是【取代五元组】。它是先按地址和端口筛一遍,再对放行的流量做应用识别——第一层没收紧,第二层就要处理更多的流量,性能会先撑不住。所以正确做法是两层都要:用五元组把不需要的流量挡在门外(便宜且快),再让应用识别去对付那些伪装成合法端口的流量(贵但准)。

  4. 错误:出口开放 443 是必须的,所以数据外传防不住。——纠正:443 确实必须开,但【防不住】和【没法管】是两件事。能做的是几件事:限制【谁能连出去】(不是所有服务器都需要访问互联网)、对出站流量做应用识别和内容检查、记录外传的流量特征以便事后追溯。重点是:出口控制的目标不是【拦住所有外传】,而是【让外传这件事留痕、并且不是随便哪台机器都能做】。

自测三问(点开对答案) 1. 为什么【默认拒绝】比【默认放行 + 黑名单】更稳? —— 因为**两者面对的是【未知】**。黑名单要求**先知道什么是坏的**,才能把它列进去——**而新攻击的特征还没人知道,所以它天然滞后一个周期**。白名单反过来:**它只需要知道【什么是好的】**,而**自己需要的服务是有限的、可以提前写死的**。所以面对【没见过的攻击】,黑名单放行、白名单拦截。代价是**白名单维护更贵**——每加一个新服务都要有人开口子(也正是本节误区 1 说的那个麻烦)。 2. 为什么【只允许 443 出站】不能防住数据外传? —— 因为**443 是一个端口,不是一种用途**。端口就像门牌号,**它只说明【走哪个门】,不说明【门里搬的是什么】**。任何协议都能被包装进 443 传输,**从防火墙看来,它和普通的网页流量没有任何区别**。所以【只开 443】这条规则实际上开了一条【外观合法、内容不限】的通道——**攻击者拿到数据后,只要把它塞进一条 443 连接就能送出去**。要防住这个,得靠**应用识别与内容检查**把门拆开看(也就是 NGFW 那一层做的事)。 3. 状态检测比包过滤多解决了什么问题? —— 它解决了**【回包怎么进】**的问题。包过滤只看五元组,所以它无法区分【这条连接是内部主动发起的】和【外面主动连进来的】——**结果就是:为了让内部能上外网,规则表里会写一条很宽的入站规则,等于把这个口子也对着外面开了**。状态检测通过**记住连接状态**,做到【只放行由内部发起的那条连接的回包】——**外面主动发起的连接依旧被拒**。**这就是为什么它成为标配**:它让【允许出站】不再意味着【顺带允许入站】。

相关笔记