技术教程 · 2019年12月14日 0

如何在CentOS 8上使用Easy-RSA 3安装OpenVPN服务器和客户端

OpenVPN是一个开源应用程序,可让您通过公共Internet创建安全的专用网络。OpenVPN实现了虚拟专用网络(VPN)以创建安全连接。OpenVPN使用OpenSSL库提供加密,它提供了多种身份验证机制,例如基于证书的身份验证,预共享密钥以及用户名/密码身份验证。

在本教程中,我们将向您展示如何在CentOS 8服务器上逐步安装和配置OpenVPN。我们将实现基于证书的OpenVPN身份验证。

先决条件

  • CentOS 8服务器
  • 根特权

我们要做什么?

  • 安装OpenVPN和Easy-RSA
  • 配置Easy-RSA 3 Var
  • 构建OpenVPN密钥
  • 配置OpenVPN服务器
  • 配置防火墙并启用端口转发
  • 客户端设置
  • 测试中

第1步-安装OpenVPN和Easy-RSA

首先,我们将添加EPEL(企业Linux的额外软件包)存储库,并安装最新的OpenVPN软件包,然后将easy-rsa脚本下载到CentOS 8系统。

使用下面的dnf命令安装EPEL存储库。

dnf install epel-release

之后,安装最新的OpenVPN软件包2.4.7。

dnf install openvpn

安装完成后,转到“ / etc / openvpn”并使用下面的wget命令下载easy-rsa脚本。

cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

现在解压缩“ EasyRSA-unix-v3.0.6.tgz”文件,并将目录重命名为“ easy-rsa”。

tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz

OpenVPN软件包和easy-rsa脚本已安装到CentOS 8系统。

在CentOS 8上安装openvpn

第2步-配置Easy-RSA 3

在此步骤中,我们将通过创建一个新的“ vars”文件来配置easy-rsa 3。“ vars”文件包含Easy-RSA 3设置。

转到“ / etc / openvpn / easy-rsa /”目录,并使用vim编辑器创建一个新的vars脚本。

cd /etc/openvpn/easy-rsa/
vim vars

在下面粘贴vars easy-rsa 3配置。

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "ID"
set_var EASYRSA_REQ_PROVINCE    "Jakarta"
set_var EASYRSA_REQ_CITY        "Jakarta"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL       "openvpn@hakase-labs.io"
set_var EASYRSA_REQ_OU          "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST          "sha256"

保存并退出。

注意:

  • 根据需要更改变量的值。
  • 增加“ EASYRSA_KEY_SIZE”以提高安全性。
  • 更改“ EASYRSA_CA_EXPIRE”和“ EASYRSA_CERT_EXPIRE”。

现在,通过更改文件的权限使“ vars”文件可执行。

chmod +x vars

easy-rsa 3配置已完成。

配置Easy-RSA 3

第3步-构建OpenVPN密钥

在这一步中,我们将基于我们创建的easy-rsa 3’vars’文件构建OpenVPN密钥。我们将构建CA密钥,服务器和客户端密钥,DH和CRL PEM文件。

我们将使用“ easyrsa”命令行构建所有这些键。转到“ / etc / openvpn / easy-rsa /”目录。

cd /etc/openvpn/easy-rsa/3/

-初始化和建立CA

在构建服务器和客户端密钥之前,我们需要初始化PKI(公共密钥基础结构)目录并构建CA密钥。

使用以下命令初始化PKI目录并构建CA密钥。

./easyrsa init-pki
./easyrsa build-ca

现在输入您的CA密钥的密码,您将在’pki’目录下获得’ca.crt’和’ca.key’文件。

构建OpenVPN密钥

-构建服务器密钥

现在,我们要构建服务器密钥,然后将构建名为“ hakase-server”的服务器密钥。

使用以下命令构建服务器密钥“ hakase-server”。

./easyrsa gen-req hakase-server nopass

构建服务器密钥

注意:

  • nopass =选项,用于禁用“ hakase-server”密钥的密码。

并使用我们的CA证书签署“ hakase-server”密钥。

./easyrsa sign-req server hakase-server

系统将要求您输入“ CA”密码,输入密码,然后按Enter。您将在“ pki / issued /”目录下获得“ hakase-server.crt”证书文件。

easyrsa登录要求

使用OpenSSL命令验证证书文件,并确保没有错误。

openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt

已创建所有服务器证书密钥。服务器私钥位于“ pki / private / hakase-server.key”,服务器证书位于“ pki / issued / hakase-server.crt”。

私钥

-建立客户金钥

现在我们需要为客户端构建密钥。我们将生成一个名为“ client01”的新客户端密钥。

使用以下命令生成“ client01”密钥。

./easyrsa gen-req client01 nopass

建立客户金钥

现在,使用我们的CA证书签署“ client01”密钥,如下所示。

./easyrsa sign-req client client01

键入“是”以确认客户端证书请求,然后键入CA密码。

