OpenVPN-2.4.11-基于MySQL用户认证

不同VPN隧道身份认证、数据加密、数据验证区别如下表所示:

 

01 PPTP VPN

点对点隧道协议(PPTP)是由包括微软和3com等公司组成的PPTP论坛开发的一种点对点隧道协议;

基于拨号使用的PPP协议,使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。

使用PPTP VPN的最大优势在于,无需在windows客户端单独安装客户端软件,默认就支持PPTP VPN拨号连接功能。

适用场景:适合远程的企业用户拨号到企业内部进行办公等的应用。

开源软件:pptp vpn

02 IPsec VPN

IPSec隧道模式是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部;

隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标);

适用场景:企业异地两地总分公司或多个IDC机房之间的VPN不间断按需连接

开源软件:openswan

03 SSL VPN

SSL VPN提供了数据私密性、端点验证、信息完整性等特性;

SSL独立于应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。http+ssl == https

适用场景:企业异地或者移动用户拨号连接总部实现VPN不间断按需连接

开源软件:openvpn

属于C/S架构的软件,需要单独安装openvpn客户端与服务端。

开源产品工作原理

openvpn 工作原理–部署过程 每一步在做什么

  • 需要先关注保证数据安全传输的三要素:数据机密性 数据完整性 身份认证
  • 需要掌握秘钥加密技术应用实现;
  • 需要掌握证书概念的企业应用;

1.环境说明

系统平台:Centos7.9.2009

OpenVPN 版本:2.4.11

easy-rsa 版本:3.0.8

 

2.安装软件

yum -y install epel-release && yum -y install openvpn easy-rsa
yum -y install openssl openssl-devel lzo-devel

3, EASY-RSA 3.0制作证书

[root@xm-openvpn-10-10-20-231 ~]# mkdir -p /etc/openvpn/easy-rsa
[root@xm-openvpn-10-10-20-231 ~]# cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
[root@xm-openvpn-10-10-20-231 ~]# cp -p /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars
[root@xm-openvpn-10-10-20-231 ~]# tree /etc/openvpn/
/etc/openvpn/
├── client
├── easy-rsa
│   ├── easyrsa
│   ├── openssl-easyrsa.cnf
│   ├── vars
│   └── x509-types
│       ├── ca
│       ├── client
│       ├── code-signing
│       ├── COMMON
│       ├── email
│       ├── kdc
│       ├── server
│       └── serverClient
└── server

使用 easy-rsa 生成需要的证书及相关文件,将创建CA密钥,VPN server端,client端密钥,DH的key, TLS认证钥匙ta.key

(特别注意)准备签发证书相关变量的配置文件

这里CA和OpenVPN服务器颁发的证书的有效期,可适当加长:

vim /etc/openvpn/easy-rsa/vars

CA的证书有效期默为为10年,可以适当延长,比如:36500天
原指令:set_var EASYRSA_CA_EXPIRE 3650 
新指令:set_var EASYRSA_CA_EXPIRE   36500

服务器证书默为为825天,可适当加长,比如:3650天
原指令:set_var EASYRSA_CERT_EXPIRE   825
新指令:set_var EASYRSA_CERT_EXPIRE    3650

 

默认情况下证书的有效期是825天,即两年2个月,如果要长期使用,最好把时间调整长一些

 

初始化并建立CA证书

[root@xm-openvpn-10-10-20-231 ~]# cd /etc/openvpn/easy-rsa/

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa init-pki

 

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa build-ca nopass

 

创建vpn服务器证书和私钥,添加nopass 选项,是指不需要为密钥添加密码

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa gen-req vpn-server nopass

 

用CA证书签名

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa sign-req server vpn-server

 

创建VPN客户端证书和私钥

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa gen-req vpn-client nopass

用CA证书为客户端证书签名

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa sign-req client vpn-client

创建DH密钥

[root@xm-openvpn-10-10-20-231 easy-rsa]# ./easyrsa gen-dh

 

生成 tls-auth key,主要用于防止 DoS 和 TLS 攻击

[root@xm-openvpn-10-10-20-231 easy-rsa]# openvpn --genkey --secret ta.key

 

移动到统一管理目录

