极客时间已完结课程限时免费阅读

19 | 防火墙:如何和黑客“划清界限”?

19 | 防火墙:如何和黑客“划清界限”?-极客时间

19 | 防火墙:如何和黑客“划清界限”?

讲述:何为舟

时长13:35大小10.90M

你好,我是何为舟。
黑客在网络攻击时,第一步会扫描系统对外开放的端口,尝试发起连接或者攻击。比如,黑客可以扫描公司公网 IP 的 22 端口(SSH 服务),然后尝试爆破登录。这个时候,通过防火墙,我们既可以屏蔽掉开放的 22 端口,也能拦截爆破的请求。所以,防火墙是面对外部入侵的第一道防线。
当然,这只是个简单的例子,现实中黑客的攻击手段更多,攻击场景也更加复杂。那这个时候,防火墙是如何为系统和网络提供保护的呢?具体来说,防火墙能够拦截哪些攻击呢?它的盲区又是什么呢?今天,我们就一起来学习,如何通过防火墙进行安全防护。

防火墙如何为网络提供保护?

你对防火墙应该不陌生。为了咱们统一一下思想,方便学习后面的内容,这里我还是再和你啰嗦几句。
防火墙是部署在网络边界上的一种安全设备,其概念比较宽泛,根据需求不同可以工作在 OSI(Open System Interconnection,开放式系统互联) 网络模型的一层或多层上。一般情况下,防火墙会和路由器搭配使用(或者说路由器能够承担部分防火墙的功能),来对网络进行隔离。
根据实现方式和功能的不同,防火墙可以分为三种类型:包过滤防火墙、应用网关防火墙和状态检测防火墙。不同的防火墙在性能和防护能力上都有各自的特点,适用于不同的场景。下面我们一一来看。

1. 包过滤防火墙

包过滤防火墙工作在网络层和传输层上。在这两个层级中,网络请求都是以 TCP 或者 UDP 数据包的形式进行流动的。因此,包过滤防火墙是通过检测并拦截所有流经防火墙的 TCP 和 UDP 数据包,来对系统提供保护。它能够获取到的信息包括:源 IP 和端口、目标 IP 和端口、协议号等。由于大部分的路由器甚至 Linux 系统本身(Iptables)也具备类似的功能。因此,通常情况下,我们不需要采购额外的设备部署包过滤防火墙,只需要直接对网络边界的路由器进行设置,就能够满足最基本的拦截需求了。
但是,在防护能力上,包过滤防火墙是比较弱的,它只能提供最基础的安全防护。这是因为,包过滤防火墙的过滤规则基本都是静态的。也就是说,包过滤防火墙只能够通过匹配 IP 地址和端口号,判断这些信息是否命中特定的规则来进行过滤。比如,禁止外网 IP 访问 80 和 443 以外的公司 IP 端口。所以,现在大部分的包过滤防火墙都进行了升级,引入了诸如“连接状态”等概念,也就变成了状态检测防火墙。

2. 应用网关防火墙

应用网关防火墙以代理的模式工作在应用层。所谓“代理”,即接收客户端发出的请求,然后以客户端的身份将请求再发往服务端。大部分的系统和应用都是工作在应用层的,因此,应用网关防火墙能够获取到系统和应用的全部信息,从而实现更复杂的功能,如:内容监控、认证、协议限制甚至缓存。
在包过滤防火墙中,防火墙直接对流经的 TCP 和 UDP 包进行处理。而应用网关防火墙需要对 TCP 和 UDP 包进行解析,处理成应用层的数据协议,如 HTTP。因此应用网关防火墙对于网络的性能会产生负面影响,而且不是所有的应用都能够很好地兼容代理的存在,所以部署应用网关防火墙有可能对系统的可用性产生影响。除此之外,在应用网关防火墙中,服务端看到的请求都来自于代理,这会导致服务端无法有效地追踪请求的来源。
尽管应用网关防火墙有这些潜在的危害存在,但是它能处理的信息最多,能够提供的安全防护能力也最强。由于 Web 攻击是黑客常见的攻击手段,因此,应用网关防火墙也逐渐演变成了专门的 Web 防火墙,在之后的课程中,我们会详细介绍,这里暂时就不多说啦。

