模块七 · 网络安全
防火墙与入侵检测系统
前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。
本章要解决的问题:前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。
本章的证据来源:概念讲法参考教材§8.9,纸书439–447页(PDF458–466页),具体出处见章末。旧稿的命令与数值属于历史转述,相关附件未随当前项目提供,本次没有重新采集或运行原实验;模型计算、协议规则与观察不能互相替代。
先从一个例子理解概念
设备收到一个连接请求:是否允许它通过?允许之后,是否还要观察可疑行为?访问控制和攻击检测回答的是不同问题。
防火墙与状态
防火墙按规则允许或阻止流量;有状态检查还结合连接状态。规则数量或Block条目少,不能单独说明实际保护强弱,要看默认策略及匹配范围。
IDS与IPS
IDS用于检测和告警;IPS还可能在线采取阻断等动作。检测可能误报或漏报,必须结合规则、位置与证据,不能把一次告警当成已确认攻击。
防火墙的三代
防火墙的核心任务只有一句话:决定哪些流量能过、哪些不能。 但"凭什么判断"经历了三代演进:
| 代际 | 判断依据 | 能力 | 局限 |
|---|---|---|---|
| 第一代:包过滤 | 看单个包的字段(源/目的 IP、端口、协议) | 简单、快 | 无状态:不知道这个包属于哪条连接 |
| 第二代:状态检测 | 记住连接的状态 | 能判断"这个包是不是某条已建立连接的一部分" | 看不懂应用层内容 |
| 第三代:应用层网关 | 看懂应用协议 | 能按应用语义过滤(比如只允许特定的 HTTP 方法) | 慢,且要理解每种协议 |
"状态检测"解决了包过滤的一个根本问题。 举例:
包过滤的困境:公司只允许内部访问外部网站。
但服务器回给你的响应包,源地址是外部的、目的端口是随机的 ——
按"只允许内部发起"的规则,这个响应包也该被拦掉。
可是拦掉它,你的请求就永远收不到响应。
状态检测的做法:记住"你刚才发了一个请求出去",
于是认出这个回来的包是【那条连接的响应】,放行。所以"状态检测"是防火墙从"逐包判断"变成"按连接判断"的分水岭 —— 这也是现代防火墙的基本形态。
第三代(应用层网关)的典型例子是代理:它终止你的连接、自己再去连服务器、两头分别处理。这样它就能看懂并干预应用层内容。本教程实测的那两个代理程序就属于这一类(《代理与负载均衡》那一章讲过正向/反向代理的区别)。
实测:本机防火墙的规模与策略
规模(《SDN 与中间盒》那一章已经实测过,这里看它的策略面):
规则总数: 1056 启用: 800 入站: 713 出站: 343
按动作: Allow 1048 条, Block 8 条三个配置档的策略:
Name Enabled DefaultInboundAction DefaultOutboundAction LogAllowed LogBlocked
Domain True NotConfigured NotConfigured False False
Private True NotConfigured NotConfigured False False
Public True NotConfigured NotConfigured False False先解释"NotConfigured"
这三个配置档(域/专用/公用)对应你连的网络类型,Windows 会按当前网络自动选用对应的一套策略。
NotConfigured 不是"没有策略",而是"没有被显式地设置过,所以使用系统内置的默认值"。Windows 防火墙的内置默认是:
入站:默认阻止(没有明确允许的就连不上)
出站:默认允许这解释了一个看起来反常的现象:1056 条规则里只有 8 条是 Block。因为入站本来就是默认拒绝的,所以绝大多数规则写的是"允许某某例外",而不是"阻止某某"。写"允许"比写"阻止"更省事,也更不容易漏。
但日志那一列值得单独说
LogAllowed: False LogBlocked: False ← 三个配置档全都是 False防火墙在正常工作,但它什么都没记录。
这意味着什么? 如果有人扫描你的端口、尝试连接被拦截的服务,本机不会留下任何日志。你知道"有东西被挡住了"这件事,在事发当时不会知道,事后也查不到。
实测:本机的暴露面
"暴露面"指的是"从网络上看,这台机器有哪些门是开着的"。 实测非回环地址上的 TCP 监听端口:
| 端口 | 通常是干什么的 | 备注 |
|---|---|---|
| 135 | RPC(远程过程调用) | Windows 核心服务 |
| 139 / 445 | SMB(文件与打印机共享) | 445 监听在 :: 上 |
| 5357 | WSDAPI(Web 服务设备发现) | 打印机/设备发现 |
| 7680 | Delivery Optimization | Windows 更新分发 |
| 5040 / 8900 / 19528 | 应用自己的端口 | 非系统服务 |
| 49664 起若干 | RPC 动态端口 | 系统分配的临时端口 |
由这张表能看出几件事:
① 445 和 139 是历史上被攻击最多的端口之一。 多个著名的蠕虫病毒就是通过 SMB 传播的。它们开着是因为 Windows 的文件共享功能需要它们 —— 这正是一个"功能与风险的取舍"。
② 这些端口前面有防火墙挡着。 《SDN 与中间盒》那一章实测的防火墙规则里就有 445 TCP 的端口过滤条件 —— 端口在监听(服务在跑),但防火墙决定谁能连上它。这两件事是分开的:
监听 = 服务在等连接 (本机能"接客")
放行 = 防火墙允许这个连接 (决定"谁能进来")③ 本机的非回环监听只有十几个端口,属于比较小的暴露面 —— 因为这是一台客户端机器,不是服务器。一台公网服务器通常会有更多端口在监听。
入侵检测系统(IDS / IPS)
防火墙解决"让不让过",但它有一个天然盲区:它只能按规则判断,而"看起来合法的流量"里可能夹着攻击。比如:
攻击者用完全正常的 HTTPS 请求(443 端口、合法证书)
去尝试一个 Web 应用的漏洞
→ 防火墙的规则看不出任何异常,只能放行这就是入侵检测要补的位置。
| IDS(入侵检测系统) | IPS(入侵防御系统) | |
|---|---|---|
| 做什么 | 只检测、报警 | 检测并阻断 |
| 部署方式 | 旁路(复制一份流量来看) | 串联(流量必须穿过它) |
| 对性能的影响 | 无(不影响转发) | 有(成为路径上的一跳,故障会影响业务) |
| 风险 | 漏报 | 误报会切断正常业务 |
IDS/IPS 的两种检测方法:
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 基于特征 | 维护已知攻击的特征库,匹配上就报警 | 准,误报少 | 只能发现已知攻击 |
| 基于异常 | 先建立"正常行为"的基线,偏离就报警 | 能发现未知攻击 | 误报多(正常行为也常常"偏离基线") |
这个取舍是安全领域的一个核心矛盾:
部署位置:
| 类型 | 部署在哪 | 看得到什么 |
|---|---|---|
| 网络型(NIDS) | 网络入口/关键链路 | 全网流量,但看不到主机内部 |
| 主机型(HIDS) | 每台机器上 | 系统调用、文件改动、进程行为 |
本机的情况:有 Windows Defender(主机型防护)和防火墙,但没有专门的网络型 IDS —— 因为这是一台普通客户机,不是网络边界设备。
一个现实:防火墙和 IDS 都挡不住什么
明确它们的边界,比记住它们的分类更有用。
| 挡不住什么 | 为什么 |
|---|---|
| 应用层攻击 | 攻击藏在完全合法的 HTTPS 流量里,防火墙看端口看不出问题 |
| 内部人员越权 | 流量是"从内部到内部"的,不经过边界 |
| 钓鱼 | 用户自己主动点击,流量方向是"正常访问" |
| 凭据泄露 | 攻击者用合法账号登录,行为和正常用户一样 |
| 加密流量里的一切 | 看不到内容(除非有中间人解密) |
这就是为什么安全要做成"分层"的:防火墙管边界、IDS 管异常、主机防护管终端、加密管传输、身份认证管访问 —— 没有任何一层能单独解决问题,因为攻击可以绕过任何单点。
常见误解
误解一:「防火墙规则里 Block 越多说明防得越严」
恰好相反,通常说明配置方式不同。 本机实测 1056 条规则里只有 8 条 Block,而这并不代表不严 —— 因为入站本来就是默认拒绝的,绝大多数规则写的是"允许某某例外"。 判断严不严要看"默认动作",不是看 Block 规则的数量。
误解二:「防火墙开着就等于有安全监控」
本机实测直接反驳。 三个配置档的 LogAllowed 和 LogBlocked 全部是 False —— 防火墙在正常工作,但什么都没记录。 后果:有人扫描端口、尝试入侵被拦截时,本机不留任何痕迹。"挡住"和"发现"是两件事,需要两套机制。
误解三:「端口在监听就说明都能连上」
不一定,还要看防火墙。 本机实测 445 端口在监听,而防火墙里有对应的端口过滤规则。监听和放行是两件事:前者是"服务在等",后者是"防火墙允许谁能进来"。 (当然,如果没有防火墙,那么监听就等于暴露。)
误解四:「IPS 比 IDS 好,因为能阻断」
取决于你能承受多少误报。 IPS 串联在路径上,误报会切断正常业务 —— 一次错误的阻断可能比一次漏报影响更大。而且它成为路径上的一跳,它故障了业务就断了。 所以实际部署里两者都有,很多组织先用 IDS 观察一段时间、调准规则,再考虑上 IPS。
误解五:「有了防火墙和 IDS 就安全了」
挡不住的东西还很多:应用层攻击(藏在合法 HTTPS 里)、内部人员越权、钓鱼(用户主动点)、凭据泄露(攻击者用合法账号)、加密流量里的内容。 安全必须是分层的 —— 因为攻击可以绕过任何单点防护。
本章小结
| 结论 | 类型 |
|---|---|
| 防火墙三代:包过滤、状态检测、应用层网关 | 标准 |
| 状态检测解决了"无法区分响应包与主动连接"的问题 | 标准 |
| 应用层网关通过终止连接来干预应用层内容,代理属于此类 | 标准 |
| 实测:本机防火墙 1056 条规则(800 启用),1048 Allow / 8 Block | 实测 |
| 实测:三个配置档的默认入站/出站动作均为 NotConfigured(继承系统默认) | 实测 |
| Windows 防火墙内置默认为入站拒绝、出站允许,故 Block 规则很少 | 标准 |
| 实测:三个配置档的 LogAllowed 与 LogBlocked 全部为 False | 实测 |
| 因此本机不记录被拦截的流量,"挡住"了但没有"发现" | 推理 |
| 实测:本机非回环 TCP 监听端口含 135、139、445、5357、7680 等 | 实测 |
| 监听(服务在等)与放行(防火墙允许)是两件事 | 推理 |
| IDS 旁路只报警,IPS 串联可阻断但有误报代价与单点风险 | 标准 |
| 检测方法:基于特征准但只认得已知;基于异常能发现未知但误报多 | 标准 |
| 实际系统常两者结合且偏重特征,因为误报会让人忽略报警 | 推理 |
| 防火墙与 IDS 挡不住应用层攻击、内部越权、钓鱼、凭据泄露与加密内容 | 标准 |
| 安全必须分层,因为攻击可以绕过任何单点防护 | 推理 |
自测题
7 题 · 先自己答,再展开对照
防火墙的三代分别靠什么判断?"状态检测"解决了什么问题?
第一代:包过滤 —— 看单个包的字段(源/目的 IP、端口、协议),无状态。第二代:状态检测 —— 记住连接状态。第三代:应用层网关 —— 看懂应用协议内容。
状态检测解决的问题:包过滤分不清"服务器回给你的响应包"和"外部主动发起的连接" —— 按规则两者都该拦,但拦掉响应你的请求就收不到结果了。状态检测记住"你刚才发过请求",从而认出这个回来的包属于那条连接并放行。本机实测防火墙有 1056 条规则,其中只有 8 条 Block。这能说明防得不严吗?
不能。 因为 Windows 防火墙的入站默认是拒绝的(本机实测DefaultInboundAction: NotConfigured,即继承系统默认),所以绝大多数规则写的是"允许某某例外",而不是"阻止某某"。
判断严不严要看默认动作,不是看 Block 规则的数量。本机实测三个配置档的日志开关全部为 False,这意味着什么?
意味着防火墙虽然在正常工作,但不留下任何记录。 有人扫描端口、尝试连接被拦截的服务时,本机不会留下痕迹 —— 事发当时不知道,事后也查不到。
这说明"挡住"(防火墙)和"发现"(检测)是两件不同的事,需要两套机制。 光有防火墙不够。"端口在监听"和"端口能连上"是一回事吗?
不是一回事。 本机实测 445 端口在监听,而防火墙里有对应的端口过滤规则 —— 端口开着(服务在等连接),但防火墙决定谁能连上它。
不过要注意:如果没有防火墙,那么监听就等于暴露。这两件事分开是因为 Windows 同时有服务在跑和防火墙在过滤。IDS 和 IPS 的主要区别是什么?IPS 有什么额外风险?
IDS 只检测并报警(旁路部署,不影响流量转发);IPS 检测并阻断(串联在路径上)。
IPS 的额外风险:① 误报会切断正常业务(一次错误阻断的影响可能比漏报更大);② 它成为路径上的一跳,故障会影响业务。
所以实际部署里常见"先用 IDS 观察、调准规则,再考虑上 IPS"。基于特征的检测和基于异常的检测各有什么优劣?实际系统通常怎么选?
基于特征:维护已知攻击的特征库 —— 准、误报少,但只能发现已知攻击。
基于异常:建立正常行为基线,偏离就报警 —— 能发现未知攻击,但误报多(正常行为也常常"偏离基线")。
实际系统通常两者结合,而且更偏重特征 —— 因为误报的代价很实际:运维人员被大量误报淹没后,就会开始忽略所有报警,那时真正的攻击也被忽略了。举出三种防火墙和 IDS 都挡不住的攻击。
任意三种(如):
- 应用层攻击 —— 攻击藏在完全合法的 HTTPS 流量里,防火墙按端口看不出问题
- 内部人员越权 —— 流量是内部到内部,不经过边界
- 钓鱼 —— 用户自己主动点击,流量方向看起来是正常访问
- 凭据泄露 —— 攻击者用合法账号登录,行为和正常用户一样
- 加密流量里的内容 —— 看不到(除非做中间人解密)
所以安全必须分层 —— 不存在能单独解决所有问题的单点防护。
参考资料与适用范围
- 《计算机网络:自顶向下方法(原书第8版)》§8.9,纸书439–447页(PDF458–466页):本章概念与机制的对应教学章节,引用时需保留模型与版本条件。
- 教材作者配套教学资源入口:网站目前显示的教材版本与用户提供的第8版可能不同,页码以本章列出的中文第8版为准。
修订核对日期:2026-10-13。本次补充概念入口与教材出处;旧稿的具体数值为历史观察,未重新实测。相关脚本和完整日志未随当前项目提供,不能仅凭转述断言实验已复核,也不据此断言数据造假。