§ 5.4 · Section

防火墙 Firewall

Packet Filter · Stateful Inspection · NGFW

前面三节把"送信的路"讲完了:交换机管同一条街,路由器管跨城干线,网关和光猫管你家门口那道门。现在要问一个反过来方向的问题:路是通的,但凭什么让外面的人随便进你家?这一节的主角是防火墙(Firewall)——它是网络世界的"保安岗",站在内外两个网络的边界上,决定"谁能进、谁不能进、进来能干什么"。这一节用"小区保安的进化史"把包过滤、状态检测、下一代防火墙(NGFW)、默认策略、DMZ 全部讲透。

生活场景
🏘️ 小区门口的保安岗,和它二十年的进化史

想象一个小区的大门口。二十年前,门岗很简单:一个保安、一张桌子、一套制服

最早的保安只干一件事——看工牌。他手里有一张纸,上面写着几条规矩:"快递员可以进""外卖员可以进""装修队不能进"。来个人,他看对方胸前挂的牌子:牌子上面写着"你是从哪来的、你是来干嘛的"——对照纸上的规矩,放行或者拦下。他不问对方要去哪栋楼、上次来过没有,只看这一眼

后来保安变聪明了:他开始记人。谁早上出去了、谁刚才进去了,他心里有本账。这时候有个业主出去买菜,二十分钟后回来,保安一看——哦,是刚才出去的张阿姨,直接放行,不用再查一遍工牌。

再后来,小区升级成了高档写字楼:门口的保安不光看人,还查包。外卖送进来,要过一下安检机,看看里面装的到底是饭还是别的什么。从"看工牌"到"记人"再到"查包",这就是防火墙的三代进化史。这一节讲的每一件事,都藏在这个场景里。

先把这一节的术语翻译成人话

和 § 5.1、§ 5.2 一样,先过一遍术语表。这一节的好消息是:防火墙的每个概念,几乎都能在"小区保安"这个场景里找到一一对应的东西。先把这张表读一遍,读完全文再回来重读一次,效果最好。

术语换成大白话生活里对应的东西
防火墙(Firewall)说白了就是"内外网络边界上的保安岗"小区/写字楼大门口的保安:决定谁进谁不进
包过滤(Packet Filtering,第一代)说白了就是"只看工牌就放行"保安对照纸上的规矩,看牌子不看人
五元组(源/目的 IP、源/目的端口、协议)说白了就是"工牌上写的五样信息"工牌:你是谁(IP)、从哪来、去干什么(端口、协议)
状态检测(Stateful Inspection,第二代)说白了就是"保安开始记人"记住"谁刚出去过",回来能对上号就放行
连接表 / 会话表(Connection / Session Table)说白了就是"保安心里那本进出账"小本子:谁出去的、什么时候出去的、回来该放行
NGFW(Next-Generation Firewall,下一代防火墙,第三代)说白了就是"不光看人还查包的保安"升级成安检岗:看出入证,还拆开包裹看内容
应用识别(Application Identification)说白了就是"认出你用的是哪个 App"查包查出"这是饭,不是违禁品"
默认拒绝(Default Deny)说白了就是"没登记的一律不放行"门卫规矩:名单上没有的,谁也不能进
默认允许(Default Allow)说白了就是"没说不让进的都能进"门卫规矩:没贴禁止告示的,随便进出
DMZ(Demilitarized Zone,非军事区)说白了就是"对外服务的隔离区"小区门口的收发室:快递放那儿,不进业主楼
IPS(Intrusion Prevention System,入侵防御系统)说白了就是"不光拦人,还出手抓坏人的保安"发现有人翻墙,直接摁住而不是只喊一嗓子

这一节可以用一句话串起来:防火墙是"内外边界上的保安岗",它的进化史就是保安越来越聪明的历史——先看工牌(包过滤),再记人(状态检测),最后查包(NGFW)。其余全是细节。

保安岗:防火墙到底在守什么

先做一个最重要的澄清,否则后面全拧着:防火墙不是用来"抓黑客"的,它是用来"守门"的。这两个说法听起来差不多,实际上差得很远。抓黑客是主动出击、满世界找坏人;守门是站在原地,把好进出的那道关——谁要进来,我验一验;该拦的拦,该放的放。一台防火墙可以连一个黑客的面都没见过,但照样把绝大多数恶意连接挡在门外。

