如何在 Ubuntu 18.04 上设置 OpenVPN 服务器

2023-11-04

无论您是想在连接不可信的公共 Wi-Fi 网络时安全可靠地访问互联网、绕过地理限制内容还是允许您的同事在远程工作时安全地连接到您的公司网络,使用 VPN 都是最佳解决方案。

VPN 允许您连接到远程 VPN 服务器,使您的连接加密且安全,并通过保持流量数据的私密性来匿名上网。

您可以选择许多商业 VPN 提供商,但您永远无法真正确定提供商没有记录您的活动。最安全的选择是设置您自己的 VPN 服务器。

本教程将引导您通过在 Ubuntu 18.04 上安装和配置 OpenVPN 来完成设置自己的 VPN 服务器的过程。我们还将向您展示如何生成客户端证书和创建配置文件

OpenVPN 是一个功能齐全的开源安全套接字层 (SSL) VPN 解决方案。它使用 SSL/TLS 协议实现 OSI 第 2 层或第 3 层安全网络扩展。

先决条件#

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

  • 须藤访问到 Ubuntu 18.04 服务器来托管您的 OpenVPN 实例。
  • 服务器应该有一个基本的UFW防火墙配置。
  • 单独的专用机器作为您的 CA(证书颁发机构)。如果您不想为 CA 使用专用计算机,您可以在 OpenVPN 服务器或本地计算机上构建 CA。完成 CA 构建后,建议将 CA 目录移动到安全或离线的位置。

本教程假设 CA 位于单独的 Ubuntu 18.04 计算机上。如果您将服务器用作 CA,则将适用相同的步骤(稍作修改)。

我们之所以使用单独的CA机器是为了防止攻击者渗透服务器。如果攻击者设法访问 CA 私钥,他们可以使用它来签署新证书,这将使他们能够访问 VPN 服务器。

使用 EasyRSA 构建 CA#

设置新的 OpenVPN 服务器时,第一步是构建公钥基础设施 (PKI)。为此,我们需要创建以下内容:

  • 证书颁发机构 (CA) 证书和私钥。
  • 由我们的 CA 颁发的服务器的单独证书和私钥对。
  • 我们的 CA 为每个客户端颁发单独的证书和私钥对。

正如出于安全原因的先决条件中提到的,我们将在独立计算机上构建 CA。

为了创建 CA、证书请求和签署证书,我们将使用名为 EasyRSA 的 CLI 实用程序。

在您的计算机上执行以下步骤CA机.

  1. 首先,从项目中下载最新版本的EasyRSAGithub 存储库与以下wget命令:

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
  2. 下载完成后提取存档 with:

    tar xzf EasyRSA-nix-3.0.5.tgz
  3. Switch到 EasyRSA 目录并创建一个名为的配置文件vars通过复制vars.example file:

    cd ~/EasyRSA-3.0.5/cp vars.example vars
  4. 打开文件并取消注释并更新以下条目以匹配您的信息。

    nano ~/EasyRSA-3.0.5/vars
    〜/ EasyRSA-3.0.5 / vars
    set_var EASYRSA_REQ_COUNTRY    "US"
    set_var EASYRSA_REQ_PROVINCE   "Pennsylvania"
    set_var EASYRSA_REQ_CITY       "Pittsburgh"
    set_var EASYRSA_REQ_ORG        "Linuxize"
    set_var EASYRSA_REQ_EMAIL      "admin@linuxize.com"
    set_var EASYRSA_REQ_OU         "Community"
  5. 在生成 CA 密钥对之前,我们需要使用以下命令初始化一个新的 PKI:

    ./easyrsa init-pki
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
  6. 下一步是构建 CA:

    ./easyrsa build-ca

    如果您不希望每次签署证书时都提示输入密码,请运行build-ca命令使用nopass选项:./easyrsa build-ca nopass.

    ...
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    ...
    -----
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
    
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /home/causer/EasyRSA-3.0.5/pki/ca.crt

    系统会要求您为 CA 密钥设置密码并输入 CA 的通用名称。

    完成后,脚本将创建两个文件——CA公共证书ca.crt和CA私钥ca.key.

    现在证书颁发机构 (CA) 已创建,您可以使用它来签署一个或多个 OpenVPN 服务器和客户端的证书请求。

