OpenVPN使用帳號密碼認證

如果安裝好OpenVPN其實可以使用他預設的製作金鑰來連線,但是要新增帳號或者管理帳號這部分就比較麻煩,所以還是用帳號密碼做管理比較容易

首先先安裝以下編譯程式需要的日常庫
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers -y

下面安装pam组件
yum install pam_krb5 pam_mysql pam pam-devel -y

我們需要安裝mysql服務器
yum install mysql mysql-server mysql-devel mysql-libs -y

登錄mysql建立一個驗證用的測試數據庫,添加使用者帳號
mysql -u root -p

mysql> create database vpn;
mysql> GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY ‘vpn123’;
mysql> flush privileges;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> insert into vpnuser (name,password) values(‘user1’,password(‘123456’));

在/etc/pam.d/下建立一個配置文件
vim /etc/pam.d/openvpn

輸入以下內容並保存
auth sufficient pam_mysql.so user=vpn passwd=vpn123 host=localhost 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=localhost 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

現在可以測試pam_mysql是否工作正常,但這個動作之前需要安裝sasl
yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-lib cyrus-sasl-gssapi -y

測試是否成功

saslauthd -a pam
saslauthd -a pamtestsaslauthd -u user1 -p 123456 -s openvpn

如果成功,顯示 0: OK 「Success.」,pam_mysql工作正常了,下面可以開始配置OpenVPN服務器了。

這裡需要有一部非常重要的步驟,2.1以上的OpenVPN的openvpn-auth-pam.so都會出現驗證錯誤的問題,這裡需要我們重新編譯一個低版本的,我這裡用2.0.7的,大家也可以使用2.0.9版本的。
cd /etc/openvpn
mkdir tmp
cd tmp
wget http://kttsite.com/download/openvpn-2.0.7.tar.gz
tar zxvf openvpn-2.0.7.tar.gz
cd openvpn-2.0.7
./configure
cd plugin/auth-pam/
make
cp openvpn-auth-pam.so /etc/openvpn/

之後在伺服器端的conf檔中加入以下
client-cert-not-required
username-as-common-name
#這裡是指定openvpn-auth-pam.so這個插件
plugin ./openvpn-auth-pam.so openvpn

客戶端的conf檔
client
dev tun
proto udp
remote (伺服器IP) (伺服器port)
cipher (所使用的加密)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
verb 3

如果要讓客戶端連線時自動輸入帳號密碼可以在客戶端conf中的auth-user-pass結尾加上檔案名稱+副檔名
auth-user-pass account.txt
並在同一個目錄底下新增一個account的txt檔
在第一行打上帳號,第二行打上密碼儲存即可

發表迴響