它站在哪儿?站在内外两个网络的边界上——比如你家网络和运营商之间(上一节的网关、光猫也在这一带),或者公司内网和公网之间。说白了,它是"内"和"外"之间唯一的那道门。正因为是唯一入口,它才能做到"一夫当关":所有进出数据都要从它眼皮底下过,它才有机会逐个检查。

Analogy · 小区保安岗:防火墙的全部真相

如果你只记住这一节的一个类比,请记住这个。

你家网络想象成一个小区,外面是马路(公网)。小区大门口有一个保安岗——那就是防火墙的位置。

保安岗手里的权力只有三件事:放行、拦下、检查。注意,他不会跑到小区外面去追坏人(那不是他的活,那是警察/杀毒软件的活);他也不会翻遍小区里每家每户的柜子(那是物业保洁的活)。他只在门口,管好"进出"这一件事。

他要回答的问题永远只有一个:眼前的这个人(这个数据包),该不该进这个门?

怎么回答这个问题,就是防火墙技术的全部历史——接下来三代防火墙,本质上是保安判断力越来越强的三届进化。

还有一个边界要说清:防火墙管的是"网络层的进出",不是"你电脑里的安全"。你电脑中病毒、点开钓鱼邮件、密码被人猜出来——这些防火墙都管不着,因为它根本不看那些。它只盯着一件事:经过边界的数据,放不放行。这个定位在后面讲"常见误区"时会反复用到,先在心里立住。

最后一个铺垫:防火墙判断"放不放行"的依据,几十年来一直在变,但变的方向只有一个——看得越来越深。先看表面(地址、端口),再看过程(连接状态),最后看内容(应用、数据)。三代防火墙,就是这条"看得越来越深"的路上的三个里程碑。下面开始讲第一代。

第一代·包过滤:只看五元组的"看脸保安"

第一代防火墙叫包过滤(Packet Filtering),包过滤是 IETF 定义的通用网络概念,不是某一家公司的专利。它的做法一句话说完:每一个数据包过门的时候,保安只看包头上写着的五样信息,对照一张写死的规则表,放行或丢弃。

这五样信息拼起来有个专门的名字——五元组(Five-Tuple)。它就像工牌上印着的内容:

五元组的五项对应工牌上的什么例子
源 IP 地址你从哪来的(回指 § 3.5:门牌号)203.0.113.5
目的 IP 地址你要去哪192.168.1.10
源端口你从哪扇门出来的(回指 § 4.5 的端口概念)50000(一般是临时的随机端口)
目的端口你要敲哪扇门80(HTTP)、443(HTTPS)
协议你是坐什么交通工具来的TCP / UDP / ICMP

规则表长什么样?举个例子,一家公司可以这样写几条:

【包过滤规则表示例(示意,各公司各不相同)】

  编号  动作    源IP             目的IP            目的端口  协议   说明
  ①    允许    内网任意          外网任意          *        *      家里出去随便走
  ②    允许    外网任意          内网服务器        443      TCP    外面可以访问我们的网站(HTTPS)
  ③    拒绝    外网任意          内网任意          *        *      其他一切外来的,一律拦下
  ④    允许    内网任意          外网任意          53       UDP    DNS 查询要放行(回指 §3.4)

★ 包过滤的工作方式:
  每个包进门,保安拿它的五元组,从上往下逐条对照:
  先匹配 ①?不是进来的,是出去的 → 放行
  目的端口是 443 且协议是 TCP?→ 符合 ② → 放行
  是外面来的其他包?→ 撞上 ③ → 丢弃

  每一条规则都写得死死的,谁来都一样——
  保安只看工牌,不看人,不记前因后果。

包过滤的优点和缺点一样明显。优点是快、便宜、简单:它只拆开包的头看一眼,不碰数据内容,一台普通设备就能扛很大的流量。缺点是下面这一节要讲的——它什么都不记得。

还有一个今天几乎人人都在用的例子:你家路由器上那个"防火墙开关"(§ 5.2 讲五合一盒子时提过),默认挡掉外面进来的陌生连接,本质上就带着包过滤的思想。不过它比纯包过滤聪明一点——因为它背后还有 NAT 和状态检测的影子,这个后面细讲。

