OpenVPN 高级管理

重点:

一键安装 OpenVPN 脚本

后续管理:证书吊销。给新用户颁发证书

关系型数据库相关概念

三个范式

1)OpenVPN 高级管理

本节介绍 OpenVPN 的高级功能,主要关于安全加强及客户端的管理功能,比如:员工入职、离职涉及到的创建账户与吊销账户证书。

1.1)启用 安全增强 功能

启用防止 DOS 攻击的 安全增强配置

// 生成 ta.key ( "安全增强配置" )

[root@open-server ~] open --genkey --secret /etc/open/certs/ta.key

[root@open-server ~] cat /etc/open/certs/ta.key

[root@open-server ~] ll /etc/open/certs

total 24

-rw------- 1 root root 1204 Aug  3 20:34 ca.crt

-rw------- 1 root root  424 Aug  3 20:35 dh.pem

-rw------- 1 root root 4608 Aug  3 20:34 server.crt

-rw------- 1 root root 1704 Aug  3 20:35 server.key

-rw------- 1 root root  636 Aug  4 15:53 ta.key            # 生成该文件



// "添加 open-server.conf 配置"

[root@open-server ~] vim /etc/open/server.conf

# tls-auth ta.key 0 # This file is secret

tls-auth /etc/open/certs/ta.key 0          # 客户端配置 1, 服务器端配置 0



// 重启 open 服务

[root@open-server ~] systemctl restart [email protected]



// 查看日志提示报错

[root@open-server ~] tail -n 20 /var/log/open/open.log

Sun Dec 24 00:53:35 2023 TLS Error: cannot locate HMAC in incoming packet from [AF_INET]171.83.7.136:5712

Sun Dec 24 00:53:38 2023 TLS Error: cannot locate HMAC in incoming packet from [AF_INET]171.83.7.136:5712

客户端已经无法连接

OpenVPN 高级管理_第1张图片

我们将服务端 ta.key 传到客户端相关目录下

[root@open-server ~] sz /etc/open/certs/ta.key

OpenVPN 高级管理_第2张图片

修改客户端配置文件 client.o,添加一行

tls-auth ta.key 1   # 客户端配置 1, 服务器端配置 0

OpenVPN 高级管理_第3张图片

客户端重新连接成功

OpenVPN 高级管理_第4张图片

OpenVPN 高级管理_第5张图片

1.2)设置 客户端私钥密码 增强安全性

新建一个账户 magedu,并且 设置证书密码提高证书及登录 VPN 的安全性。

如果不设置密码,谁拿到 用户证书与配置文件 都可以使用 OpenVPN 工具连接到生产环境

1.2.1)创建新用户,生成对应的有密码的私钥和证书申请

[root@open-server 3] cd /etc/open/easy-rsa-client/3



// "生成对应的有密码的私钥和证书申请"

[root@open-server 3] ./easyrsa gen-req magedu        ( "不增加 nopass 选项" )

Enter PEM pass phrase:                # 输入两遍密码

Verifying - Enter PEM pass phrase:    # 输入两遍密码

Common Name (eg: your user, host, or server name) [magedu]:   # 接受默认值, 直接回车

OpenVPN 高级管理_第6张图片

1.2.2)导入用户证书 申请并颁发证书

[root@open-server 3] cd /etc/open/easy-rsa-server/3



[root@open-server 3] ./easyrsa import-req /etc/open/easy-rsa-client/3/pki/reqs/magedu.req magedu



// 确保"证书有效期"是合理值

[root@open-server 3] grep EASYRSA_CERT_EXPIRE vars

set_var EASYRSA_CERT_EXPIRE 90



// 颁发证书

[root@open-server 3] ./easyrsa sign client magedu

Confirm request details: yes   # 输入 yes

Certificate is to be certified until Mar 22 17:09:36 2024 GMT (90 days)  # 有效期

1.2.3)将用户的证书相关文件 放在指定的目录

[root@open-server ~] mkdir /etc/open/client/magedu



// "将用户的证书相关文件 放在指定的目录 中"

[root@open-server ~] cp /etc/open/easy-rsa-server/3/pki/issued/magedu.crt /etc/open/client/magedu

[root@open-server ~] cp /etc/open/easy-rsa-client/3/pki/private/magedu.key /etc/open/client/magedu

[root@open-server ~] cp /etc/open/certs/{ca.crt,ta.key} /etc/open/client/magedu/

[root@open-server ~] cp /etc/open/client/wangxiaochun/client.o /etc/open/client/magedu/



// "验证"

[root@open-server ~] ll /etc/open/client/magedu/

total 24

-rw------- 1 root root 1204 Dec 24 01:12 ca.crt

