配置openvpn基于证书+密码认证(二)

这里在基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)基础上进行配置

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_yjun89的博客-CSDN博客

配置openvpn基于证书+密码认证

我们这里基于密码认证使用pam认证,需要使用到MySQL,下面下来安装MySQL。

1、安装MySQL:

1.1、安装MySQL的源:

[root@localhost ~]# rpm -Uvh https://repo.mysql.com/mysql57-community-release-el7.rpm

Retrieving https://repo.mysql.com/mysql57-community-release-el7.rpm

warning: /var/tmp/rpm-tmp.mQKDO8: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY

Preparing...                          ################################# [100%]

Updating / installing...

   1:mysql57-community-release-el7-11 ################################# [100%]

[root@localhost ~]#

1.2、删除mariadb:

[root@localhost ~]# rpm -e --nodeps `rpm -qa| grep mariadb`

1.3、安装MySQL 7:

[root@worker02 yum.repos.d]# yum install mysql-community-server mysql-community-devel -y

报错提示:

The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.

Check that the correct key URLs are configured for this repository.

解决方法:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

或者安装的时候不校验数字签名:

yum -y install mysql-server --nogpgcheck--nogpgcheck

1.4、启动MySQL,并找出默认密码:

[root@slb1 openvpn-2.5.7]# systemctl start mysqld

[root@slb1 openvpn-2.5.7]# grep 'pass' /var/log/mysqld.log

2022-10-31T22:53:22.400570Z 1 [Note] A temporary password is generated for root@localhost: 3rhhd?WE9&uv

[root@slb1 openvpn-2.5.7]#

1.5、连接进入MySQL,修改密码:

[root@slb1 openvpn-2.5.7]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.7.40

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql> set global validate_password_policy=0;

Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=1;

Query OK, 0 rows affected (0.00 sec)

mysql> alter user root@'localhost' identified by 'yjun#123';

Query OK, 0 rows affected (0.00 sec)

mysql>

1.6先创建OpenVPN需要使用到的数据库和连接数据库的用户,数据库名称设置为openvpn,连接数据库的用户为vpn,用户密码设置为vpnadmin,然后再数据库中插入连接vpn的用户,操作如下

1.6.1 创建OpenVPN所使用是数据库和连接数据库的账号

mysql> create database openvpn;

mysql> grant all on openvpn.* to vpn@localhost identified by 'vpnadmin';

mysql> flush privileges;

1.6.2、在创建在好的openvpn库中创建表,别名设置为vpnuserta

mysql> use openvpn;

mysql> create table vpnuserta (name char(50) NOT NULL,password char(200) default null,active int(10) not null default 1,primary key (name));

1.6.3  在表中插入用户:

mysql> insert into vpnuserta (name,password) values('qd',password('qd123'));

mysql> insert into vpnuserta (name,password) values('test1',password('123456'));

mysql> desc vpnuserta;

2、安装基于pam认证的插件,安装pam-mysql

2.1、下载网站

https://github.com/NigelCunningham/pam-MySQL/tags

下载包地址:

https://codeload.github.com/NigelCunningham/pam-MySQL/tar.gz/refs/tags/v0.8.1

2.2 安装依赖关系:

[root@localhost ~]# yum install autoconf libtool make gcc mysql-community-devel pam-devel -y

2.3、上传下载的安装包至系统:

[root@localhost ~]# rz

rz waiting to receive.

Starting zmodem transfer.  Press Ctrl+C to cancel.

Transferring pam-MySQL-0.8.1.tar.gz...

  100%      48 KB      48 KB/sec    00:00:01       0 Errors 

[root@localhost ~]#

2.4、解压tar包:

[root@localhost ~]# tar xf pam-MySQL-0.8.1.tar.gz

[root@localhost ~]# cd pam-MySQL-0.8.1

[root@localhost pam-MySQL-0.8.1]#

2.4.1. 生成pam-mysql的configure配置文件,用于配置编译和安装参数

[root@localhost pam-MySQL-0.8.1]# libtoolize

[root@localhost pam-MySQL-0.8.1]# aclocal

[root@localhost pam-MySQL-0.8.1]# autoheader

[root@localhost pam-MySQL-0.8.1]# autoreconf -f -i

2.5. Run "./configure". 可能需要下面的一些参数进行配置:

[root@localhost pam-MySQL-0.8.1]# ./configure --with-pam-mods-dir=/usr/lib64/security/

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

