0%

Firewall Evasion Lab

一.实验目标

在某些情况下,防火墙限制太多,给用户带来不便。 例如,许多公司和学校实施出口过滤,阻止其网络内的用户访问出到某些网站或互联网服务,例如游戏和社交网站。 有很多方法以避开防火墙。 一种典型的方法是使用隧道技术,它隐藏了真正的目的的网络流量。 有多种方法可以建立隧道。 两种最常见的隧道技术是虚拟专用网络 (VPN) 和端口转发。 这个实验室的目标是帮助学生获得这两种隧道技术的实践经验。 该实验室涵盖以下主题:

• 防火墙规避

• 虚拟专用网络

• 转发端口

• SSH 隧道

二.实验原理

2.1 防火墙

在计算机领域中,防火墙是一种网络安全系统,它根据预定的安全规则监视和控制进出的网络流量。防火墙通常在可信网络和不可信网络(如Internet)之间建立一个屏障。

2.2 VPN

将专用网络延伸到公共网络上,使用户能够在共享或公共网络上发送和接收数据,就像他们的计算设备直接连接到专用网络上一样。VPN的好处包括增加专用网络的功能、安全性和管理,它提供了对公共网络上无法访问的资源访问通常用于远程办公人员。加密很常见但不是VPN连接的固有部分。VPN是通过使用专用线路或在现有网络上使用隧道协议创建一个虚拟的点对点连接而形成的。可从公共 Internet 获得的 VPN可以提供广域网 (WAN) 的一些好处。 从用户的角度来看,可以远程访问专用网络中可用的资源。

2.3 SSH

SSH以非对称加密实现身份验证[2]。身份验证有多种途径,例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。

2.4 拓扑搭建

在这个实验室里,我们需要使用多台机器。它们的设置如图1所示。我们将使用容器设置这个实验环境。

三.实验器材

1.Ubuntu20.04。

2.Docker.

四.实验步骤及运行结果

4.1 Task 1: Static Port Forwarding

实验室设置中的防火墙阻止外部机器连接到内部的任何 TCP 服务器网络,SSH 服务器除外。 在这个任务中,我们想使用静态端口转发来规避这个限制。 更具体地说,我们将使用 ssh 在主机 A(位于外部网络)和主机 B(在内部网络上),因此在 A 的端口 X 上接收到的任何数据都将是发送到 B,数据从那里转发到目标 T 的端口 Y。在以下命令中,我们使用 ssh创建这样一个隧道。

对于A的IP,一般我们使用0.0.0.0,表示我们的端口转发会监听来自A上所有接口的连接。如果想限制来自特定接口的连接,我们应该使用该接口的 IP 地址。 比如我们要限制到loopback接口的连接,所以只有本地主机上的程序可以使用这个端口转发,我们可以使用 127.0.0.1:<port> 或者只需省略 IP 地址(默认 IP 地址为 127.0.0.1)。

任务内容:

请使用静态端口转发在外部网络和内部网络之间创建隧道网络,所以我们可以远程登录到 B1 上的服务器。 请证明你可以从主机 A 做这样的 telnet,A1 和 A2。 此外,请回答以下问题: (1) 涉及多少个 TCP 连接在这整个过程中。 您应该运行 wireshark 或 tcpdump 来捕获网络流量,然后指向从捕获的流量中取出所有涉及的 TCP 连接。 (2) 为什么这个隧道能成功帮助用户规避实验室设置中指定的防火墙规则?

实验步骤:

首先在hostA中建立ssh连接如下:

然后即可从主机A,A1,A2分别建立telnet连接远程登陆到B1上的服务器,如下图所示:

从主机A建立telnet连接到B1时,利用wireshark抓包得到结果如下:

可以观察到在主机A中利用telnet远程登陆到B1上的服务器时,主机A所发送的数据包是通过主机B发送给B1的,接收数据包也是通过B接收来自于B1的数据包,再通过SSH连接发送给主机A,从而实现了主机A与主机B1的通信。

在以上过程中建立的TCP连接有主机B与主机A之间的SSH连接和主机B与主机B1之间的telnet连接。

因为这个隧道是主机A和主机B之间的SSH连接,并未被屏蔽,而主机B与主机B1可以实现通信,因此可以利用主机B作为中介,使得主机A可以与主机B1建立telnet连接,成功登录到B1上的服务器,而主机A1,和A2同B1建立连接时,同样是通过主机A和主机B的ssh连接才成功的。

4.2 Task 2: Dynamic Port Forwarding

在静态端口转发中,每个端口转发隧道将数据转发到特定目的地。 要是我们想要将数据转发到多个目的地,我们需要建立多条隧道。 例如,使用端口转发,我们可以成功访问被屏蔽的example.com网站,但是如果防火墙屏蔽了怎么办许多其他站点,我们如何避免为每个站点繁琐地建立一个 SSH 隧道? 我们可以使用动态端口转发来解决这个问题。