包过滤的短板:它什么都不记得

包过滤有个特别致命的问题,用一句话就能说破:它对每个包都是"第一次见面"——上一个包放行了,跟下一个包没有任何关系。保安记性为零,每次都像新来的一样从头看工牌。

这带来一个很实际的麻烦。还是拿小区举例:张阿姨早上出门买菜,二十分钟后回来,保安要重新检查她的工牌。如果只是慢一点,倒也无所谓。可问题是:网络上的通信大多是"一来一回"的——你访问一个网站,你的请求出去(出站),网站的响应回来(入站)。回来的响应也是"从外面进来的包",按包过滤的规则,它跟普通的外来攻击包一样,都要过一遍"外来规则"。

于是矛盾出现了:如果规则写"外来的全拦",那网站给你回的响应也被拦了——你的网页根本打不开;如果规则写"外来的全放",那攻击者的扫描也放进来了,门等于没守。包过滤时代的网管只能靠"猜端口"来缓解:常见的响应端口(比如 80、443 回来的包)放行,冷门端口的回来包拦下。这就是所谓"把门开到只留一条缝"——能透点气,但也确实不够安全。

换个角度说:包过滤认识"包",但不认识"连接"。而互联网上的通信恰恰是建立在连接上的。这就引出了第二代防火墙要补的那块短板——先搞清"连接"是什么,再讲它怎么补。

包过滤还有个隐藏的死穴,值得单独点出来:不是所有流量都有"连接"。TCP 有三次握手,有明确的开始和结束;可 UDP(回指 § 3.3:不握手、直接发的那种)和 ICMP(回指 § 1.5:ping 用的那种)根本没有"连接"这回事——它们就是"一个包打过去,一个包打回来"。对包过滤来说,回来的那个 UDP 包照样是"外来的",照样要过一遍"外来规则":规则开大了,什么都能进来;规则开小了,正常的应答也被拦。网管只能继续"猜端口"这个土办法。说白了,包过滤时代管网络,就像医院挂号窗口只有一个护士,来一个病人就问一遍"你挂哪个科"——她完全不记得刚才那个病人是不是刚从里面看完病出来。效率低、容易错,而且流量越大,越容易乱。

顺便补一句历史,帮你看清这条线的来龙去脉:最早的"防火墙"根本不是独立设备,而是路由器上顺手加的一段过滤代码——1980 年代末开始出现,1990 年代初才慢慢有了独立的防火墙产品。所以第一代防火墙"只认包、不认连接"是历史的必然:它一开始就不是专门设计的安全设备,只是"路由器在转发时顺便拦一拦"。

这里要回一下 § 4.5 讲过的概念:TCP 是"面向连接"的协议——你和服务器先"打电话"建立连接(§ 4.3 讲过三次握手:听得到吗 / 听得到,你呢 / 我也听得到),然后在同一条连接上你来我往地传数据。一个网页访问,不是"一个包过去、一个包回来"就完了,而是一次握手建立起一条连接,这条连接上再跑成百上千个包。连接是有"身份"的,包只是这条连接上的普通一员。包过滤的问题是:它有几百条规则对付单个的包,却完全没意识到"包们其实是成群结队、属于某条连接的"。

第二代·状态检测:保安开始记人了

第二代防火墙叫状态检测(Stateful Inspection),这也是 IETF 定义的通用网络概念;1990 年代中期的防火墙产品(以 Check Point 的 FireWall-1 为代表)把它普及到了全行业。它的核心思想一句话:不再把每个包当"第一次见面的陌生人",而是记住"谁出去过",回来的包只要能对上号,就放行。

还是小区保安的类比,这次保安终于有了记性:张阿姨早上出门,保安在她名字下面记一笔"出去了";二十分钟后她回来,保安一看——刚才出去的人,对上号了,放行。他不需要再查一遍工牌,因为他知道这个人是从里面出去的,不是外面来的陌生人。

