如何在没有 VPN 的情况下使用 SOCKS 隧道安全路由网络流量

作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。

介绍

在某些时候,你可能会发现自己在一个不安全的网络上,或者有一个过于限制性的防火墙,你会想确保没有人监视你的流量。 一个解决方案是使用VPN,但许多VPN在你的机器上需要特殊的客户端软件,你可能没有安装权限。

SOCKS 代理商是一个 SSH 加密隧道,配置的应用程序将其流量转移到服务器端,然后在服务器端,代理商将流量转移到一般的互联网上。 与 VPN 不同,SOCKS 代理商必须在客户端机器上根据应用程序进行配置,但只要应用程序能够使用 SOCKS 代理商,您可以设置应用程序而无需任何专门的客户端软件。

在本教程中,您将使用运行Ubuntu 20.04的服务器(尽管您可以通过SSH访问的任何Linux发行版都将工作),以及Firefox的Web浏览器作为客户端应用程序。

前提条件

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

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

在本地计算机上,如果您尚未创建您的 Droplet,请创建 SSH 密钥。一旦创建了密钥,请确保该公共页面被添加到 SSH 密钥上的authorized_keys文件中。

使用此命令设置隧道:

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

** 论点的解释**

  • -i:将用于连接到主机的SSH密钥的路径
  • -D:告诉SSH我们希望在指定的端口号上建立一个SOCKS隧道(您可以选择在 102565536之间的数字)
  • -f:将过程转移到背景
  • -C:在发送前压缩数据
  • -q:使用安静模式
  • -N:告诉SSH一旦隧道开启,不会发送任何命令

请确保将sammy@your_domain替换为您的sudo用户和服务器 IP 地址/域名。

一旦你输入命令,你会立即被带到命令提示再次没有成功或失败的迹象;这是正常的。

检查隧道是否正在运行,使用此命令:

1ps aux | grep ssh

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

1[secondary_label Output]
2sammy 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会话置于背景:

<$>[注] **注:**要终止隧道,你必须通过ps抓取PID。在我们的示例中,PID是14345

步骤 1 (Windows) — 设置隧道

開啟(左)

如果您尚未安装它,请下载 PuTTY 并将其保存到您想要的位置。 PuTTY 不需要管理员权限来安装;只需下载.exe 并运行它。

完成以下步骤来设置隧道:

  1. From the Session section, add the Host Name (or IP address) of your server, and the SSH Port (typically 22) Putty Sessions
  2. On the left, navigate to: Connection > SSH > Tunnels
  3. Enter any Source port number between 1025 and 65536, such as 1337Putty Connection>SSH>Tunnel
  4. Select the Dynamic radio button
  5. Click the Add button
  6. Go back to Session on the left
  7. Add a name under Saved Sessions and click the Save button
  8. Now click the Open button to make the connection
  9. Enter your sudo username and server password to log in

您现在可以最小化 PuTTY 窗口,但不要关闭它. 您的 SSH 连接应该打开:

<$>[注] 注: 您可以按照 PuTTY SSH 密钥指示来保存同一会话的sudo用户名(sammy)和 SSH 密钥,然后您不必每次打开连接时输入您的用户名和密码。

步骤 2 — 配置 Firefox 使用隧道

现在你有一个SSH隧道,现在是时候将Firefox配置为使用该隧道了,请记住,要让SOCKS 5隧道工作,你必须使用可实现隧道的本地应用程序;Firefox具有此功能:

<$>[注] 此步骤适用于 Windows、macOS 和 Linux。

请确保您有您在 SSH 命令中使用的端口号码;在我们的示例中,我们使用了1337

