如何使用 SOCKS 隧道在不使用 VPN 的情况下安全地路由 Web 流量

0 股票
0
0
0
0

介绍

有时,您可能会遇到不安全的网络或防火墙限制非常严格的网络,这时您肯定希望确保自己的网络流量不被窥探。一种解决方案是在 Ubuntu 22.04 / 20.04 / 18.04 上设置 VPN,但许多 VPN 需要在您的计算机上安装特殊的客户端软件,而您可能没有安装权限。不过,如果您只是想安全地浏览网页,那么还有一种快速、免费且实用的替代方案:SOCKS 5 代理隧道。.

SOCKS 代理是一个加密的 SSH 隧道,配置后的应用程序会通过该隧道路由流量,然后在服务器端,代理会将流量转发到公共互联网。与 VPN 不同,SOCKS 代理需要在客户端设备上逐个应用程序进行配置,但只要应用程序能够使用 SOCKS 代理,就可以在无需任何专用客户端软件的情况下启动应用程序。在服务器端,只需配置 SSH 即可。.

在本教程中,您将使用一台运行 Ubuntu 22.04 的服务器(当然,任何可以通过 SSH 访问的 Linux 发行版都可以),并使用 Firefox 浏览器作为客户端应用程序。完成本教程后,您将能够通过加密的 SSH 隧道浏览网站。.

先决条件
  • 一台运行 Ubuntu(其他发行版也行)的 Linux 服务器,用户 sudo 以及 SSH 访问权限。.
  • 用于配置 SOCKS 代理的程序,例如 Firefox 网页浏览器。.
  • Windows 用户还需要 PuTTY 工具或适用于 Linux 的 Windows 子系统 (WSL)。.

PuTTY用于为Windows用户设置代理隧道。macOS或Linux用户则已预装了用于设置隧道的工具。.

步骤 1(macOS/Linux)——设置隧道

如果您尚未在本地计算机上创建包含 SSH 密钥的 Droplet,请先生成一个 SSH 密钥。密钥生成后,请确保将公钥添加到 SSH Droplet 的“authorized_keys”文件中。然后打开终端应用程序,创建一个启用 SOCKS 代理的 SSH 隧道。.

使用以下命令启动隧道:

ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain
证明过程的解释
  • -我:用于连接主机的 SSH 密钥路径
  • -D:告诉 SSH 我们想要在指定的端口号上建立 SOCKS 隧道(您可以选择 1025 到 65536 之间的数字)
  • -f将进程移至后台运行
  • -C:发送前压缩数据
  • -q使用静音模式
  • -N:告诉 SSH 在隧道关闭后不会发送任何命令。

使用以下命令检查隧道是否正在运行:

ps aux | grep ssh

您将在输出中看到类似这样的行:

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

您可以退出终端应用程序,隧道仍将保持活动状态。这是因为我们使用了 `-f` 参数,该参数将 SSH 会话置于后台运行。

步骤 1(Windows)——设置隧道

打开 PuTTY。如果您尚未安装,请下载 PuTTY 并将其保存到您选择的位置。安装 PuTTY 不需要管理员权限。 .。EXE文件 下载并运行。.

要搭建隧道,请按照以下步骤操作:

在“会话”部分,添加服务器的主机名(或 IP 地址)和 SSH 端口(通常为 22)。.


在左侧,导航至:连接 > SSH > 隧道

输入 1025 到 65536 之间的任意源端口号,例如 1337。


选择“动态单选按钮”。

点击“添加”按钮。

返回左侧的“会话”。

在“已保存会话”字段中添加名称,然后单击“保存”按钮。

现在点击“打开”按钮建立连接。

用户名 sudo 输入您的服务器密码登录。

步骤 2 – 配置 Firefox 使用隧道

现在你已经建立了一个 SSH 隧道,接下来需要配置 Firefox 来使用该隧道。请记住,要使 SOCKS 5 隧道正常工作,你需要使用一个能够实现该隧道的本地应用程序。Firefox 具备这种能力:

Windows、macOS 和 Linux 系统的操作步骤相同。.

请确保您已记下在 SSH 命令中使用的端口号。在我们的示例中,我们使用了 1337。.

(以下步骤是在 Firefox 80 版本上完成的,但也应该适用于其他版本,只是选项位置可能会有所不同。)

打开火狐浏览器。
  1. 点击右上角的汉堡图标即可访问 Firefox 菜单。.
  2. 点击“首选项”或“选项”菜单项。.
  3. 向下滚动并选择“网络设置”部分中的“设置…”按钮。.
  4. 在«配置互联网代理访问»标题下,选择“手动代理配置”。.
  5. 对于 SOCKS 主机,请输入 localhost 或 127.0.0.1;对于端口,请使用隧道中指定的自定义端口 1337。.
  6. 在底部附近,选中«使用 SOCKS v5 时启用 DNS 代理»复选框。
  7. 点击“确定”按钮保存并关闭设置。