放到网络上:你打开浏览器访问一个网站,你的请求从内网出去,防火墙把这个"出去的连接"记进一张表里;网站回包进来的时候,防火墙查这张表——这个包属于刚才那条"从里面发起的连接"吗?属于,放行。换句话说:"里面先发起的连接,回来的响应我一律放行;外面主动发起、我在表里找不到对应条目的连接,一律拦下。"

这条规则同时解决了包过滤时代的两个难题:一方面,回来的正常响应不会被误拦(因为表里对得上号);另一方面,外面主动来敲门的陌生连接会被拦下(因为表里找不到对应条目)。相当于保安既认人又认门:业主进出畅通无阻,陌生人想混进来照样没门。

讲到"连接"这个概念,值得停下来亲手看一下它长什么样。下面这个组件把 § 4.3 讲过的 TCP 三次握手拆成了分步演示——状态检测防火墙记的"连接",就是从第一步握手开始记的

看完你会更明白"连接"是个有开始、有过程、有结束的东西,而不是一个孤零零的包。状态检测防火墙记住的正是这个"从 SYN 开始、到 FIN 结束"的完整过程——它认的是整条连接,不是单个包。这就是它比第一代聪明的地方,也是"连接 vs 数据包"这组概念在这个场景里最实际的应用。

状态检测怎么工作:连接表与"对号入座"

状态检测防火墙的记性藏在哪?藏在一张叫连接表(Connection Table)(也叫会话表)的表里。说白了,它就是保安心里那本进出账:谁出去的、从哪个门出去的、现在回来没有。这台防火墙的一切判断,都围绕着这本账展开。

把刚才"访问网站"的例子完整走一遍,看这本账是怎么记的:

【状态检测:一本连接账走天下】

  你的电脑(192.168.1.10) → 防火墙 → 网站服务器(203.0.113.88:443)

  ① 你的电脑发来一个 SYN(请求建立连接,回指 §4.3):
     防火墙查连接表 → 没有这条 → 这是"从里面发起的",允许
     → 在表里记一行:
        [ 方向: 内→外 | 源: 192.168.1.10:50000 | 目的: 203.0.113.88:443 | 协议: TCP ]
     → 放行,让请求出门

  ② 服务器的回包(SYN-ACK)回来了,方向是外→内:
     防火墙查连接表 → 找到那一行!
       "目的 192.168.1.10:50000 正是刚才出去那条连接的源" → 对上号了
     → 放行,不用再查别的规则

  ③ 后续网页数据继续回来(一个个 ACK 和数据包):
     防火墙照样查表 → 全都能对上号 → 一路放行

  ④ 你关掉网页(FIN 挥手,回指 §4.3):
     防火墙把这一行从表里划掉 → 连接结束,账清了

★ 换成大白话:
  这张表就是保安的进出账——
  出去的记一笔,回来对得上就放,
  找不到账的陌生连接,一律按"外人"处理。

注意第 ② 步那个细节:回来的包是"外→内"方向的,但它依然被放行了。为什么?因为它不是"外面主动发起的",而是"里面发起的那条连接的合法响应"——这在表里有凭有据。这就是状态检测和包过滤最本质的区别:包过滤只问"这个包本身长什么样",状态检测会问"这个包是不是一条已知连接的一部分"。

连接表还有一个配套机制值得知道:超时老化。如果一条连接很久没动静(比如网页打开后你半天没点),表里那一行会被自动清掉——相当于保安的账本定期清理,太久没进出的名字划掉。这带来一个真实的小现象:有些连接长时间空闲后会被防火墙"忘记",下次要用就得重新握手。你偶尔遇到的"网页卡一下又好了",就有这个原因在里头(§ 3.3 讲过的心跳机制,正是为了对付这种超时而生的)。

还有一个细节顺手说破,不然你以后看到会犯嘀咕:UDP 没有握手,状态检测怎么记它?答案是给 UDP 也造一条"伪连接":防火墙看到内网发出去一个 UDP 包,就在表里记一行"从 192.168.1.10:50000 发往某处",短时间内回来的 UDP 包能对上号就放行,超时(通常几十秒)就划掉。说白了,保安不认识"UDP 这位访客",但认得他的脚步声——听个响,对个时间,就放行。这条"伪连接"就是 UDP 世界里"连接"的替身。相当于给进出的人发了一把临时钥匙,离开时收回。

