如何在Ubuntu上使用Stunnel设置SSL隧道
状态: 已弃用
本文已弃用,不再维护。
原因
Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命 (EOL) ,不再接收安全补丁或更新。
请参阅
本文可能仍可用作参考,但可能不遵循最佳实践或在此或其他 Ubuntu 版本上工作。 我们强烈建议您使用最近为您正在使用的 Ubuntu 版本编写的文章。
如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
什么是Stunnel
Stunnel 程序旨在用作远程客户端和本地(inetd-startable)或远程服务器之间的 SSL 加密包装器。 它可用于向常用的 inetd 守护程序(如 POP2、POP3 和 IMAP 服务器)添加 SSL 功能,而无需对程序代码进行任何更改。
Stunnel 的基本作用是使用 OpenSSL 包进行加密,将任何不安全的 TCP 端口转换为安全的加密端口。 它有点像在特定端口上运行的小型安全 VPN。
第 1 步:创建一个 Ubuntu Droplet
到目前为止,我已经在 Ubuntu 12.04 x32/x64、Ubuntu 12.10 x32/x64、Ubuntu 13.04 x32/x64 上对其进行了测试。
第 2 步:更新和升级 Ubuntu
使用这些命令更新您的 Ubuntu 的包列表,并将现有的包升级到最新版本:
apt-get update apt-get upgrade
第 3 步:在您的 VPS 上安装 Stunnel
使用以下代码安装 Stunnel 包:
apt-get install stunnel4 -y
第 4 步:在 VPS 上配置 Stunnel
Stunnel 使用名为 “stunnel.conf” 的文件配置自身,该文件默认位于 “/etc/stunnel” 中。
在“/etc/stunnel”目录下创建一个“stunnel.conf”文件:
nano /etc/stunnel/stunnel.conf
我们将使用 SSL 证书向服务器标识自己,因此我们必须使用此行在 “stunnel.conf” 文件中设置该证书的路径(我们将在下一步):
cert = /etc/stunnel/stunnel.pem
接下来,我们指定一个与 Stunnel 一起使用的服务。 它可以是任何使用网络的服务,例如邮件服务器、代理服务器等。
这里作为示例,我们将使用 Stunnel 保护 Squid 代理服务器和客户端之间的流量。 我们将在第 6 步中解释如何安装和配置 Squid。
在为您要使用的服务设置名称后,您必须告诉 Stunnel 侦听该服务的哪个端口。 这可以是 65535 端口中的任何一个,只要它没有被其他服务或防火墙阻止:
[squid] accept = 8888
然后根据您要使用安全隧道的服务,您必须在配置文件中指定端口和 IP 地址 基本上 Stunnel 从安全端口获取数据包,然后将其转发到端口和 IP 地址您指定的服务。
Squid 代理默认在 localhost 和端口 3128 上运行,因此我们必须告诉 Stunnel 将接受的连接转发到该端口:connect = 127.0.0.1:3128
所以总的来说 “stunnel.conf” 文件必须包含以下行:
client = no [squid] accept = 8888 connect = 127.0.0.1:3128 cert = /etc/stunnel/stunnel.pem
注意: client = no
部分不是必须的,Stunnel 默认设置为服务器模式。
第 5 步:创建 SSL 证书
Stunnel 使用 SSL 证书来保护其连接,您可以使用 OpenSSL 包轻松创建:
openssl genrsa -out key.pem 2048 openssl req -new -x509 -key key.pem -out cert.pem -days 1095 cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
基本上,上面的命令用于创建一个私钥,使用该密钥创建一个证书,并将它们两者组合到一个名为 “stunnel.pem” 的文件中以与 Stunnel 一起使用。
注意: 创建证书时,会要求您输入一些国家和州等信息,您可以输入任何您喜欢的信息,但当要求输入“Common Name”时,您必须输入正确的主机名或IP您的液滴 (VPS) 的地址。
另外,通过配置“/etc/default/stunnel4”文件启用Stunnel自动启动,输入以下命令在文本编辑器中打开文件:
nano /etc/default/stunnel4
并将 ENABLED 更改为 1:
ENABLED=1
最后,重启 Stunnel 使配置生效,使用以下命令:
/etc/init.d/stunnel4 restart
第 6 步:安装 Squid 代理
使用以下命令安装 Squid:
apt-get install squid3 -y
第 7 步:在客户端中配置 Stunnel
注意:这里解释了Stunnel作为客户端在Windows中的安装和配置过程,但Stunnel也可以安装在Linux甚至Android中,配置仍然保持不变。 唯一的区别是放置配置 Stunnel 所需的 “stunnel.conf” 文件。
为了让 Stunnel 与服务器通信,我们在第 5 步中创建的 SSL 证书必须存在于客户端。 从服务器获取 “stunnel.pem” 文件的方法有很多,但我们将使用 SFTP,它既简单又非常安全。
使用 Filezilla 等 SFTP 客户端,连接到您的服务器并将位于 “/etc/stunnel/” 目录中的 “stunnel.pem” 文件下载到客户端。
这里还有一个关于 SFTP 的很好的教程:
在您喜欢的任何地方安装 Stunnel。 然后转到 Stunnel 文件夹,将下载的证书 “stunnel.pem” 移动到 Stunnel 文件夹。
如果 Stunnel 的文件夹不存在,则创建一个 “stunnel.conf” 文件。 使用记事本等文本编辑器打开文件。
首先,我们告诉 Stunnel 我们的证书路径,在 Windows 中位于 Stunnel 的目录中(提醒:在 Ubuntu 中位于 “/etc/stunnel/” 目录中):
cert = stunnel.pem
由于我们要建立一个客户端,我们必须告诉 Stunnel 这是一个客户端。 将下面的行放入配置文件中:
client = yes
然后就像服务器一样,我们必须指定我们要使用的服务的配置。
首先我们指定服务的名称,然后是 IP 地址和端口,Stunnel 应该在客户端上监听它们:
[squid] accept = 127.0.0.1:8080
接受端口可以是客户端计算机上的任何端口,只要它没有被其他服务占用或被防火墙阻止。
接下来,我们告诉 Stunnel 将到达此端口的数据包转发到我们的 Stunnel 服务器的 IP 地址和端口。 IP地址是你服务器(droplet)的公网IP地址,在设置droplet时分配给你,port是你在服务器配置Stunnel时指定的端口。 在我们的例子中是 8888,所以我们要告诉 Stunnel 连接到那个端口:
connect = [Server’s Public IP]:8888
所以客户端中最终的 “stunnel.conf” 文件应该是这样的:
cert = stunnel.pem client = yes [squid] accept = 127.0.0.1:8080 connect = [Server’s Public IP]:8888
保存并关闭文件并运行“stunnel.exe”。
就是这样。 现在我们的客户端配置为使用安全 SSL 隧道与虚拟服务器进行安全通信。 从现在开始,当尝试连接到我们 VPS 上的任何服务时,我们必须使用在 Stunnel 的“接受”部分为每个服务配置的 IP 地址和端口,而不是直接连接到服务器的 IP 地址。
例如,当我们想要连接到云服务器上的 Squid 代理时,我们必须将客户端配置为连接到 127.0.0.1:8080,Stunnel 会自动通过安全隧道将我们连接到为该端口指定的服务。 在这里,您可以将 Web 浏览器配置为使用 IP 127.0.0.1 和端口 8080 作为代理来保护您的 Web 流量。