现在在 Firefox 中打开另一个标签页,开始浏览网页。您应该可以通过 SSH 隧道安全地浏览网页了。您从网站接收的数据是加密的。此外,由于您已勾选“代理 DNS”选项,您的 DNS 查询也已加密,因此您的 ISP 无法看到您正在浏览的内容或您访问的来源。.

要验证您是否正在使用代理,请返回 Firefox 的网络设置,输入不同的端口号并保存设置。现在,如果您尝试浏览网页,应该会收到一条错误消息:“代理服务器拒绝连接。” 这证明 Firefox 正在使用代理,而不是默认连接。或者,您可以访问像 ipecho.net 这样的公共 IP 地址站点,它返回的 IP 地址应该是您的 SSH Droplet IP 地址,因为它现在充当了您的代理。.

步骤 3 – 在 Firefox 中重置代理

当您不再需要维护 SSH 隧道的隐私时,请返回 Firefox 的网络代理设置。点击«使用系统代理设置»单选按钮,然后点击确定。现在 Firefox 不再使用 SOCKS 隧道,我们也可以将其关闭。您可以保持隧道连接,以便在 Firefox 中启用和禁用代理,但如果隧道长时间处于空闲状态,它可能会自行关闭。.

关闭隧道(macOS/Linux)

我们之前在本地机器上创建的隧道已被移至后台运行,因此关闭用于打开隧道的终端窗口并不会终止它。要终止隧道,我们需要使用 ps 命令找到进程 ID (PID),然后使用…… 我们结束这个过程吧。.

让我们搜索一下机器上所有活动的 SSH 进程:

ps aux |grep ssh

找到与您之前输入的用于创建隧道的命令类似的行。以下是示例输出:

Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

从行首开始,在前两列中的某一列,有一个 3 到 5 位数字。这就是 PID。例如,14345 的 PID 已在此处高亮显示。.

现在您已经知道了进程 ID (PID),可以使用 kill 命令终止隧道连接。终止进程时请使用其 PID:

kill 14345
关闭隧道(Windows)

关闭用于创建隧道的 PuTTY 窗口。就这样。.

步骤 4(macOS/Linux)——创建常用快捷方式

对于 macOS 或 Linux 系统,我们可以创建别名或编写脚本来快速建立隧道。有两种方法可以实现隧道过程的自动化:

这两种快捷方法都需要使用无密码/无口令的 SSH 密钥对服务器进行身份验证。

可点击的 BASH 脚本

如果您想要一个点击即可启动隧道的图标,我们可以编写一个简单的 BASH 脚本来实现。该脚本会启动隧道并启动 Firefox,但您仍然需要在 Firefox 中首次手动添加代理设置。.

在 macOS 系统中,我们可以从命令行启动的 Firefox 二进制文件位于 Firefox.app 文件中。假设该应用程序位于“应用程序”文件夹中,那么该二进制文件就位于此处。 /Applications/Firefox.app/Contents/MacOS/firefox 找到了。.

在 Linux 系统上,如果您是从软件仓库安装的 Firefox,或者 Firefox 已经安装,那么它的位置应该是: /usr/bin/firefox 如果 Firefox 不在默认位置,您可以随时使用 find firefox 命令查找 Firefox 在系统中的位置。.

在此脚本中,请将 Firefox 路径替换为您系统适用的路径。您可能还需要调整 SSH 行,以反映您之前用于建立隧道的成功命令。.

使用文本编辑器

使用 nano 创建一个新文件:

nano ~/socks.sh

添加以下几行:

#!/bin/bash -e
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
/Applications/Firefox.app/Contents/MacOS/firefox &
  • 请将端口号替换为您所需的端口号。 1337 (应该与您在 Firefox 中的设置一致)
  • 替换 SSH 用户名@您的主机名或 IP 地址 sammy@your_domain
  • /Applications/Firefox.app/Contents/MacOS/firefox 请将此处替换为您系统中的 Firefox 二进制文件路径。

保存脚本。对于 nano 编辑器,按 CONTROL + o 退出,然后按 CONTROL + x 退出。.

将脚本设置为可执行文件,使其双击即可运行。在命令行中,使用 chmod 命令添加执行权限:

chmod +x /path/to/socks.sh

在 macOS 系统中,您可能需要额外执行一个步骤,告诉 macOS 将 .sh 文件作为程序运行,而不是在编辑器中打开。为此,请右键单击 socks.sh 文件,然后选择«显示简介»。.

找到«打开方式:»部分,如果展开三角形未向下,请点击它以查看下拉菜单。您可以将 Xcode 设置为默认应用程序。.


将其更改为 Terminal.app。如果 Terminal.app 未列出,请选择«其他»,然后转到«应用程序»>«实用工具»>«Terminal.app»(您可能需要将“活动”下拉菜单从“推荐应用程序”设置为“所有应用程序”)。.