状态检测和 NAT 还是一对天生的搭档(回指 § 3.5 的前台类比):NAT 改地址需要记住"哪个内部设备对应哪个外线",状态检测的连接表里本来就有这些信息——两者共用同一本账,NAT 的登记和防火墙的记人是一回事。这也是为什么你家路由器里"防火墙"和"NAT"经常被放在一起说:它们共用着同一张表,只是各看各的用途。就像收发室前台的本子:一边记"这通电话是谁的"(NAT 转交),一边记"这个人是不是刚才出去的"(防火墙放行)——同一本账,两种用法。

到这里,第二代防火墙把"守门"这件事做得相当漂亮了。但它还看不见内容。一个包是从哪来、到哪去、走的哪个端口,防火墙全知道;可包里装的到底是什么——是网页、是视频、是聊天消息、还是恶意软件?它一概不知道。要"看得见内容",就得等第三代上场。

第三代·NGFW:拆开包裹看内容

第三代防火墙叫NGFW(Next-Generation Firewall,下一代防火墙)。这个词最早是 2009 年咨询机构 Gartner 提出来的——它定义的"下一代",核心就是一句话:防火墙要能认出"你用的到底是什么应用"。

为什么认应用这么重要?讲个真实场景。公司里有人整天刷视频、挂网游、偷偷用某些聊天软件——网管想管,但第二代防火墙管不住,为什么?因为这些应用都会"伪装":它们可以走 443 端口(HTTPS 的口子),可以走 80 端口(HTTP 的口子),甚至故意走一些允许放行的端口,好让自己看起来"人畜无害"。

第二代防火墙只认端口:443 端口来的,一律当成"安全网站流量"放行。可是443 端口只是个门牌号,不代表里面住的是好人——打个比方,光看"目的地是 443 号房间"完全不够,因为任何应用都能租下这个房间。

NGFW 的解决办法是拆开包裹看内容:它不光看包头的五元组,还深入到数据里面,识别"这段流量到底是什么应用、什么协议"——这叫应用识别(Application Identification)。保安的进化又进了一步:从"看工牌"到"记人",再到"拆包检查"——看看你这箱东西里,装的到底是文件还是别的什么。

这里要顺便纠正一个流传很广的误解:很多人以为"端口 443 就代表 HTTPS 安全"。443 确实是 HTTPS 的默认端口(HTTP 语义规范 RFC 9110 定义了 HTTP 本身,HTTPS 的默认端口约定是行业通行做法),但端口只是"约定俗成的门牌号",不是"安全检查"。攻击者完全可以拿恶意流量走 443 端口——所以光靠"看端口"永远不够,这也是 NGFW 存在的原因。

但拆包检查也有代价,而且是个大代价,必须说清:加密。今天的网站绝大多数是 HTTPS——数据在发出前就加密了(§ 4.4 讲过 TLS 握手)。防火墙要是想"看内容",就得先把加密解开,看完再重新加密——专业说法叫"SSL 解密检测"。这等于保安把包裹拆开、检查完、再原样封好。这活儿能干,但很重:解密要花 CPU、影响速度,还涉及隐私问题(公司到底该不该看员工的上网内容?)。所以实际部署中,NGFW 常常是"挑着看":对重点流量解密检查,其他流量按低成本方式放行。

NGFW 还常常和另一个角色搭伴出现:IPS(Intrusion Prevention System,入侵防御系统)。两者的分工是:防火墙是保安岗(放行/拦下),IPS 是巡逻的保安(发现有人在翻墙,直接摁住)。NGFW 一般把这两样集成在一起,所以企业采购时经常是"防火墙 + IPS"打包买。

三代防火墙讲完了,先停下来喘口气,用一张对比表收拢一下:

第一代·包过滤第二代·状态检测第三代·NGFW
看什么只看五元组(IP、端口、协议)五元组 + 连接状态五元组 + 连接状态 + 应用内容
有没有记性没有,每个包都是第一次见有,记连接表有,记连接表,还认应用
保安类比看工牌的保安记人的保安查包的安检岗
优点快、便宜、简单能区分"回来的响应"和"陌生闯入"能认出伪装的应用,挡得住"挂羊头"流量
缺点不认识连接,误拦或漏拦看不见内容,认不出伪装贵、慢,解密有代价有隐私争议
今天还用吗作为基础规则存在所有正经防火墙的标配企业主流,家用不太用得上

