分类: LINUX
2016-11-04 18:08:50
openvpn通过mysql数据库结合验证,先下载pam_mysql,编译安装./configure && make && make install<--------安装完成模块是在/usr/lib/security
然后在/lib/security目录做一个软连接:ln -s /usr/lib/security/pam_mysql.so /lib/security
64位系统在/lib64/security目录做软链接:ln -s /usr/lib/security/pam_mysql.so /lib64/security
然后在/etc/pam.d,创建一个名位openvpn的文件,名称是对应需要验证的服务,添加如下语句:
auth optional pam_mysql.so user=openvpn passwd=PASSWORD host=localhost db=openvpn
table=vpnuser usercolumn=username passwdcolumn=password where=active=1 crypt=0
account required pam_mysql.so user=openvpn passwd=PASSWORD host=localhost db=openvpn
table=vpnuser usercolumn=username passwdcolumn=password where=active=1 crypt=0
具体的其他参数参考pam_mysql源码里面的README文件
接下来,登入数据库创建openvpn数据库和用户和密码和表:
mysql> create database openvpn;
mysql> GRANT ALL ON openvpn.* TO openvpn@localhost IDENTIFIED BY ‘PASSWORD’;
mysql> FLUSH PRIVILEGES;
mysql> use openvpn;
mysql> CREATE TABLE vpnuser (
-> username char(20) NOT NULL,
-> password char(128) default NULL,
-> active int(10) NOT NULL DEFAULT 1,
-> PRIMARY KEY (username)
-> );
mysql> INSERT INTO vpnuser (username,password) values(‘somebody’,password(‘secret’));
然后就可以使用saslauthd验证数据库的用户:
saslauthd -a pam
testsaslauthd -u somebody -p secret -s openvpn<-----参数-s是指调用pam openvpn也就是上面创建的openvpn文件去查询数据库 如果看到 0: OK "Success." 那就是验证成功,如果出现authxxxx fail,请检查一下,数据库的密码段是使用那种加密算法,0是明文保存,2是使用mysql的PASSWORD function加密,3是使用md5,可以在mysql调整,例如: update vpnuser set password=('xxxx') where username='somebody';<---使用明文设置密码 update vpnuser set password=PASSWORD('xxxx') where username='somebody';<-----使用mysql的PASSWORD function加密设置密码 update vpnuser set password=md5('xxxx') where username='somebody';<------使用md5加密设置密码 然后在openvpn文件,调整crypt字段,如果想查看密码是使用什么加密方式,可以使用如下: mysql> select encrypt(‘foo’);
+—————-+
| encrypt(‘foo’) |
+—————-+
| cDg5Poigmf1wI |
+—————-+
1 row in set (0.05 sec)
mysql> select password(‘foo’);
+——————————————-+
| password(‘foo’) |
+——————————————-+
| *F3A2A51A9B0F2BE2468926B4132313728C250DBF |
+——————————————-+
1 row in set (0.00 sec)
mysql> select md5(‘foo’);
+———————————-+
| md5(‘foo’) |
+———————————-+
| acbd18db4cc2f85cedef654fccc4a4d8 |
+———————————-+
1 row in set (0.00 sec)
==========================================
接下来编译openvpn的pam模块,进入openvpn源码包:
cd openvpn/plugin/auth-pam && make
cp openvpn-auth-pam.so /openvpn/lib
然后编辑server.conf,添加:
#auth from pam
plugin /openvpn/lib/openvpn-auth-pam.so openvpn
client-cert-not-required
username-as-common-name
服务器端,到此就配置好了,接下来就是客户端,修改client.conf
将原来的
cert client.crt
key client.key
注销掉,并添加
auth-user-pass
然后链接确认,把ca.crt 放到你的网站让用户下载吧,以后只需要在 MySQL 表格中添加记录就可以开帐号了!
注:如果遇到saslauthd可以验证,而openvpn不能验证,下载补丁,改名成patch.in,并再次编译安装pam_mysql就可以了!log查看:/var/log/messages和/var/log/secure