修改服務端配置
修改OpenVPN服務端配置文件server.conf,執行以下命令:
$ vim /etc/openvpn/server.conf # 打開server.conf配置文件編輯 在配置文件server.conf的末尾追加下面的配置信息。 # use username and password login # 新加此行,開啟密碼驗證腳本 auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env # 加上client-cert-not-required代表只使用用戶密碼方式驗證登錄,不加則代表需要證書和用戶名密碼雙重驗證登錄 client-cert-not-required # 新加此行,使用客戶提供的UserName作為Common Name username-as-common-name # 該指令提供對OpenVPN使用外部程序和腳本的策略級別的控制。較低的 水平 值更具限制性,較高的值更寬松。級別設置 # 0- 完全不調用外部程序。 # 1- (默認)僅調用內置可執行文件,例如ifconfig,ip,route或netsh。 # 2- 允許調用內置的可執行文件和用戶定義的腳本。 # 3- 允許通過環境變量將密碼傳遞給腳本(可能不安全)。 # 特別注意如果沒有這個配置項會導致服務端校驗密碼時無法獲取到密碼,導致校驗失敗 script-security 3
增加密碼驗證腳本
$ vim /etc/openvpn/checkpsw.sh

#!/bin/sh ########################################################### # checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se> # # This script will authenticate OpenVPN users against # a plain text file. The passfile should simply contain # one row per user with the username first followed by # one or more space(s) or tab(s) and then the password. ########################################################### PASSFILE="/etc/openvpn/user_passwd.txt" LOG_FILE="/var/log/openvpn/openvpn-login.log" TIME_STAMP=`date "+%Y-%m-%d %T"` if [ ! -r "${PASSFILE}" ]; then echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE} exit 1 fi CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}` if [ "${CORRECT_PASSWORD}" = "" ]; then echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE} exit 1 fi if [ "${password}" = "${CORRECT_PASSWORD}" ]; then echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE} exit 0 fi echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE} exit 1
為密碼驗證腳本checkpsw.sh添加可執行性權限,執行以下命令:
# chmod +x /etc/openvpn/checkpsw.sh
配置賬號密碼文件
配置賬號/密碼文件user_passwd.txt的內容,新增賬號/密碼到這個文件,一行一個賬號,賬號密碼用空格隔開:
注:密碼需要使用字母加數字,特殊字符等,且不能以數字開頭
$ vim /etc/openvpn/user_passwd.txt # 編輯賬號密碼文件,添加以下內容 eddieeo c123456@ # 修改賬號密碼文件的訪問權限,第一是為了安全起見,第二是啟動OpenVPN服務端的用戶(默認是openvpn用戶)必須對賬號密碼文件具有可讀權限 $ cd /etc/openvpn/ $ chmod 400 user_passwd.txt $ chown openvpn.openvpn user_passwd.txt
重啟openvpn服務
$ systemctl restart openvpn@server
客戶端配置
修改客戶端配置
這里以 Windows 客戶端為例,編輯客戶端軟件 OpenVPN GUI 安裝路徑下的config目錄里名為 *.ovpn 結尾的配置文件,修改文件內容如下:
# 注釋掉客戶端密鑰認證方式 ;cert laptop.crt ;key laptop.key # 新增賬號/密碼驗證方式 auth-user-pass
測試連接
編輯完保存好配置文件,使用管理員身份打開客戶端程序OpenVPN GUI ,嘗試重新連接OpenVPN服務端,可以看到彈出登陸框,輸入賬號和密碼進行驗證,如下圖所示:
客戶端添加賬號密碼文件省去手動輸入賬號密碼
如果客戶端需要記住賬號/密碼,以Windows客戶端 OpenVPN GUI 為例,可以在客戶端安裝路徑下的config目錄里修改 *.ovpn 配置文件的配置,添加指定賬號密碼文件login.conf
auth-user-pass login.conf
然后在客戶端安裝路徑下的config目錄里新增login.conf
文件,賬號密碼使用換行符分隔,內容如下:
user
a123456
轉載自:https://eddieeo.github.io/2017/05/30/f6c8d148.html