3. 状态检测防火墙

状态检测防火墙是包过滤防火墙的一种升级,它同样工作在网络层和传输层之上。状态检测和包过滤防火墙最大的不同在于,它会以连接的形式来“看待”低层级的 TCP 和 UDP 数据包。怎么理解呢?我来举个简单的例子。
当客户端发起一次完整的 HTTP 请求时,会需要进行“TCP 三次握手”建立连接(SYN+ACK 数据包),HTTP 请求和响应的数据往往也是通过多个数据包才能完整发送。传统的包过滤防火墙只能基于每一个数据包进行判断,比如在“握手”的过程中,包过滤防火墙会分别看到 SYN、SYN+ACK、ACK 这三个数据包,并对每一个数据包进行判断。而事实上,这三个数据包(SYN、SYN+ACK、ACK)代表的是一次握手请求。所以,状态检测防火墙会尝试将这一连串的数据包组成一次完整的连接请求,从而获得一个更全面的视角,大大提高其安全性。
对比应用网关防火墙,状态检测防火墙通常不会尝试将数据包构建成高层级的数据,也就是说它不会尝试去解析整个 HTTP 请求中的内容。因此,状态检测防火墙能获得更优的性能。目前市面上普遍采用的,都是状态检测防火墙。

防火墙可以为网络边界提供哪些保护呢?

网络边界之间的信用层级通常是不一样的,因此,我们需要利用防火墙在网络边界上提供必要的保护,使得跨越边界的数据和连接相对可信。那防火墙究竟可以为网络边界提供哪些保护呢?下面,我就详细来讲一讲。

1. 保护操作系统的漏洞

在操作系统的发展历程中,出现过很多臭名昭著的漏洞。比如:由于对网络请求处理不当,导致的 DDoS 攻击(如死亡之 PING、SYN 洪泛等);由于高危服务默认开放导致的代码执行(如熊猫烧香扫描的是 135 和 445 端口的弱密钥);由于服务漏洞导致的代码执行(如永恒之蓝利用的 SMB 漏洞)。
如果在这些漏洞曝光时,我们能即时更新操作系统补丁、关闭对应服务,那自然是能够避免系统和应用受到侵害。但是,在通常情况下,尤其是当公司扩大规模的时候,服务器管理员意识到问题并采取措施的这段响应时间,已经足够病毒或者蠕虫进行大规模的传播了。
这时,防火墙的存在就很有必要了。一方面,防火墙可以迅速对全网的服务器进行保护,拒绝向高危端口发起的请求,如 Windows 中的 135、137 和 445 等,这也就是我们之前所说的“虚拟补丁”。另一方面,更加智能的防火墙,能够检测到整体流量中的异常变化,比如,突然出现了针对某个端口的大量请求,这就说明系统或者应用中很可能出现了新的漏洞,这时,防火墙可以产生报警甚至自动对异常的请求进行拦截,及时避免网络中的操作系统受到攻击。

2. 阻止非法的信息流动

在网络边界之间流动的数据,往往都会受到一定的规则约束。最著名的有中国的防火长城(Great Firewall)。防火长城的主要目的不是为了防止国外对中国发起网络攻击,而是根据法律法规,防止国内网民访问国外违法的数据信息。同样地,美国也存在类似的防火墙设备,比如:根据美国儿童网络保护法令(CHIPA),学校和图书馆的网络必须限制学生可以浏览的网页。
除了防止非法地获取数据,防火墙同样能够防止敏感数据的流出。比如,防火墙可以对部分关键词或者敏感词进行检测阻止其外流。如果数据安全做得好一些的公司,可以对公司内的全部数据打上标签,然后根据标签的安全等级对跨越安全边界的数据进行处理。
需要注意的是,防火墙能够提供的数据安全保护是有限的。原因在于,大部分防火墙都是用来处理较低层级的数据,且很多连接会对数据本身进行加密(VPN、HTTPS)。这就导致了防火墙实际能够看到的可识别数据并不多,拦截能力因此下降。其实,这种绕过防火墙的例子很常见,各类“梯子”能翻墙访问 Google 就是基于这个原理实现的。

