介绍
OpenVPN是一个伟大的工具,以确保流量不被窃听。您可以使用它来确保从笔记本电脑到DigitalOcean VPS(Droplet)以及云服务器之间的安全连接。你也可以同时做。 这不是一个万无一失的,明确的,完全安全的,依赖于生命的指令集。我们将在这里采取三个快捷方式,这在我看来是易用性和安全性之间的合理权衡,但我,也不,DigitalOcean可以负责您的VPS的安全,即使你按照这些说明。 引用一个加密摇滚明星
,“你必须知道自己在做什么的每一步,从概念到安装。” -布鲁斯 本文旨在帮助您开始设置虚拟专用网络。你被警告了。我将指出所采取的快捷方式和一般顺序以避免使这些快捷方式
附件1 。 如果你只是想有两个云服务器连接到对方,你可能希望找到一个更简单(但不太安全)
教程 -尽管这是易于安装和安全性之间的良好折衷。
注:
本教程介绍IPv4的安全性。
在Linux中,IPv6安全性与IPv4分开维护。
例如,“iptables”仅维护IPv4地址的防火墙规则,但它有一个称为“ip6tables”的IPv6对等体,可用于维护IPv6网络地址的防火墙规则。
如果您的VPS配置为IPv6,请记住使用相应的工具保护IPv4和IPv6网络接口。
有关IPv6工具的更多信息,请参阅本指南: 如何配置工具使用IPv6在Linux VPS
入门
你将需要至少两个Droplet或VPS为这个OpenVPN设置,并将工作高达60 VPS,没有重大的修改。所以要开始,创建两个Droplet。对于本教程的其余部分,我将把它们作为
Droplet1和
Droplet2。
在Droplet1
•使用Ubuntu 13.04 x32创建Droplet。 这应该工作没有修改任何版本的Ubuntu的DigitalOcean提供,但只有测试在13.04。 通过安全外壳连接到VPS。我们要更新软件包并安装一些东西。
aptitude update && aptitude dist-upgrade -y && aptitude install openvpn firehol -y && reboot
注意,如果你的shell在这期间变紫,只需选择“Install Package Maintainer's Version”两次。
同时,在Droplet 2
•使用Ubuntu 13.04 x32创建Droplet。 再次,这应该适用于任何版本的Ubuntu。 通过安全外壳连接到VPS。我们将在安装中更新包中的几件事。
aptitude update && aptitude dist-upgrade -y && aptitude install openvpn -y && reboot
再次,如果你的shell在这期间变紫,只需选择“安装包维护者的版本”两次。
生成密钥
密钥生成将完全在Droplet上完成1.在shell中键入以下命令:
cd /etc/openvpn/
mkdir easy-rsa
cd easy-rsa
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* .
接下来,我们要输入一些预设,这将大大加快密钥生成过程。键入以下命令:
nano /etc/openvpn/easy-rsa/vars
继续编辑以下值(你只需要做到这些,虽然有几个更多的存在):
- KEY_COUNTRY
- KEY_PROVINCE
- KEY_CITY
- KEY_ORG和
- KEY_EMAIL
您可以将KEY_SIZE调整为2048或更高以增加保护。 使用Control-O,Enter和Control-X保存并退出。
创建证书颁发机构证书和密钥
接下来,键入以下命令:
source vars
./clean-all
./build-ca
你应该能够输入所有的问题。
注意:如果你要回去,并创造更多的按键,你需要重新输入源增值经销商 ,但没有键入./clean-all,否则你会抹去你的证书颁发机构,破坏你的整个VPN设置。
创建服务器证书和密钥
使用以下命令生成服务器证书和密钥:
./build-key-server server
您应该能够在默认情况下按Enter键,但确保证书的公用名称是“服务器”。 它会要求您添加一个密码短语,但只需敲入Enter而不输入密码。 当它问你:“注册证书?”,键入
y,然后按Enter。 当它说:“1出1证书申请认证,犯?”,键入
y,然后按Enter。
生成客户端密钥
接下来是为客户端生成证书和密钥。出于安全目的,每个客户端将获得自己的证书和密钥。 我命名第一个客户端“client1”,所以如果你改变这个,你必须调整几次后。因此输入以下内容:
./build-key client1
与服务器密钥,当它问你:“注册证书?”,键入
y,然后按Enter。 当它说:“1出1证书申请认证,犯?”,键入
y,然后按Enter。 继续,为你需要做的客户重复这一点。你也可以回来这里以后(虽然记住“源var”再次如果你这样做)。
生成Diffie-Hellman参数
这在认证之后使用,以确定加密参数。只需键入以下行:
./build-dh
将键复制到位
接下来,我们将各种密钥和证书复制到云服务器上:
cd /etc/openvpn/easy-rsa/keys
cp ca.crt dh1024.pem server.crt server.key /etc/openvpn
密钥保持安全是非常重要的。仔细检查只有root具有读取权限。所以类型:
ls -lah /etc/openvpn
什么你要找的是
server.key具有
-rw -------对权限(读为业主/写,没有团体,并没有大家)。如果需要更改它,请使用此命令:
chmod 600 /etc/openvpn/server.key
分发客户端证书和密钥
下表显示哪些文件位于哪个客户端。
client1 |
client2 |
ca.crt |
ca.crt |
client1.crt |
client2.crt |
client1.key(SECRET) |
client2.key(SECRET) |
我们将使用安全副本将文件安全地复制到第二个VPS。 (您也可以猫,然后复制并在SSH窗口粘贴,但这是一个很好的技术安全地复制文件。)
在Droplet1
使用以下命令生成SSH密钥:
ssh-keygen -t rsa
它将选择一个默认文件名,然后要求您提供一个安全的密码,您应该设置。找到刚刚生成的SSH公钥,然后键入:
cat ~/.ssh/id_rsa.pub
将结果复制到剪贴板。它是几行字母和数字看起来像:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCo249TgbI1gYP42RbLcDhsNN28r/fNT6ljdFOZxhk+05UAPhxq8bASaqSXZI3K8EEI3wSpigaceNUu65pxLEsZWS8xTtjY4AVxZU2w8GIlnFDSQYr3M2A77ZAq5DqyhGmnnB3cPsIJi5Q6JQNaQ/Meg1v7mYR9prfEENJeXrDiXjxUqi41NlVdb5ZQnPL1EdKM+KN/EPjiTD5XY1q4ICmLJUB8RkffHwH2knEcBoSZW2cNADpMu/IqtxTZpFL0I1eIEtoCWg4mGIdIo8Dj/nzjheFjavDhiqvUEImt1vWFPxHEXt79Iap/VQp/yc80fhr2UqXmxOa0XS7oSGGfFuXz root@openvpn1
但使用你自己,而不是我的。您id_rsa.pub并不需要保持安全的,但如果你使用上面的关键,这将让我进入你的VPS。
同时,在Droplet 2
cd ~/.ssh
(如果你得到一个错误,创建该文件夹
mkdir ~/.ssh
)。
nano authorized_keys
在剪贴板中的公钥是粘贴到一个新行,然后保存并使用Control-O键退出,进入,控制-X。
返回Droplet 1
接下来,我们将相应的密钥复制到第二台服务器上:
scp /etc/openvpn/easy-rsa/keys/ca.crt \
/etc/openvpn/easy-rsa/keys/client1.crt \
/etc/openvpn/easy-rsa/keys/client1.key \
root@droplet2ip:~/
它会问你“你确定要继续连接(是/否)?”,所以键入
yes,然后按Enter。 然后输入您刚才创建的密码。
再次切换到Droplet 2
接下来,我们将证书和密钥移动到其最终位置:
cd ~
mv ca.crt client1.crt client1.key /etc/openvpn
ls -l /etc/openvpn
由于密钥必须保持安全,让我们确保client1.key具有正确的权限
(-rw -------)。 再次,如果需要,可以使用以下命令重置权限:
chmod 600 /etc/openvpn/client1.key
联网
接下来是在VPN上的网络兴奋。您可以使用路由或桥接使用OpenVPN。如果你知道有什么区别,你不需要我的帮助选择。在本教程中,我们将使用路由。我们也将使用OpenVPN的默认网络范围,这是
10.8.0.0/24。除非你已经使用这个网络范围在某个地方,这将是罚款。如果您需要不同的范围,请选择一个私人范围,并确保相应地调整所有后面的配置步骤。
Droplet1
在OpenVPN服务器上,我们还需要配置路由和设置防火墙。我使用了一个名为
firehol配置iptables的工具,这使得它非常简单,设置复杂的防火墙。因此,键入以下命令:
nano /etc/firehol/firehol.conf
虽然我们可以允许从任何地址的输入OpenVPN的连接,我们要限制这些连接到您想要连接的计算机的IP地址。立即制作此IP地址列表。 注意:以下配置仅允许传入SSH和OpenVPN连接。如果您有其他需要接收传入连接的服务,您需要修改防火墙以支持这些连接。
version 5
interface eth0 inet
client all accept // allow all outgoing connections
server ssh accept // allow all incoming SSH connections
server openvpn accept src "1.2.3.4 2.3.4.5" // allow incoming OpenVPN connections
// from these designated addresses
// NOTE: EDIT THESE ADDRESSES
interface tun0 vpn
server all accept // allow all incoming connections on the VPN
client all accept // allow all outgoing connections on the
router inet2vpn inface eth0 outface tun0
route all accept // route freely to the VPN
router vpn2inet inface tun0 outface eth0
masquerade // use NAT masquerading from the VPN
route all accept // route freely to the VPN
然后,使用以下命令启动防火墙:
firehol start
如果您的防火墙有问题,您可以重新启动您的VPS,防火墙配置将被清除。要使防火墙永久,请输入以下内容:
nano /etc/default/firehol
找到以下行:
START_FIREHOL=NO
现在,将NO更改为YES。使用Control-O,Enter,Control-X保存并退出。
OpenVPN服务器配置文件
在Droplet1
下一步是将示例服务器配置复制到位,并根据需要进行编辑。
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
gunzip server.conf.gz
nano /etc/openvpn/server.conf
OpenVPN服务器将以root身份启动,但是我们可以将其设置为在启动后降低权限,这是一个很好的安全措施。要配置此,请找到以下行,并通过删除分号取消注释它们:
;user nobody
;group nogroup
如果您有多个应该彼此通信的服务器,请找到以下行并删除分号:
;client-to-client
如果增加DH密钥的密钥大小,请找到以下行:
dh dh1024.pem
并将1024更改为2048(或您选择的任何数字)。 我们将从OpenVPN服务器分配不同的客户端静态IP地址,为此,取消注释以下行:
;client-config-dir ccd
使用Control-O,Enter,Control-X保存。接下来,make客户端配置目录:
mkdir /etc/openvpn/ccd
我们将在这里为第一个客户端添加配置:
nano /etc/openvpn/ccd/client1
键入以下命令,将client1分配给IP地址10.8.0.5:
ifconfig-push 10.8.0.5 10.8.0.6
使用Control-O,Enter,Control-X保存并退出。 由于需要深入了解网络的原因才能理解,请为其他客户使用以下地址:
在/ etc / OpenVPN的/ CCD /客户机程序使用ifconfig推10.8.0.9 10.8.0.10
在/ etc / OpenVPN的/ CCD / client3:使用ifconfig推10.8.0.13 10.8.0.14 简单地说,为每个新集合的每个IP添加4。更技术性的解释在
附录2 。 现在我们可以使用以下命令启动OpenVPN服务器:
service openvpn start
给它一秒钟,然后键入以下命令,以确保OpenVPN正在运行:
ifconfig
在网络接口中,您应该看到接口tun0看起来像这样:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:140 errors:0 dropped:0 overruns:0 frame:0
TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:13552 (13.5 KB) TX bytes:14668 (14.6 KB)
您还可以键入:
service openvpn status
如果OpenVPN正在运行,您将看到以下内容:
* VPN 'server' is running
如果这两个都是顺序,那么服务器启动并运行,我们将配置客户端连接。
OpenVPN客户端配置文件
Droplet2
首先,让我们将示例客户端配置文件复制到正确的位置:
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .
它主要配置,但我们必须“告诉”我们的OpenVPN服务器的地址,Droplet 1:
nano /etc/openvpn/client.conf
找到说:
remote my-server-1 1194
和改变
我服务器-1至Droplet1。接着的IP地址,我们必须确保客户端密钥和证书的实际文件名相匹配。搜索以下行:
cert client.crt
key client.key
并调整到复制(如
client1.crt和
client1.key)键。 使用Control-O,Enter,Control-X保存并退出。 接下来,让我们启动VPN:
service openvpn start
同样,我们可以使用以下命令进行测试:
service openvpn status
ifconfig
现在VPN的两端都已经启动,我们应该测试网络。使用以下命令:
ping 10.8.0.1
如果成功,你应该会看到:
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=0.102 ms
64 bytes from 10.8.0.1: icmp_req=2 ttl=64 time=0.056 ms
恭喜,您现在完成了!
您不需要加密的任何流量,您可以通过面向公众的IP地址连接。你要加密的云服务器之间的任何通信,连接到Internet的网络地址,如Droplet1连接到
10.8.0.1。 Droplet2是
10.8.0.5,Droplet3是
10.8.0.9,依此类推。 加密的流量将比未加密的流量慢,特别是如果您的云服务器位于不同的数据中心,但是流量方法可以同时使用,因此请选择。 此外,现在是了解更多关于OpenVPN和一般的加密的好时机。该
OpenVPN的网站有一些很好的资源这一点。
附录1
安全
这里有三个捷径,如果安全是最重要的,你不应该做。
- 首先,密钥都是在互联网上的并且不完全由人控制的虚拟服务器上远程生成的。执行此操作的最安全的方法是在安全位置的独立(非Internet连接)计算机上生成证书颁发机构密钥。
- 第二,传输密钥而不是生成密钥。 SSH提供传输文件的合理安全的方法,其中SSH还没有完全安全的。如果您要在主机中生成,请将CSR转移到您的脱机CA,在那里签名,然后将已签名的请求传回,这将更安全。
- 第三,没有密钥被分配给密钥。由于这些是服务器,并且可能需要无人值守重新启动,这种权衡。
此外,OpenVPN支持其他加固功能,超出本教程的范围。在openvpn.org上阅读应该完成。
背部
附录二
关于网络的注释
所以第一个客户端将使用10.8.0.6作为其IP地址,10.8.0.5是VPN隧道端点。第二个地址仅用于通过隧道路由流量。这是因为每个客户端使用CIDR / 30网络,这意味着每个客户端计算机使用4个IP地址。 所以VPN服务器将使用10.8.0.0/30网络:
10.8.0.0 |
网络 |
10.8.0.1 |
服务器IP地址 |
10.8.0.2 |
隧道端点 |
10.8.0.3 |
广播 |
而第一个客户端client1将使用10.8.0.4/30网络:
10.8.0.4 |
网络 |
10.8.0.5 |
服务器IP地址 |
10.8.0.6 |
隧道端点 |
10.8.0.7 |
广播 |
等等...
背部