一直以来,防火墙的争议不断,许多接入商都不愿意使用防火墙了,认为防火墙会影响网站打开速度等等,但是这种问题只存在于传统防火墙,传统防火墙主要是抵御各方面的攻击,而现代防火墙能能提供客户端防御及网络防护,不仅有用,还是必需品。
传统防火墙只能阻止或允许特定IP地址和端口,能防护的东西相当有限。最常见的应用场景就是阻止未授权用户或恶意软件连接未受保护的监听服务或守护进程。即便忽视路由器在IP/端口过滤上的超高效率,时代和攻击类型也发生了改变,传统防火墙如今很大程度上形同虚设。
20年前,阻止未授权连接很有意义。大多数计算机都防护不严,口令也弱,不仅满载浑身漏洞的软件,还往往开放有允许任何人登录或连接的服务。发个畸形网络包就能搞掉普通的服务器,而且这还是在管理员没设置允许匿名连接的完全管理员权限远程服务的情况下才需要,如果设了这种远程管理服务,那基本上可以随随便便摸进服务器。至于Windows的匿名NETBIOS连接,在 Windows XP 默认禁止前的15年里,一直都是黑客的宝贵财富。
如果你的防火墙只是用于封禁未授权IP地址或协议,云服务器租用,那用个路由器会好得多,也快得多。计算机安全界有句格言:“首选最快最简单的方法。”说的就是这个道理,如果有什么东西是可以用更快更有效率的设备加以封堵的,那就将那台设备用作你的第一道防线。这样会更快更有效率地摒除更多你不想要的流量。路由器的“上层”代码要比防火墙少很多,规则列表也更短。路由器的条件决策循环比防火墙快上几个数量级。不过,如今的威胁环境下,还需不需要封禁这些未授权连接,这一点难说。
防火墙最擅长阻止对监听服务的未授权远程连接,可以防止攻击者在连接后利用缓冲区溢出接管计算机的控制权。这正是防火墙诞生的最主要原因。有缺陷的服务太常见了,都已经被认为是常态。冲击波、Slammer蠕虫之类的恶意程序利用这些服务可以在几分钟里席卷全世界。
现在的服务并没有那么脆弱。程序员如今使用的编程语言默认就会检查缓冲区溢出。用来阻止传统漏洞利用方法的其他操作系统计算机安全措施也很擅长做这事儿。微软每年都能在其产品线上发现130-150个漏洞。自2003年算起,发现的漏洞数约2000个。但只有5-10个是仅供远程利用的。同一时期,苹果和Linux机器的漏洞更多,但仅可远程利用的漏洞进程占比是一样的。
必须明确一点:虽然可利用的脆弱服务成百上千,但几乎全都需要本地终端用户做点儿什么才能发起攻击。要么是点击恶意链接,VPS,要么是访问挂马网站。为什么必须本地用户参与?因为只有当终端用户这么做的时候,才可以创建一条“经允许”的出站连接,然后顺理成章地再来一条“经允许”的入站连接回连到用户的计算机。如今所有攻击几乎都是“客户端”攻击,而防火墙并不擅长阻止此类连接。
端口阻塞不再有效
每个服务都用自身固定TCP/IP端口的时期,比如FTP用21/22、SMTP用25,这样说来,传统防火墙要更为有用些。
今天,全世界的网络流量大部分都走80(HTTP)和443(HTTPS)端口,而且只用后者的情况会越来越多。那些尚未走443端口的网络流量在未来几年里也会切到443上的。如果什么都绑定在少量几个端口上,那端口阻塞还有什么意义?不止如此,HTTPS默认加密的特性也会让流量过滤更难以执行。
边界正在消失
防火墙是典型的安全域边界。定义出两三个安全边界就可以用防火墙控制其间的流量。然而,这些有效的、可保安全的边界,这10年来一直在衰落。边界从来都不完美,但自从我们开始将互联网接入其他网络,开始将WiFi路由器接入各种网络,边界就真正步入消亡了。
只有一两个网络边界时,防火墙还能有点用,但当我们开始添加“隔离区(DMZ)”和其他“授权网络”时,防火墙就显得不够用了。而当长期联网成为常态,我们不得不承认,边界和传统防火墙的末日到了。
长期以来,很多IT安全人员都认为我们还拥有安全边界,但只要一审计,就会发现这些边界根本就漏得跟筛子一样。因为怕破坏了某些关键服务或应用,网络管理员基本上都会放行每个未定义的流量路径。
防火墙管理糟糕
除了虚假的边界安全感,大多数防火墙还管理糟糕。几乎所有家庭用户都不知道防火墙是什么、有什么用,即便自家电脑上默认开启了防火墙,他们也从未关注或配置过。企业端的情况也不见得好到哪儿去,尽管企业安全人员有时候会自欺欺人地觉得自己做得还好。