三代防火墙的变化方向只有一个:看得越来越深——从表面(地址端口)到过程(连接状态)再到内容(应用数据)。这是防火墙五十年来唯一的进化主线。

默认策略:默认拒绝 vs 默认允许

不管第几代防火墙,开门之前都得先回答一个问题:规则表没写到的流量,到底放还是不放?这个问题的答案,就是防火墙的默认策略(Default Policy)。只有两种答案,而且它们的差别大得离谱。

默认拒绝(Default Deny):没写"允许"的,一律拒绝。这就像门卫手里的名单:名单上有的能进,名单上没有的——不管你是谁,一律不放行。好处是安全,坏处是麻烦:任何新服务上线,都得先"在名单上加一笔",忘了加就白搭。

默认允许(Default Allow):没写"禁止"的,一律放行。这就像"没贴禁止告示就能进"的开放式小区:除非专门写一条规则说"不许",否则随便进。好处是省事、兼容性好,坏处是安全全靠"有没有想起来写规则"——没想到的漏洞就漏过去了。

默认拒绝(Default Deny)默认允许(Default Allow)
门卫逻辑"没登记的一律不放行""没说不让进的都能进"
安全底线高:没写规则的自动挡在门外低:没写规则的自动放行
使用成本高:每开一个服务都要加规则低:基本不用管
漏配后果服务访问不了(能发现)攻击漏进来(发现不了)
典型场景企业防火墙、银行、数据中心家用路由器、开发测试环境
一句话记法"白名单思维":先全关,再逐个开"黑名单思维":先全开,再逐个关

哪个更安全?只要不是抬杠,答案是默认拒绝。为什么?因为安全问题的本质是"你不知道自己不知道什么"——默认拒绝是"先假设有危险,再逐项排除";默认允许是"先假设没危险,出事再说"。前者漏一个规则,最多是某个服务用不了(会有人叫,能发现);后者漏一个规则,可能是攻击者已经进来了(没人叫,发现不了)。银行金库从来不是"没贴'禁止入内'就能进",而是"没在授权名单上就进不去"——这个直觉是通用的。

有意思的是:你家路由器其实是"默认拒绝"的——只不过它不是靠防火墙规则,而是靠 NAT(回指 § 3.5 的"前台"类比):外面主动发来的连接,因为找不到你家哪台设备对应它,直接被丢掉。这就是为什么你从没设置过防火墙,家里的电脑却"默认就安全"——NAT 顺手替你当了半个门卫。下一节"家用场景"会把这个关系彻底理清。

DMZ:把对外服务关进隔离区

讲完默认策略,再讲一个防火墙世界里绕不开的布局——DMZ(Demilitarized Zone,非军事区;这个词本来是军事术语,指交战双方中间那块"谁都不驻军"的缓冲区)。在网络里,DMZ 指的是"放在内外网之间、专门对外提供服务的那一小块隔离区域"。

为什么要专门划一块地?想一个矛盾:公司要开一个网站,让全世界的访客都能访问。这个网站放哪?放内网里?那就得给外面的人开一条直通内网的路——可这样一来,攻击者也能顺着这条路摸进公司内部。放外网裸奔?那服务器完全暴露在公网上(回指 § 3.5:公网 IP 是"写在营业执照上的正式地址",全世界都找得到),被打爆的风险很高。

DMZ 是第三种解法:在防火墙外面单独划一小块地,把对外服务的服务器(网站、邮件服务器等)放进去。访客只能到 DMZ 里跟这些服务器打交道,够不着真正的内网。就算 DMZ 里那台网站服务器被打穿了,攻击者面对的还是"一道内网防火墙",进不了公司核心。

打个比方:DMZ 就是小区门口的收发室——快递(访客流量)只能放在收发室,进不了业主楼(内网)。收发室就算被翻个底朝天,业主家里依然没事。换成大白话:把"不得不让外人碰的东西"和"绝对不能让外人碰的东西"物理隔开,中间再夹一道门。

