作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。
介绍
在某些时候,你可能会发现自己在一个不安全的网络上,或者有一个过于限制性的防火墙,你会想确保没有人监视你的流量。 一个解决方案是使用VPN,但许多VPN在你的机器上需要特殊的客户端软件,你可能没有安装权限。
SOCKS 代理商是一个 SSH 加密隧道,配置的应用程序将其流量转移到服务器端,然后在服务器端,代理商将流量转移到一般的互联网上。 与 VPN 不同,SOCKS 代理商必须在客户端机器上根据应用程序进行配置,但只要应用程序能够使用 SOCKS 代理商,您可以设置应用程序而无需任何专门的客户端软件。
在本教程中,您将使用运行Ubuntu 20.04的服务器(尽管您可以通过SSH访问的任何Linux发行版都将工作),以及Firefox的Web浏览器作为客户端应用程序。
前提条件
- Linux服务器运行Ubuntu 20.04(其他发行版将工作)具有
sudo
用户和SSH访问。 要设置此功能,您可以遵循我们的Ubuntu 20.04初始服务器设置教程(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04)。
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隧道(您可以选择在1025
和65536
之间的数字)-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 并运行它。
完成以下步骤来设置隧道:
- From the Session section, add the Host Name (or IP address) of your server, and the SSH Port (typically 22)
- On the left, navigate to: Connection > SSH > Tunnels
- Enter any Source port number between
1025
and65536
, such as1337
- Select the Dynamic radio button
- Click the Add button
- Go back to Session on the left
- Add a name under Saved Sessions and click the Save button
- Now click the Open button to make the connection
- 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
- 在右上角,点击汉堡图标访问 Firefox 菜单.
- 点击
偏好或选项
菜单项. - 向下滚动,在
网络设置
下选择设置
按钮。 - 在
设置代理访问互联网
标题下选择手动代理配置
。 - 对于 SOCKS 主机,请输入
localhost
或127.0.0.1
,对于端口,请使用您隧道中指定的自定义端口,即1337
。 - 靠近底部,请点击
使用 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.
如果没有列出 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 的名称可能不同,但很可能是ssh
或sshd
。
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隧道将为你提供所需的安全性。