安装 OpenVPN 和 EasyRSA#

我们的下一步是安装 Ubuntu 存储库中提供的 OpenVPN 软件包并下载最新版本的 EasyRSA。

以下步骤是在OpenVPN服务器.

  1. OpenVPN的安装非常简单,只需在OpenVPN服务器:

    sudo apt updatesudo apt install openvpn
  2. 下载最新版本的 EasyRSA:

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

    下载完成后,输入以下命令来提取存档:

    tar xzf EasyRSA-nix-3.0.5.tgz

    虽然我们已经在CA机器上初始化了一个PKI,但我们还需要在OpenVPN服务器上创建一个新的PKI。为此,请使用与之前相同的命令:

    cd ~/EasyRSA-3.0.5/./easyrsa init-pki

    如果您仍然想知道为什么我们需要两个 EasyRSA 安装,那是因为我们将使用此 EasyRSA 实例来生成证书请求,该请求将使用上的 EasyRSA 实例进行签名CA机.

    这听起来可能很复杂,而且有点令人困惑,但一旦你阅读了整个教程,你就会发现它实际上并不复杂。

创建 Diffie-Hellman 和 HMAC 密钥#

在本节中,我们将生成一个强大的 Diffie-Hellman 密钥(将在密钥交换期间使用)和一个 HMAC 签名文件,以便为连接添加额外的安全层。

  1. 首先导航到您的 EasyRSA 目录OpenVPN服务器.

    cd ~/EasyRSA-3.0.5/
  2. 生成 Diffie-Hellman 密钥:

    ./easyrsa gen-dh

    该脚本将生成 2048 位长的 DH 参数。这可能需要一些时间,尤其是在资源很少的服务器上。完成后,屏幕上将打印以下消息:

    DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem

    复制dh.pem文件到/etc/openvpn目录:

    sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
  3. 生成 HMAC 签名:

    openvpn --genkey --secret ta.key

    完成后复制ta.key文件到/etc/openvpn目录:

    sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/

创建服务器证书和私钥#

本节介绍如何为 OpenVPN 服务器生成私钥和证书请求。

  1. 导航到您的 EasyRSA 目录OpenVPN服务器并为服务器生成新的私钥和证书请求文件:

    cd ~/EasyRSA-3.0.5/./easyrsa gen-req server1 nopass

    我们正在使用nopass参数是因为我们想在不输入密码的情况下启动 OpenVPN 服务器。同样在这个例子中,我们使用server1作为服务器名称(实体)标识符。如果您为服务器选择不同的名称,请不要忘记调整下面使用服务器名称的说明。

    该命令将创建两个文件,一个私钥(server1.key)和证书请求文件(server1.req).

    -----
    Common Name (eg: your user, host, or server name) [server1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req
    key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
  2. 将私钥复制到/etc/openvpn目录:

    sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
  3. 将证书请求文件传输到您的 CA 计算机:

    scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp

    在这个例子中我们使用scp要传输文件,您还可以使用rsync通过 ssh 或任何其他安全方法。

  4. 登录到您的CA机,切换到EasyRSA目录,导入证书请求文件:

    cd ~/EasyRSA-3.0.5./easyrsa import-req /tmp/server1.req server1

    第一个参数是证书请求文件的路径,第二个参数是服务器短(实体)名称。在我们的例子中,服务器名称是server1.

    The request has been successfully imported with a short name of: server1
    You may now use this name to perform signing operations on this request.

    该命令只是将请求文件复制到pki/reqs目录。

  5. 虽然仍在 EasyRSA 目录中CA机运行以下命令来签署请求:

    cd ~/EasyRSA-3.0.5./easyrsa sign-req server server1

    第一个参数可以是server or client第二个是服务器短(实体)名称。

    系统将提示您验证该请求是否来自可信来源。类型yes并按enter确认:

    You are about to sign the following certificate.
    Please check over the details shown below for accuracy. Note that this request
    has not been cryptographically verified. Please be sure it came from a trusted
    source or that you have verified the request checksum with the sender.
    
    Request subject, to be signed as a server certificate for 1080 days:
    
    subject=
        commonName                = server1
    
    Type the word 'yes' to continue, or any other input to abort.
    Confirm request details: yes
    ...

    如果您的 CA 密钥受密码保护,系统将提示您输入密码。验证后,脚本将生成 SSL 证书并打印其完整路径。

    ...
    Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days)
    
    Write out database with 1 new entries
    Data Base Updated
    
    Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
  6. 下一步是传输签名的证书server1.crt and ca.crt文件返回到您的 OpenVPN 服务器。再次你可以使用scp, rsync或任何其他安全方法:

    scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmpscp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
  7. 登录到您的OpenVPN服务器,并移动server1.crt and ca.crt文件到/etc/openvpn/目录:

    sudo mv /tmp/{server1,ca}.crt /etc/openvpn/