将上面生成的相关证书文件整理到 /etc/openvpn/server/certs (这一步完全是为了维护方便

[root@xm-openvpn-10-10-20-231 openvpn]# mkdir -p /etc/openvpn/certs
[root@xm-openvpn-10-10-20-231 openvpn]# cd /etc/openvpn/certs/
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/dh.pem ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/ca.crt ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/issued/vpn-server.crt ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/private/vpn-server.key ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/private/vpn-client.key ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/pki/issued/vpn-client.crt ./
[root@xm-openvpn-10-10-20-231 certs]# cp /etc/openvpn/easy-rsa/ta.key ./

创建openVPN日志目录

mkdir -p /var/log/openvpn/

chown openvpn:openvpn /var/log/openvpn

 

私有网段:(最好使用下面的地址做vpn客户端的ip)

10.0.0.0 10.255.255.255 (10/8 prefix)
172.16.0.0 172.31.255.255 (172.16/12 prefix)
192.168.0.0 192.168.255.255 (192.168/16 prefix)

4,配置 OpenVPN

[root@xm-openvpn-10-10-20-231 openvpn]# cd /etc/openvpn/server
[root@xm-openvpn-10-10-20-231 ]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf .
[root@xm-openvpn-10-10-20-231 ]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf .

服务端的配置文件详解:

# 监听的端口号
port 1194
# 服务端用的协议,udp 能快点,所以我选择 udp
proto udp
# 定义openvpn运行时使用哪一种模式,openvpn有两种运行模式一种是tap模式,一种是tun模式。
# tap模式也就是桥接模式,通过软件在系统中模拟出一个tap设备,该设备是一个二层设备,同时支持链路层协议。
# tun模式也就是路由模式,通过软件在系统中模拟出一个tun路由,tun是ip层的点对点协议。
dev tun
# 定义openvpn在使用tun路由模式时,分配给client端分配的IP地址段
server 10.106.0.0 255.255.255.0
# 这条命令可以重定向客户端的网关,在进行翻墙时会使用到
push "redirect-gateway def1 bypass-dhcp"
# 向客户端推送的路由信息,如下内容表示客户端连接之后与当前互通
push "route 10.0.0.0 255.255.0.0"
# 向客户端推送的DNS信息
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 223.6.6.6"
push "dhcp-option DNS 114.114.114.114"
# 定义活动连接保时期限
keepalive 10 300
# 加密类型
cipher AES-256-CBC
# 启用允许数据压缩,客户端配置文件也需要有这项
comp-lzo
# 最多允许连接1000个客户端
max-clients 1000
# 通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
# 通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的。否则网络连接,会先linkdown然后再linkup
persist-tun
# 指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 4
# 重复日志记录限额
mute 20
# 禁用TSL重协商
reneg-sec 0
# 此选项开启只能使用udp协议。否则会报错error: --explicit-exit-notify can only be used with --proto udp
explicit-exit-notify 1
# 客户端1,服务端是0
key-direction 0
# 2.4版本之前使用 tls-auth,如果高于此版本,则用tls-crypt,我用的2.4.8使用了tls-auth,结果连通之后无法访问外网了
tls-crypt /etc/openvpn/server/certs/ta.key 0
# 记录客户端和虚拟ip地址之间的关系。在openvpn重启时,再次连接的客户端将依然被分配和断开之前的IP地址
ifconfig-pool-persist /etc/openvpn/ipp.txt
# 使用客户提供的UserName作为Common Name 
username-as-common-name
# 基于mysql进行认证,如不需要可注释掉,注意最后的openvpn_mysql是与后边配置文件名称相呼应的
plugin      /etc/openvpn/openvpn-plugin-auth-pam.so openvpn_mysql
# CA 根证书路径
ca /etc/openvpn/server/certs/ca.crt
# open VPN 服务器证书路径
cert /etc/openvpn/server/certs/server.crt
# open VPN 服务器密钥路径
key /etc/openvpn/server/certs/server.key
# Diffie-Hellman 算法密钥文件路径
dh /etc/openvpn/server/certs/dh.pem
# 指定 log 文件位置
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log

 

生产环境下完整的VPN服务端的配置文件:

[root@xm-openvpn-10-10-20-231 server]# cat /etc/openvpn/server/server.conf
port 11940
proto udp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/vpn-server.crt
key /etc/openvpn/certs/vpn-server.key
dh /etc/openvpn/certs/dh.pem
server 100.100.100.0 255.255.255.0
;push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "route 10.10.10.0 255.255.255.0 vpn_gateway"
push "route 10.10.20.0 255.255.255.0 vpn_gateway"
push "route 10.10.21.0 255.255.255.0 vpn_gateway"
push "route 192.168.1.0 255.255.255.0 vpn_gateway"
push "route 10.231.1.0 255.255.255.0 vpn_gateway"
push "route 10.231.2.0 255.255.255.0 vpn_gateway"
push "route 10.233.251.0 255.255.255.0 vpn_gateway"
push "route 10.233.252.0 255.255.255.0 vpn_gateway"
push "route 10.233.254.0 255.255.255.0 vpn_gateway"
push "route 192.168.136.0 255.255.255.0 vpn_gateway"
push "route 192.168.137.0 255.255.255.0 vpn_gateway"
push "route 192.168.138.0 255.255.255.0 vpn_gateway"
push "route 192.168.124.0 255.255.255.0 vpn_gateway"
push "dhcp-option DNS 114.114.114.114 vpn_gateway"
push "dhcp-option DNS 1.1.1.1 vpn_gateway"
keepalive 10 300
cipher AES-256-CBC
comp-lzo
max-clients 1000
persist-key
persist-tun
verb 3
mute 20
reneg-sec 0
key-direction 0
tls-crypt /etc/openvpn/certs/ta.key 0
username-as-common-name
explicit-exit-notify 1
plugin /etc/openvpn/openvpn-plugin-auth-pam.so openvpn_mysql
log /var/log/openvpn/server.log
log-append /var/log/openvpn/vpnserver.log
status /var/log/openvpn/status.logz

注意:

1)通常 openvpn 部署好以后,客户端连接 VPN 后会被配置一些路由,其客户端的路由会被修改为所有的流量都通过 VPN 来传输。
但有时候,我们需要客户端的某些 IP 走 VPN 或者本地网关。这里有两种方法进行 openvpn 的路由配置