3. 限制可访问的服务和审计

防火墙作为安全策略的一部分,还可以帮助公司落地安全制度。公司所有对于网络方面的限制和要求,基本都可以在防火墙上进行实现。比如:限制外网开放的服务只能是 HTTP 服务,那么所有非 HTTP 的请求就会被拦截;再比如,防火墙也可以对带宽的使用进行限制,避免某个服务抢占全部的带宽资源。
除此之外,防火墙作为网络安全设备,它的日志功能通常比路由器等常规网络设备更加完备。因此,在网络攻击发生之后,我们需要进行事件调查时,防火墙日志是很关键的信息来源。

防火墙有哪些防御盲区?

我们知道,防火墙不仅是网络安全中很重要的组成部分,也是我们最为熟知的安全工具。但是,在安全领域中不存在绝对,所以防火墙对于某些攻击也同样无能为力。接下来,我会主要讲解防火墙不能防御的攻击手段,在了解这些攻击之后,我们才能提高对防火墙和网络安全的整体认识。
首先,防火墙只位于网络边界。因此,防火墙只能用来对跨越边界的请求进行检测和拦截。当请求通过后,后续发起的攻击请求对于防火墙来说,就是不可见的。比如,当黑客利用弱密钥,通过合法的 SSH 登录到服务器之后,就相当于穿透了防火墙的保护,之后黑客再通过 SSH 执行的命令,防火墙都无法检测和拦截。所以,防火墙不能防御已授权服务中的恶意攻击。
其次,尽管防火墙位于网络边界,但这并不意味着所有的请求都会经过防火墙。比如,直接通过物理网线接入到服务器,黑客就可以在不经过防火墙的情况下进入内网。在这种情况下,防火墙自然也起不到任何作用了。同样地,在网络内部发生的攻击行为,也不在防火墙的保护范围内。也就是说,防火墙不能防御不通过防火墙的访问。
最后,作为边界设备,防火墙自身其实是暴露在外界的。因此,防火墙会遭受到黑客的直接攻击。如果防火墙自身的操作系统存在缺陷,那么,黑客就能够直接攻击并控制防火墙,然后关闭防火墙的防护功能,轻松突破边界。正是因为如此,部分防火墙厂商会为防火墙设备专门设计和开发一个加固过的专用操作系统,以此来提高防火墙的安全性。

总结

好了,今天的内容讲完了。我们来一起总结回顾一下,你需要掌握的重点内容。
防火墙作为最基础的网络安全设备之一,广泛存在于各种网络边界上,是网络安全的第一道防线。
在业务相对简单时,我们可以通过 IP、端口和协议等参数,配置简单的黑白名单规则来阻挡恶意的网络请求;在业务逐渐复杂时,开放的端口协议变多,我们对防火墙的技术实现和配置复杂度都会有较高要求,需要由专业的人员或者团队来进行维护。
因此,尽管防火墙是我们最熟悉的安全设备,但实际上,防火墙是一个专业性较强的安全产品,开发或者运维人员一般不需要对其进行直接操作或者配置,具体的部署和配置工作都是交给防火墙厂商来完成和定期维护的。

思考题

最后,给你留一个思考题。
你可以检查一下你的服务器或者网络设备中,对外开放的端口有哪些。这些端口中,有哪些不需要对外开放,有哪些可以限制源 IP?你能否通过防火墙(或者路由器、Iptables 等)对这些端口进行限制呢?
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 4

提建议

上一篇
18 | 安全标准和框架:怎样依“葫芦”画出好“瓢”?
下一篇
20 | WAF:如何为漏洞百出的Web应用保驾护航?
unpreview
 写留言