家用场景也有 DMZ 的影子,但很多人误解了它:有些路由器有个"DMZ 主机"设置,打开后会把某台设备完全暴露到公网(相当于把家里一间房直接开在小区门口,没有门卫管)。这是给"必须从外面直连"的特殊需求用的(比如某些老游戏主机),开了它等于撤掉了那台设备前面的所有防护——不是"更先进",是"更危险",别随便开。

家用场景:路由器里的"防火墙开关"

前面讲的都是企业防火墙,现在回到你家。还记得 § 5.2 那张"五合一"清单吗?你家那台路由器盒子里,除了路由器、交换机、无线 AP、DHCP 服务器、网关,还有一样——"防火墙(简易版)"。这一节把它讲透。

先理清一个容易混的关系:你家盒子里其实有两层"防护"叠在一起,一层是 NAT,一层是防火墙。它们经常被混着叫,但职责不同:

所以你家路由器后台里那个"防火墙"开关,打开后到底改变了什么?打开 = 明确启用"状态检测 + 拒绝外来陌生连接"这套规则;关闭 = 只靠 NAT 那层副作用挡事,甚至有些路由器会直接放行更多流量。对普通家庭来说,保持默认开启就行——你不需要懂细节,别手痒关掉它。真正需要动手的只有少数情况:家里开了一台游戏服务器、要做端口映射(§ 3.5 讲过"在前台留转接规则")——这时你是在"开一条明确的缝",这没问题,但要知道你开了缝。

还有一个很常见的困惑要解开:"我把路由器防火墙关了,为什么还能上网?"因为关掉的是"防火墙"这一层,NAT 那层还在,路由转发也还在——你家网络照样工作,只是少了一道闸。就像小区撤销了安检岗,但大门和门卫室还在,进出照样有人看管,只是检查松了。

路由器后台里还有一个和防火墙强相关的开关,叫 UPnP(Universal Plug and Play,通用即插即用)。翻译成人话:让家里的应用自动跟路由器说"我要在防火墙上开一个窗口",路由器自动登记,不用你手动填规则。游戏机、NAS、智能家居经常靠它自动打通链路。好处是省事;坏处是——任何应用都可以自己开口子,等于前台允许每个访客自己给自己办门禁卡。所以一些讲究安全的路由器默认关着它。判断原则很简单:你的设备需要自动开端口(比如游戏联机、NAS 外网访问),就开;不需要,就关。

常见误区:防火墙不是杀毒软件

防火墙是被误解最多的安全概念之一。最典型的一个误区,一句话就能拆穿:防火墙不是杀毒软件——一个是门卫,一个是保洁。

Analogy · 门卫与保洁:防火墙和杀毒软件的分工

安全这件事想成一栋大楼的管理:

门卫(防火墙)的岗位在大门口:管的是"进出"。谁要进门,我验身份;该拦的拦下,该放的放行。他管不了大楼里面的事——屋里进了老鼠、墙皮脱落、有人往墙上乱涂,他看不见也不归他管。

保洁(杀毒软件)的岗位在大楼里面:管的是"里头的卫生"——清理垃圾、灭虫、擦掉污渍。她管不了大门口的事——今天来了几个陌生人、谁带了个大箱子进来,她不知道也不归她管。

防火墙管"进出",杀毒软件管"电脑里的东西干净不干净"——它们是两套系统,谁也替代不了谁,谁也补不了谁的位。一台电脑可以同时没有防火墙、没有杀毒软件;也可以只有其中一个——但想真正安全,两个岗位都该有人。

由这个根本误区,又派生出四个流传很广的误解,一次拆干净:

这四个误区背后是同一个错误:把"守门"当成"全部安全"。防火墙只负责门口那一环,安全是门卫、保洁、锁匠、业主自己共同的事。

防火墙到底挡什么、不挡什么

这一节最后的正题:把"防火墙能挡什么、不能挡什么"用一张清单说死。理解这张清单,你对防火墙的理解就超过大多数人了。

挡得住(这部分是它的本职工作):

挡不住(这部分不是它的活,别指望它):