第一种方法: 客户端进行配置
在配置文件下增加如下内容:

route-nopull # 客户端连接openvpn后 不从服务端获取路由
max-routes 1000 # 设置路由的最大条数,默认是100,这里可以根据需求修改
route 192.168.0.0 255.255.255.0 net_gateway # 使192.168.0.0/24网段,不走vpn网关
route 192.168.1.0 255.255.255.0 vpn_gateway # 使192.168.1.0/24网段,走vpn网关
注意: 如果配置中有 redirect-gateway def1 则需要先移除

第二种方法: 在服务端进行配置(建议用这种方法)
服务端和客户端的配置略有不同

push “route 192.168.0.0 255.255.255.0 net_gateway” # 将引号中的路由推送到客户端,使192.168.0.0/24网段,不走vpn网关
push “route 192.168.1.0 255.255.255.0 vpn_gateway” # 将引号中的路由推送到客户端,使192.168.1.0/24网段,走vpn网关
注意: 如果配置中有 redirect-gateway 则需要先移除

配置完成后,需要重启 openvpn 服务。

 

2)如果要使用systemctl来启动,关闭openvpn就必须要将server.conf的配置文件放到/etc/openvpn/server下,否则会报错!!!

#关闭selinux

sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config
setenforce 0

 

#开启路由转发和加载BBR模块(优化加速网络)

[root@xm-openvpn-10-10-20-231 conf]# sysctl -p|grep -E "forward|bbr"
net.ipv4.ip_forward = 1
net.ipv4.tcp_congestion_control = bbr

 

#设置防火墙

firewall-cmd --permanent --add-interface=tun0
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent  --add-port=11940/udp
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 100.100.100.0/24 -o ens192 -j MASQUERADE
firewall-cmd --reload

#启动 open VPN

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

 

PS:这个时候启动是失败的,因为前边配置文件当中引用了 MySQL 认证的配置文件,而这个模块,我们还没有生成

#安装数据库

yum -y install mariadb mariadb-server
systemctl enable mariadb
systemctl start mariadb

 

#创建数据库并授权

CREATE DATABASE IF NOT EXISTS openvpn DEFAULT CHARSET utf8;

grant all on openvpn.* to openvpn@'localhost' identified by 'openvpn@0592';

flush privileges;

 

#创建用户表和日志表

use openvpn;
create table account(name char(100)not null,password char(255)default null,active int(10)not null default 1,primary key(name));
create table log(msg char (254),user char(100),pid char(100),host char(100),rhost char(100),time char(100));

 

#创建测试的账号

insert into account (name,password) values ('test1',password('123456789'));
insert into account (name,password) values ('test2',password('987654321'));

 

#查看账号信息

select * from account;

+-------+-------------------------------------------+--------+

| name  | password                                  | active |

+-------+-------------------------------------------+--------+

| test1 | *CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D |      1 |