-rw-r--r-- 1 root root  243 Dec 24 01:12 client.o

-rw------- 1 root root 4492 Dec 24 01:12 magedu.crt

-rw------- 1 root root 1854 Dec 24 01:12 magedu.key

-rw------- 1 root root  636 Dec 24 01:12 ta.key



[root@open-server ~] cd /etc/open/client/magedu/

// 根据服务器端修改下面配置, 需要和服务器同步

[root@open-server magedu] vim client.o

[root@open-server magedu] cat client.o

client

dev tap

proto udp

remote 39.100.147.82 1194

resolv-retry infinite

nobind

#persist-key

#persist-tun

ca ca.crt

cert magedu.crt             # 注意修改

key magedu.key              # 注意修改

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-CBC

verb 3

compress lz4-v2



// "打包证书"

[root@open-server magedu] tar cf /root/magedu.tar ./*

[root@open-server magedu] sz /root/magedu.tar

1.2.4)将相关文件传给客户端主机相应目录

放置到 Windows 客户端的 C:\Program Files\OpenVPN\config 目录下

OpenVPN 高级管理_第7张图片

1.2.5)Windows 客户端 重新连接

需要输入 用户私钥密码 才可以进行连接

OpenVPN 高级管理_第8张图片

OpenVPN 高级管理_第9张图片

查看日志

[root@open-server ~] tail /var/log/open/open.log

OpenVPN 高级管理_第10张图片

OpenVPN 高级管理_第11张图片

1.3)账户证书管理

对新员工的入职和老员工的离职,会涉及到 证书的创建和吊销

1.3.1)证书自动过期

前面颁发的证书都有一定的有效期,过期后 就需要重新颁发新证书

// "过期时间" 由以下设置决定

[root@open-server ~] grep EASYRSA_CERT_EXPIRE /etc/open/easy-rsa-server/3/vars

set_var EASYRSA_CERT_EXPIRE 90

如果证书过期,在服务器端可以看到以下 日志

// 测试: 将服务器时间改为 2 年后时间

[root@open-server ~] date -s '2 year'

OpenVPN 高级管理_第12张图片

// 在服务器端日志中会显示用户证书过期

[root@open-server ~] tail -n0 /var/log/open/open.log -f



// "恢复时间"

[root@open-server ~] clock -s

OpenVPN 高级管理_第13张图片

OpenVPN 高级管理_第14张图片

1.3.2)证书手动注销

1.3.2.1)查看当前证书的有效性

// 证书有效为 V, 无效为 R

[root@open-server ~] cat /etc/open/easy-rsa-server/3/pki/index.txt

V       331220072305Z           A3D7C296B478AC274ABC6A4DA5C03724        unknown /CN=server

V       240322083300Z           A2375DB2C6F9E46CA36A42A9C2F7B355        unknown /CN=wangxiaochun

V       240322085217Z           7CA3A2DC6E0AB19BC20832D9C208CABF        unknown /CN=wangj

V       240322085510Z           5B69E0DC04C16D877EBDC75F70A2D2FA        unknown /CN=wangjun

V       240322085739Z           2EB217D663A268C7038D08EA6023BCFA        unknown /CN=zhongst

V       240322170936Z           77B65551630285DDB34E07CE6A1C017B        unknown /CN=magedu

1.3.2.2)吊销指定的用户的证书

revoke 吊销证书

// revoke "吊销证书"

[root@open-server ~] cd /etc/open/easy-rsa-server/3

[root@open-server 3] ./easyrsa revoke magedu

yes



// 查看当前证书的有效性, "有效为 V, 无效为 R"

[root@open-server 3] cat /etc/open/easy-rsa-server/3/pki/index.txt

V       331220072305Z           A3D7C296B478AC274ABC6A4DA5C03724        unknown /CN=server

V       240322083300Z           A2375DB2C6F9E46CA36A42A9C2F7B355        unknown /CN=wangxiaochun

V       240322085217Z           7CA3A2DC6E0AB19BC20832D9C208CABF        unknown /CN=wangj

V       240322085510Z           5B69E0DC04C16D877EBDC75F70A2D2FA        unknown /CN=wangjun

V       240322085739Z           2EB217D663A268C7038D08EA6023BCFA        unknown /CN=zhongst

R       240322170936Z   231224151146Z   77B65551630285DDB34E07CE6A1C017B        unknown /CN=magedu



// 但是断开客户端连接, "magedu 用户仍然能连接成功"

OpenVPN 高级管理_第15张图片

OpenVPN 高级管理_第16张图片

1.3.2.3)生成证书吊销列表

// 因为每次吊销证书后都需要 "更新证书吊销列表文件"

// 并需要重启 OpenVPN 服务

[root@open-server 3] ./easyrsa gen-crl        "更新证书吊销列表文件"



// 查看 "吊销列表文件"

[root@open-server 3] cat pki/crl.pem

[root@open-server 3] sz pki/crl.pem



--- 省略 ---

# 传到 Windows 上, 修改文件后缀为 crl

# 双击就可以打开此文件, 看到下面显示信息


1.3.2.4)将吊销列表文件发布

// "第一次吊销证时"

// 需要在 OpenVPN 服务的编辑配置文件中(调用吊销证书的文件), "后续吊销无需此步"

[root@open-server 3.0.3] vim /etc/open/server.conf

crl-verify /etc/open/easy-rsa-server/3/pki/crl.pem



// 注: 每次吊销证书后, "都需重新启动才能生效"

[root@open-server 3] systemctl restart [email protected]

1.3.2.5)再次测试连接失败

用户端再次连接失败

OpenVPN 高级管理_第17张图片

// "观察 OpenVPN 日志"

[root@open-server 3] tail -f /var/log/open/open.log -n0

OpenVPN 高级管理_第18张图片

1.3.3)账户重名证书颁发

假如公司已有员工叫 magedu 已经离职,且证书已被吊销,现在又新来一个员工仍叫 magedu,那么一般的区分办法是在用户名后面加数字,如:magedu1、magedu2 等,假如还想使用 magedu 这个账户名签发证书的话,那么需要删除服务器之前 magedu 的账户,并删除签发记录和证书,否则新用户的证书无法导入,并重新颁发证书。

对于员工重名的情况,可以为新员工指定新的名称,或者删除不再使用的重名用户证书,重新创建新证书。

1.3.3.1)手动重新颁发证书

// "删除已被吊销的账户证书"

[root@open-server ~] cd /etc/open/easy-rsa-client/3/

[root@open-server 3] rm -rf pki/private/magedu.key

[root@open-server 3] rm -rf pki/reqs/magedu.req

[root@open-server 3] rm -rf /etc/open/client/magedu/*

[root@open-server 3] rm -rf /etc/open/easy-rsa-server/3/pki/reqs/magedu.req

[root@open-server 3] rm -rf /etc/open/easy-rsa-server/3/pki/issued/magedu.crt



// "删除之前的带 R 的吊销记录"

[root@open-server 3] vim /etc/open/easy-rsa-server/3/pki/index.txt



// "重新生成新的账户证书申请和私钥"

[root@open-server 3] cd /etc/open//easy-rsa-client/3

[root@open-server 3] ./easyrsa gen-req magedu

Enter PEM pass phrase:    # 输入密码

Verifying - Enter PEM pass phrase:    # 输入密码

Common Name (eg: your user, host, or server name) [magedu]:    # 直接回车



// "CA 颁发证书"

[root@open-server 3] cd /etc/open/easy-rsa-server/3

[root@open-server 3] ./easyrsa import-req /etc/open/easy-rsa-client/3/pki/reqs/magedu.req magedu

[root@open-server 3] ./easyrsa sign client magedu

Confirm request details: yes      # 输入 yes



// "生成相关文件"

[root@open-server 3] cp /etc/open/easy-rsa-server/3/pki/issued/magedu.crt /etc/open/client/magedu/

[root@open-server 3] cp /etc/open/easy-rsa-client/3/pki/private/magedu.key /etc/open/client/magedu/

[root@open-server 3] cp /etc/open/certs/{ca.crt,ta.key} /etc/open/client/magedu/

[root@open-server 3] cp /etc/open/client/wangxiaochun/client.o /etc/open/client/magedu/



// "修改客户端配置文件"

// 注意: 参考现有用户在使用的客户端配置文件    ( "重要" )

// C:\Program Files\OpenVPN\config\client.o

[root@open-server 3] vim /etc/open/client/magedu/client.o

client

dev tap

proto udp

remote 39.100.147.82 1194

resolv-retry infinite

nobind

#persist-key

#persist-tun

ca ca.crt

cert magedu.crt                # 注意修改

key magedu.key                 # 注意修改

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-CBC

verb 3

compress lz4-v2



// "验证"

[root@open-server ~] tree /etc/open/client/magedu

/etc/open/client/magedu

├── ca.crt

├── client.o

├── dh.pem

├── magedu.crt

├── magedu.key

└── ta.key



// 将 /etc/open/client/magedu "所有文件打包"传到客户端使用

[root@open-server ~] cd /etc/open/client/magedu

[root@open-server ~] tar cf /root/magedu.tar ./*

[root@open-server ~] sz /root/magedu.tar


OpenVPN 高级管理_第19张图片

OpenVPN 高级管理_第20张图片

1.3.3.2)自动化 证书颁发脚本

通过脚本实现自动化的证书颁发

1.3.3.2.1)脚本内容

注意:脚本内容 需要修改 公网 IP 地址 OpenVPN 客户端配置文件内容

[root@open-server ~] vim open-user-crt.sh

#!/bin/bash

. /etc/init.d/functions



OPENVPN_SERVER=39.100.145.14

PASS=123456





remove_cert () {

    rm -rf /etc/open/client/${NAME}

    find /etc/open/ -name "$NAME.*" -delete

}



create_cert () {

    cd /etc/open/easy-rsa-client/3

    ./easyrsa  gen-req ${NAME} nopass <  /etc/open/client/${NAME}/client.o <

1.3.3.2.2)执行脚本

[root@open-server ~] bash open-user-crt.sh

请输入用户的姓名拼音(如:): testuser

OpenVPN 高级管理_第21张图片

1.3.3.3)在 Windows 客户端用新证书连接登录

OpenVPN 高级管理_第22张图片

OpenVPN 高级管理_第23张图片

OpenVPN 高级管理_第24张图片

1.4)实现 用户密码 认证

基于证书验证的基础上 再加上用户名密码验证 可以实现更高的安全性

1.4.1)修改服务端配置

"修改 OpenVPN 服务端配置"

[root@open-server ~] vim /etc/open/server.conf

# 添加三行, 实现服务端支持密码认证方式

script-security 3       # 允许使用自定义脚本

auth-user-pass-verify /etc/open/checkpsw.sh via-env # 指定自定义脚本路径

username-as-common-name # 开启用户密码验证

1.4.2)创建自定义脚本

官方脚本下载

http://open.se/files/other/checkpsw.sh

[root@open-server ~] vim /etc/open/checkpsw.sh

#!/bin/sh

###########################################################

# checkpsw.sh (C) 2004 Mathias Sundman 

#

# This script will authenticate OpenVPN users against

# a plain text file. The passfile should simply contain

# one row per user with the username first followed by

# one or more space(s) or tab(s) and then the password.



PASSFILE="/etc/open/psw-file"

LOG_FILE="/var/log/open-password.log"

TIME_STAMP=`date "+%Y-%m-%d %T"`



###########################################################



if [ ! -r "${PASSFILE}" ]; then

  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}

  exit 1

fi



CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`



if [ "${CORRECT_PASSWORD}" = "" ]; then

  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}

  exit 1

fi



if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 

  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}

  exit 0

fi



echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}

exit 1



# 增加执行权限

[root@open-server ~] chmod +x /etc/open/checkpsw.sh

1.4.3)创建用户密码文件

# 创建用户和密码认证文件, 每行是一个用户和密码

[root@open-server ~] cat > /etc/open/psw-file <

1.4.4)修改客户端配置

修改客户端配置文件 client.o 文件

增加下面一行,使其 支持用户名/密码 与服务器进行身份验证。

[root@open-server ~] vim /etc/open/client/wangxiaochun/client.o

# 加下面一行, 可以支持用户密码认证

auth-user-pass

OpenVPN 高级管理_第25张图片

1.4.5)客户端连接验证

客户端基于证书验证的基础上再加上用户名密码验证

OpenVPN 高级管理_第26张图片

OpenVPN 高级管理_第27张图片

1.5)生产环境推荐配置文件

Server 端和 Client 端的生产推荐配置文件分别如下

1.5.1)Server 端配置

[root@open-server ~] grep '^[^#;]' /etc/open/server.conf

port 1194

proto tcp

dev tun

ca /etc/open/certs/ca.crt

cert /etc/open/certs/server.crt

key /etc/open/certs/server.key  # This file should be kept secret

dh /etc/open/certs/dh.pem

server 10.8.0.0 255.255.255.0

push "route 172.30.0.0 255.255.0.0"

keepalive 10 120

tls-auth /etc/open/certs/ta.key 0

cipher AES-256-CBC

compress lz4-v2

push "compress lz4-v2"

max-clients 2048

user open

group open

status /var/log/open/open-status.log

log-append /var/log/open/open.log

verb 3

mute 200

crl-verify /etc/open/easy-rsa-server/3/pki/crl.pem

1.5.2)Client 端配置

[root@open-server ~] cat /etc/open/client/wangxiaochun/client.o

client

dev tun

proto tcp

remote 10.0.0.8 1194

resolv-retry infinite

nobind

#persist-key

#persist-tun

ca ca.crt

cert magedu.crt

key magedu.key

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-CBC

verb 3

compress lz4-v2

你可能感兴趣的:(#,OpenVPN,OpenVPN)