seegongsik
安全

防火墙 怎么工作

城堡有好几道供人进出的门。要是把门全都大敞着,谁都能随便进来,所以每道门都派个卫兵,盘查进进出出的人。电脑上也有好多道让通信进出的门。守着这些门、按定好的规则盘查通信的卫兵,就是防火墙。如果说上一课的锁守护的是已经打开的连接里的内容,那么防火墙决定的是哪些连接一开始就能进来。卫兵看的是什么,又凭什么决定放行还是拦下?

01

守住门

在网络领域里我们看过,通信是通过一种叫端口的编了号的门进出的。网页用一道门,邮件用另一道门,门按用途分开。把门全都敞着确实方便,可那样谁都能从任何一道门进来,去碰门后面运行的程序。
所以要在门前派个卫兵。一条一条查看进出的通信、决定放行还是拦下的这个卫兵,就是防火墙。它可以站在网络的入口,比如家里或公司的路由器;也可以装在每一台电脑里面。就像小区门口有保安,每家每户还有自己的门锁。

?
外面
防火墙
里面
通信
外面的通信想进到里面来。

点一下,把进来的通信发出去。防火墙会在中间拦住它,进行盘查。

发出去的通信没能直接进去,停在了防火墙前面。不是直接放行,而是先拦下来查一查,这就是卫兵的头一件差事。要是不查就全放进来,派卫兵就没意义了。
卫兵看的,更像是贴在通信外面的信封:从哪里来、到哪里去、想从几号门进。那么,看着这个信封,凭什么标准来决定放行还是拦下呢?

02

用规则定下放行和拦截

卫兵手里拿着一份规则清单。规则写明了哪些通信放行、哪些通信拦截。比如一台网页服务器,就把网页用的门开着,其他用不上的门关着。还可以把来源地址或目的地址也写进规则,只接收从指定地方来的通信。
通信一到,卫兵就从上往下逐条比对规则,按第一条对得上的规则办。所以就算规则一样,排列的顺序也可能改变结果。听起来复杂,核心却很简单:把门和规则配成对,分出放行和拦截。

给每道门定规则
门 80网页
-
门 25邮件
-
门 23不用
-
给每道门点放行或拦截来定规则。

给每道门点“放行”或“拦截”,定下规则。通信会照你定的规则通过或被拦住。

规则一定,结果就清清楚楚地分开了。设成放行的门,通信直接通过;设成拦截的门,通信被挡住。同样的通信,从哪道门来、那道门的规则是什么,命运就不一样。
可这里冒出一个疑问:要看网站,网站发回的响应得进得来才行,要是进来的通信都拦着,那怎么办?现在的防火墙会记住从里面先发起的连接,只挑这些连接的响应放进来。那么,规则里什么都没写的陌生通信,又该怎么处理?

03

默认是:不认识的就拦

假设来了一条规则里没有的陌生通信。卫兵能采取的姿态有两种:一种是先放进来、只拦可疑的,叫默认放行;另一种是先拦住、只放允许过的,叫默认拦截。
安全的是默认拦截。在默认放行下,该拦的东西只要漏写一样,就直接成了漏洞;在默认拦截下,忘了写进放行名单的门照样关着。换句话说,就算出错,也是错在关着的一边,而不是开着的一边。

点一下切换默认姿态
+网页 (允许清单)通过
+邮件 (允许清单)通过
?陌生通信被拦
只放允许的,不认识的拦下。

点一下,切换默认姿态。设成默认拦截,放行名单上没有的陌生通信就全被拦住。

姿态一换,差别就很大。默认放行时,陌生通信也悄悄溜了进来;换成默认拦截后,只有放行名单上写着的才能通过,其余的全被拦住。连没想到的通信也能自动挡在门外,这就是默认拦截的厉害之处。
代价也有:每当新程序要用一道门,就得给它加一条放行规则。不过,这点麻烦比一个不知道在哪儿的漏洞便宜多了。那么,门开得越少就越安全吗?

04

开着的门越少越安全

从外面能碰到的地方合在一起,叫攻击面。每一道开着的门都是这样一个点,每道门后面都有程序在运行。程序里要是有还没被发现的缺陷,那道门就可能成为入口。
所以开着的门越多,攻击面越大;只留必需的门、把其余的关上,攻击面就缩小了。用不上的门,没有理由开着。光是关掉不用的门,暴露的部分就会大大减少,面小了也更好守。这就像房子窗户越少,小偷能下手的地方就越少。

攻击面开着的门: 4/4
开的门多,攻击面就宽。

把开着的门一道一道点上关掉。开着的门越少,攻击面的长条就越短。

每关一道门,攻击面的长条就短一截。开着的门多时,暴露面很大;只留必需的门,就一下子缩小了。缩小攻击面,说的就是这个意思。
当然,把需要的门也关了,事情就办不成,所以要用的门得开着。而且,防火墙挡不住从放行的门进来的东西。从网页那道门进来的恶意文件,或是里面的人自己点开的链接,按规则都属于允许的通信。用得上的开,用不上的关,同时也要记住:光靠门守不住一切。

05

小结

归纳起来是这样:防火墙是按规则盘查进出通信的卫兵。通信通过叫端口的门进出,防火墙看来源、目的地和门的编号,对照写明放行还是拦截的规则。从里面发起的连接,它会记住并放行这些连接的响应。
默认是不认识的就拦,也就是默认拦截,只有允许过的才能通过。开着的门越少,攻击面越小,就越安全。不过,从放行的门进来的东西,以及人自己打开的东西,不归防火墙管。

依次点四个要点
从上往下依次点下面的要点

依次点四个要点回顾一下:守住门、放行与拦截的规则、默认拦截、缩小攻击面。

现在你知道防火墙是做什么的了。它是守着门、按规则盘查、拦下不认识的、关掉不用的门的卫兵。可这个卫兵只看信封,挡不住里面的人自己把门打开。
所以攻击者有时不去砸门,而是骗人把门打开。下一课来看这种不冲着技术、而冲着人心下手的攻击:社会工程学。

一句话总结防火墙是按规则盘查进出通信的卫兵。通信通过叫端口的门进出,防火墙看来源、目的地和要进哪道门,对照决定放行还是拦截的规则。规则从上往下比对,按第一条对得上的办;从里面先发起的连接,它会记住,并放行这些连接的响应。关键是默认拦截。只放行明确允许过的,不认识的先拦住,所以就算有门忘了写,也照样关着。另外,开着的门越少,从外面能碰到的面,也就是攻击面越小,就越安全。所以只开必需的门、其余的关上,是个好习惯。不过,防火墙挡不住从放行的门进来的恶意内容,也挡不住被骗的人自己打开的门。
← 安全
如果有帮助,请支持我们