| test2 | *DABCF719388B72AD432DE5E88423B56D652DD8B0 |      1 |

+-------+-------------------------------------------+--------+

2 rows in set (0.00 sec)

 

PS:第一列为登录vpn的用户名,第二列为登录的密码,第三列是是否被禁用,1为启用,为0表示不能登录

#修改用户名的密码

update account set password=password('zxc123?!') where name = 'test3';

#优化表结构

mysql> create table users(id int(10)AUTO_INCREMENT,name char(100)not null unique,realname char(100),password char(255)default null,active int(10)not null default 1,comment char(100),primary key(id,name));
Query OK, 0 rows affected, 2 warnings (0.36 sec)

mysql> desc users;
+----------+-----------+------+-----+---------+----------------+
| Field    | Type      | Null | Key | Default | Extra          |
+----------+-----------+------+-----+---------+----------------+
| id       | int       | NO   | PRI | NULL    | auto_increment |
| name     | char(100) | NO   | PRI | NULL    |                |
| realname | char(100) | YES  |     | NULL    |                |
| password | char(255) | YES  |     | NULL    |                |
| active   | int       | NO   |     | 1       |                |
| comment  | char(100) | YES  |     | NULL    |                |
+----------+-----------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

 

#安装认证软件

saslauthd 是一个利用 sasl 资料库进行明文身份验证的守护进程,等会儿配置完毕之后将通过这个工具进行命令行的简单验证。

这步操作之后,也会生成依赖库文件 /usr/lib64/security/pam_mysql.so,后边会提到这个模块

rpm -Uvh http://www.nosuchhost.net/~cheese/fedora/packages/epel-7/x86_64/cheese-release-7-1.noarch.rpm
yum -y install pam_mysql pam_krb5 pam pam-devel gcc gcc-c++ cyrus-sasl autoconf epel-release
systemctl enable saslauthd
systemctl restart saslauthd

 

配置认证文件

现在想要配置这个工具saslauthd与MySQL的连接,则需要通过如下配置进行定义,配置默认路径在 /etc/pam.d

cat > /etc/pam.d/openvpn_mysql << EOF
auth sufficient /usr/lib64/security/pam_mysql.so user=openvpn passwd=openvpn@0592 host=localhost db=openvpn table=account usercolumn=name passwdcolumn=password [where=account.active=1] sqllog=0 crypt=2 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
account required /usr/lib64/security/pam_mysql.so user=openvpn passwd=openvpn@0592 host=localhost db=openvpn table=account usercolumn=name passwdcolumn=password [where=account.active=1] sqllog=0 crypt=2 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
EOF

注意:

1)此处引用的pam_mysql.so,默认路径为 /usr/lib64/security/pam_mysql.so,此处也可以用绝对路径引用

2)user=openvpn passwd=openvpn@0592 host=localhost db=openvpn table=account,这里的信息是对应上面创建数据库,表,用户,密码

3)这里的openvpn_mysql服务名需要跟openvpn的server.conf中定义的保持一致!!!

 

# 2个方法验证:

方法一:

如上配置如果都没有问题,那么就可以通过 saslauthd 来进行一下验证了

saslauthd 的用法是 testsaslauthd -u 用户 -p 密码 -s 服务名:

 

[root@xm-openvpn-10-10-20-231 ~]# testsaslauthd -u test1 -p 123456789 -s openvpn_mysql

0: OK “Success.”

 

方法二:

[root@xm-openvpn-10-10-20-231 pam.d]# pamtester openvpn_mysql test1 authenticate

Password:

pamtester: successfully authenticated

 

[root@xm-openvpn-10-10-20-231 pam.d]# pamtester openvpn_mysql luzhihua authenticate

Password:

pamtester: successfully authenticated

 

#安装 openVPN 依赖库

基于 MySQL 认证的 openVPN 使用的服务端配置文件,比普通认证的只多了一行配置:

plugin   /etc/openvpn/openvpn-plugin-auth-pam.so openvpn_mysql

注意最后的openvpn_mysql是与后边配置文件名称相呼应的

这行配置的意思是,启用插件,通过 /etc/openvpn/openvpn-plugin-auth-pam.so这个模块儿实现,并对接 saslauthd管理的 openvpn_mysql。

现在还缺少/etc/openvpn/openvpn-plugin-auth-pam.so这个模块,此模块需要通过openVPN的源码编译得来

 

#下载对应版本的源码包

wget http://swupdate.openvpn.org/community/releases/openvpn-2.4.11.tar.gz
tar xf openvpn-2.4.11.tar.gz
cd openvpn-2.4.11/
./configure
make