easyrsa登录请求客户端client01

已生成名为“ client01”的客户端证书,请使用openssl命令验证客户端证书。

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

确保没有错误。

验证CA文件

-建立Diffie-Hellman密钥

需要Diffie-Hellman密钥以提高安全性。我们将基于在顶部创建的“ vars”配置文件生成“ 2048” DH密钥。

使用以下命令生成Diffie-Hellman密钥。

./easyrsa gen-dh

DH密钥已生成,位于“ pki”目录中。

生成Diffie-Hellman密钥

-可选:生成CRL密钥

CRL(证书吊销列表)密钥将用于吊销客户端密钥。如果您的VPN服务器上有多个客户端的客户端证书,并且想要删除某人密钥,则只需使用easy-rsa命令撤消该操作。

如果要撤消某些键,请运行以下命令。

./easyrsa revoke someone

然后生成CRL密钥。

./easyrsa gen-crl

CRL PEM文件已在“ pki”目录下生成-以下是我的服务器上的示例。

生成CRL密钥

-复制证书文件

已生成所有证书,现在复制证书文件和PEM文件。

复制服务器密钥和证书。

cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/

复制client01密钥和证书。

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/

复制DH和CRL密钥。

cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/

服务器和客户端的所有证书已复制到每个目录。

复制证书文件

第4步-配置OpenVPN

在这一步中,我们将为OpenVPN服务器创建一个新的配置’server.conf’。

转到“ / etc / openvpn / server /”目录,并使用vim创建新的配置文件“ server.conf”。

cd /etc/openvpn/server/
vim server.conf

将以下OpenVPN服务器配置粘贴到此处。

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key

#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

保存并退出。

并已创建OpenVPN服务器配置。

第5步-在Firewalld中启用端口转发并配置路由

在此步骤中,我们将启用端口转发内核模块并为OpenVPN配置路由“防火墙”。

通过运行以下命令来启用端口转发内核模块。

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

接下来,使用Firewalld for OpenVPN配置路由。

在Firewalld中启用端口转发并配置路由

将OpenVPN服务添加到“公共”和“受信任”防火墙区域。

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn

之后,将“ tun0”添加到“受信任”区域。

firewall-cmd --permanent --zone=trusted --add-interface=tun0

现在在默认的“公共”区域中启用“ MASQUERADE”。

firewall-cmd --permanent --add-masquerade

为OpenVPN内部IP地址“ 10.5.0.0/24”到外部IP地址“ SERVERIP”启用NAT。

SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s  10.5.0.0/24 -o $SERVERIP -j MASQUERADE

并重新加载firewalld。

firewall-cmd --reload

重新加载防火墙

端口转发和防火墙路由配置已完成,启动OpenVPN服务,并使其在每次系统引导时自动启动。

systemctl start openvpn-server@server
systemctl enable openvpn-server@server

启动openvpn

之后,使用以下命令检查OpenVPN服务。

netstat -plntu
systemctl status openvpn-server@server

您将得到如下结果。

OpenVPN成功启动

结果,OpenVPN服务已启动并在UDP协议上使用默认端口“ 1194”运行。

第6步-OpenVPN客户端设置

转到“ / etc / openvpn / client”目录,并使用vim创建一个新的openvpn客户端配置文件“ client01.ovpn”。

cd /etc/openvpn/client
vim client01.ovpn

将以下OpenVPN客户端配置粘贴到此处。

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

保存并退出。

现在将“ / etc / openvpn / client”目录压缩为“ zip”或“ tar.gz”文件,并使用SCP从本地计算机下载压缩文件。

将“ / etc / openvpn / client”目录压缩到“ client01.tar.gz”文件。

cd /etc/openvpn/
tar -czvf client01.tar.gz client/*

OpenVPN客户端设置

现在,您可以使用FTP服务器或scp命令下载压缩的OpenVPN文件,如下所示。

scp root@139.xx.xx.xx:/etc/openvpn/client01.tar.gz .

第7步-连接到OpenVPN

在客户端上测试。

-在Linux上

安装OpenVPN软件包,如果需要GUI配置,请安装OpenVPN network-manager。

sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y

如果要使用终端外壳进行连接,请运行下面的OpenVPN命令。

openvpn --config client01.ovpn

连接到OpenVPN时,打开一个新的终端选项卡,并使用curl命令检查连接。

curl ifconfig.io

然后,您将获得OpenVPN服务器IP地址。

-在Mac OS上

下载  并安装Tunnelblick

提取“ client01.tar.gz”文件,并将“ client”目录重命名为“ client01.tblk”。

tar -xzvf client01.tar.gz
mv client client01.tblk

双击“ client01.tblk”,Tunnelblick将自动检测OpenVPN配置,然后导入。

现在,通过顶部栏上的Tunnelblick连接。

-在Windows上

下载适用于Windows的  openvpn客户端并导入配置。

参考