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系统。
第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配置已完成。
第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’文件。
-构建服务器密钥
现在,我们要构建服务器密钥,然后将构建名为“ 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”证书文件。
使用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密码。
已生成名为“ client01”的客户端证书,请使用openssl命令验证客户端证书。
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
确保没有错误。
-建立Diffie-Hellman密钥
需要Diffie-Hellman密钥以提高安全性。我们将基于在顶部创建的“ vars”配置文件生成“ 2048” DH密钥。
使用以下命令生成Diffie-Hellman密钥。
./easyrsa gen-dh
DH密钥已生成,位于“ pki”目录中。
-可选:生成CRL密钥
CRL(证书吊销列表)密钥将用于吊销客户端密钥。如果您的VPN服务器上有多个客户端的客户端证书,并且想要删除某人密钥,则只需使用easy-rsa命令撤消该操作。
如果要撤消某些键,请运行以下命令。
./easyrsa revoke someone
然后生成CRL密钥。
./easyrsa gen-crl
CRL PEM文件已在“ pki”目录下生成-以下是我的服务器上的示例。
-复制证书文件
已生成所有证书,现在复制证书文件和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配置路由。
将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服务。
netstat -plntu
systemctl status openvpn-server@server
您将得到如下结果。
结果,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/*
现在,您可以使用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客户端并导入配置。