#拷贝模块

cp /root/openvpn-2.4.11/src/plugins/auth-pam/.libs/openvpn-plugin-auth-pam.so /etc/openvpn/

#设置开机启动

systemctl enable openvpn-server@server

systemctl start openvpn-server@server

 

#用户管理

基于MySQL进行用户管理之后就非常简便了,如果需要新增用户,只需要在account表新增一条数据即可,如果此用户离职了,那么只需要删除这条数据即可或者将active字段的值改为0即可停用

5,客户端配置

下面是完整的客服端的配置文件,再使用自己的用户名密码进行认证即可。
(可以将CA密钥,client端密钥, TLS认证钥匙ta.key的内容合并到同一个文件中,减少冗余)

[root@xm-openvpn-10-10-20-231 ~]# cat /etc/openvpn/client/client.ovpn 
client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 1.1.1.1 12345    #这里是VPN服务器的ip和端口
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
cipher AES-256-CBC
auth-user-pass
auth-nocache
script-security 3
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
MIIDNTCCAh2gAwIBAgIJAPkAUAbuZkqaMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC0Vhc3ktUlNBIENBMB4XDTIxMTEwODA5MjYzNFoXDTMxMTEwNjA5MjYzNFow
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCwuHpp3rI9ofkEZlkvtCcDftU1SUXqX7+0yB1XfVPQF6fohHn1cisn
GKD2ouBmTsjaCBAAlqNgAPRoNu29bF6laV3g9h6dPy/dYYioB5MqpRif04AgOIOx
ilSZeWEFZHHmEGLo32USNIFI+1MH71aW/Uka3ys5+FmHulDrnn6IxI2YslYcP9gp
RVgmyrmtmqwiplKhLVWNsJsdmyhP5FjEdPFR5eFb8sWZ65qo3B1oPWy06e94rgM4
O6lggC37Y6m5eCVow2XV4aul5wvNwebb+7o94kIxTaRzcBj3K/N3GecaWKQ0Q3Gi
Ye2UibR2ib2wreE1TUm2ejXla27T4+OBAgMBAAGjgYUwgYIwHQYDVR0OBBYEFBy8
bhhZLy5ntZ4oBd3R/nqsLwaZMEYGA1UdIwQ/MD2AFBy8bhhZLy5ntZ4oBd3R/nqs
LwaZoRqkGDAWMRQwEgYDVQQDDAtFYXN5LVJTQSBDQYIJAPkAUAbuZkqaMAwGA1Ud
EwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCrc+kF/YIl
Dc6A3sLLu8ieWb47kA6uFgzkr9GJ9ztvjg34QZsVsvIlCtjwjdTl9dNqpxH6DuY/
kh1IeqGJlHnS312uFCaMAZ95odrBImdZw8k/kgxMor3XFq1FHOGhsqxy3boFfnbG
E1AwUvYB2kiHscyXwFbXcNzpjgUhudhuRJIQyngDqyGMucJdhz2jdQLdVoXVwNct
gKRcalWkFETXg1+65xgNPiV9OLJioI48kTbspCubTtfUn8tMUFPHWZz1tf12ZrIr
ZsPQROLlR8+VzViJVhKFB7OlsKzW9wSnynggI5UPawhngK85wljZWkeGckkPvnxy
/mQNbQMdFVQe
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            8a:30:c8:c9:66:13:b3:f6:cf:23:bc:21:e0:17:ec:cc
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=Easy-RSA CA
        Validity
            Not Before: Nov  8 09:41:26 2021 GMT
            Not After : Feb 11 09:41:26 2024 GMT
        Subject: CN=vpn-client
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:cd:03:ba:7e:dd:be:ca:2a:e5:f2:a2:4f:2a:15:
                    e3:b6:2e:f1:28:ad:17:9d:4c:4a:fe:eb:a5:0c:9b:
                    38:98:0c:8b:9f:ec:8d:91:e4:bc:68:ed:af:68:22:
                    b1:93:d9:36:ee:4e:3b:00:b8:9e:8d:ea:b9:6b:67:
                    5d:8e:63:83:bc:9f:ee:90:49:b9:0a:a5:17:62:6e:
                    9e:33:05:c2:bb:ba:0f:27:a1:93:89:81:88:29:d0:
                    be:68:48:d4:78:97:4b:d8:87:11:46:9d:92:45:a3:
                    38:94:f0:76:9c:8e:1c:59:90:df:cc:1f:15:ed:15:
                    a0:47:2b:19:b7:b7:da:aa:09:2c:c2:8d:2f:7a:15:
                    4e:d6:43:73:3f:69:03:05:cf:1d:32:cf:21:53:c2:
                    8b:b6:41:f0:00:5a:bb:64:f4:86:35:ef:5f:21:d2:
                    a2:62:7a:72:bb:18:0a:60:12:f5:19:6a:56:77:45:
                    e3:6c:d3:1c:ec:6d:46:1b:45:56:12:19:23:a7:5b:
                    9d:54:b8:7f:df:29:71:54:1f:41:32:b0:c0:6f:50:
                    03:7f:81:9a:aa:ba:a9:1d:64:3f:f6:20:b8:be:26:
                    3f:2b:cb:a3:71:75:03:ca:9e:1d:25:52:22:f6:b3:
                    e7:c0:b6:07:f4:e0:41:83:83:4e:3d:87:ee:79:ce:
                    f5:51
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Subject Key Identifier: 
                39:D0:E1:4B:B2:C9:06:D5:51:BD:4B:68:C5:B9:DE:70:26:EE:CB:55
            X509v3 Authority Key Identifier: 
                keyid:1C:BC:6E:18:59:2F:2E:67:B5:9E:28:05:DD:D1:FE:7A:AC:2F:06:99
                DirName:/CN=Easy-RSA CA
                serial:F9:00:50:06:EE:66:4A:9A

            X509v3 Extended Key Usage: 
                TLS Web Client Authentication
            X509v3 Key Usage: 
                Digital Signature
    Signature Algorithm: sha256WithRSAEncryption
         8a:5f:a0:6a:db:aa:3e:1b:3a:63:df:74:ff:e4:9c:3d:e1:5a:
         b9:11:54:80:0f:2c:30:29:c9:d6:b6:3a:4a:c6:ae:3a:71:cd:
         ad:d1:50:a4:3d:2d:77:44:a0:ea:79:e0:b2:f9:c6:31:ab:79:
         ab:63:ab:61:44:1f:e5:fc:96:6b:09:f9:75:ee:07:38:f4:e8:
         28:0c:70:3a:db:45:12:08:f4:0e:46:9a:fa:39:38:1f:f5:ed:
         80:2c:6a:38:e6:7b:9a:72:1b:66:87:f6:f2:fc:91:b8:1f:0f:
         a9:fd:ee:92:10:ee:68:41:a2:b5:37:64:0b:29:96:22:d7:f8:
         db:87:28:13:50:c7:4c:0a:bf:af:92:01:a1:4a:a6:ba:c3:fa:
         fa:0a:6b:bc:48:48:bc:1c:21:af:60:ca:db:9e:c2:61:fe:24:
         eb:06:37:ee:a1:1d:b5:7e:4f:b6:8d:ba:24:3d:9a:fb:49:8b:
         8a:65:ea:23:3a:cf:94:ee:4c:23:de:2d:3f:89:2d:36:a3:f1:
         7e:fc:47:2e:f0:81:e3:3e:bb:d3:1b:ee:9f:e5:e3:a0:4b:1c:
         64:2b:b7:f7:7f:6f:8c:03:d9:cb:86:5f:be:89:68:d6:e3:90:
         3f:ac:4a:fa:f7:4e:03:91:25:a3:45:8b:2c:b2:5a:83:8d:5e:
         19:c2:03:bb