完成本节中概述的步骤后,您的计算机上应该有以下新文件OpenVPN服务器:

  • /etc/openvpn/ca.crt
  • /etc/openvpn/dh.pem
  • /etc/openvpn/ta.key
  • /etc/openvpn/server1.crt
  • /etc/openvpn/server1.key

配置 OpenVPN 服务#

现在您已拥有由 CA 签名的服务器证书并已传输到您的OpenVPN服务器,是时候配置 OpenVPN 服务了。

我们将使用 OpenVPN 安装包提供的示例配置文件作为起点,然后向其中添加我们自己的自定义配置选项。

首先将配置文件解压到/etc/openvpn/目录:

sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"

打开您最喜欢的文件文本编辑器 :

sudo nano /etc/openvpn/server1.conf
  • 找到证书、密钥和 DH 参数指令并更改文件名:

    /etc/openvpn/server1.conf
    cert server1.crt
    key server1.key 
    
    dh dh.pem
  • 要通过 VPN 重定向客户端流量,请找到并取消注释redirect-gateway and dhcp-option选项:

    /etc/openvpn/server1.conf
    push "redirect-gateway def1 bypass-dhcp"
    
    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.220.220"

    默认情况下使用 OpenDNS 解析器。您可以更改它并使用 CloudFlare、Google 或您想要的任何其他 DNS 解析器。

  • 找出user and group指令并通过删除“来取消注释这些设置;” 在每行的开头:

    /etc/openvpn/server1.conf
    user nobody
    group nogroup
  • 将以下行添加到文件末尾。该指令会将消息身份验证算法 (HMAC) 从 SHA1 更改为 SHA256

    /etc/openvpn/server1.conf
    auth SHA256

完成后,服务器配置文件(不包括注释)应如下所示:

/etc/openvpn/server1.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256

启动 OpenVPN 服务#

在本教程中,我们使用了server1.conf作为配置文件。要使用此配置启动 OpenVPN 服务,我们需要在 systemd 单元文件名后指定配置文件名:

On your OpenVPN服务器运行以下命令启动OpenVPN服务:

sudo systemctl start openvpn@server1

通过键入以下内容验证服务是否已成功启动:

sudo systemctl status openvpn@server1

如果服务处于活动状态并正在运行,输出将如下所示:

● openvpn@server1.service - OpenVPN connection to server1
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 26739 (openvpn)
   Status: "Initialization Sequence Completed"

启用服务在启动时自动启动:

sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn@server1.service → /lib/systemd/system/openvpn@.service.
如果 OpenVPN 服务无法启动,请检查日志sudo journalctl -u openvpn@server1

OpenVPN 服务器将创建一个新的 tun 设备tun0。要检查设备是否可用,请使用以下命令ip命令 :

ip a show tun0

输出应如下所示:

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

至此,您的 OpenVPN 服务器已配置并正常运行。

防火墙和服务器网络配置#

为了正确转发网络数据包,我们需要启用IP转发。

以下步骤是在OpenVPN服务器.

打开/etc/sysctl.conf文件并添加或取消注释读取的行net.ipv4.ip_forward = 1:

sudo nano /etc/sysctl.conf
/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

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

通过运行以下命令应用新设置:

sudo sysctl -p
net.ipv4.ip_forward = 1

如果您遵循先决条件,您应该已经拥有UFW防火墙在您的服务器上运行。

现在我们需要添加防火墙规则以启用伪装。这将允许流量离开 VPN,从而使您的 VPN 客户端能够访问互联网。

