歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> OpenVPN 使用“用戶名/密碼”登錄驗證

OpenVPN 使用“用戶名/密碼”登錄驗證

日期:2017/2/28 15:59:22   编辑:Linux教程
使用這種方法在客戶端需要"ca.crt、ta.key"和配置文件。
服務端需要"dh1024.pem、openvpn-auth-pam.so、ca.crt"服務端的證書和私鑰以及配置文件。
服務端也並不需要ca.key,生成證書時需要。

openvpn-auth-pam.so由OpenVPN的plugin/auth-pam/目錄下的文件生成。
ta.key使用OpenVPN生成:openvpn --genkey --secret keys/ta.key。是為了防止惡意攻擊(如DoS、UDP port flooding),生成的一個"HMAC firewall"。

別的文件都是由easy-rsa目錄下的腳本生成的(都是使用openssl生成的)。
dh1024.pem:Diffie-Hellman文件,SSL/TLS server需要使用的一個文件。腳本:build-dh。

證書的有效期我的試驗是最長30年。
./build-key-server 設100年出來的是1970年,設50年出來的是"Bad time value"設40年,出來的是13年,設20年,正確;30年正確;35年13年

Server端配置

首先檢查pam-devel包是否安裝,否則從系統盤安裝改軟件包
[root@vpn ~]# rpm -qa | grep pam
pam_smb-1.1.7-3.1
pam-0.77-40
pam_krb5-2.0.10-1
pam-devel-0.77-40
[root@vpn ~]#

檢查Mysql是否安裝,確認mysql-devel包已經安裝,否則從系統盤安裝改軟件包
[root@vpn ~]# rpm -qa | grep mysql
mysql-3.23.58-9
mysql-server-3.23.58-9
mysql-devel-3.23.58-9
[root@vpn ~]#
安裝
在"添加或刪除軟件包"中選上"SQL數據庫服務器"的全部內容,安裝,用rpm -qa | grep mysql查詢,無mysql-devel包。
mysql-devel包在RedHat 9.0第二張光盤上,RedHat/RPMS/mysql-devel-3.23.54a-11.i386.rpm。

為了能使用OpenVPN的PAM驗證插件,我們安裝pam_mysql使用MySQL數據庫存儲用戶數據,其它數據庫可以找相應的PAM驗證模塊
[root@vpn ~]# wget
[root@vpn ~]# tar -zxvf pam_mysql-0.5.tar.gz
[root@vpn ~]# cd pam_mysql
[root@vpn ~]# ./configure
[root@vpn ~]# make
[root@vpn ~]# cp pam_mysql.so /lib/security/
我下載的是pam_mysql-0.7RC1.tar.gz。
make時md5.h報錯。
解決方法是
./configure --with-openssl
pam_mysql.so在.libs目錄下,.libs為隱藏目錄。

配置數據庫
以管理員身份登錄數據庫
mysql> create database vpn;
創建數據庫vpn。
mysql> GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY 'vpn123';
授權localhost上的用戶vpn(密碼vpn123)有對數據庫vpn的所有操作權限。
mysql> flush privileges;
更新sql數據庫的權限設置。
mysql> use vpn;
使用剛創建的的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> insert into vpnuser (name,password) values('elm',password('elm'));

命令解釋:
#創建vpn用戶,對vpn這個database有所有操作權限,密碼為vpn123
#active不為1,無權使用VPN
#增加用戶 用戶名:elm 密碼:elm

輸入mysql報:
ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/etc/rc.d/init.d/mysqld status會告訴mysql的運行狀態,如果沒有運行,執行下列命令:
/ect/rc.d/init.d/mysqld start
測試: mysql
如果成功,屏幕顯示
>mysql
上面兩條命令也可以是:
service mysqld status
service mysqld start
/etc/init.d/是指向/etc/rc.d/init.d的符號鏈接。
這一目錄下的文件是腳本文件。
也可以使用"系統設置/服務器設置/服務"來設置。
自動啟動mysqld,運行chkconfig把MySQL添加到系統的啟動服務組裡面去。
# /sbin/chkconfig --del mysqld
# /sbin/chkconfig --add mysqld
都可以使用可視化界面來配置。
Copyright © Linux教程網 All Rights Reserved