-----BEGIN CERTIFICATE-----
MIIDTjCCAjagAwIBAgIRAIowyMlmE7P2zyO8IeAX7MwwDQYJKoZIhvcNAQELBQAw
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjExMTA4MDk0MTI2WhcNMjQwMjEx
MDk0MTI2WjAVMRMwEQYDVQQDDAp2cG4tY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAzQO6ft2+yirl8qJPKhXjti7xKK0XnUxK/uulDJs4mAyL
n+yNkeS8aO2vaCKxk9k27k47ALiejeq5a2ddjmODvJ/ukEm5CqUXYm6eMwXCu7oP
J6GTiYGIKdC+aEjUeJdL2IcRRp2SRaM4lPB2nI4cWZDfzB8V7RWgRysZt7faqgks
wo0vehVO1kNzP2kDBc8dMs8hU8KLtkHwAFq7ZPSGNe9fIdKiYnpyuxgKYBL1GWpW
d0XjbNMc7G1GG0VWEhkjp1udVLh/3ylxVB9BMrDAb1ADf4GaqrqpHWQ/9iC4viY/
K8ujcXUDyp4dJVIi9rPnwLYH9OBBg4NOPYfuec71UQIDAQABo4GXMIGUMAkGA1Ud
EwQCMAAwHQYDVR0OBBYEFDnQ4UuyyQbVUb1LaMW53nAm7stVMEYGA1UdIwQ/MD2A
FBy8bhhZLy5ntZ4oBd3R/nqsLwaZoRqkGDAWMRQwEgYDVQQDDAtFYXN5LVJTQSBD
QYIJAPkAUAbuZkqaMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDAN
BgkqhkiG9w0BAQsFAAOCAQEAil+gatuqPhs6Y990/+ScPeFauRFUgA8sMCnJ1rY6
SsauOnHNrdFQpD0td0Sg6nngsvnGMat5q2OrYUQf5fyWawn5de4HOPToKAxwOttF
Egj0Dkaa+jk4H/XtgCxqOOZ7mnIbZof28vyRuB8Pqf3ukhDuaEGitTdkCymWItf4
24coE1DHTAq/r5IBoUqmusP6+gprvEhIvBwhr2DK257CYf4k6wY37qEdtX5Pto26
JD2a+0mLimXqIzrPlO5MI94tP4ktNqPxfvxHLvCB4z670xvun+XjoEscZCu3939v
jAPZy4Zfvolo1uOQP6xK+vdOA5Elo0WLLLJag41eGcIDuw==
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNA7p+3b7KKuXy
ok8qFeO2LvEorRedTEr+66UMmziYDIuf7I2R5Lxo7a9oIrGT2TbuTjsAuJ6N6rlr
Z12OY4O8n+6QSbkKpRdibp4zBcK7ug8noZOJgYgp0L5oSNR4l0vYhxFGnZJFoziU
8HacjhxZkN/MHxXtFaBHKxm3t9qqCSzCjS96FU7WQ3M/aQMFzx0yzyFTwou2QfAA
Wrtk9IY1718h0qJienK7GApgEvUZalZ3ReNs0xzsbUYbRVYSGSOnW51UuH/fKXFU
H0EysMBvUAN/gZqquqkdZD/2ILi+Jj8ry6NxdQPKnh0lUiL2s+fAtgf04EGDg049
h+55zvVRAgMBAAECggEAUELKa0pynAEpXtEOPwKs0DEWdn81RH6OybgFOKc4A8a9
jtF0Jw6ueEG9Lv6OGLysFaWI0eJ1KEghaRvhc5IgC+Ns6Q4DpFg3jHCT/JOfxhC0
SCaodOfCH+S59me0zrUkm1NdfxDHJ/4bc6ukM+wqyyG9i9MLqXKS+em0usj+kRws
ztauXdh0ukwu2UteaqSQ+QLN2gDHJS0GHJUnvWzUPit4xD+fq//ISnLIvBuKwxQl
N2yfT/YCUVSrA7WbdKUUuurtc40MpYdC3w24Ch3BQlvieJ0B1x0E4VDF3tLIOTeO
3Jvvg3PmKu8filNE39kkFC0m4snmKqyP79bXIapmQQKBgQDxCHQpMVbIoJfSU4iE
YX8wkWWYjfqzSJq0/CVL0oIu8yYFixPXqAYhwwd51/CIiXzO2T43nrcII932H9y5
l2g2rG82RJrKgpn09TqnkwCfC63X3B5BT6bcVOdUGR+TV+yxM1wyWwtgsUPVc0Df
nCWGOJzhm63U865fy87RSjzGyQKBgQDZvrZsCtV3qhyvdthn1R+qZvbw18Eb43qt
RqXsEa17hSld5uxAYVF7H3I+yO1sYutDCMisjDF4hJns45DFKojC6fHWOH27j93/
PHQo1iil+QyilqG3NKJke2cwGGz3LqaXTEpnKm8WuSdomQuIqxEXNsRbo+7Gb52/
iN+wO70WSQKBgQDdJ4iNkzuxcchbr1F/RYXSJlY1l3ADuAZbMU93NntEYMzuISHf
qceWir/9R+jnHl9p22J+3h3KVj5+adW4Y/e20phoDqKIVTS10ZwzzWmwhKLJgKox
+sd7OlvWigayxuXh4OIjQe46letLmihYA4lake9AAfuJfNzuAK6O0bLaIQKBgGN7
RHD8SicP62cnDxvxPTRnMm86w5lwRr4fxvKh6PbEEfA67rlDPSzZYyLYPdEFKKNJ
whVDP97mBkU6ewv5sN4McFcFHDyzMCPKhO+bWJrrvCAUXfIL9B2gW7aXkkEkaSw6
yMt1kad6FE0vjxtzvK00cmXD8fVrTVESwdAMmwkxAoGBAOcc5Ip2DU9LDHnJChsj
eLnMJfuo5nfJC92CFmQ/9wF5/AsxdK7h1cTxMe5OKzwBwCh6KfzTOpp4TxHkFtD/
HzHUR11MRswLF76gCx6JZg81u2BtWSlNiIQKIh+3L58pegZpPdO6xyHQUR1pt0mW
fHuJqXSC/AIYXLGqszLrS8vj
-----END PRIVATE KEY-----
</key>
<tls-crypt>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
aaf2ff88b7cb8d3288a18a5cfef5fa5b
cab86cf3861b9e277adc394370ce5ec3
a6a0fc852806e7002f5671d355aec735
280c09ec4c92bc81cb6f7a16a9defe08
5da3ae82fd99825f0d9e388d5fdbcadf
1f2052762187ba92ea29b9a390367909
103e5cb53bdd2373787de1daae24a583
b286356f62dc4ad89b48c289905b26e3
fa7a64802087b0d9e3521acbe2e8e2ae
4e397afb2e8b23d4d3c93847df62f9f6
7d4aa57ad2674f155eca261b127bd6f3
bba86086cf28d57075dbdf4b4101e41c
b36956a50fcee43909f582ab65e496e6
9fd2c256f3f0e682109a96dc92f8718d
74531d9d1a9794839b62d68712c75303
91f03b1c7f366a2889515536babfe122
-----END OpenVPN Static key V1-----
</tls-crypt>

 