在实验室设置中,路由器已经阻止了 example.com,因此内部网络上的主机无法访问访问 example.com 网站。 请给路由器添加防火墙规则,这样就可以多屏蔽两个网站。 网站的选择取决于个别学生。 请提供证据证明该网站确实被屏蔽了。

4.2.1 Task 2.A: Setting Up Dynamic Port Forwarding

请证明您可以使用主机 B、B1 和主机上的 curl 访问所有被阻止的网站内部网络上的 B2。 请同时回答以下问题: (1) 哪台计算机建立了与预期的网络服务器的实际连接? (2) 这台电脑怎么知道应该用哪个服务器连接至?

实验步骤:

首先进行设置屏蔽网站,以www.baidu.com为例:

首先查看其dns解析后的ip地址如下:

然后在防火墙中设置屏蔽规则,阻止内网的主机与其通信:

设置完成后,检查是否已经屏蔽掉该网站

如下图所示,在主机B1中已经无法成功收到来自于该网站的icmp报文。

然后进行动态端口转发的设置,如下:

首先在主机B中建立ssh连接如下:

然后根据实验手册,可以访问被屏蔽的网站,如下图所示:

在主机B1中:

在主机B2中:

可以观察到到被屏蔽的网站均可以利用curl成功访问。

在该过程中利用wireshark抓包,可以得到如下结果:

在B主机的网卡中:

主机B1收到的数据均是来源于主机B的,而主机B又与主机A建立了SSH连接,因此其数据来源于主机A。

在主机A的网卡中:

可以观察到主机A可以直接与www.baidu.com的ip地址进行通信,将通过ssh连接得到的来自于主机B1的数据包发送给目标网站,再将网站的响应通过该路径转回给主机B1。

问题解答:

主机A与预期网站服务器建立了实际连接,通过ssh接收来自于B1主机的请求来确定用哪个服务器进行连接。

4.2.2 Task 2.B: Testing the Tunnel Using Browser

我们还可以使用真实的浏览器来测试隧道,而不是使用 curl。 虽然很难运行浏览器在容器内,在 docker 设置中,默认情况下,主机始终连接到创建的任何网络在 docker 内部,该网络上的第一个 IP 地址被分配给主机。 例如,在我们的设置,主机是SEED VM; 它在内部网络上的 IP 地址 192.168.20.0/24 是192.168.20.1。

要使用动态端口转发,我们需要配置 Firefox 的代理设置。 进入设置页面,我们可以在 URL 字段中键入 about:preferences 或单击 Preference 菜单项。 在常规页面,找到“网络设置”部分,点击设置按钮,弹出一个窗口会弹出。 按照图 2 设置 SOCKS 代理。

配置代理后,我们就可以浏览任何网站了。 请求和答复将通过 SSH 隧道。 由于主机虚拟机可以直接访问互联网,以确保我们的网络浏览流量已通过隧道,您应该执行以下操作: (1) 在路由器上运行 tcpdump/-firewall,指出整个端口转发过程中涉及的流量。 (2) 打破SSH隧道,然后尝试浏览网站。 描述你的观察。

实验步骤:

修改浏览器中的代理设置如下:

然后再主机B中建立ssh连接如下,即可成功访问被屏蔽的www.baidu.com

如果将左侧的连接断开,则网站不可以访问:

4.2.3 Task 2.C: Writing a SOCKS Client Using Python

为了使端口转发起作用,我们需要指定数据应转发到的位置(最终目的地)。在静态情况下,这条信息是在我们建立隧道时提供的,也就是说,它是硬连接到隧道设置。 在动态情况下,最终目的地是动态的,未在设置期间指定,因此代理如何知道将数据转发到哪里?

使用动态端口转发代理的应用程序必须告诉代理将它们的数据转发到哪里。这是通过应用程序和代理之间的附加协议完成的。 通用协议这样的目的就是SOCKS(Socket Secure)协议,它成为事实上的代理标准。由于应用程序需要使用SOCKS协议与代理进行交互,因此应用软件必须具有本机 SOCKS 支持才能使用 SOCKS 代理。 Firefox 和 curl 都有这样的一个支持,但是我们不能直接对telnet程序使用这种类型的代理,因为它不提供本地 SOCKS 支持。 在此任务中,我们使用 Python 实现了一个非常简单的 SOCKS 客户端程序。

请完成此程序,并使用它从主机B、B1 和 B2访问 http://www.example.com。 上面给出的代码仅用于发送 HTTP 请求,而不是 HTTPS 请求(发送由于 TLS 握手,HTTPS 请求要复杂得多)。 对于这个任务,学生只需要发送 HTTP 请求。

实验步骤:

首先在主机B中与主机A建立ssh连接如下:

根据实验手册的指导编写python脚本如下:

在主机B1中,执行该脚本,即可成功发送HTTP请求访问目标网站,如下:

在主机B和主机B2中执行该脚本,也可以成功访问目标网站,如下:

4.3 Task 3: Virtual Private Network (VPN)