在添加规则之前,您需要了解 Ubuntu OpenVPN 服务器的公共网络接口。您可以通过运行以下命令轻松找到该接口:

ip -o -4 route show to default | awk '{print $5}'

在我们的例子中,该接口被命名为ens3如下面的输出所示。您的界面可能会有不同的名称。

ens3

默认情况下,使用 UFW 时转发的数据包将被丢弃。我们需要改变这一点并指示我们的防火墙允许转发数据包。

打开UFW配置文件,找到DEFAULT_FORWARD_POLICY键并更改值DROP to ACCEPT:

sudo nano /etc/default/ufw
/etc/默认/ufw
...
# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...

接下来,我们需要设置默认策略POSTROUTING链入 nat 表并设置伪装规则。

为此,请打开/etc/ufw/before.rules文件并附加以黄色突出显示的行,如下所示。

sudo nano /etc/ufw/before.rules

别忘了更换ens3 in the -A POSTROUTING行以匹配您在上一个命令中找到的公共网络接口的名称。粘贴以以下内容开头的最后一行之后的行COMMIT.

/etc/ufw/before.rules
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

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

我们还需要打开端口上的 UDP 流量1194这是默认的 OpenVPN 端口。为此,请运行以下命令:

sudo ufw allow 1194/udp

如果您忘记打开 SSH 端口,为避免被锁定,请运行以下命令打开端口:

sudo ufw allow OpenSSH

最后通过禁用并重新启用 UFW 来重新加载 UFW 规则:

sudo ufw disablesudo ufw enable

要验证更改,请运行以下命令来列出 POSTROUTING 规则:

sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      ens3    10.8.0.0/16          0.0.0.0/0  

创建客户端配置基础设施#

在本教程中,我们将创建一个单独的 SSL 证书并为每个 VPN 客户端生成不同的配置文件。

客户端私钥和证书请求可以在客户端计算机或服务器上生成。为了简单起见,我们将在服务器上生成证书请求,然后将其发送到 CA 进行签名。

生成客户端证书和配置文件的整个过程如下:

  1. 在 OpenVPN 服务器上生成私钥和证书请求。
  2. 将请求发送到要签名的 CA 机器。
  3. 将签名的 SSL 证书复制到 OpenVPN 服务器并生成配置文件。
  4. 将配置文件发送到 VPN 客户端的计算机。

首先创建一组目录来存储客户端文件:

mkdir -p ~/openvpn-clients/{configs,base,files}
  • base目录将存储将在所有客户端文件之间共享的基本文件和配置。
  • configs目录将存储生成的客户端配置。
  • files目录将存储特定于客户端的证书/密钥对。

复制ca.crt and ta.key文件到~/openvpn-clients/base目录:

cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/cp /etc/openvpn/ca.crt ~/openvpn-clients/base/

接下来将示例 VPN 客户端配置文件复制到客户端 -~/openvpn-clients/base目录。我们将使用此文件作为基本配置:

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

现在我们需要编辑该文件以匹配我们的服务器设置和配置。使用文本编辑器打开配置文件:

nano ~/openvpn-clients/base/client.conf
  • 找到远程指令并使用 OpenVPN 服务器的公共 IP 地址更改默认占位符:

    〜/openvpn-clients/base/client.conf
    # The hostname/IP and port of the server.
    # You can have multiple remote entries
    # to load balance between the servers.
    remote YOUR_SERVER_IP 1194
  • 找到并评论ca, cert, and key指令。证书和密钥将添加到配置文件中:

    〜/openvpn-clients/base/client.conf
    # SSL/TLS parms.
    # See the server config file for more
    # description.  It's best to use
    # a separate .crt/.key file pair
    # for each client.  A single ca
    # file can be used for all clients.
    # ca ca.crt
    # cert client.crt
    # key client.key
  • 在文件末尾附加以下行以匹配服务器设置:

    〜/openvpn-clients/base/client.conf
    auth SHA256

完成后,服务器配置文件应如下所示:

〜/openvpn-clients/base/client.conf
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1

接下来,创建一个简单的 bash 脚本,将基本配置和文件与客户端证书和密钥合并,并将生成的配置存储在~/openvpn-clients/configs目录。

