防火墙的全部智慧,其实压缩成两句话:默认拒绝,逐条放行;以及规则是从上往下逐条比对的,命中了就停——顺序就是策略。
上一节(应当在哪里防御)讲了"防御的位置该摆在哪里"。这一节落到边界这个位置上的第一个具体手段——防火墙与数据包过滤。
它同时是第一章两条原则的落地:默认关闭(权限只交给合适的人)和最小权限。在防火墙上,"默认关闭"就是那条兜底的拒绝规则;"最小权限"就是把源地址也写细。
一、数据包过滤在做什么
把它想成门口的登记簿检查。每个要进出的数据包都带着一张"信封",上面写着:
- 源地址(从哪来)
- 目的地址(到哪去)
- 源端口/目的端口(哪个服务)
- 协议(是什么类型的通信)
包过滤就是只看信封,不看信。它按规则表逐条比对,命中哪条就按哪条办,然后不再往下看。
这个"只看信封"的特点决定了它的两个面:
- 好的一面:速度极快、开销极小、对业务几乎无感知。
- 不好的一面:它不知道信封里装的是什么。同一个端口可以是正常业务,也可以是攻击——只要对方把攻击伪装成那个端口的样子。
二、三种形态:包过滤、状态检测、应用识别
按"能看多深"排三代:
| 形态 | 看什么 | 例子 | 局限 |
|---|---|---|---|
| 包过滤 | 只看单个信封(地址、端口、协议) | 只允许 443 进来 | 不知道这个连接是新开的还是回应的 |
| 状态检测 | 看会话(这个包属于已建立的连接吗) | 只放行"内部先发起、外部回应"的包 | 看不了内容,管不了伪装成正常端口的攻击 |
| 应用识别(下一代防火墙) | 看是什么应用,不管它用哪个端口 | 不管它套哪个端口,都能认出这是哪个应用 | 复杂度高、成本高;加密流量难办 |
"状态检测"这一代的价值值得单独说。 光包过滤是有漏洞的:你允许 443 进来(为了对外提供服务),但攻击者也可以借这个口子发起连接。状态检测加了一条判断——"这是回应,还是新的主动连接?" 只放行回应,把"外面主动连进来"这条路堵上。
而"应用识别"这一代的出发点是:攻击者早就不老实待在规定端口上了(把不合法的东西伪装成正常的网页流量)。所以不看端口,直接看应用。
三、规则表怎么读
规则表是有序的,从上往下、命中即停。这带来两条纪律:
- 最后一条必须是"默认拒绝"。 前面所有规则都没命中时,兜底的那条决定一切。如果兜底是"允许",那前面写得再细也没意义。
- 宽规则不能放在细规则前面。 否则细规则永远轮不到执行,成了摆设——这是配置里最常见的错误,而且不报错。
配套的两条"最小权限"要求:
- 源地址也要写细。 只写目的端口、把源写成"任意",等于"这个服务开放给全世界"。
- 删掉冗余和过时的规则。 规则表会越用越脏:业务下线了、临时开口忘了关、测试规则留下来了。这些就是攻破的入口——它们往往是"没人记得为什么存在"的那几条。
四、动手 Demo:一张规则表,八个测试包
rules = [
(1, "允许", "tcp", "任意", "任意", "443", "对外提供 HTTPS"),
(2, "允许", "tcp", "内网段", "任意", "80", "内网出网浏览"),
(3, "允许", "tcp", "任意", "数据库", "3306", "▲ 源写成【任意】,等于全球都能连"),
(4, "拒绝", "ip", "任意", "任意", "任意", "默认拒绝(兜底)"),
]
packets = [
("外部用户", "官网服务器", 443),
("办公机", "外部网站", 80),
("外部任意主机", "数据库", 3306),
("外部主机", "内网机器", 3389),
("外部主机", "内网机器", 445),
("办公机", "外部主机", 22),
("外部主机", "内网机器", 8080),
("内网机器", "内网机器", 445),
]
实跑输出:
规则表(自上而下逐条比对,命中即停)
序号 动作 协议 源 目的 端口 说明
------------------------------------------------------------------------------------------------
1 允许 tcp 任意 任意 443 对外提供 HTTPS
2 允许 tcp 内网段 任意 80 内网出网浏览
3 允许 tcp 任意 数据库 3306 ▲ 源写成【任意】,等于全球都能连
4 拒绝 ip 任意 任意 任意 默认拒绝(兜底)
逐包判定
源 目的 端口 结果
----------------------------------------------------------------------
外部用户 官网服务器 443 允许(规则 1)
办公机 外部网站 80 允许(规则 2)
外部任意主机 数据库 3306 允许(规则 3)
外部主机 内网机器 3389 拒绝(规则 4 兜底)
外部主机 内网机器 445 拒绝(规则 4 兜底)
办公机 外部主机 22 拒绝(规则 4 兜底)
外部主机 内网机器 8080 拒绝(规则 4 兜底)
内网机器 内网机器 445 拒绝(规则 4 兜底)
八个包里放行 3 个、拒绝 5 个。
① 规则 3 是这张表里的真问题:源地址写【任意】,
等于把数据库端口开放给全世界。
应改成只允许内网段访问该数据库。
教科书里叫【最小权限】,在防火墙上的体现就是【源也要写死】。
② 规则 4 那条兜底才是这张表的价值所在。
把它换成【允许任意】,同样八个包会全部被放行、
一个都拒不了——安全等级完全不是一回事。
③ 规则自上而下命中即停,所以顺序就是策略:
把宽规则放前面,后面的细规则永远轮不到执行,成了摆设。
④ 包过滤只看信封(地址、端口、协议);
要看会话要看会话状态,要看应用要看下一代防火墙——
但因为现在九成以上流量是加密的,一层层往上看会越来越难。
读这个输出:注意"被拒绝的那五个"里有一行很特别——内网机器访问内网机器 445 端口也被拒了。这条规则看起来"管得太宽",实际上很有价值:它顺手挡住了内网横向传播的一个主要通道(文件共享端口正是勒索软件在内网扩散最常用的路径)。这说明一条好规则常常同时挡住好几类攻击。
五、防火墙挡不住什么
这一点比"能挡什么"更重要,因为它决定了后面的章节为什么存在:
- 挡不住"合法的东西干坏事"——用一个偷来的有效账号登录,防火墙看到的是正常连接。
- 挡不住"从里面发起的攻击"——边界设备看的是内外之间,内部机器互相攻击它看不见(这就接到 2-13 分段和 2-11 的检测)。
- 挡不住加密流量里的内容——因为看不到内容,伪装成正常应用的攻击很难分辨。
- 挡不住"被人主动连出去"——出口方向的默认行为通常是放行,这正好是 2-8 讲的出口防御问题。
- 规则配错时,它什么都不挡——而且不报错。
所以防火墙的定位应该是:一道必要的、但远远不够的防线。
六、⚠️ 2026 现状
- 权威合规框架对"边界访问控制"有明确且具体的要求。 网络安全等级保护框架里,"安全区域边界"这一块的访问控制要求包含五条,和本节讲的内容高度一致:在网络边界或区域之间按策略设置访问控制规则,默认情况下除允许的通信外受控接口拒绝所有通信;删除多余或无效的访问控制规则,优化列表并保证规则数量最小化;对源地址、目的地址、源端口、目的端口和协议进行检查;能根据会话状态信息提供明确的允许或拒绝访问的能力;对进出网络的数据流实现基于应用协议和应用内容的访问控制。 注意这五条里的第二条——"删多余规则"是明文写进合规要求的。也就是说,规则表长期不清理在 2026 年不只是技术债,而是合规扣分项。
- 同一块还有"边界防护"的四条硬要求,其中两条特别值得抄下来:应能对非授权设备私自联到内部网络的行为进行检查或限制;应能对内部用户非授权联到外部网络的行为进行检查或限制。后半句正是 2-8 说的出口方向。
- "下一代防火墙"已经成了默认形态。 它不只做包过滤和状态检测,还集成了应用与用户的识别与控制、入侵防御等能力。区别的实质在于:传统防火墙主要基于端口和协议识别流量,而下一代防火墙能深入识别和控制具体的网络应用程序——不管它用哪个端口。
- 一体化设备的定位有了明确定论。 统一威胁管理设备被视为传统防火墙与下一代防火墙之间的过渡产品,主要问题在性能瓶颈,业界普遍认为会逐步被下一代防火墙取代。这解释了为什么"买一台盒子全搞定"的思路在 2026 年不再是主流推荐。
- 防火墙的交付方式在云化。 一个重要方向是软件化、容器化交付,并深度集成到云平台里;防火墙即服务、以及安全访问服务边缘这类架构成为重要方向——安全能力以云服务形式弹性交付。对企业来说,好处是不用自己堆硬件、能力可以随业务弹性伸缩;代价是关键安全能力转移到了服务商侧,选型和合同变得同样重要。
- "AI 与自动化"已经进入防火墙本身。 有资料提到下一代防火墙能够基于预测做自动策略调优和攻击模拟,并可通过自然语言交互实现智能运维。这条对日常工作的含义是:规则梳理这种苦活正在被工具接手——但"哪条规则是多余的"这个判断仍然需要人来定,因为只有人知道业务还需要什么。
- 一个务实的落地动作:拿自己单位或家里的防火墙规则表出来,只做一件事——从上到下读一遍,标出"这条为什么存在"。凡是标不出来的,那就是"多余的规则",也正是合规要求里要删掉的那一批。
30 秒实验
如果你家里用的是普通路由器,做一次"默认动作检查":
- 登录路由器后台(一般是
192.168.1.1),找"端口转发""虚拟服务器""端口映射"这类菜单。 - 看有没有你设不出来的映射(尤其是往内网的 3389 远程桌面、445 文件共享、22 远程登录、3306 数据库这些端口)。
- 如果有,删掉。 这就是最小权限原则在家里那一层的落地——你不需要它,它给攻击者用。
这一节要带走的一句是:防火墙的价值不在你放行了什么,而在你没放行什么——所以那条"默认拒绝"才是它的灵魂。
常见误区
-
错误:我设了"允许 443",所以很安全。——纠正:"允许什么"只是规则表的一半,另一半是"默认动作是什么"。 如果兜底规则是"允许任意",那么前面写的规则基本没有意义——因为所有没被明确拒绝的流量都会被放行。看一张规则表,先看最后一行。
-
错误:规则越多越安全。——纠正:恰恰相反。 规则越多,越容易出现"宽规则排在被细规则前面"、"上线的临时规则忘了删"、"业务早就下线了但规则还在"这类问题。合规要求里也明确写了要删除多余或无效的规则、保证规则数量最小化。规则表要定期做减法。
-
错误:有了防火墙,里面就不用再管了。——纠正:防火墙只看得见"内外之间"。它看不见内部机器之间的通信(东西向),也挡不住用合法凭据发起的操作,更看不到加密流量里的内容。所以它是一层,不是全部——这也是为什么后面还有 2-11(检测)和 2-13(分段)。
-
错误:装了防火墙就不用管出网方向了。——纠正:出网方向通常是默认放行的,而这正是最容易出事的一侧。一台被攻陷的机器要回连控制服务器、要外传数据,走的都是出口——如果出口没有任何策略,攻击者在里面的所有动作都不会被拦。合规要求里也明确包含"对内部用户非授权联到外部网络的行为进行检查或限制"。
自测三问(点开对答案)
1. 为什么"默认拒绝"这条兜底规则,比前面所有规则都重要? --- 因为**它是决定"未列出的情况怎么办"的那一条**。前面所有规则都是"逐条例外",而**没有任何规则表能穷举所有情况**——所以真正决定安全等级的,是那条"剩下的一律怎么办"。如果兜底是允许,那么**所有"没被想到"的情况都是默认放行的**——包括新的攻击手法、临时打开的端口、配错的策略。**默认拒绝的意义在于:把'没想到'变成'不允许'。** 2. "状态检测"相比纯包过滤,多判断了什么?为什么这个判断很关键? --- 纯包过滤只看单个信封,**它不知道这个包是"新开的连接"还是"对已有连接的回应"**。状态检测加了这个判断:**是不是内部先发起、外部在回应?** 关键性在于——你对外提供服务时(比如允许 443 进来),光看端口是无法区分"正常的访问请求"和"攻击者主动发起的连接尝试"的;而加上会话状态之后,**可以只放行"回应"而拒绝"新的主动连接"**,把一个容易误伤的口子收紧。 3. 为什么防火墙"看不见"内部机器之间的攻击?这带来什么后果? --- 因为**边界设备的位置就在内外之间**,它的视角天然只覆盖"进出"这一条线;**内部机器之间的通信根本不经过它**(这是"东西向流量")。后果是:**攻击者一旦进入内网,就可以在不触发任何边界规则的情况下横向移动**——扫描其他机器、读取共享文件、寻找更有价值的系统。这正是后面要用**内部分段(2-13)**和**东西向检测(2-11)**去补的那块空白。- ☐ 下一节(2-10 通信的监视与分析)
相关笔记
- 应当在哪里防御 —— 上一篇:位置的总纲
- 通信的监视与分析 —— 下一篇:光有规则不够,还得看得见发生了什么
- 拆分网络 —— 边界挡不住的那部分,靠分段补
- 权限只交给合适的人 —— 默认关闭与最小权限在配置上的落地
- 🛡️ 网络与信息安全 · 索引 —— 全课路线图