(以下步骤是在Firefox版本 80中执行的,但应该在其他版本上工作,尽管选项的位置可能不同。

打开Firefox

  1. 在右上角,点击汉堡图标访问 Firefox 菜单.
  2. 点击偏好或选项菜单项.
  3. 向下滚动,在网络设置下选择设置按钮。
  4. 设置代理访问互联网标题下选择手动代理配置
  5. 对于 SOCKS 主机,请输入localhost127.0.0.1,对于端口,请使用您隧道中指定的自定义端口,即1337
  6. 靠近底部,请点击使用 SOCKS v5 7时使用的Proxy DNS框。

现在,在Firefox中打开另一个选项卡并开始浏览网络. 您应该全部设置为通过您的SSH隧道安全浏览。 您从网站获得的数据被加密。 此外,因为您检查了代理 DNS选项,您的DNS搜索也被加密,因此您的ISP无法看到您看到的内容或您去哪里获取它。

要验证您正在使用代理服务器,请回到 Firefox 中的网络设置,输入不同的端口号码并保存设置。现在,如果您试图浏览网络,您应该收到一个错误消息:代理服务器拒绝连接。这证明 Firefox 正在使用代理服务器,而不仅仅是默认连接。另一种方式是,您可以访问公共 IP 站点,如 ipecho.net,并且它返回的 IP 应该是您的 SSH Droplet 的 IP,因为它现在作为您的代理服务器。

步骤 3 —在Firefox中重置代理

当你完成需要SSH隧道的隐私时,回到Firefox的网络代理设置。点击使用系统代理设置的无线电按钮,然后点击OK.现在Firefox不再使用SOCKS隧道,我们可以关闭它。

关闭隧道(macOS/Linux)

我们以前在本地机器上创建的隧道被发送到后台,所以关闭您打开隧道时使用的终端窗口不会终止它。

让我们在我们的机器上搜索所有活跃的ssh流程:

1ps aux |grep ssh

查找看起来像你先前输入的命令来创建隧道的行。

1[secondary_label Output]
2sammy 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. 示例PID的 14345在这里突出。

现在你知道什么是PID,你可以使用杀死命令将隧道带下来。

1kill 14345

关闭隧道(Windows)

关闭您创建隧道时使用的 PuTTY 窗口。

步骤 4 (macOS/Linux) — 创建重复使用的快捷键

对于 macOS 或 Linux 系统,我们可以创建一个名称或创建一个脚本,以便快速为我们创建隧道。

<$>[注] 这些快捷方式都需要对服务器进行无密码/无密码的 SSH 密钥身份验证。

可点击的BASH脚本

如果你想要一个图标,一旦点击,将启动隧道,我们可以创建一个小BASH脚本来完成这项工作. 该脚本将设置隧道,然后启动Firefox,尽管你仍然需要在Firefox中首次手动添加代理设置。

在macOS上,我们可以从命令行启动的Firefox二进制在Firefox.app内部。假设应用程序位于应用程序文件夹中,二进制将在/Applications/Firefox.app/Contents/MacOS/firefox上找到。

在 Linux 系统中,如果您通过 Repo 安装了 Firefox,或者如果它已预先安装,那么它的位置应该是 /usr/bin/firefox. 如果它不在标准位置,您可以随时使用命令 which firefox 来找出 Firefox 所在的位置。

在本脚本中,用适合您的系统的路径替换Firefox路径,您可能还需要调整SSH路线以反映您之前使用的成功命令来站立隧道。

使用文本编辑器,如nano创建一个新的文件:

1nano ~/socks.sh

添加以下几行:

1[label socks.sh]
2#!/bin/bash -e
3ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
4/Applications/Firefox.app/Contents/MacOS/firefox &
  • 用您想要的端口号取代‘1337’(它应该与您在Firefox中放置的内容相匹配)
  • 用您的SSH用户@您的主机名或IP 取代‘/Applications/Firefox.app/Contents/MacOS/firefox’为您的系统的Firefox二进制路径

保存你的脚本. 为nano,键入CONTROL + o,然后停止,键入CONTROL + x

使脚本可执行,这样当你双击它时,它就会执行. 从命令行,使用chmod命令添加执行权限:

1chmod +x /path/to/socks.sh

在 macOS 上,您可能需要执行一个额外的步骤来告诉 macOS.sh 文件应该像程序一样运行,而不是在编辑器中打开。

Locate the section 'Open with:' and if the disclosure triangle isn’t pointing down, click on it so you can see the dropdown menu. Xcode might be set as the default app. Get Info

如果没有列出 Terminal.app,请选择其他,然后导航到应用程序 > 实用程序 > Terminal.app(您可能需要将启用推荐应用程序设置为所有应用程序)。

若要现在打开 SOCKS 代理,请双击socks.sh文件,脚本将打开终端窗口,启动 SSH 连接,并启动 Firefox. 只要您在 Firefox 中保持代理设置,您可以开始浏览您的安全连接:

<$>[注] 此脚本将帮助您快速站起来代理,但您仍然需要执行上面列出的手动步骤来找到 ssh 流程并在完成后杀死它。

命令线 Alias

如果您经常发现自己在命令行上,并且想要引导隧道,您可以创建命令行代号来为您完成这项工作。

创建名称最困难的部分是找出保存名称命令的位置。

不同的 Linux 发行版和 macOS 发行版会将副名存储在不同的位置. 最好的选择是搜索以下文件之一,然后搜索副名,看看其他副名目前存储在哪里。

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

一旦你找到了正确的文件,添加下面的代名词到任何你已经有,或只是在文件的末尾。在下面的示例中,我们正在使用代名词firesox来带来SOCKS隧道,但你可以使用任何你想要的词作为你的代名词:

1[label .bashrc]
2alias firesox='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」
  • 用 Firefox 二进制 的路径取代「/Applications/Firefox.app/Contents/MacOS/firefox」

您的名称仅在启动新壳时加载,因此关闭终端会话并启动新。

1firesox

这个名称会设置你的隧道,然后为你启动Firefox,然后返回命令提示. 确保Firefox仍然设置为使用代理程序。

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

但是,如果您发现由于防火墙的限制,您无法进行SSH连接,那么很可能是需要创建隧道的22端口被阻止了,如果您可以控制代理服务器的SSH设置(通过对DigitalOcean Droplet的 root访问,您将能够做到这一点),您可以设置SSH以在22以外的端口上听。

你可以使用哪个不被阻挡的端口?

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

如果您的 SSH 服务器不提供 Web 内容,我们可以告诉 SSH 使用这些 Web 端口进行通信,而不是默认端口 22。

从没有防火墙的位置, SSH 到您正在使用的 DigitalOcean Droplet 代理程序,或从数字海洋控制面板中使用内置的 控制台

编辑服务器的 SSH 设置:

1sudo nano /etc/ssh/sshd_config

寻找22号港口线。

我们可以完全取代22或添加第二个端口为SSH聆听,我们会选择在多个端口上使用SSH聆听,所以我们会在22端口下添加一个新行,该行读443端口

1[label sshd_config]
2. . .
3
4Port 22
5Port 443
6
7. . .

重新启动 SSH 以便重新加载您刚刚编辑的 SSH 配置. 取决于您的分布,SSH 服务器 DAEMON 的名称可能不同,但很可能是sshsshd

1sudo service ssh restart

要验证新 SSH 端口是否有效,请打开新的壳(如果您意外锁定自己,请不要关闭当前的壳)和使用新端口的 SSH:

1ssh sammy@your_domain -p 443

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

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

Firefox 的设置将是相同的,因为它不取决于 SSH 端口,只取决于隧道端口(‘1337’ 以上)。

结论

在这个现代时代,当你在潜在的敌对网络上时,可以安全浏览无数种方式,比如咖啡店的公共WiFi。在大多数情况下,如果你能够使用VPN来保护和保护你的所有流量,那么它的使用是优先的。但是,在你无法使用或信任VPN时,使用SOCKS隧道将为你提供所需的安全性。

Published At
Categories with 技术
Tagged with
comments powered by Disqus