打开文本编辑器并创建以下脚本:

nano ~/openvpn-clients/gen_config.sh
〜/openvpn-clients/gen_config.sh
#!/bin/bash

FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
    if [[ ! -f $i ]]; then
        echo " The file $i does not exist"
        exit 1
    fi

    if [[ ! -r $i ]]; then
        echo " The file $i is not readable."
        exit 1
    fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF

保存文件并通过运行以下命令使其可执行chmod命令:

chmod u+x ~/openvpn-clients/gen_config.sh

创建客户端证书私钥和配置#

生成客户端私钥和证书请求的过程与生成服务器密钥和证书请求时的过程相同。

正如我们在上一节中已经提到的,我们将在 OpenVPN 服务器上生成客户端私钥和证书请求。在此示例中,第一个 VPN 客户端的名称为client1.

  1. 导航到您的 EasyRSA 目录OpenVPN服务器并为客户端生成新的私钥和证书请求文件:

    cd ~/EasyRSA-3.0.5/./easyrsa gen-req client1 nopass

    该命令将创建两个文件,一个私钥(client1.key)和证书请求文件(client1.req).

    Common Name (eg: your user, host, or server name) [client1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req
    key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
  2. 复制私钥client1.key to the ~/openvpn-clients/files您在上一节中创建的目录:

    cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
  3. 将证书请求文件传输到您的 CA 计算机:

    scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp

    在这个例子中我们使用scp要传输文件,您还可以使用rsync通过 ssh 或任何其他安全方法。

  4. 登录到您的CA机,切换到EasyRSA目录,导入证书请求文件:

    cd ~/EasyRSA-3.0.5./easyrsa import-req /tmp/client1.req client1

    第一个参数是证书请求文件的路径,第二个参数是客户端名称。

    The request has been successfully imported with a short name of: client1
    You may now use this name to perform signing operations on this request.
  5. 从 EasyRSA 目录中CA机运行以下命令来签署请求:

    cd ~/EasyRSA-3.0.5./easyrsa sign-req client client1

    系统将提示您验证该请求是否来自可信来源。类型yes并按enter确认:

    如果您的 CA 密钥受密码保护,系统将提示您输入密码。验证后,脚本将生成 SSL 证书并打印其完整路径。

    ...
    Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
  6. 接下来,传输签名的证书client1.crt文件传回您的 OpenVPN 服务器。您可以使用scp , rsync或任何其他安全方法:

    scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
  7. 登录到您的OpenVPN服务器,并移动client1.crt文件到~/openvpn-clients/files目录:

    mv /tmp/client1.crt ~/openvpn-clients/files
  8. 最后一步是使用以下命令生成客户端配置gen_config.sh脚本。切换到~/openvpn-clients目录并使用客户端名称作为参数运行脚本:

    cd ~/openvpn-clients./gen_config.sh client1

    该脚本将创建一个名为client1.ovpn in the ~/client-configs/configs目录。您可以通过列出目录来检查:

    ls ~/openvpn-clients/configs
    client1.ovpn

至此,客户端配置已创建。您现在可以将配置文件传输到要用作客户端的设备。

例如,将配置文件传输到本地计算机scp您应该运行以下命令:

scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/

要添加其他客户端,只需重复相同的步骤即可。

连接客户端#

Linux #

您的发行版或桌面环境可能提供连接到 OpenVPN 服务器的工具或图形用户界面。在本教程中,我们将向您展示如何使用openvpn tool.

  • 在 Ubuntu 和 Debian 上安装 OpenVPN

    sudo apt updatesudo apt install openvpn
  • 在 CentOS 和 Fedora 上安装 OpenVPN

    sudo yum install epel-releasesudo yum install openvpn

安装软件包后,要连接到 VPN 服务器,请使用openvpn命令并指定客户端配置文件:

sudo openvpn --config client1.ovpn

macOS #

隧道布里克是 OS X 和 macOS 上 OpenVPN 的免费开源图形用户界面。

Windows #

下载并安装最新版本的 OpenVPN 应用程序OpenVPN 的下载页面 .

复制.ovpn文件到 OpenVPN 配置文件夹(\Users\<Name>\OpenVPN\Config or \Program Files\OpenVPN\config).

启动 OpenVPN 应用程序。

右键单击 OpenVPN 系统托盘图标,您复制的 OpenVPN 配置文件的名称将在菜单中列出。单击“连接”。

安卓和iOS#

OpenVPN 开发的 VPN 应用程序适用于 Android 和 iOS。安装应用程序并导入客户端.ovp file.

  • Android OpenVPN 连接
  • iOS OpenVPN 连接

吊销客户端证书#

吊销证书意味着使已签名的证书失效,使其不能再用于访问 OpenVPN 服务器。

要吊销客户端证书,请按照以下步骤操作:

  1. 登录到您的CA机并切换到 EasyRSA 目录:

    cd EasyRSA-3.0.5
  2. 使用以下命令运行 easyrsa 脚本revoke参数,后跟您要撤销的客户端名称:

    ./easyrsa revoke client1

    系统将提示您验证是否要吊销证书。类型yes并按enter确认:

    Please confirm you wish to revoke the certificate with the following subject:
    
    subject=
        commonName                = client1
    
    Type the word 'yes' to continue, or any other input to abort.
    Continue with revocation: yes
    ...

    如果您的 CA 密钥受密码保护,系统将提示您输入密码。一旦验证,脚本将撤销证书。

    ...
    Revocation was successful. You must run gen-crl and upload a CRL to your
    infrastructure in order to prevent the revoked cert from being accepted.
  3. Use the gen-crl生成证书吊销列表 (CRL) 的选项:

    ./easyrsa gen-crl
    An updated CRL has been created.
    CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
  4. 将 CRL 文件上传到 OpenVPN 服务器:

    scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
  5. 登录到您的OpenVPN服务器服务器并将文件移动到/etc/openvpn目录:

    sudo mv /tmp/crl.pem /etc/openvpn
  6. 打开OpenVPN服务器配置文件:

    sudo nano /etc/openvpn/server1.conf

    将以下行粘贴到文件末尾

    /etc/openvpn/server1.conf
    crl-verify crl.pem

    保存并关闭文件。

  7. 重启OpenVPN服务以使撤销指令生效:

    sudo systemctl restart openvpn@server1

    此时,客户端应该无法再使用已吊销的证书访问 OpenVPN 服务器。

如果您需要撤销其他客户端证书,只需重复相同的步骤。

结论#

在本教程中,您学习了如何在 Ubuntu 18.04 计算机上安装和配置 OpenVPN 服务器。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 18.04 上设置 OpenVPN 服务器 的相关文章

  • Codeigniter - 检查用户是否已登录并存在(它是真实用户)

    我正在尝试在用户登录我的网站时为他们设置会话数据 因此 如果用户存在于数据库中 我将设置一个会话数据 例如 this gt session gt set userdata user exists 1 现在 每次我想检查用户是否存在并已登录时
  • 用户如何登录定义了读者角色的 couchapp?

    我通过 Couchapp 部署了我的应用程序 这意味着整个应用程序是从数据库中提供服务的 我不希望 Couchdb 数据库中的数据公开可用 因此我指定了用户在向他提供数据之前必须具有的读者角色 然而 当我去申请时 我所能得到的是 error
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • EDITLogBack Syslog 不工作 java

    我写了一个简单的项目来在 Ubuntu 中运行日志 方法如下example https examples javacodegeeks com enterprise java logback logback syslog example 应用
  • 如何在 Linux 主机上的 docker 容器中挂载目录 [重复]

    这个问题在这里已经有答案了 我想将一个目录从 docker 容器挂载到本地文件系统 该目录是网站根目录 我需要能够使用任何编辑器在本地计算机上编辑它 我知道我可以跑docker run v local path container path
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket

    我在 Amazon S3 上使用 getObject 和 putObject 请求 并在创建访问存储桶的策略时发现 如果我不允许 listBucket 则会收到 访问被拒绝 错误 这样做的问题是 listBucket 意味着用户可以列出存储
  • Ubuntu 16.04 - Apache 2.4.18 - 请求 URI 太长

    我试图从 Google 图片搜索结果中保存图像 但是当我在查询字符串参数中发送图像的 src 时 会出现以下错误 Request URI Too Long The requested URL s length exceeds the cap
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 伪分布式模式下的 Hadoop。连接被拒绝

    P S 请不要将此标记为重复 Hi 我一直在尝试以伪分布式模式设置和运行 Hadoop 当我运行 start all sh 脚本时 我得到以下输出 starting namenode logging to home raveesh Hado
  • apt-get install tzdata 非交互式

    当我尝试 apt get install y tzdata 将显示用于选择时区的命令行选项 我试图在脚本中使用它来进行一些设置 如何在没有用户输入的情况下使 apt get 运行 我知道重新配置 tzdata 我可以做 echo Ameri
  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • 将 CCtray 与 Jenkins 结合使用,同时启用安全性(使用 HTTPS)

    我将 Jenkins 服务器配置为仅使用 HTTPS 并启用安全性 我也不喜欢任何未登录的人查看仪表板 即使它是空的 在这里 我禁用了 匿名 的 读取 访问权限 到目前为止 所有这些都完全符合我的喜好 但想要通过例如向远程客户端添加一些构建
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • ajax 会增加还是降低安全性?

    我正在创建一个网站 到目前为止它是纯 PHP 的 我在想 既然很少有人没有启用 JavaScript 我想知道为什么 也许我应该将我的网站创建为一个完全 PHP 的网站 而不使用任何 AJAX 难道是我想错了 可以肯定的是 如果我实施一些
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题

随机推荐

  • 如何在 Linux 上格式化 USB 驱动器和 SD 卡

    在使用 SD 卡或 USB 驱动器之前 需要对其进行格式化和分区 通常 大多数 USB 驱动器和 SD 卡均使用 FAT 文件系统进行预格式化 无需开箱即用 但是 在某些情况下 您可能需要格式化驱动器 在 Linux 中 您可以使用图形工具
  • 如何在 Linux 上创建可启动的 CentOS U 盘

    本教程介绍如何从 Linux 终端创建可启动的 CentOS USB 记忆棒 您可以使用此 USB 记忆棒在任何支持从 USB 启动的计算机上启动并测试或安装 CentOS 先决条件 8GB 或更大的 USB 记忆棒驱动器 运行任何 Lin
  • 如何撤消上次 Git 提交

    有时 在使用 Git 时 您可能想要撤消最新的提交 提交是 Git 存储库在给定时间的快照 Git 有一个名为的引用变量HEAD它指向当前工作分支中的最新提交 要撤消提交 您需要做的就是指向HEAD变量到前一个快照 本指南解释了如何撤消上次
  • 如何在 CentOS 7 上安装 Asterisk

    Asterisk 是最流行和广泛采用的开源 PBX 平台 为 IP PBX 系统 会议服务器和 VoIP 网关提供支持 它被世界各地的个人 小型企业 大型企业和政府使用 Asterisk 功能包括语音邮件 等待音乐 电话会议 呼叫排队 通话
  • 如何在 MySQL 中显示/列出用户

    您是否曾经需要获取 MySQL 服务器中所有用户的列表 有命令显示数据库和表 但没有MySQLshow users命令 本教程介绍如何通过命令行列出 MySQL 数据库服务器中的所有用户帐户 我们还将向您展示如何找出哪些用户有权访问给定的数
  • 如何在 Linux 中创建组(groupadd 命令)

    在 Linux 中 组用于组织和管理用户帐户 组的主要目的是定义一组权限 例如读 写或执行允许对于可以在组内的用户之间共享的给定资源 在本文中 我们将讨论如何在 Linux 中使用groupadd命令 groupadd命令语法 的一般语法为
  • Linux中的重命名命令(重命名多个文件)

    使用以下命令重命名多个文件和目录mv命令可能是一个乏味的过程 因为它涉及使用管道编写复杂的命令 loops 等等 这就是rename命令派上用场 它通过将名称中的搜索表达式替换为指定的替换来重命名给定的文件 在本教程中 我们将解释如何使用r
  • 如何在 CentOS 8 上安装 Vagrant

    Vagrant是用于构建和管理虚拟化开发环境的命令行工具 默认情况下 Vagrant 可以在 VirtualBox Hyper V 和 Docker 之上配置计算机 可以通过 Vagrant 插件系统启用对 Libvirt KVM VMwa
  • 如何在 Debian 10 Linux 上安装和使用 Curl

    Curl 是一个命令行实用程序 用于从远程服务器传输数据或向远程服务器传输数据 它允许您使用 HTTP HTTPS SCP SFTP and FTP协议 如果您尝试使用下载文件curl并收到一条错误消息说curl command not f
  • Linux 中的 Chmod 命令(文件权限)

    在 Linux 中 对文件的访问是通过文件权限 属性和所有权来管理的 这确保只有授权的用户和进程才能访问文件和目录 本教程介绍了如何使用chmod命令更改文件和目录的访问权限 Linux 文件权限 在进一步讨论之前 我们先解释一下基本的 L
  • 在 Linux 上创建可启动 Debian 10 USB 记忆棒

    本教程解释了如何使用以下命令从 Linux 终端创建可启动的 Debian 10 Buster USB 记忆棒dd命令 USB 记忆棒可用于在任何支持从 USB 启动的计算机上启动和安装 Debian 先决条件 1GB 或更大的 USB 记
  • Linux 中的 sudo 命令

    sudo 命令允许您以另一个用户 默认为 root 用户 运行程序 如果您在命令行上花费大量时间 那么 sudo 是您经常使用的命令之一 使用 sudo 而不是以 root 身份登录更安全 因为您可以向单个用户授予有限的管理权限 而无需他们
  • 如何在 Ubuntu 18.04 上设置 Nginx 服务器块

    Nginx Server Blocks 允许您在一台机器上运行多个网站 使用服务器块 您可以指定站点文档根 包含网站文件的目录 为每个站点创建单独的安全策略 为每个站点使用不同的 SSL 证书等等 在本文中 我们将提供有关如何在 Ubunt
  • 如何在 CentOS 7 上使用 Nginx 安装 WordPress

    WordPress 是全球最受欢迎的开源博客和 CMS 平台 为当今互联网上四分之一的网站提供支持 它基于 PHP 和 MySQL 并包含大量可以通过免费和高级插件和主题进行扩展的功能 WordPress 是创建在线商店 网站或博客的最简单
  • 如何在 CentOS 7 上安装 OpenCV

    OpenCV 开源计算机视觉库 是一个开源计算机视觉库 绑定了 C Python 和 Java 并支持所有主要操作系统 它可以利用多核处理并具有 GPU 加速功能来实现实时操作 OpenCV 的应用非常广泛 包括医学图像分析 拼接街景图像
  • 您应该了解的 Apache 命令

    Apache HTTP 服务器是世界上最流行的 Web 服务器 它是一个免费 开源 跨平台的 HTTP 服务器 提供强大的功能 可以通过各种模块进行扩展 如果您是开发人员或系统管理员 您很可能经常与 Apache 打交道 在本指南中 我们将
  • 如何在 Debian 10 Linux 上安装和使用 Docker

    Docker 是一个容器化平台 允许您快速构建 测试和部署应用程序作为可移植 自给自足的容器 几乎可以在任何地方运行 在本教程中 我们将解释如何在 Debian 10 Buster 上安装 Docker 并探索基本的 Docker 概念和命
  • Linux 中的 W 命令

    在这篇文章中 我们将讨论w命令 w是一个命令行实用程序 显示有关当前登录用户以及每个用户正在执行的操作的信息 它还提供有关系统已运行多长时间 当前时间和系统平均负载的信息 如何使用w命令 语法为w命令如下 w OPTIONS USER Wh
  • 如何在 CentOS 7 上安装 Skype

    Skype是世界上最受欢迎的通信应用程序之一 可让您免费进行在线音频和视频通话 并以经济实惠的价格拨打全球手机和固定电话 Skype 不是开源应用程序 也不包含在 CentOS 存储库中 本教程介绍如何在 CentOS 7 上安装最新版本的
  • 如何在 Ubuntu 18.04 上设置 OpenVPN 服务器

    无论您是想在连接不可信的公共 Wi Fi 网络时安全可靠地访问互联网 绕过地理限制内容还是允许您的同事在远程工作时安全地连接到您的公司网络 使用 VPN 都是最佳解决方案 VPN 允许您连接到远程 VPN 服务器 使您的连接加密且安全 并通