要打开您的 SOCKS 代理,请单击该文件 socks.sh 双击。脚本将打开一个终端窗口,建立 SSH 连接,并启动 Firefox 浏览器。此时可以安全地关闭终端窗口。只要您保留了 Firefox 中的代理设置,就可以开始通过安全连接浏览网页了:

该脚本可以帮助您快速停止代理,但您仍然需要按照上面列出的手动步骤找到 ssh 进程并在其完成后将其终止。.

命令行别名

如果你经常需要在命令行中使用隧道,可以创建一个命令行别名来帮你完成这项工作。创建别名最难的部分在于确定别名命令的存储位置。.

不同的 Linux 发行版和 macOS 版本将别名存储在不同的位置。最好的办法是查找以下文件之一: 别名 搜索查看其他别名当前存储的位置。功能包括:

  • ~/.bashrc
  • ~/.zshrc
  • ~/.bash_aliases
  • ~/.bash_profile
  • ~/.profile

找到正确的文件后,将以下别名添加到现有文件中,或者直接添加到文件末尾。在下面的示例中,我们使用别名“firesox”来表示 SOCKS 隧道,但您可以使用任何您想要的单词作为别名:

alias firesox='ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain && /Applications/Firefox.app/Contents/MacOS/firefox &'
  • 将 1337 替换为您所需的端口号(它应该与您在 Firefox 中输入的端口号一致)。
  • 将 sammy@your_domain 替换为您的 SSH 用户的主机名或 IP 地址。
  • 将 /Applications/Firefox.app/Contents/MacOS/firefox 替换为 Firefox 二进制文件的路径。

你的别名只有在你启动一个新的 shell 时才会加载,所以请关闭当前的终端会话并启动一个新的 shell。现在当你输入:

firesox

这将设置您的隧道别名,然后启动 Firefox 并将您返回到命令行。请确保 Firefox 仍然设置为使用代理。现在您可以安全地浏览网页了。.

步骤 5(可选)——故障排除:绕过防火墙

如果您的连接正常,一切就绪,您可以停止阅读。但是,如果您发现由于防火墙的限制而无法建立 SSH 连接,则很可能是建立隧道所需的 22 端口被阻止了。如果您可以控制 SSH 代理服务器的设置(您可以通过对 DigitalOcean Droplet 的 root 权限进行此操作),则可以将 SSH 配置为监听 22 以外的端口。.

可以使用哪个未被屏蔽的端口?

经常开放的端口包括 80(一般网络流量)和 443(TLS,安全网络流量)。.

如果您的 SSH 服务器不提供 Web 内容,我们可以指示 SSH 使用以下 Web 端口之一进行通信,而不是默认的 22 端口。443 端口是最佳选择,因为该端口通常会传输加密流量。SSH 流量将被加密。.

在没有防火墙的位置,通过 SSH 连接到您用于代理的 DigitalOcean Droplet,或者使用 Digital Ocean 控制面板的内置控制台。.

编辑 SSH 服务器设置:

sudo nano /etc/ssh/sshd_config

找到端口 22 这行代码。.

我们可以完全替换«22»,或者添加第二个端口供 SSH 监听。我们选择让 SSH 监听多个端口,因此在端口 22 下方添加一行,内容为端口 443。例如:

. . .
Port 22
Port 443
. . .

重启 SSH 服务以重新加载您刚刚编辑的 SSH 配置。根据您的发行版,SSH 服务器进程的名称可能有所不同,但通常是 ssh 或 sshd。如果其中一个不起作用,请尝试另一个:

sudo service ssh restart

要验证新的 SSH 端口是否正常工作,请打开一个新的 shell(暂时不要关闭当前的 shell,以防您不小心将自己锁定在外部),然后使用新端口打开 SSH:

ssh sammy@your_domain -p 443

如果操作成功,现在可以退出两个 shell,并使用新端口打开 SSH 隧道:

ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain -p 443

Firefox 的设置将与 SSH 端口相同,因为它不依赖于 SSH 端口,而只依赖于隧道端口(如上文提到的 1337)。.

结果

在当今时代,即使在可能存在安全隐患的网络环境下,例如咖啡馆的公共 Wi-Fi 网络,也有很多方法可以安全地浏览网页。大多数情况下,如果可以使用 VPN 来保护所有网络流量,那么使用 VPN 是最佳选择。但是,如果您无法使用或信任 VPN,SOCKS 隧道也能为您提供所需的安全保障。SOCKS 隧道设置快捷、使用方便,并且您可以完全控制它。对于安全浏览而言,SOCKS 隧道是一个绝佳的选择。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢

战神2游戏剧情

引言:奎托斯,这位曾经的凡人战士,击败了战神阿瑞斯,成为了新的战神。然而……