如何在 Debian 11 上设置 OpenVPN 服务器

介绍

您的团队是否需要私下和安全地从远程位置访问内部资源,通过不受信任的网络,就像他们连接到私人网络一样? Virtual Private Network(VPN)允许他们做到这一点。VPN服务器作为远程用户的私人网络的单一入口点 - 这是一个比SSH跳跃服务器更灵活和合适的解决方案。

您可能會考慮使用商用VPN,但您也可以管理自己的免費VPN,就像本教程中的VPN一樣。 OpenVPN是一種全功能的開源安全連接層(SSL)VPN解決方案,可容納各種配置。

注意:如果您计划在DigitalOcean Droplet上设置一个OpenVPN服务器,请注意,像许多托管提供商一样,我们会收取带宽过期费用,请注意您的VPN用户可能会消耗多少带宽,因为他们在互联网上连接到VPN时所做的一切都会消耗DigitalOcean带宽(假设您选择通过VPN路由所有流量)。

请参阅此页面(https://docs.digitalocean.com/products/billing/bandwidth/)以获取更多信息。

前提条件

要完成本教程,您将需要:

  • 两个 Debian 11 服务器:一个用于托管您的 OpenVPN 服务,一个用于作为您的证书授权机构(CA)。
  • 在这两个服务器上具有sudo特权的非根用户。 您可以遵循我们的 Debian 11 初始服务器设置指南来设置具有适当权限的用户。 该教程还会设置防火墙,该防火墙在本指南中的两个服务器上都存在。
  • Easy-RSA 安装在这两个服务器上。

虽然从技术上可以从您的OpenVPN服务器或本地机器运行您的CA,但更安全的是将CA(即其私钥)保存在不连续连接到互联网的单独服务器上。由于您可能计划将VPN服务器连接到互联网24小时,它可能会更容易受到攻击者的攻击。您不希望将CA的私钥保存在这样一个面向公众的服务器上,因为如果攻击者想要访问私钥,他们可以使用它来签署新的证书,让他们访问您的VPN。

最后,请注意,如果您在配置这些服务器时禁用密码身份验证,您可能会在本指南晚些时候之间传输文件时遇到困难。 为了解决此问题,您可以在每个服务器上重新启用密码身份验证。 或者,您可以为每个服务器生成一个SSH键对,然后将OpenVPN服务器的公共SSH键添加到CA机器的authorized_keys文件中,反之亦然。

当您有这些前提条件时,您可以转到本教程的第 1 步。

步骤 1 – 安装 OpenVPN

要开始,请更新 VPN 服务器的包索引并安装 OpenVPN. OpenVPN 可在 Debian 的默认存储库中使用,因此您可以使用apt来安装:

1sudo apt update
2sudo apt install openvpn

既然您已经在两台服务器上安装了 Easy-RSA 作为先决条件,并且已经初始化了 CA,您已经准备好生成 VPN 服务器的证书。

步骤 2 – 创建服务器证书、密钥和加密文件

OpenVPN服务器上,在您的非根用户的家庭目录中切换到/easy-rsa目录,然后运行easyrsa脚本,使用gen-req选项,然后为机器提供一个通用名称。这可能是您喜欢的任何东西,但可以有助于将其变成一些描述性的内容。在本教程中,OpenVPN服务器的通用名称将简单地是服务器。请确保包括nopass选项。

<$>[注意] 注意:如果您在这里选择了服务器以外的名称,您将不得不调整下面的一些说明。例如,当您将生成的文件复制到/etc/openvpn目录时,您将不得不更换正确的名称。

1cd ~/easyrsa
2./easyrsa gen-req server nopass

该脚本会提示您在证书签名请求(CSR)中显示的通用名称。默认情况下,它会显示您转移到 ./easyrsa gen-req(例如, 服务器)的任何名称。

这将为服务器创建一个私钥和一个名为server.req的证书请求文件。

1sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

使用安全的方法(如下面的示例中的 SCP),将 server.req 文件传输到您的 CA 机器:

1scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp

接下来,在您的 CA 机器上,导航到 ~/easy-rsa 目录:

1[environment second]
2cd ~/easy-rsa

使用easyrsa脚本,导入server.req文件,按照您在创建 CSR 时输入的通用名称的文件路径:

1[environment second]
2./easyrsa import-req /tmp/server.req server

然后通过运行easyrsa来签署请求,然后使用sign-req选项,然后是 request type 和常用名称。请求类型可以是客户端服务器,因此对于 OpenVPN 服务器的证书请求,请确保使用服务器请求类型:

1[environment second]
2./easyrsa sign-req server server

在输出中,您将被要求验证请求来自可信来源. 输入并按输入来确认此:

 1[environment second]
 2You are about to sign the following certificate.
 3Please check over the details shown below for accuracy. Note that this request
 4has not been cryptographically verified. Please be sure it came from a trusted
 5source or that you have verified the request checksum with the sender.
 6
 7Request subject, to be signed as a server certificate for 825 days:
 8
 9subject=
10    commonName                = server
11
12Type the word 'yes' to continue, or any other input to abort.
13  Confirm request details: yes

如果您在遵循前提中列出的教程(https://andsky.com/tech/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-debian-11)时加密了CA密钥,您将在此时被提示使用您的密码。

接下来,使用安全方法将签署的证书转移回您的VPN服务器:

1[environment second]
2scp pki/issued/server.crt sammy@your_server_ip:/tmp

将.crt 文件传输到您的 VPN 服务器:

1[environment second]
2scp pki/ca.crt sammy@your_server_ip:/tmp

您的OpenVPN服务器需要ca.crt,以便它知道可以信任签署server.crt的实体。

接下来,在您的OpenVPN服务器上,将server.crtca.crt文件复制到您的/etc/openvpn/目录:

1sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

然后导航到您的~/easy-rsa目录:

1cd ~/easy-rsa

从那里,通过键入创建一个强大的Diffie-Hellman密钥,以便在密钥交换过程中使用:

1./easyrsa gen-dh

一旦完成,可以生成 HMAC 签名,以增强服务器的 TLS 完整性验证功能:

1sudo openvpn --genkey secret ta.key

当命令完成时,将两个新文件复制到您的 /etc/openvpn/ 目录:

1sudo cp ~/easy-rsa/ta.key /etc/openvpn/
2sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

有了它,您的服务器所需的所有证书和密钥文件都已经生成,您已经准备好创建相应的证书和密钥,您的客户机将使用它们来访问您的OpenVPN服务器。

步骤 3 – 生成客户证书和密钥对

虽然您可以在客户端机器上生成私钥和证书请求,然后将其发送到CA进行签名,但本指南概述了在VPN服务器上生成证书请求的过程。 此项的好处是,我们可以创建一个服务器脚本,该服务器将自动生成包含所有所需的密钥,证书和配置选项在一个文件中的客户端配置文件。 通常,主客户端配置文件会指定单独的密钥和证书文件的文件名称,然后您将不得不向每个客户端分发多个文件。

在此步骤中,您将首先生成客户端密钥和证书对. 如果您有多个客户端,您可以对每个客户端重复此过程. 请注意,但是,您需要为每个客户端传递一个独特的名称值。

在您的 VPN 服务器上,通过在您的主目录中创建一个目录结构来开始存储客户端证书和关键文件:

1mkdir -p ~/client-configs/keys

由于您将将客户的证书 / 密钥对和配置文件存储在此目录中,您现在应该作为安全措施锁定其权限:

1chmod -R 700 ~/client-configs

接下来,返回~/easy-rsa目录并运行easyrsa脚本,使用gen-reqnopass选项,以及客户端的共同名称:

1cd ~/easy-rsa
2./easyrsa gen-req client1 nopass

然后,将「client1.key」文件复制到您之前创建的 /client-configs/keys/ 目录:

1cp pki/private/client1.key ~/client-configs/keys/

接下来,使用安全方法将client1.req文件传输到您的 CA 机器:

1scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

在您的CA机器上,导航到~/easy-rsa目录并导入证书请求:

1[environment second]
2cd ~/easy-rsa
3./easyrsa import-req /tmp/client1.req client1

然后像您在上一步中对服务器一样签署请求,但这次,请确保指定客户端请求类型:

1[environment second]
2./easyrsa sign-req client client1

在提示中,输入来确认您打算签署证书请求,并且它来自可信来源:

1[environment second]
2[secondary_label Output]
3Type the word 'yes' to continue, or any other input to abort.
4  Confirm request details: yes

再次,如果您加密了CA密钥,您将被提示在这里使用您的密码。

这将创建一个名为client1.crt的客户端证书文件。

1[environment second]
2scp pki/issued/client1.crt sammy@your_server_ip:/tmp

在您的 OpenVPN 服务器上,将客户端证书复制到 /client-configs/keys/ 目录:

1cp /tmp/client1.crt ~/client-configs/keys/

接下来,将 ca.crtta.key 文件复制到 /client-configs/keys/ 目录中:

1sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
2sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

因此,您的服务器和客户端的证书和密钥都被生成并存储在您的服务器上的相应目录中. 仍有几项需要执行的操作,但这些操作将在步骤8中进行。

步骤 4 – 配置 OpenVPN 服务

现在客户端和服务器证书和密钥都已经生成,您可以开始配置OpenVPN服务以使用这些凭证。

首先,将一个样本的 OpenVPN 配置文件复制到配置目录中,以便作为您的安装的基础:

1sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

在您喜爱的文本编辑器中打开服务器配置文件:

1sudo nano /etc/openvpn/server.conf

查找tls-auth指令的HMAC部分,此行应该已经没有评论,但如果没有,则删除**;**以不评论它。

1[label /etc/openvpn/server.conf]
2tls-auth ta.key 0 # This file is secret

接下来,通过搜索评论的数字线来查找加密加密的部分。AES-256-CBC加密器提供了良好的加密水平,并且得到良好的支持。

1[label /etc/openvpn/server.conf]
2cipher AES-256-CBC

下面,添加一个auth指令来选择HMAC消息消化算法. 为此,SHA256是一个很好的选择:

1[label /etc/openvpn/server.conf]
2auth SHA256

接下来,找一个包含指令的行,定义了Diffie-Hellman参数. 由于最近对Easy-RSA进行了一些更改,Diffie-Hellman密钥的文件名称可能与示例服务器配置文件中列出的不同。

1[label /etc/openvpn/server.conf]
2dh dh.pem

最后,找到用户设置,并在每个行开始时删除**;**,以免评论这些行:

1[label /etc/openvpn/server.conf]
2user nobody
3group nogroup

到目前为止,你对样本 server.conf 文件所做的更改是必要的,以便 OpenVPN 能够运作。

推动 DNS 更改以通过 VPN 重定向所有流量(可选)

上面的设置将创建两台机器之间的VPN连接,但不会强迫任何连接使用隧道. 如果您希望使用VPN来路由您的所有流量,您可能希望将DNS设置推到客户端计算机。

在「server.conf」文件中,您必须更改若干指令,以便启用此功能. 查找「重定向网关」部分,并从「重定向网关」行开始删除半字母「;」以免发表评论:

1[label /etc/openvpn/server.conf]
2push "redirect-gateway def1 bypass-dhcp"

就在此下方,找到dhcp-option部分. 再次,从两行前面删除**;**,以免评论它们:

1[label /etc/openvpn/server.conf]
2push "dhcp-option DNS 208.67.222.222"
3push "dhcp-option DNS 208.67.220.220"

这将帮助客户重新配置他们的DNS设置,以便使用VPN隧道作为默认网关。

调整端口和协议(可选)

默认情况下,OpenVPN服务器使用端口1194和UDP协议来接受客户端连接. 如果您需要使用不同的端口,因为客户端可能存在的限制性网络环境,您可以更改端口选项。

1[label /etc/openvpn/server.conf]
2# Optional!
3port 443

通常,该协议也被限制在该端口上,如果是这样,则从 UDP 更改proto到 TCP:

1[label /etc/openvpn/server.conf]
2# Optional!
3proto tcp

如果您将协议切换为 TCP,则需要将明确退出通知指令的值从1更改为0,因为该指令仅被 UDP 使用。

1[label /etc/openvpn/server.conf]
2# Optional!
3explicit-exit-notify 0

如果您不需要使用不同的端口和协议,最好将这三个设置作为默认设置。

指向非默认凭证(可选)

如果您在步骤 2 中为服务器证书选择了./easyrsa gen-req命令时的不同名称,请修改您看到的certkey行,以指向相应的.crt.key文件。

1[label /etc/openvpn/server.conf]
2cert server.crt
3key server.key

完成后,保存并关闭文件。

经过审查并对您的服务器OpenVPN配置所需的任何更改后,您可以开始对服务器的网络进行一些更改。

步骤 5 – 调整服务器网络配置

有服务器网络配置的一些方面需要调整,以便OpenVPN能够正确地通过VPN路由流量。

通过修改 /etc/sysctl.conf 文件来调整服务器的默认 IP 转发设置:

1sudo nano /etc/sysctl.conf

在内部,寻找设置net.ipv4.ip_forward的评论行,从行开始删除**#**字符,以免评论此设置:

1[label /etc/sysctl.conf]
2net.ipv4.ip_forward=1

保存并关闭文件,当你完成。

要读取文件并调整当前会话的值,键入:

1sudo sysctl -p
1[secondary_label Output]
2net.ipv4.ip_forward = 1

如果你遵循前提中列出的 Debian 11 初始服务器设置指南,你应该有一个 UFW 防火墙。无论你是否使用防火墙来阻止不必要的流量(几乎总是应该这样做),对于这个指南,你需要一个防火墙来操纵部分流量进入服务器。

在打开防火墙配置文件以添加隐藏规则之前,您必须先找到您的机器的公共网络接口。

1ip route | grep default

您的公共界面是命令输出中的dev之后的字符串,例如,下面的输出显示了一个名为eth0的界面,该界面被突出:

1[secondary_label Output]
2default via 203.0.113.1 dev eth0 proto static

当您有与默认路径相关联的界面时,请打开 /etc/ufw/before.rules 文件以添加相关配置:

1sudo nano /etc/ufw/before.rules

UFW 规则通常是使用ufw命令添加的。然而,在before.rules文件中列出的规则在通常的 UFW 规则被加载之前被读取并放置在位置上。 向文件的顶部添加下面的突出的行。 这将在nat表中设置POSTROUTING链条的默认策略,并掩盖来自 VPN 的任何流量。 请记住在下面的-A POSTROUTING行中用您在上面的命令中发现的界面替换eth0:

 1[label /etc/ufw/before.rules]
 2#
 3# rules.before
 4#
 5# Rules that should be run before the ufw command line added rules. Custom
 6# rules should be added to one of these chains:
 7#   ufw-before-input
 8#   ufw-before-output
 9#   ufw-before-forward
10#
11
12# START OPENVPN RULES
13# NAT table rules
14*nat
15:POSTROUTING ACCEPT [0:0] 
16# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
17-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
18COMMIT
19# END OPENVPN RULES
20
21# Don't delete these required lines, otherwise there will be errors
22*filter
23. . .

保存并关闭文件,当你完成。

接下来,您需要告诉 UFW 默认允许转发的数据包,然后打开 /etc/default/ufw 文件:

1sudo nano /etc/default/ufw

在内部,找到DEFAULT_FORWARD_POLICY指令,并将值从DROP更改为ACCEPT:

1[label /etc/default/ufw]
2DEFAULT_FORWARD_POLICY="ACCEPT"

保存并关闭文件,当你完成。

接下来,调整防火墙本身,以允许流量到OpenVPN. 如果你没有在 /etc/openvpn/server.conf文件中更改端口和协议,你需要打开UDP流量到端口 1194

此外,如果您在完成前提教程时没有添加 SSH 端口,请在这里添加它:

1sudo ufw allow 1194/udp
2sudo ufw allow OpenSSH

添加这些规则后,禁用并重新启用 UFW 来重新启动并从您所修改的所有文件中加载更改:

1sudo ufw disable
2sudo ufw enable

您的服务器现在已配置为正确处理OpenVPN流量。

步骤 6 – 启动并启用 OpenVPN 服务

您终于准备好在您的服务器上启动 OpenVPN 服务,这是使用 systemd 实用程序 systemctl 完成的:

1sudo systemctl start openvpn@server

例如,如果您指定了openvpn@server2,则系统d在启动服务时会使用文件名/etc/openvpn/server2.conf

通过键入双重检查服务是否成功启动:

1sudo systemctl status openvpn@server

如果一切顺利,你的输出将看起来像这样:

 1[secondary_label Output]
 2 openvpn@server.service - OpenVPN connection to server
 3   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
 4   Active: active (running) since Wed 2022-12-21 03:39:24 UTC; 29s ago
 5     Docs: man:openvpn(8)
 6           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
 7           https://community.openvpn.net/openvpn/wiki/HOWTO
 8 Main PID: 3371 (openvpn)
 9   Status: "Initialization Sequence Completed"
10    Tasks: 1 (limit: 3587)
11   Memory: 1.2M
12   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
13           └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

您也可以通过键入来检查OpenVPN的tun0接口是否可用:

1ip addr show tun0

这将输出一个配置的界面:

1[secondary_label Output]
23: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
3    link/none 
4    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
5       valid_lft forever preferred_lft forever
6    inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy 
7       valid_lft forever preferred_lft forever

启动服务后,让它在启动时自动启动:

1sudo systemctl enable openvpn@server

但是,在您开始使用它之前,您必须首先为客户端机器创建配置文件。本教程已经介绍了如何为客户端创建证书/钥匙对,下一步将展示如何创建一个基础设施,将生成客户端配置文件。

步骤 7 – 创建客户端配置基础设施

创建 OpenVPN 客户端的配置文件可能有些涉及,因为每个客户端都必须有自己的配置文件,每个客户端都必须与服务器配置文件中描述的设置相匹配。而不是写一个只能在一个客户端上使用的单个配置文件,此步骤概述了构建一个客户端配置基础设施的过程,您可以使用它来生成配置文件。

开始,在您的 OpenVPN 服务器上创建一个新目录,在那里您将存储您之前创建的客户端配置目录中的客户端配置文件:

1mkdir -p ~/client-configs/files

接下来,将示例客户端配置文件复制到客户端配置目录中,用作您的基本配置:

1cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

在文本编辑器中打开此新文件:

1nano ~/client-configs/base.conf

在内部,找到远程指令,这将客户端指向您的OpenVPN服务器地址 - 您的OpenVPN服务器的公共IP地址. 如果您决定更改OpenVPN服务器正在收听的端口,您还需要更改1194到您选择的端口:

1[label ~/client-configs/base.conf]
2. . .
3# The hostname/IP and port of the server.
4# You can have multiple remote entries
5# to load balance between the servers.
6remote your_server_ip 1194
7. . .

请确保协议匹配您在服务器配置中使用的值:

1[label ~/client-configs/base.conf]
2proto udp

接下来,通过在每个行开始时删除**;**删除用户指令:

1[label ~/client-configs/base.conf]
2# Downgrade privileges after initialization (non-Windows only)
3user nobody
4group nogroup

查找设置cacertkey文件的指令. 评论这些指令,因为您将很快将证书和关键文件的全部内容附加到基础文件中:

 1[label ~/client-configs/base.conf]
 2# SSL/TLS parms.
 3# See the server config file for more
 4# description. It's best to use
 5# a separate .crt/.key file pair
 6# for each client. A single ca
 7# file can be used for all clients.
 8#ca ca.crt
 9#cert client.crt
10#key client.key

同样,评论tls-auth指令,因为您将直接将ta.key添加到客户端配置文件中:

1[label ~/client-configs/base.conf]
2# If a tls-auth key is used on the server
3# then every client must also have the key.
4#tls-auth ta.key 1

镜像您在/etc/openvpn/server.conf文件中设置的cipherauth设置:

1[label ~/client-configs/base.conf]
2cipher AES-256-CBC
3auth SHA256

接下来,在文件中的某个地方添加钥匙方向指令. 您必须将此设置为1,以便VPN在客户端机器上正常运作:

1[label ~/client-configs/base.conf]
2key-direction 1

虽然你可以将这些指令包含在每个客户端配置文件中,但你只需要为 Linux 客户端启用这些指令,这些客户端配有 `/etc/openvpn/update-resolv-conf’ 文件。

1[label ~/client-configs/base.conf]
2# script-security 2
3# up /etc/openvpn/update-resolv-conf
4# down /etc/openvpn/update-resolv-conf

如果您的客户端运行的是 Linux,并且有一个 /etc/openvpn/update-resolv-conf 文件,在生成后,请从客户端配置文件中删除这些行。

保存并关闭文件,当你完成。

接下来,创建一个简单的脚本,将创建一个新的配置文件,其中包含您的证书,密钥,加密文件和基础配置在~/client-configs/files目录中。

1nano ~/client-configs/make_config.sh

在内部,添加以下内容,确保将sammy更改为您的服务器的非根用户帐户:

 1[label ~/client-configs/make_config.sh]
 2#!/bin/bash
 3
 4# First argument: Client identifier
 5
 6KEY_DIR=/home/sammy/client-configs/keys
 7OUTPUT_DIR=/home/sammy/client-configs/files
 8BASE_CONFIG=/home/sammy/client-configs/base.conf
 9
10cat ${BASE_CONFIG} \
11    <(echo -e '<ca>') \
12    ${KEY_DIR}/ca.crt \
13    <(echo -e '</ca>\n<cert>') \
14    ${KEY_DIR}/${1}.crt \
15    <(echo -e '</cert>\n<key>') \
16    ${KEY_DIR}/${1}.key \
17    <(echo -e '</key>\n<tls-auth>') \
18    ${KEY_DIR}/ta.key \
19    <(echo -e '</tls-auth>') \
20    > ${OUTPUT_DIR}/${1}.ovpn

保存并关闭文件,当你完成。

在继续之前,请确保通过键入标记此文件为可执行:

1chmod 700 ~/client-configs/make_config.sh

此脚本将创建您创建的 base.conf 文件的副本,收集您为客户端创建的所有证书和密钥文件,提取其内容,将其附加到基础配置文件的副本中,并将所有内容导出到新的客户端配置文件中。这意味着,而不是单独管理客户端的配置,证书和密钥文件,所有所需的信息都存储在一个地方。

请注意,每次你添加一个新客户端,你需要为它生成新的密钥和证书,然后你可以运行这个脚本并生成它的配置文件。

步骤 8 – 生成客户端配置

如果您跟随了指南,您在步骤 3 中分别创建了名为client1.crtclient1.key的客户端证书和密钥,您可以通过进入您的~/client-configs目录并运行您在前一步结束时创建的脚本来生成这些身份证件的配置文件:

1cd ~/client-configs
2sudo ./make_config.sh client1

这将创建一个名为client1.ovpn的文件在您的~/client-configs/files目录中:

1ls ~/client-configs/files
1[secondary_label Output]
2client1.ovpn

您需要将此文件传输到您打算作为客户端使用的设备,例如,这可能是您的本地计算机或移动设备。

虽然用于实现此转移的确切应用程序将取决于您的设备的操作系统和您的个人偏好,但一个可靠和安全的方法是使用SFTP(SSH文件传输协议)或SCP(安全副本)在后端。

以下是使用「client1.ovpn」示例的 SFTP 命令,您可以从本地计算机(macOS 或 Linux)运行。

1[environment local]
2sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

以下是几个工具和教程,以安全地将文件从服务器传输到本地计算机:

如何使用 SFTP 安全地将文件传输到远程服务器

步骤 9 – 安装客户端配置

本节涵盖了如何在 Windows、macOS、Linux、iOS 和 Android 上安装客户端 VPN 配置文件. 这些客户端指令并不相互依赖,因此请轻松跳过适用于您的设备的任何内容。

对于本教程,这意味着连接被命名为client1.ovpn,与您生成的第一个客户端文件一致。

窗口

  • 安装 *

請從 OpenVPN 的下載頁面下載 Windows 的 OpenVPN 客戶端應用程式。

<$>[注] 注: OpenVPN需要管理权限来安装。

安装 OpenVPN 后,将.ovpn 文件复制到:

1C:\Program Files\OpenVPN\config

您可能无法将文件直接传输到这个位置,如果您没有运行文件传输程序(例如, WinSCP)作为管理员. 您可以作为管理员运行它,或者将文件传输到非管理员用户的主目录,然后将其本地复制到C:\Program Files\OpenVPN\config,在被要求时批准复制到管理位置。

当您启动OpenVPN时,它会自动看到您的个人资料并使其可用。

您必须每次使用 OpenVPN 作为管理员运行 OpenVPN,即使是由管理员帐户使用。 要做到这一点,不必右击并选择 ** 作为管理员运行** 每次使用 VPN,您必须从管理员帐户预设此功能。 这也意味着标准用户需要输入管理员的密码才能使用 OpenVPN。

要将 OpenVPN 应用程序设置为始终以管理员身份运行,请右击其快捷图标,然后转到 属性。在 兼容性选项卡的底部,点击按钮为 更改所有用户的设置

  • 连接 *

每次启动 OpenVPN GUI 时,Windows 都会询问您是否希望允许该程序对您的计算机进行更改. 点击 Yes. 启动 OpenVPN 客户端应用程序只会将 applet 放入系统盘,以便您可以根据需要连接和关闭 VPN;它实际上不会连接到 VPN。

一旦 OpenVPN 启动,请通过进入系统底盘的 applet 并右键单击 OpenVPN applet 图标来启动连接,这将打开背景菜单,在菜单顶部选择 client1(这是您的client1.ovpn配置文件),然后选择 Connect

在建立连接时,会打开状态窗口,显示日志输出,并在客户端连接后会显示消息。

以同样的方式脱离VPN:进入系统底盘应用程序,右键单击OpenVPN应用程序图标,选择客户端配置文件,然后单击 脱离

马克思

  • 安装 *

Tunnelblick是 macOS 的免费开源 OpenVPN 客户端,您可以从 Tunnelblick 下载页面下载最新的磁盘图像。

安装过程结束时,Tunnelblick 会问你是否有任何配置文件。 回答 我有配置文件,然后让Tunnelblick 完成。 打开 Finder 窗口并双击client1.ovpn

  • 连接 *

启动 Tunnelblick 通过在 Applications文件夹中双击 Tunnelblick 图标来启动 Tunnelblick。一旦启动 Tunnelblick,在屏幕右上方的菜单栏中会出现一个 Tunnelblick 图标来控制连接。

Linux 的

安装

如果您正在使用 Linux,您可以根据您的发行版使用各种工具,您的桌面环境或窗口管理器也可能包括连接实用程序。

然而,最通用的连接方式是仅仅使用OpenVPN软件。

在 Debian 上,您可以像在服务器上一样安装它,键入:

1[environment local]
2sudo apt update
3sudo apt install openvpn

在CentOS上,您可以启用EPEL存储库,然后通过键入来安装它:

1[environment local]
2sudo yum install epel-release
3sudo yum install openvpn

配置

查看您的分布是否包含 /etc/openvpn/update-resolv-conf 脚本:

1[environment local]
2ls /etc/openvpn
1[secondary_label Output]
2[environment local]
3update-resolv-conf

接下来,编辑您转移的 OpenVPN 客户端配置文件:

1[environment local]
2nano client1.ovpn

如果您能够找到一个update-resolv-conf文件,请删除您添加的三个行以调整 DNS 设置:

1[label client1.ovpn]
2[environment local]
3script-security 2
4up /etc/openvpn/update-resolv-conf
5down /etc/openvpn/update-resolv-conf

如果您正在使用 CentOS,请将指令从nogroup更改为nobody,以匹配分布的可用组:

1[label client1.ovpn]
2[environment local]
3group nobody

保存并关闭文件。

现在,您可以通过指向客户端配置文件的openvpn命令连接到VPN:

1[environment local]
2sudo openvpn --config client1.ovpn

这应该将您连接到您的VPN。

  • 安装 *

从您的 iPhone 或 iPad 的 App Store 搜索并安装 OpenVPN Connect,官方的 iOS OpenVPN 客户端,然后按照 来自 Apple 的此支持文章将您的 'client1.ovpn' 文件从本地机器传输到您的 iOS 设备,并将其复制到 OpenVPN 应用程序。

现在,在 iOS 设备上启动 OpenVPN 应用程序. 它应该看到一个新的配置文件已经准备好导入。

The OpenVPN iOS app showing new profile ready to import

  • 连接 *

OpenVPN现在已经准备好与新配置文件一起使用。通过点击 CONNECT来启动连接。当您这样做时,iOS会通知您,OpenVPN希望通过您的系统 Settings添加VPN配置。

<$>[注] 注:设置 > 一般 > VPN 和设备管理 > VPN 下面的 VPN 交换机可能会成功切换您的连接,但最好使用 OpenVPN Connect 应用程序中的交换机<$>

The OpenVPN iOS app connected to the VPN

安卓

  • 安装 *

搜索并安装 Android OpenVPN Connect,是官方的Android OpenVPN客户端应用程序。

您可以通过 USB 将 Android 设备连接到您的计算机并复制文件来传输 .ovpn 配置文件. 或者,如果您有 SD 卡阅读器,您可以删除设备的 SD 卡,将该配置文件复制到其上,然后将该卡重新插入到 Android 设备中。

  • 连接 *

當您啟動 OpenVPN 應用程式時,它會從 Import Profile 屏幕開始。 點一下 FILE 卡,然後點一下 BROWSE 以尋找並選擇「client1.ovpn」檔案。

The OpenVPN Android Import Profile screen

选择文件后,应用程序会提示您导入配置文件. 点击 OK

导入配置文件屏幕上,检查导入后连接选项框,然后在右上角点击添加选项。

The OpenVPN Android app Imported Profile screenselecting VPN profile to import

您将被问及您是否信任 OpenVPN 应用程序。 选择 OK 来启动连接。 要脱离 VPN,请在个人资料页面上切换开关。

The OpenVPN Android app connected to the VPN

步骤 10 — 测试您的VPN连接(可选)

<$>[注] **注:此方法来测试您的VPN连接只会有效,如果您选择在步骤 4中通过可选的部分路由所有流量通过VPN

一旦一切都安装完毕,一个简单的检查就证实一切正常工作了. 没有启用VPN连接,请打开浏览器,然后转到 DNSLeakTest

该网站将返回由您的互联网服务提供商分配的IP地址,并显示给世界其他地方. 要通过相同的网站检查您的DNS设置,请单击 扩展测试,它将告诉您正在使用的DNS服务器。

现在将 OpenVPN 客户端连接到您的 OpenVPN 服务器,并更新浏览器。 现在应该出现一个完全不同的 IP 地址(您的 VPN 服务器的 IP 地址),这就是您向世界展示的方式。

请记住:如果您选择通过您的OpenVPN服务器路由所有VPN客户端流量,并且您的OpenVPN服务器在DigitalOcean Droplet上运行,那么您的VPN客户端在连接到VPN时在互联网上做的一切都会消耗DigitalOcean带宽。

步骤 11 – 撤销客户证书

有时,您可能需要撤销客户端证书,以防止进一步访问 OpenVPN 服务器。

要做到这一点,请导航到您的 CA 机器上的 ~/easy-rsa 目录:

1[environment second]
2cd ~/easy-rsa

接下来,运行easyrsa脚本以撤销选项,然后是您想要撤销的客户端名称:

1[environment second]
2./easyrsa revoke client2

这将要求您通过输入来确认撤销:

1[environment second]
2[secondary_label Output]
3Please confirm you wish to revoke the certificate with the following subject:
4
5subject=
6    commonName                = client2
7
8Type the word 'yes' to continue, or any other input to abort.
9  Continue with revocation: yes

如果您的 CA 私钥是受密码保护的,请在提示时输入它。

确认此操作后,CA 将完全撤销客户端的证书,但是,您的 OpenVPN 服务器目前没有办法检查客户端的证书是否已被撤销,客户端仍然可以访问 VPN。

1[environment second]
2./easyrsa gen-crl

这将生成名为crl.pem的文件,安全地将此文件传输到您的OpenVPN服务器:

1[environment second]
2scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

在您的 OpenVPN 服务器上,将此文件复制到您的 /etc/openvpn/ 目录:

1sudo cp /tmp/crl.pem /etc/openvpn

接下来,打开 OpenVPN 服务器配置文件:

1sudo nano /etc/openvpn/server.conf

在文件底部,添加crl-verify选项,该选项将指示OpenVPN服务器检查我们每次尝试连接时创建的证书撤销列表:

1[label /etc/openvpn/server.conf]
2. . .
3crl-verify crl.pem

保存并关闭文件。

最后,重新启动 OpenVPN 来执行证书撤销:

1sudo systemctl restart openvpn@server

客户端不再能够使用旧身份证成功连接到服务器。

若要取消额外的客户,请遵循此过程:

  1. ./easyrsa revoke client_name 命令 取消证书 2. 生成新的 CRL
  2. 将新的 crl.pem 文件传输到您的 OpenVPN 服务器,并将其复制到 /etc/openvpn 目录,以重写旧列表。
  3. 重新启动 OpenVPN 服务。

您可以使用此过程撤销您之前为您的服务器发行的任何证书。

结论

您的远程团队成员现在可以安全地连接到您的内部资源,就像他们直接连接到私人网络一样。随着您的新VPN的推出,您可能会考虑将目前可访问的某些资源移动到开放式互联网 - 可能通过比您刚刚设置的公钥基础设施更不强大的东西(例如HTTP基本身份验证)保护 - 到您的私人网络和VPN背后。

另一种类似VPN的安全和隐私工具是网络代理,就像VPN一样,网络代理作为终端用户和他们想要访问的互联网资源之间的中间人,为终端用户提供匿名性,尽管网络代理仅用于网络流量,并且不提供加密,但它仍然可能是您的团队在VPN不必要时使用的有价值工具。

Published At
Categories with 技术
comments powered by Disqus