精选留言(12)

  • code2
    2021-02-21
    防火墙就是大门口拴的那只狗,不经过大门口翻墙的,打地洞的,伪装成狗认识的,狗闻不到的,狗听不见的,狗都无能为力!
    6
  • 小老鼠
    2020-02-16
    windows10自带的防火墙属于三类中哪一类?

    作者回复: 目前的防火墙基本都属于状态检测防火墙。

    4
  • 蔡波
    2020-04-23
    因此,尽管防火墙是我们最熟悉的安全设备,但实际上,防火墙是一个专业性较强的安全产品,开发或者运维人员一般不需要对其进行直接操作或者配置,具体的部署和配置工作都是交给防火墙厂商来完成和定期维护的。 -------------------------------------------- 这段不认同,一般都是运维人员,自己配吧,每天总有业务要新增配置,等厂家来配,不现实,除非业务较少,基本不变。
    展开
    共 2 条评论
    4
  • 程序水果宝
    2020-01-27
    请问状态检测防火墙会尝试将这一连串的数据包组成一次完整的连接请求后是怎么做到安全性高于包过滤防火墙的?

    作者回复: 简单来说,包过滤防火墙能看到基本只有源地址和目标地址。而状态检测防火墙,除了这些,还能够看到请求的协议、内容等信息,因此能够作更精确的判断。当然,如果只是封禁某个IP或者端口的话,两者的效果是一样的。

    3
  • Young!
    2020-03-03
    老师,能不能举例每一种防火墙的具体应用,比如Windows 10 自带防火墙是状态检测防火墙

    作者回复: 现在基本上都是状态检测防火墙,所以不必太细究每一种防火墙的差别,关注功能即可。

    1
  • leslie
    2020-02-07
    防火墙有特殊模块:老师文中"防火墙厂商会为防火墙设备专门设计和开发一个加固过的专用操作系统"指的定制化应当就是防火墙厂商在防火墙设备中去放置的模块。之前金融业对于安全策略要求极其严格,有时甚至会有多个模块,通过多个模块的策略去提升安全策略。

    作者回复: 嗯,大部分的防火墙硬件中会加载各类加固或者安全模块,保障其安全性。不过其实现在互联网厂商基本很少买硬件盒子了,扩展性太差。

    共 3 条评论
    1
  • 😊
    2021-10-12
    您好老师 "SYN、SYN+ACK、ACK)代表的是一次握手请求。所以,状态检测防火墙会尝试将这一连串的数据包组成一次完整的连接请求,从而获得一个更全面的视角,大大提高其安全性。 " 这一句话是您描述状态检测防火墙时候说的特点,您说他将这一串数据包组成一次完整的连接请求,是什么意思 是从重组一下吗还是什么,要是重组不是更浪费性能吗 不太懂这块,等待您的解答
  • 亚林
    2021-07-07
    centos8 firewalld 作为一个开发部署期间 天天使用
  • escray
    2021-02-09
    虽然没有机会的在路由器或者专门的硬件设备上配置过路由器,但是 Windows 自带的防火墙和 Linux 的 iptables 还是接触过的,一般的操作是因为某个程序或者应用无法通过防火墙,所以需要把它们加入到防火墙的白名单里面,当然最简单的操作,就是关闭防火墙,先解决问题。 作为安全小白,如何检查设备对外开发的端口呢? # netstat -nat | grep LISTEN # lsof -n -P -i TCP -s TCP:LISTEN # nc -w 10 -n -z 127.0.0.1 7800-8100 其中 3306 和 33060 应该是 MySQL 的,而 62905 不知道是谁家的 macOS Big Sur 没有发现传说中的网络实用工具,后来发现 Network Utility has been deprecated.
    展开
  • 今天
    2020-03-20
    内网里,黑客怎样用网线直接接入服务器?

    作者回复: 偷偷潜入机房不就好啦~

    共 3 条评论
    1
  • 追风筝的人
    2020-03-16
    黑白名单
  • 小晏子
    2020-01-27
    平时使用的服务器对外开放443端口,用于https服务,也针对部分ip地址开放了22端口,用于ssh服务,其他端口都是关闭的,当然可以通过防火墙或者iptables进行规则限制。