VPN 通常用于绕过防火墙。 在此任务中,我们将使用 VPN 绕过入口和出口防火墙。OpenVPN 是一个我们可以使用的强大工具,但是在这个任务中,我们将简单地使用 SSH,它通常被称为穷人的 VPN。 我们需要更改服务器上的一些默认 SSH 设置以允许创建 VPN。下面列出了 /etc/ssh/sshd_config 中所做的更改。 他们已经启用在容器内。

4.3.1 Task 3.A: Bypassing Ingress Firewall

要创建从客户端到服务器的 VPN 隧道,我们运行以下 ssh 命令。 这个命令创建VPN 客户端和服务器机器上的 TUN 接口 tun0,然后连接这两个 TUN 接口使用加密的 TCP 连接。 选项 0:0 中的两个零表示 tun0。 的详细解释-w选项可以在SSH的手册中找到:

# ssh -w 0:0 root@<VPN Server’s IP>

请在 A 和 B 之间创建一个 VPN 隧道,B 是 VPN 服务器。 然后进行所有必要的配置。一切设置完成后,请证明您可以远程登录到 B、B1 和B2 来自外部网络。 请捕获数据包跟踪,并解释数据包未被阻止的原因通过防火墙。

实验步骤:

在主机A中以B为VPN服务器,建立连接如下:

然后即可从外部网络登录到B,B1,B2,如下图所示:

然后在从外部网络访问B主机时

利用wireshark进行抓包,可以得到如下结果:

可以观察到从外部网络可以连接到B主机

4.3.2 Task 3.B: Bypassing Egress Firewall

在此任务中,我们将使用 VPN 绕过出口防火墙。 在我们的设置中,我们屏蔽了三个外部网站,因此 192.168.20.0/24 上的主机无法访问这些网站。 这个任务的目标是使用VPN 隧道技术绕过这些规则。 此目标与任务 2 相同,除了这一次,我们使用 VPN,而不是动态端口转发。 创建 VPN 隧道的命令是与任务 3.1 中的类似。 在这个任务中,我们使用 B 作为 VPN 客户端,A 作为 VPN 服务器。

请在 B 和 A 之间建立一条 VPN 隧道,A 是 VPN 服务器。 请示范您可以使用此 VPN 隧道成功地从主机 B、B1 和 B2 访问被阻止的网站。 请捕获数据包跟踪,并解释为什么数据包没有被防火墙阻止。

实验步骤:

首先在防火墙容器中修改规则如下,在eth0接口上创建一个NAT服务器:

然后再主机B上与主机A建立ssh链接如下:

即可从主机B,B1,B2访问被屏蔽的网站,如下图:

4.4 Task 4: Comparing SOCKS5 Proxy and VPN

SOCKS5 代理(动态端口转发)和 VPN 通常用于创建隧道绕过防火墙,以及保护通信。 许多 VPN 服务提供商都提供这两种类型的服务。有时,当 VPN 服务提供商告诉您它提供 VPN 服务时,但实际上它只是一个SOCKS5 代理。 虽然这两种技术都可以用来解决同一个问题,但它们确实有显着的差异。 根据您在本实验室的经验,请比较这两种技术,描述它们差异,优点和缺点。

4.4.1 SOCKS5

SOCKS 服务器代表客户端通过 TCP 建立与另一台服务器的通用连接。然后,它引导客户端和服务器之间交换的所有流量。它与任何网络协议和端口兼容,包括TCP,UDP,IPv6,FTP,HTTP,SMTP,Telnet,SSH,DNS,POP3和IMAP。版本 5 的作用是集成安全功能和 UDP 支持。因此,SOCKS5被认为是最通用的服务器协议。代理在客户端和 SOCKS5 服务器之间形成隧道,用于传输网络流量。随后,SOCKS5会隐藏您的IP地址,并确保它不会与您的浏览活动相关联。此外,它不会尝试分析和过滤流量,使其成为在正常情况下无法通过防火墙访问 TCP 服务器的客户端的理想选择。它适用于任何网站。

优点:

1.隐藏IP地址,不影响连接速度,不会加密网络流量

2.解锁由于限制而不可以访问的网站

3.网站会提供免费的SOCK5代理列表,如Socks-Proxy

4.易于配置,无需安装其他应用程序。您可以在网络浏览器中手动设置 SOCKS5,添加免费的代理浏览器扩展,或快速安装将代理配置应用到您的 torrent 客户端。

缺点:

1.无法加密网络流量

2.容易收到中间人攻击从而导致数据被窃取

4.4.2 VPN

虚拟专用网络应用程序可以实现与 SOCKS5 相同的目的:隐藏您的 IP 地址。但它也把加密融入其中。VPN 在通过 Web 发送消息之前将数据包封装在受保护层中。为了完成任务,它还解码加密层,以便在收到消息后提取数据包。通过这种方式,VPN 会创建一个安全隧道并混淆流量。

优点:

1.隐藏IP地址并且加密网络流量

2.防止 ISP 窥探以查看正在访问的网站。

3.在公共场合使用可以保护免受黑客攻击。

缺点:

1.大部分需要付费使用

2.使用错误配置会导致互联网速度较慢