一句话记牢:防火墙挡的是"外面进来的、不合规矩的流量";它挡不住"你主动出去的"、"加密藏起来的"和"内部自己发生的"。它不是万能盾牌,是门口那位尽责的保安——理解了它的岗位,你就知道什么时候该指望它,什么时候该去找别人。

最后补一个很多人关心的:防火墙能挡 DDoS(分布式拒绝服务攻击)吗?要分两种情况看,这恰好能检验你这一节学懂没有。DDoS 有两种:一种是"攻击流量本身有恶意"(比如专门打某个漏洞、专打某个端口),防火墙认得出规则,能挡;另一种更常见的是带宽型 DDoS——攻击者控制成千上万台"肉鸡"电脑,同时向你家方向发海量请求,把通往你家的路本身给堵满了。这种防火墙挡不住:它不是"谁该进谁不该进"的问题,是"人太多,路不够宽"的问题。门卫再敬业,几千人同时堵在小区门口排队,他也只能干看着——要解决得靠运营商在更上游的地方拦,或者用专门抗 DDoS 的服务。说白了,防火墙管"进门审查",管不了"门口堵车"。想清楚这两者的区别,你对防火墙的边界就真的懂了。

动手看看:用命令看连接表

这一节讲了半天的"连接表",它不是概念,是你能在自己电脑上亲眼看到的东西。Windows、Linux、macOS 都自带一条命令,把当前机器上的所有连接列得明明白白——这条命令叫 netstat

在命令行里敲 netstat -an(Windows)或者 netstat -an | grep ESTABLISHED(Linux / macOS),你会看到一排排"地址:端口 ↔ 地址:端口 + 状态"。那些 ESTABLISHED 的行,就是已经建立好的连接——你家防火墙的连接表里,记的就是类似这样的东西(当然它记得更全,还有方向、超时等)。

先看一条最简单的命令长什么样:

拆开看:netstat 是命令本身(network statistics 的缩写,"网络统计"),-a 是选项(显示所有连接,不只看正在活动的),-n 是选项(用数字地址显示,不解析成域名,跑得更快)。你在这条命令的输出里看到的每一个 ESTABLISHED,都对应着状态检测防火墙连接表里的一行——下次再看这个页面,你会对"连接"这两个字有完全不一样的体感。

顺便一提:你自己电脑上其实也有一道"微型防火墙"——Windows 自带的 Windows Defender 防火墙、macOS 的应用防火墙都是。它们干的和企业防火墙一个道理:默认拒绝外来陌生连接,问你要不要放行某个应用。你可以去系统设置里翻翻它的规则,看看"允许/阻止"是怎么列的——那一屏,就是这一节全部知识的最小落地版。

Recap · 收束

一句话总结:防火墙是"内外边界上的保安岗"——它站在内网和公网之间,决定"谁能进、谁不能进、进来能干什么"。它是"守门",不是"抓黑客"。

机制上记住四件事
· 三代进化:第一代包过滤只看五元组(源/目的 IP、源/目的端口、协议),像看工牌的保安,不记状态;第二代状态检测记连接表,回来的包能对上号就放行,像记人的保安;第三代 NGFW 拆包看内容,认出伪装的应用,像查包的安检岗。进化主线只有一条:看得越来越深。
· 默认策略:默认拒绝(没写允许的一律拒绝)比默认允许(没写禁止的都能进)安全——因为漏规则的可发现性完全不同。你家路由器的"默认安全",本质是 NAT 副作用 + 简易防火墙叠加的结果。
· DMZ:把对外服务的服务器放进内外网之间的隔离区(收发室类比),让访客够不着真正的内网。
· 边界要清楚:防火墙不是杀毒软件(门卫 vs 保洁);它挡"外面进来的、不合规矩的流量",挡不住钓鱼链接、中毒电脑往外传、加密流量和内部威胁。

本节的连接:§ 5.1 交换机管一条街、§ 5.2 路由器管跨城、§ 5.3 网关光猫是门口那道门——而防火墙,就是站在门口检查"该不该进"的那位保安。保安守好了门,下一节要解决的是另一个问题:访客太多的时候怎么办——§ 5.5 负载均衡 LB,把流量均匀分给一群服务器,让它们别累死一台、闲死九台。

☰ 主页
Xue Hai Wu Ya · Network · § 5.4 · 防火墙 Firewall