【THM】Firewall Fundamentals(防火墙基础知识)
本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/firewallfundamentals
本文相关内容:学习防火墙相关知识并亲身体验 Windows 和 Linux 内置防火墙。
防火墙的用途是什么
我们在购物中心、银行、餐厅和住宅外都看到过保安,这些保安会被安排在这些区域的入口处,负责检查进出的人员。维持这种检查机制的目的是确保没有人能未经允许偷偷溜进来。保安就像一道墙,将他所负责的区域与访客隔开。
我们的数字设备与其所连接的互联网之间每天都有大量的流量进出(传入流量和传出流量)。如果有人潜入这些海量的流量而没有被抓住该怎么办?那么,我们还需要为我们的数字设备配备一个安全卫士,来检查进出设备的数据。这个安全卫士就是我们所说的防火墙(firewall) 。 防火墙旨在检查网络或数字设备的传入流量和传出流量。其目标是与站在建筑物外面的保安人员一样:不允许任何未经授权的访问者进入系统或网络。你可以通过给防火墙配置规则来指示它检查所有流量。任何进入或离开你的设备或网络的内容都会首先面对防火墙。防火墙将根据其维护的规则允许或拒绝该流量。如今,大多数防火墙不仅可以提供基于规则的过滤,还能提供额外的功能来保护你的设备或网络免受外界攻击。在本文内容中,我们将讨论所有这些防火墙,并对其中的一些进行实际的实验演示。
学习目标
完成本文的学习之后,你将对以下领域有基本的了解:
- 防火墙的类型;
- 防火墙规则及其组件;
- Windows内置防火墙使用实践;
- Linux内置防火墙使用实践。
前置学习基础
答题
哪种安全解决方案可以检查设备或网络的传入和传出流量?
firewall
防火墙的类型
在组织发现防火墙能够过滤来自其系统和网络的有害流量后, 防火墙在网络中的部署变得十分普遍。随后,市场上又推出了几种不同类型的防火墙,每种类型的防火墙都有其独特的用途。需要注意的是,不同类型的防火墙工作在不同的OSI模型层上。防火墙可被分为多种类型。
让我们研究一下几种最常见的防火墙类型及其在 OSI 模型中的作用。
无状态防火墙(Stateless Firewall)
这种类型的防火墙在 OSI 模型的第 3 层和第 4 层上运行,其工作原理是根据预定规则过滤数据,而不会注意先前连接的状态。这意味着它会将每个数据包与规则进行匹配,而不管该数据包是否属于合法连接。它不会保存先前连接的状态信息来为未来的数据包做出决策。因此,这类防火墙可以快速处理数据包。但是,它们无法根据数据与先前连接的关系对数据应用复杂的策略。假设防火墙根据其规则拒绝了来自单个来源的一些数据包,在理想情况下,它应该丢弃来自该来源的所有后续数据包,因为先前的数据包不符合防火墙的规则。但是, 无状态防火墙总是忘记这一点,来自该来源的未来数据包将被视为新数据包并会再次与其规则匹配。
状态防火墙(Stateful Firewall)
与无状态防火墙不同,此类型的防火墙不仅仅按照预定规则过滤数据包。它还会跟踪先前的连接并将其存储在状态表中。通过根据数据包的连接历史记录来对数据包进行检查,这增加了另一层安全性。状态防火墙在 OSI 模型的第 3 层和第 4 层上运行。假设防火墙根据其规则接受了来自某个源地址的一些数据包。在这种情况下,它会在其状态表中记录此连接,并自动允许此连接的所有后续数据包,而无需逐一检查。同样,状态防火墙也会记录它们拒绝的一些数据包的连接,并且将基于此信息,拒绝来自同一来源的所有后续数据包。
代理防火墙(Proxy Firewall)
以前的防火墙的问题主要在于无法检查数据包的内容。 代理防火墙(或称应用层网关)可以充当私有网络和互联网之间的中介,运行在 OSI 模型的第七层上,它们会检查所有数据包的内容。网络中用户发出的请求会在经过代理检查后由代理转发,并使用用户自己的 IP 地址进行屏蔽,从而为内部 IP 地址提供一定的匿名性。这类防火墙还可以应用内容过滤策略,以根据流量内容允许/拒绝传入和传出流量。
下一代防火墙(NGFW:Next-Generation Firewall)
这是最先进的防火墙类型,运行于 OSI 模型的第 3 层至第 7 层,提供深度数据包检测和其他功能,增强传入和传出网络流量的安全性。它拥有一个可以实时阻止恶意活动的入侵防御系统。它通过分析攻击模式并在攻击进入网络之前立即阻止攻击,从而提供启发式分析。下一代防火墙(NGFW)具有 SSL/TLS 解密功能,可在解密数据包后对其进行检查,并可以将数据与威胁情报源关联起来,从而做出有效的决策。
下表列出了每种防火墙的特性,以帮助你根据不同的使用案例选择最合适的防火墙 。
Firewalls 防火墙 | Characteristics 特征 |
---|---|
Stateless firewalls(无状态防火墙) | - Basic filtering (基础过滤) - No track of previous connections (不跟踪以前的连接) - Efficient for high-speed networks (高效适用于高速网络) |
Stateful firewalls (状态防火墙) | - Recognize traffic by patterns (通过模式识别流量) - Complex rules can be applicable (可以适用复杂的规则) - Monitor the network connections (监控网络连接) |
Proxy firewalls (代理防火墙) | - Inspect the data inside the packets as well (能检查数据包内的数据) - Provides content filtering options (提供内容过滤选项) - Provides application control (提供应用程序控制) - Decrypts and inspects SSL/TLS data packets (解密并检查 SSL/TLS 数据包) |
Next-generation firewalls (下一代防火墙) | - Provides advanced threat protection (提供高级威胁防护) - Comes with an intrusion prevention system (配备了入侵防御系统) - Identify anomalies based on heuristic analysis (可以基于启发式分析识别异常) - Decrypts and inspects SSL/TLS data packets (解密并检查 SSL/TLS 数据包) |
答题
哪种类型的防火墙会维护连接状态?
stateful firewall
哪种类型的防火墙可以为流量提供启发式分析?
next-generation firewall
哪种类型的防火墙会检查传入应用程序的流量?(它也被称为应用层网关)
proxy firewall
防火墙规则
防火墙让你可以控制网络流量。虽然它会根据内置规则过滤流量,但你也可以为不同的网络定义一些自定义规则。例如,有些网络可能希望拒绝所有进入其网络的 SSH流量;然而,你的网络可能需要允许来自特定 IP 地址的 SSH 流量。这些规则允许你为网络的传入和传出流量配置这些自定义设置。
防火墙规则的基本组成部分如下所述:
- 源地址(Source address):负责发起流量的机器的 IP 地址。
- 目标地址(Destination address):负责接收数据的机器的 IP 地址。
- 端口(Port):流量的端口号。
- 协议(Protocol):通信期间所使用的协议。
- 动作(Action):这定义了在识别出任何具有此类特定性质的流量时将会采取的动作。
- 方向(Direction):此字段将定义规则对传入或传出流量的适用性。
Action类型
规则中的“Action-动作”部分将指示数据包被归类到已定义规则的类别后应该采取的步骤。下面介绍了可应用于规则的三种主要动作。
Allow-允许
规则的“Allow-允许”动作表示允许规则中定义的特定流量。
例如,让我们创建一个规则,其中包含一个动作,允许从我们的网络到端口80(用于到Internet的HTTP流量)的所有出站流量。
Action 操作 | Source 来源 | Destination 目的地 | Protocol 协议 | Port 端口 | Direction 方向 |
---|---|---|---|---|---|
Allow 允许 | 192.168.1.0/24 | Any 任何 | TCP | 80 | Outbound 出站 |
Deny-拒绝
规则的“Deny-拒绝”动作意味着规则中定义的流量将被阻塞且不被允许通过。这些规则对于安全团队拒绝来自恶意 IP 地址的特定流量以及创建更多规则以减少网络威胁面至关重要。
例如,让我们创建一个规则,其中包含一个动作,拒绝关键服务器的端口 22(用于通过SSH远程连接到计算机)上的所有传入流量。
Action(动作) | Source(来源) | Destination(目的地) | Protocol(协议) | Port(端口) | Direction(方向) |
---|---|---|---|---|---|
Deny 拒绝 | Any 任何 | 192.168.1.0/24 | TCP | 22 | Inbound 入站 |
Forward-转发
“Forward-转发”动作会使用防火墙上创建的转发规则来将流量重定向到其他网段。这适用于能够提供路由功能并能充当不同网段之间的网关的防火墙。
例如,让我们创建一个规则,其中包含一个动作,将端口 80(用于HTTP流量)上的所有传入流量转发到 Web 服务器192.168.1.8
。
Action(动作) | Source(来源) | Destination(目的地) | Protocol(协议) | Port(端口) | Direction(方向) |
---|---|---|---|---|---|
Forward 转发 | Any 任何 | 192.168.1.8 | TCP | 80 | Inbound 入站 |
规则的方向性
防火墙具有不同类别的规则,每类规则都可以根据创建规则时所针对的流量方向性进行分类,让我们逐一了解一下这些方向性。
Inbound Rules(入站规则)
如果规则仅适用于传入流量,则可以将其归类为入站规则。例如,你可能会允许 Web 服务器上的传入 HTTP 流量(端口 80)。
Outbound Rules(出站规则)
如果规则仅适用于传出流量,则可以将其归类为出站规则。例如,阻止除邮件服务器之外的所有设备的所有传出 SMTP 流量(端口 25)。
Forward Rules(转发规则)
转发规则可用于在网络内部转发特定流量。例如,可以创建一条转发规则,将传入的HTTP(端口80)流量转发到你的网络中的 Web 服务器。
答题
应在规则中定义哪种类型的动作来允许任何流量通过?
Allow (允许)
为离开我们网络的流量而创建的规则的方向是什么?
outbound (出站)
Windows Defender 防火墙
部署机器
在与本文相关的TryHackMe实验房间页面中,让我们如下所示的“Start Machine”按钮来启动实验虚拟机。该虚拟机将会以分屏视图启动。
如果实验虚拟机不可见,请继续使用实验房间页面顶部的蓝色Show Split View按钮。此外,你还可以在你的攻击机上使用以下RDP凭据来远程连接到该实验机器:
- Username:
Administrator
- Password:
windows-defender@123
- IP:
MACHINE_IP
Windows Defender 介绍
Windows Defender是微软在Windows操作系统中引入的内置防火墙。该防火墙包含用于创建允许或拒绝特定程序的规则以及创建自定义规则的所有基本功能。本小节旨在介绍Windows Defender防火墙的一些基本组件,你可以使用这些组件来限制系统的传入和传出网络流量。如果想要打开此防火墙,你可以打开Windows的搜索栏并输入“Windows Defender Firewall”。
Windows Defender防火墙的主页面会显示“Network Profiles-网络配置文件”和一些可用选项。下面是包含该防火墙的所有选项的主仪表面板。
Network Profiles(网络配置文件)
如上图所示,我们有两个可用的网络配置文件。Windows防火墙可以根据网络位置感知 (NLA-Network Location Awareness)确定你当前的网络,并为你应用该配置文件的防火墙设置。我们可以为每个网络设置不同的防火墙设置。
- 专用网络(Private networks):这包括连接到我们的家庭网络时要应用的防火墙配置。
- 访客或公共网络(Guest or public networks):这包括连接到公共或不受信任的网络(如咖啡店、餐馆或类似场所)时要应用的防火墙配置。例如,当连接到公共网络时,你可以配置防火墙设置以阻止所有传入网络连接,并仅允许某些对你来说至关重要的传出连接。这些设置将应用于公共网络配置文件中,并且当你在私人家庭网络中时不会被实施。
要允许/禁止任何网络配置文件中的任何应用程序,请单击下图中被标记为1的选项。这将带你进入列出系统中已经安装的所有应用程序和功能的页面。你可以勾选在任何网络配置文件中你想要允许的应用程序,或者在不需要时取消这些内容的勾选。在默认情况下,Windows Defender防火墙会处于启用状态。但是,如果你想控制它的打开/关闭,你可以单击下图中被标记为2的选项,这将带你进入两个网络配置文件的设置界面,你也可以阻止所有传入连接,而不是完全关闭防火墙(微软不建议这样做)。你还可以随时单击主仪表面板中的“恢复默认值”(下图中被标记为3)选项来恢复所有防火墙的默认设置。
自定义规则
Windows Defender防火墙还允许你为你的网络创建自定义规则,以根据需要允许/禁止特定流量。让我们创建一条自定义规则来阻止所有通过HTTP(端口80)或HTTPS(端口443)的出站流量,创建此规则后,我们将无法再浏览互联网上的任何网站,因为这些网站通常会在端口80或443上运行,而我们将阻止这些端口。
在创建自定义规则之前,我们先测试一下我们能否访问一个网站。为了测试,我们可以访问 http://10.10.10.10/
。如下图所示,我们可以访问该网站。
要创建自定义规则,请从Windows Defender主仪表面板的可用选项中选择“Advanced Settings-高级设置”。这将打开一个新选项卡,你可以在其中创建自己的规则。
注意: 下面创建的规则已在实验虚拟机中可用。如果你想测试它,你可以在Windows主机或任何其他机器上重新创建它。
你可以看到用于创建入站规则和出站规则的可用选项。
让我们创建一个出站规则来阻止所有传出的HTTP和HTTPS流量。为此,请点击上图左侧的 “Outbound Rules-出站规则” 选项,然后点击右侧的 “New Rule-新建规则” 。这将打开规则向导。
在规则向导页面,第一步,我们选择 “Custom-自定义” 选项,然后再点击 “Next-下一步” 。
第二步,在下一个选项中选择 “All programs-所有程序” ,然后点击 “Next-下一步 ”。第三步,系统会要求你选择协议类型,我们选择“ TCP ”协议,保持本地端口(Local port)的设置不变,然后从下拉菜单中将“ Remote port-远程端口 ”更改为“Specific ports-特定端口”。在下方字段框中输入端口号(本例中为80,443)。现在,继续点击 “Next-下一步” 。
注意: 端口号之间用逗号分隔,并且中间不要留空格。
在 “Scope-范围” 选项卡中,保留本地和远程IP地址的设置不变,然后点击 “Next-下一步” 按钮。在 “Action-动作” 选项卡中, 启用 “Block the connection-阻止连接” 选项,然后继续点击 “Next-下一步” 。
在 “Profile-配置文件” 选项卡中,我们勾选所有网络配置文件。最后,我们需要为规则命名并添加可选的描述,然后点击 “Finish-完成” 按钮即可。
现在,我们可以看到我们的规则存在于可用的出站规则中。
现在,让我们通过浏览 http://10.10.10.10/
来测试我们的规则。我们收到一条错误消息,提示我们无法访问此页面,这意味着防火墙规则生效了。
练习
场景:安全团队注意到其关键 Windows 系统上存在可疑的传入和传出流量。他们在 Windows Defender 防火墙上创建了一些规则,以阻止部分特定的网络流量。
任务:你现在需要通过查看已创建的规则来回答本小节在下面给出的几个问题。
答题
启动实验虚拟机。
为阻止 SSH 端口上的所有传入流量而创建的规则的名称是什么?
Core Op
有一条规则被创建用于允许来自单个 IP 地址的 SSH 连接,此规则的名称是什么?
Infra team
此规则将允许哪个 IP 地址通过?
tips:在上一个问题的基础上继续探索。
192.168.13.7
Linux iptables 防火墙
在上一个小节中,我们讨论了 Windows 操作系统中可用的内置防火墙 。如果你是 Linux 用户怎么办?你仍然需要控制网络流量。Linux也提供了内置防火墙的功能,我们在这里有多个可用的防火墙选项,让我们简要了解一下其中的大部分,并详细探讨其中的一个。
Netfilter
Netfilter是 Linux 操作系统内部的框架,具有核心防火墙功能,包括数据包过滤、NAT和连接跟踪。这个框架是Linux中用于控制网络流量的各种防火墙实用程序的基础。下面列出了一些利用了此框架的常见防火墙实用程序:
- iptables:这是许多 Linux 发行版本中使用最广泛的实用程序。它使用了 Netfilter 框架,该框架提供了各种功能来控制网络流量。
- nftables: 它是“iptables”实用程序的后继者,具有增强的数据包过滤和 NAT 功能。它也是基于 Netfilter 框架的。
- firewalld:此实用程序也是基于 Netfilter 框架运行的,并具有预定义的规则集。它的工作方式与其他防火墙不同,并且带有不同的预构建网络区域配置。
ufw
ufw(Uncomplicated Firewall-简单防火墙),顾名思义,它通过为你提供更简单的界面,消除了在“iptables”(或其后继者)中使用复杂语法创建规则的复杂性。它对初学者更加友好。基本上,无论你在“iptables”中需要什么规则,你都可以通过ufw使用一些简单的命令来定义它们,然后就能在“iptables”中配置你想要的规则。下面让我们来查看一些基本的ufw命令。
要检查防火墙的状态,你可以使用以下命令:
user@ubuntu:~$ sudo ufw status
Status: inactive
如果它显示为非活动状态(inactive),你可以使用以下命令来启用它:
user@ubuntu:~$ sudo ufw enable
Firewall is active and enabled on system startup
如果要关闭防火墙 ,请在上面的命令中使用“disable”而不是“enable”。
下面是一条规则,它被创建用于允许来自 Linux 机器的所有出站连接。下面命令中的default
表示我们将此策略定义为一个默认策略,这将允许所有出站流量,除非我们另外在单独的规则中针对任何特定应用程序定义出站流量限制。你还可以通过在以下命令中将outgoing
替换为incoming
来创建规则以允许/拒绝所有进入你的机器的流量:
#Allow all outgoing traffic 允许所有传出流量
user@ubuntu:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
你可以拒绝系统中任何端口的传入流量。假设我们想要阻止传入的SSH流量,可以使用命令 ufw deny 22/tcp
来实现。如你所见,我们首先指定了动作,在本例中为deny
;此外,我们还指定了端口和传输协议,即 TCP 端口 22,或者简称为22/tcp
。
user@ubuntu:~$ sudo ufw deny 22/tcp
Rule added
Rule added (v6)
如果要按编号顺序列出所有活动(active)规则,你可以使用以下命令:
user@ubuntu:~$ sudo ufw status numbered
To Action From
-- ------ ----
[ 1] 22/tcp DENY IN Anywhere
[ 2] 22/tcp (v6) DENY IN Anywhere (v6)
如果要删除任何规则,请执行以下命令并输入要删除的规则的编号:
user@ubuntu:~$ sudo ufw delete 2
Deleting:
deny 22/tcp
Proceed with operation (y|n)? y
Rule deleted (v6)
这些不同的实用程序可用于管理 Netfilter。为 Linux 操作系统选择合适的防火墙实用程序取决于多种因素,例如对操作系统的熟悉程度以及你的具体要求。你可以通过创建本小节中已定义的一些规则并进行测试,以确保它们能够按预期工作,从而测试你对 Linux 防火墙的了解。
答题
哪个 Linux 防火墙实用程序被认为是“iptables”的后继者?
nftables
作为默认策略,你将使用什么 ufw 命令来发布规则以拒绝从你的机器传出的所有流量?(回答时无需加sudo)
使用命令:ufw default deny outgoing