注意:

pam_mysql不能直接用yum install pam_mysql安装,系统自带的版本是0.7的,使用这个版本的话会导致后边OpenVPN连接的时候认证不成功,
/var/log/secure日志中会一直报下边错误

#安装pam_mysql包,版本8.0

[root@xm-openvpn-10-10-20-231 ~]# rpm -ivh http://repo.iotti.biz/CentOS/7/x86_64/pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm

客户端验证

我们上边已经有了两个测试用户,现在就用其中一个,进行验证。

1.要连接到 open VPN 服务端首先得需要一个客户端软件,但是也可以使用官方的,客户端非常丰富
在 Mac 下推荐使用 Tunnelblick (opens new window)
下载地址:https://tunnelblick.net/。

Tunnelblick 是一个开源、免费的 Mac 版 open VPN 客户端软件。其特点是体积小,相比官方的软件而言。

下载之后进行安装,安装方式非常简单,直接将上边生成的配置文件下载到本地,双击 client.ovpn即可自动安装到 Tunnelblick 客户端当中,添加之后的配置可以在界面中查看,如下:

 

权限细分:

主要是参考官方的文档:https://openvpn.net/community-resources/how-to/

Configuring client-specific rules and access policies

Suppose we are setting up a company VPN, and we would like to establish separate access policies for 3 different classes of users:

  • System administrators — full access to all machines on the network
  • Employees — access only to Samba/email server
  • Contractors — access to a special server only
Class Virtual IP Range Allowed LAN Access Common Names
Employees 10.8.0.0/24 Samba/email server at 10.66.4.4 [variable]
System Administrators 10.8.1.0/24 Entire 10.66.4.0/24 subnet sysadmin1
Contractors 10.8.2.0/24 Contractor server at 10.66.4.12 contractor1, contracter2

 

 

参考:

1)https://forums.openvpn.net/viewtopic.php?t=28261

2)https://www.linuxprobe.com/centos7-config-openvpn-one.html

3)https://www.linuxprobe.com/centos7-config-openvpn-two.html

4)https://wiki.eryajf.net/pages/3809.html

5)https://openvpn.net/community-resources/how-to/

6)https://blog.dianduidian.com/post/openvpn%E4%BD%BF%E7%94%A8mysql%E8%AE%A4%E8%AF%81/

7)https://6xyun.cn/article/97

8)https://mp.weixin.qq.com/s/ibJ6JsTAaM72dLPODsfdNQ

9)https://www.cnblogs.com/panda-xin/p/15740987.html

 OpenVPN-2.4.11-基于MySQL用户认证
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
Scroll to top
0
Would love your thoughts, please comment.x
()
x