← 网络基础学习第 51 / 55 章进阶35 分钟

模块七 · 网络安全

防火墙与入侵检测系统

前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。

本章要解决的问题:前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。

本章的证据来源:概念讲法参考教材§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 监听端口:

端口通常是干什么的备注
135RPC(远程过程调用)Windows 核心服务
139 / 445SMB(文件与打印机共享)445 监听在 :: 上
5357WSDAPI(Web 服务设备发现)打印机/设备发现
7680Delivery OptimizationWindows 更新分发
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 题 · 先自己答,再展开对照

  1. 防火墙的三代分别靠什么判断?"状态检测"解决了什么问题?
    第一代:包过滤 —— 看单个包的字段(源/目的 IP、端口、协议),无状态。第二代:状态检测 —— 记住连接状态。第三代:应用层网关 —— 看懂应用协议内容。
    状态检测解决的问题:包过滤分不清"服务器回给你的响应包"和"外部主动发起的连接" —— 按规则两者都该拦,但拦掉响应你的请求就收不到结果了。状态检测记住"你刚才发过请求",从而认出这个回来的包属于那条连接并放行。
  2. 本机实测防火墙有 1056 条规则,其中只有 8 条 Block。这能说明防得不严吗?
    不能。 因为 Windows 防火墙的入站默认是拒绝的(本机实测 DefaultInboundAction: NotConfigured,即继承系统默认),所以绝大多数规则写的是"允许某某例外",而不是"阻止某某"。
    判断严不严要看默认动作,不是看 Block 规则的数量。
  3. 本机实测三个配置档的日志开关全部为 False,这意味着什么?
    意味着防火墙虽然在正常工作,但不留下任何记录。 有人扫描端口、尝试连接被拦截的服务时,本机不会留下痕迹 —— 事发当时不知道,事后也查不到。
    这说明"挡住"(防火墙)和"发现"(检测)是两件不同的事,需要两套机制。 光有防火墙不够。
  4. "端口在监听"和"端口能连上"是一回事吗?
    不是一回事。 本机实测 445 端口在监听,而防火墙里有对应的端口过滤规则 —— 端口开着(服务在等连接),但防火墙决定谁能连上它。
    不过要注意:如果没有防火墙,那么监听就等于暴露。这两件事分开是因为 Windows 同时有服务在跑和防火墙在过滤。
  5. IDS 和 IPS 的主要区别是什么?IPS 有什么额外风险?
    IDS 只检测并报警(旁路部署,不影响流量转发);IPS 检测并阻断(串联在路径上)。
    IPS 的额外风险:① 误报会切断正常业务(一次错误阻断的影响可能比漏报更大);② 它成为路径上的一跳,故障会影响业务。
    所以实际部署里常见"先用 IDS 观察、调准规则,再考虑上 IPS"。
  6. 基于特征的检测和基于异常的检测各有什么优劣?实际系统通常怎么选?
    基于特征:维护已知攻击的特征库 —— 准、误报少,但只能发现已知攻击。
    基于异常:建立正常行为基线,偏离就报警 —— 能发现未知攻击,但误报多(正常行为也常常"偏离基线")。
    实际系统通常两者结合,而且更偏重特征 —— 因为误报的代价很实际:运维人员被大量误报淹没后,就会开始忽略所有报警,那时真正的攻击也被忽略了。
  7. 举出三种防火墙和 IDS 都挡不住的攻击。
    任意三种(如):
    - 应用层攻击 —— 攻击藏在完全合法的 HTTPS 流量里,防火墙按端口看不出问题
    - 内部人员越权 —— 流量是内部到内部,不经过边界
    - 钓鱼 —— 用户自己主动点击,流量方向看起来是正常访问
    - 凭据泄露 —— 攻击者用合法账号登录,行为和正常用户一样
    - 加密流量里的内容 —— 看不到(除非做中间人解密)
    所以安全必须分层 —— 不存在能单独解决所有问题的单点防护。

参考资料与适用范围

  • 《计算机网络:自顶向下方法(原书第8版)》§8.9,纸书439–447页(PDF458–466页):本章概念与机制的对应教学章节,引用时需保留模型与版本条件。
  • 教材作者配套教学资源入口:网站目前显示的教材版本与用户提供的第8版可能不同,页码以本章列出的中文第8版为准。

修订核对日期:2026-10-13。本次补充概念入口与教材出处;旧稿的具体数值为历史观察,未重新实测。相关脚本和完整日志未随当前项目提供,不能仅凭转述断言实验已复核,也不据此断言数据造假。

正文源自 m7-06-防火墙与入侵检测.md · 共 10 节 · 7 道自测题