..............................................................................................

config.status: executing depfiles commands

config.status: executing libtool commands

[root@localhost pam-MySQL-0.8.1]#

2.6. 运行make命令构建模块

[root@localhost pam-MySQL-0.8.1]# make

make  all-am

make[1]: Entering directory `/root/pam-MySQL-0.8.1'

................................................................................

make[1]: Leaving directory `/root/pam-MySQL-0.8.1'

[root@localhost pam-MySQL-0.8.1]#

2.7. 运行 "make install" 安装module.

[root@localhost pam-MySQL-0.8.1]# make install

make[1]: Entering directory `/root/pam-MySQL-0.8.1'

..............................................................................

 /usr/bin/mkdir -p '/usr/lib64/security/'

 /bin/sh ./libtool   --mode=install /usr/bin/install -c   pam_mysql.la '/usr/lib64/security/'

libtool: install: /usr/bin/install -c .libs/pam_mysql.so /usr/lib64/security/pam_mysql.so

..............................................................................................

make[1]: Leaving directory `/root/pam-MySQL-0.8.1'

[root@localhost pam-MySQL-0.8.1]#

3、生成openvpn pam验证配置文件连接数据库

创建openvpn pam验证配置文件

[root@worker02 pam_mysql-0.7RC1]# vim /etc/pam.d/openvpn_mysql

添加以下内容

auth sufficient pam_mysql.so user=vpn passwd=vpnadmin host=localhost db=openvpn table=vpnuserta usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2

account required pam_mysql.so user=vpn passwd=vpnadmin host=localhost db=openvpn table=vpnuserta usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2

保存退出

注意:这里的pam_mysql.so是调用/usr/lib64/security/目录下的pam_mysql.so如果编译安装pam_mysql时放在其他目录下会导致认证失败。

查看系统日志:  tail  /var/log/messages:

4、修改OpenVPNserver端的配置文件,启用用户名和密码认证和pam的认证:

配置文件/etc/server.conf配置,配配置文件中增加如下参数:

username-as-common-name              #启用用户名密码进行认证

plugin /usr/local/openvpn/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn_mysql          #调用MySQL插件

修改后如下

port 1194

监听端口

proto tcp

监听协议

dev tun

采用路由隧道模式

ca /etc/openvpn/ca.crt

ca证书路径

cert /etc/openvpn/server.crt

服务器证书

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

服务器秘钥

dh /etc/openvpn/dh.pem

密钥交换协议文件

server 10.88.0.0 255.255.255.0

给vpn客户端分配地址池,注意:不能和VPN服务器内网网段有相同

ifconfig-pool-persist ipp.txt

push "10.88.0.0 255.255.255.0" 

通告分配给客户端的网络,还需要通告内网的网段,如果不通告内网网段,那么客户端接入后将无法访问内网中的主机

push "172.16.10.0 255.255.255.0"           

 通告企业总部内部网段,这样客户端接入后才可以访问总部内网中的主机

push "redirect-gateway def1 bypass-dhcp"

给网关

push "dhcp-option DNS 8.8.8.8"

dhcp分配dns

client-to-client

VPN客户端之间互相通信

keepalive 10 120

存活时间,10秒ping一次,120 如未收到响应则视为断线

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

开启TLS-auth,使用ta.key防御攻击,拒绝服务攻击的证书文件.服务器端的第二个参数值为0,客户端的为1

cipher AES-256-GCM

加密模式,默认使用CBC,需要改为GCM模式

comp-lzo

传输数据压缩

max-clients 100

最多允许 100 客户端连接

persist-key

persist-tun

status openvpn-status.log

log         /var/log/openvpn.log

verb 3

username-as-common-name             

#启用用户名密码进行认证

plugin /usr/local/openvpn/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn_mysql         

#调用MySQL插件

5、在OpenVPN客户端配置文件也需要增加如下参数,就是启用用户和密码认证:

修改客户端安装路径config目录下的client.opvn配置文件,在最后增加

auth-user-pass

修改后完整如下:

client

dev tun

proto tcp

remote 113.65.10.1 33808

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-GCM

comp-lzo

verb 3

auth-nocache

auth-user-pass

6、点开openvpn客户端:

如下需要使用用户密码进行认证:

连接完成后:

猜你喜欢

转载自blog.csdn.net/yjun89/article/details/131353605