OpenVPN 实战3:OpenVPN+MySQL 实现用户登录认证
大纲
一、前言
二、概述
三、具体配置过程
四、总结
注,实战环境 CentOS 5.5 x86_64,软件版本 OpenVPN 2.1,软件下载:http://yunpan.cn/QzT8fGsX8S75a 访问密码 e8e4。
一、前言
在上一篇博客中我们提出一个问题,下面我们来回顾一下:
前面做的实验都是由服务端先生成客户端证书,然后分发到客户端上,让客户端通过证书连接到服务器上。但有时候,这样的分发是比较麻烦的(也不安全)。这样,我们可以考虑另外一种方式: 只在服务端制作客户端证书,而客户端只需要有ca.crt文件,而不需要拿到客户端证书,当登陆服务器的时候是通过用户名和密码即可登录OpenVPN服务器。在这一篇博客中我们和大家解决这个问题,嘿嘿!
二、概述
在这里简单的和大家先说一下实验步骤:
1.安装相关软件包
mysql服务器
PAM组件(pam_mysql)
sasl
2.创建OpenVPN使用的数据库与表
3.创建测试用户
4.配置PAM mysql认证模块
5.测试pam_mysql是否工作正常
6.配置OpenVPN服务器及客户端配置文件
7.测试连接
注,本文的配置过程紧接着上一篇博文,不清楚的博友可以先看上一篇博文。
三、具体配置过程
1.安装相关软件包
mysql服务器
PAM组件(pam_mysql)
sasl
[root@gateway ~]# yum install -y mysql mysql-devel [root@gateway ~]# yum install -y pam_krb5 pam_mysql pam pam-devel [root@gateway ~]# yum install -y cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-lib cyrus-sasl-gssapi
2.创建OpenVPN使用的数据库与表
[root@gateway ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 65 Server version: 5.0.37-log Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 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> create database vpn; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | vpn | +--------------------+ 4 rows in set (0.02 sec) mysql> use vpn; mysql> CREATE TABLE vpnuser ( name char(20) NOT NULL, password char(128) default NULL, active int(10) NOT NULL DEFAULT 1, PRIMARY KEY (name) ); mysql> show tables; +---------------+ | Tables_in_vpn | +---------------+ | vpnuser | +---------------+ 1 row in set (0.00 sec)
3.创建测试用户
[root@gateway ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 65 Server version: 5.0.37-log Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 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> insert into vpnuser (name,password) values(‘user1‘,password(‘123456‘)); mysql> insert into vpnuser (name,password) values(‘user2‘,password(‘123456‘)); mysql> insert into vpnuser (name,password) values(‘user3‘,password(‘123456‘)); mysql> select * from vpnuser; +-------+-------------------------------------------+--------+ | name | password | active | +-------+-------------------------------------------+--------+ | user1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1 | | user2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1 | | user3 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 1 | +-------+-------------------------------------------+--------+ 3 rows in set (0.00 sec) 注,我这里创建三个测试用户。
4.配置PAM mysql认证模块
[root@gateway ~]# vim /etc/pam.d/openvpn auth required pam_mysql.so user=vpn passwd=vpn123 host=127.0.0.1 db=vpn \ table=vpnuser usercolumn=name passwdcolumn=password \ where=active=1 sqllog=0 crypt=2 account required pam_mysql.so user=vpn passwd=vpn123 host=127.0.0.1 db=vpn \ table=vpnuser usercolumn=name passwdcolumn=password \ where=active=1 sqllog=0 crypt=2 #crypt(0) -- Used to decide to use MySQL‘s PASSWORD() function or crypt() #0 = No encryption. Passwords in database in plaintext. NOT recommended! #1 = Use crypt #2 = Use MySQL PASSWORD() function
5.测试pam_mysql是否工作正常
[root@gateway ~]# /etc/init.d/saslauthd start 启动 saslauthd: [确定] [root@gateway ~]# chkconfig saslauthd on [root@gateway ~]# chkconfig saslauthd --list saslauthd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 [root@gateway ~]# testsaslauthd -u user1 -p 123456 -s openvpn 0: OK "Success."
注,如果出现: 0: OK “Success.”, 表示测试成功。如果出现错误可以从系统日志及安全日志里看到出错信息,系统日志: /var/log/messages与安全日志: /var/log/secure。
6.配置OpenVPN服务器及客户端配置文件
1).增加openvpn认证模块
[root@gateway openvpn]# cd /etc/openvpn/ [root@gateway openvpn]# ls | grep openvpn-auth-pam openvpn-auth-pam.so
注,这个认证模块我已经上传到云盘了,需要的朋友自行下载。
2).修改server.conf配置文件
[root@gateway openvpn]# vim server.conf port 1194 proto udp dev tap ca ca.crt cert server.crt key server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 push "route 192.168.189.0 255.255.255.0" ;client-to-client keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb 3 push "dhcp-option DNS 10.8.0.1" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" plugin ./openvpn-auth-pam.so openvpn #申明openvpn使用的插件, openvpn为插件参数,和pam_mysql的service name是一样的 client-cert-not-required #不请求客户的CA证书, 使用用户名/密码验证 (本配置中没指定, 使用双重认证, 证书和密码验证) log openvpn.log
3).修改客户端配置文件
client dev tap proto udp remote *.*.*.* 1194 #公网IP resolv-retry infinite nobind persist-key persist-tun ca 146\\ca.crt cert 146\\client1.crt key 146\\client1.key ns-cert-type server comp-lzo verb 3 auth-user-pass #在客户端配置文件中加入中加入这一行,重新启动客户端连接到vpn server时就需要输入用户名和密码了。
注,下面我们来连接测试一下!
7.测试连接
好了,到这里我们的配置就全部完成了,嘿嘿!
四、总结
1.问题说明(有关openvpn的PAM认证插件)
OpenVPN 2.1以上的OpenVPN的openvpn-auth-pam.so都会出现验证错误的问题,这里需要我们重新编译一个低版本的,我这里用2.0.7的,大家也可以使用2.0.9版本的。大家可以在云盘中自行下载。
2.在配置OpenVPN的同时大家得注意配置iptables防火墙,有时候连接不上OpenVPN大多数是因为防火墙的问题。
好了,今天的博客就到这里了,最后希望大家有所收获^_^……
本文出自 “Share your knowledge …” 博客,请务必保留此出处http://freeloda.blog.51cto.com/2033581/1407025
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。