简介
OpenVPN 是一个开源的 VPN 应用程序,可以让您在公共互联网上安全地创建和加入私人网络。简而言之,这允许最终用户隐藏连接并更安全地浏览不受信任的网络。
有了这个前提,本教程将教您如何在 Debian 8 上设置 OpenVPN,这是一个开源的安全套接字层(SSL)VPN 解决方案。
先决条件
本教程假设您具有以下内容:
一个全新的 Debian 8.1 Droplet
一个 root 用户
可选:完成本教程后,使用一个启用了 sudo 的非 root 帐户进行一般维护;您可以按照本教程的第 2 和第 3 步来设置一个
步骤 1 — 安装 OpenVPN
apt-get update
apt-get install openvpn easy-rsa
步骤 2 — 配置 OpenVPN
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem
dh dh2048.pem
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway def1 bypass-dhcp"
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
默认情况下,OpenVPN 以 root 用户身份运行,因此对系统具有完全的 root 访问权限。我们将把 OpenVPN 限制为用户 nobody 和组 nogroup。这是一个没有默认登录权限的非特权用户,通常用于运行像面向 Web 服务器这样的不受信任的应用程序。
现在保存您的更改并退出。
步骤 3 —— 启用数据包转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 取消注释下一行以启用 IPv4 的数据包转发
#net.ipv4.ip_forward=1
# 取消注释下一行以启用 IPv4 的数据包转发
net.ipv4.ip_forward=1
步骤 4 —— 安装和配置 ufw
UFW 是 IPTables 的前端。我们只需要进行一些规则和配置编辑,然后打开防火墙。有关 UFW 更多用法的参考,请参阅《如何在 Ubuntu 和 Debian 云服务器上使用 UFW 设置防火墙》。
apt-get install ufw
ufw allow ssh
ufw allow 1194/udp
nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_FORWARD_POLICY="ACCEPT"
nano /etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
# 不要删除这些必需的行,否则将会出现错误
*filter
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Firewall is active and enabled on system startup
ufw status
状态: active
To Action From
-- ------ ----
22 ALLOW Anywhere
1194/udp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
1194/udp (v6) ALLOW Anywhere (v6)
步骤 5 —— 配置和构建证书颁发机构
OpenVPN 使用证书来加密流量。
在本节中,我们将分两步设置自己的证书颁发机构(CA):(1)设置变量和(2)生成 CA。
OpenVPN 支持基于证书的双向身份验证,这意味着在建立相互信任之前,客户端必须对服务器证书进行身份验证,服务器也必须对客户端证书进行身份验证。我们将使用 Easy RSA 的脚本来完成这一点。
首先复制 Easy-RSA 生成脚本。
cp -r /usr/share/easy-rsa/ /etc/openvpn
mkdir /etc/openvpn/easy-rsa/keys
nano /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="sammy@example.com"
export KEY_OU="MYOrganizationalUnit"
在同一 vars 文件中,还编辑下面显示的这一行。为简单起见,我们将使用 server 作为密钥名称。如果您想使用不同的名称,您还需要更新引用 server.key 和 server.crt 的 OpenVPN 配置文件。
接下来,在同一文件中,我们将指定正确的证书。查找以下行,在之前修改的块之后,读取
# X509 主题字段
```bash
export KEY_NAME="EasyRSA"
export KEY_NAME="server"
接下来,我们将使用内置的 OpenSSL 工具 dhparam
生成 Diffie-Helman 参数;这可能需要几分钟时间。
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
cd /etc/openvpn/easy-rsa
. ./vars
./clean-all
./build-ca
步骤 6 — 为服务器生成证书和密钥
./build-key-server server
请输入以下“额外”属性以与您的证书请求一起发送
挑战密码 []:
可选公司名称 []:
签署证书?[y/n]
1 个证书请求已经认证,提交?[y/n]
写入数据库,有 1 个新条目
数据库已更新
步骤 7 — 移动服务器证书和密钥
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
ls /etc/openvpn
service openvpn start
service openvpn status
* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled)
Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago
Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2505 (code=exited, status=0/SUCCESS)
最重要的是,从上面的输出中,您应该找到 Active: active (exited) since... 而不是 Active: inactive (dead) since...。
您的 OpenVPN 服务器现在已经运行。如果状态消息显示 VPN 未运行,则查看 /var/log/syslog 文件以获取诸如以下错误的错误:
Options error: --key fails with 'server.key': No such file or directory
步骤 8 — 为客户端生成证书和密钥
密钥和证书生成
为了为您打算连接到 VPN 的每个设备创建单独的身份验证凭据,您应该为每个设备完成此步骤,但是将下面的名称client1更改为不同的名称,例如client2或iphone2。使用每个设备单独的凭据后,如果需要,它们可以在服务器上单独停用。本教程中的其余示例将使用client1作为我们示例客户端设备的名称。
与服务器的密钥一样,现在我们为我们的client1示例构建一个密钥。您应该仍然在/etc/openvpn/easy-rsa目录中工作。
./build-key client1
请输入以下“额外”属性以与您的证书请求一起发送
挑战密码[]:
可选公司名称[]:
签署证书?[y/n]
1 个证书请求已经认证,提交?[y/n]
写入具有 1 个新条目的数据库。
数据库已更新
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
注意:您复制的client.ovpn的名称不需要与客户端设备相关。客户端端的 OpenVPN 应用程序将使用文件名作为 VPN 连接本身的标识符。相反,您应该将client.ovpn复制到您希望在操作系统中作为 VPN 名称标签的任何内容。例如:work.ovpn将被识别为work,school.ovpn将被识别为school,等等。
nano /etc/openvpn/easy-rsa/keys/client.ovpn
# 服务器的主机名/IP 和端口。
# 您可以有多个远程条目
# 在服务器之间进行负载平衡。
remote your_server_ip 1194
接下来,找到下面显示的区域,并取消注释user nobody
和group nogroup
,就像我们在第 1 步中的server.conf
中所做的一样。**注意:**这不适用于 Windows,因此您可以跳过它。完成后应如下所示:
# 初始化后降低权限(仅限非 Windows)
user nobody
group nogroup
将证书和密钥传输到客户端设备
对于每个客户端,我们需要将客户端证书、密钥和配置文件模板文件传输到本地计算机或另一个客户端设备上的文件夹。
/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key
ca.crt
和client.ovpn
文件对所有客户端都是相同的。也下载这两个文件;请注意,ca.crt
文件位于与其他文件不同的目录中。
/etc/openvpn/easy-rsa/keys/client.ovpn
/etc/openvpn/ca.crt
尽管用于完成此传输的确切应用程序取决于您的选择和设备的操作系统,但您希望应用程序在后端使用 SFTP(SSH 文件传输协议)或 SCP(安全复制)来传输客户端的 VPN 身份验证文件。
scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/
WinSCP
如何使用 SFTP 安全地与远程服务器传输文件
如何使用 Filezilla 在 VPS 上安全地传输和管理文件
client1.crt
client1.key
client.ovpn
ca.crt
第九步 —— 为客户端设备创建统一的 OpenVPN 配置文件
管理客户端文件有几种方法,但最简单的方法是使用一个“统一”的配置文件。这是通过修改 client.ovpn 模板文件来实现的,其中包括服务器的证书颁发机构、客户端的证书和密钥。一旦合并完成,只需将单个 client.ovpn 配置文件导入客户端的 OpenVPN 应用程序即可。
# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key
echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
第十步 —— 安装客户端配置文件
结论
本文链接:https://blog.runxinyun.com/post/357.html 转载需授权!
留言0