如何在Ubuntu 18.04上设置OpenVPN服务器
无论我们是想在不信任的公共Wi-Fi网络上连接时安全,安全地访问Internet,绕过地理限制内容还是要允许同事在远程工作时安全地连接到网络,都是使用VPN的最佳解决方案。
VPN允许我们连接到远程VPN服务器,从而使连接加密和安全,并通过保持流量数据私有来匿名浏览Web。
我们可以从许多商业VPN提供商中进行选择,但是我们永远不能真正确定该提供商没有记录活动。
最安全的选择是设置自己的VPN服务器。
本教程将引导我们通过在Ubuntu 18.04上安装和配置OpenVPN来设置自己的VPN服务器的过程。
我们还将向我们展示如何生成客户端证书和创建配置文件
OpenVPN是功能齐全的开源安全套接字层(SSL)VPN解决方案。
它使用SSL/TLS协议实现OSI第2层或者第3层安全网络扩展。
准备工作
要完成本教程,我们将需要:
- Sudo访问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计算机上执行以下步骤。
- 首先,使用以下wget命令从项目Github存储库下载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
- 切换到EasyRSA目录,并通过复制'vars.example'文件创建一个名为'vars'的配置文件:
cd ~/EasyRSA-3.0.5/cp vars.example vars
- 打开文件并取消注释并更新以下条目以匹配信息。
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 "theitroad" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community"
- 在首先生成CA密钥对之前,我们需要使用以下命令初始化一个新的PKI:
./easyrsa init-pki
init-pki complete; you Jan now create a CA or requests. Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
- 下一步是建立CA:
./easyrsa build-ca
如果不想在每次签名证书时都提示我们输入密码,请使用'nopass'选项运行'build-ca'命令:'./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 Jan 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服务器上执行以下步骤。
- OpenVPN的安装非常简单,只需在OpenVPN服务器上运行以下命令:
sudo apt updatesudo apt install openvpn
- 下载最新版本的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实例生成证书请求,该证书请求将使用CA计算机上的EasyRSA实例签名。在整个教程中,我们会发现它确实并不复杂。
创建Diffie-Hellman和HMAC密钥
在本节中,我们将生成一个强大的Diffie-Hellman密钥,该密钥将在密钥交换期间使用,并且将使用HMAC签名文件为连接添加另外的安全层。
- 首先,导航到OpenVPN服务器上的EasyRSA目录。
cd ~/EasyRSA-3.0.5/
- 生成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/
- 生成HMAC签名:
openvpn --genkey --secret ta.key
完成后,将“ ta.key”文件复制到“/etc/openvpn”目录:
sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
创建服务器证书和私钥
本节介绍如何为OpenVPN服务器生成私钥和证书请求。
- 导航到OpenVPN服务器上的EasyRSA目录,并为服务器和证书请求文件生成一个新的私钥:
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
- 将私钥复制到“/etc/openvpn”目录:
sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
- 将证书请求文件传输到CA计算机:
scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp
在此示例中,我们使用“ scp”来传输文件,我们也可以通过ssh或者任何其他安全方法使用“ rsync”。
- 登录到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 Jan now use this name to perform signing operations on this request.
该命令只是将请求文件复制到“ pki/reqs”目录中。
- 当仍在CA计算机上的EasyRSA目录中时,运行以下命令来签署请求:
cd ~/EasyRSA-3.0.5./easyrsa sign-req server server1
第一个参数可以是“服务器”或者“客户端”,第二个参数是服务器的简称(实体)名称。系统将提示我们确认请求是否来自受信任的来源。输入“ 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
- 下一步是将签名证书“ server1.crt”和“ 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
- 登录到OpenVPN服务器,并将“ server1.crt”和“ 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'和'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解析器。
- 找到“用户”和“组”指令,并通过删除“”取消注释这些设置。每行开头的“”:/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单位文件名之后指定配置文件名:
在OpenVPN服务器上,运行以下命令以启动OpenVPN服务:
sudo systemctl start openvpn@server1
通过键入以下命令来验证服务是否已成功启动:
sudo systemctl status openvpn@server1
如果该服务处于活动状态并且正在运行,则输出将类似于以下内容:
● [email protected] - OpenVPN connection to server1 Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Mon 2016-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/[email protected] → /lib/systemd/system/[email protected].
如果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客户端可以访问Internet。
在添加规则之前,我们需要了解Ubuntu OpenVPN Server的公共网络接口。
我们可以通过运行以下命令轻松找到该接口:
ip -o -4 route show to default | awk '{print }'
在我们的例子中,该接口名为“ ens3”,如下面的输出所示。
界面名称可能会有所不同。
ens3
默认情况下,使用UFW时,转发的数据包将被丢弃。
我们需要对此进行更改,并指示防火墙允许转发数据包。
打开UFW配置文件,找到“ DEFAULT_FORWARD_POLICY”键,并将值从“ DROP”更改为“ ACCEPT”:
sudo nano /etc/default/ufw
/etc/default/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" ...
接下来,我们需要在nat表中为“ POSTROUTING”链设置默认策略,并设置化装规则。
为此,请打开“ /etc/ufw/before.rules”文件,并添加以黄色突出显示的行,如下所示。
sudo nano /etc/ufw/before.rules
不要忘记在“ -A POSTROUTING”行中替换“ ens3”以匹配我们在上一条命令中找到的公共网络接口的名称。
将这些行粘贴到以'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
完成后,保存并关闭文件。
我们还需要在端口“ 1194”(这是默认的OpenVPN端口)上打开UDP流量。
为此,请运行以下命令:
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进行签名。
生成客户端证书和配置文件的整个过程如下:
- 在OpenVPN服务器上生成私钥和证书请求。
- 将请求发送到要签名的CA计算机。
- 将签名的SSL证书复制到OpenVPN服务器并生成配置文件。
- 将配置文件发送到VPN客户端的计算机。
首先创建一组目录来存储客户端文件:
mkdir -p ~/openvpn-clients/{configs,base,files}
- “基本”目录将存储将在所有客户端文件之间共享的基本文件和配置。
- 'configs'目录将存储生成的客户端配置。
- “文件”目录将存储特定于客户端的证书/密钥对。
将“ ca.crt”和“ ta.key”文件复制到“~/openvpn-clients/base”目录中:
cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
接下来,将示例VPN客户端配置文件复制到client'~/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”和“ 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}/.crt CLIENT_KEY=${FILES_DIR}/.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}/.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'。
- 导航到OpenVPN服务器上的EasyRSA目录,并为客户端生成一个新的私钥和一个证书请求文件:
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
- 将私钥“ client1.key”复制到上一节中创建的“~/openvpn-clients/files”目录中:
cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
- 将证书请求文件传输到CA计算机:
scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp
在此示例中,我们使用“ scp”来传输文件,我们也可以通过ssh或者任何其他安全方法使用“ rsync”。
- 登录到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 Jan now use this name to perform signing operations on this request.
- 在CA计算机上的EasyRSA目录中,运行以下命令来签署请求:
cd ~/EasyRSA-3.0.5./easyrsa sign-req client client1
系统将提示我们确认请求是否来自受信任的来源。输入“是”,然后按“输入”确认:如果CA密钥受密码保护,系统将提示我们输入密码。验证后,脚本将生成SSL证书并打印其完整路径。
... Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
- 接下来,将签名的证书“ client1.crt”文件传输回OpenVPN服务器。我们可以使用'scp','rsync'或者任何其他安全方法:
scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
- 登录到OpenVPN服务器,并将“ client1.crt”文件移动到“~/openvpn-clients/files”目录中:
mv /tmp/client1.crt ~/openvpn-clients/files
- 最后一步是使用“ gen_config.sh”脚本生成客户端配置。切换到“~/openvpn-clients”目录,并使用客户端名称作为参数运行脚本:
cd ~/openvpn-clients./gen_config.sh client1
该脚本将在“~/client-configs/configs”目录中创建一个名为“ client1.ovpn”的文件。我们可以通过列出目录进行检查:
ls ~/openvpn-clients/configs
client1.ovpn
此时,客户端配置已创建。
现在,我们可以将配置文件传输到打算用作客户端的设备上。
例如,要使用“ scp”将配置文件传输到本地计算机,应运行以下命令:
scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/
要添加其他客户端,只需重复相同的步骤。
连接客户
Linux
发行版或者桌面环境可能会提供工具或者图形用户界面来连接到OpenVPN服务器。
在本教程中,我们将向我们展示如何使用“ openvpn”工具连接到服务器。
- 在Ubuntu和Debian上安装OpenVPN
sudo apt updatesudo apt install openvpn
- 在CentOS和Fedora上安装OpenVPN
sudo yum install epel-releasesudo yum install openvpn
安装软件包后,要使用“ openvpn”命令连接到VPN服务器并指定客户端配置文件:
sudo openvpn --config client1.ovpn
苹果系统
Tunnelblick是OS X和macOS上用于OpenVPN的免费开源图形用户界面。
Windows
在“ OpenVPN的下载”页面上下载并安装最新版本的OpenVPN应用程序。
将“ .ovpn”文件复制到OpenVPN配置文件夹(“ \ Users \ <名称> \ OpenVPN \ Config”或者“ \ Program Files \ OpenVPN \ config”)。
启动OpenVPN应用程序。
右键单击OpenVPN系统任务列图标,我们复制的OpenVPN配置文件的名称将在菜单上列出。
单击连接。
Android和iOS
由OpenVPN开发的VPN应用程序可用于Android和iOS。
安装应用程序并导入客户端“ .ovp”文件。
- Android OpenVPN连接
- iOS OpenVPN连接
吊销客户证书
吊销证书意味着使签名证书无效,从而使其不再可用于访问OpenVPN服务器。
要撤消客户端证书,请按照以下步骤操作:
- 登录到CA计算机并切换到EasyRSA目录:
cd EasyRSA-3.0.5
- 使用'revoke'参数运行easyrsa脚本,然后输入要撤消的客户端名称:
./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.
- 使用'gen-crl'选项生成证书吊销列表(CRL):
./easyrsa gen-crl
An updated CRL has been created. CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
- 将CRL文件上传到OpenVPN服务器:
scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
- 登录到OpenVPN服务器服务器,并将文件移至“/etc/openvpn”目录:
sudo mv /tmp/crl.pem /etc/openvpn
- 打开OpenVPN服务器配置文件:
sudo nano /etc/openvpn/server1.conf
将以下行粘贴到文件/etc/openvpn/server1.conf的末尾
crl-verify crl.pem
保存并关闭文件。
- 重新启动OpenVPN服务,以使撤销指令生效:
sudo systemctl restart openvpn@server1
此时,客户端应该不再能够使用已撤销的证书访问OpenVPN服务器。
如果我们需要吊销其他客户端证书,只需重复相同的步骤。