原本在 certificate 的模式中,client 只要輸入 client certificate 的密碼即可! (因為帳號內定為 client certificate 中的 common name)
當然 OpenVPN 提供的驗證方法不只這種,除了上述的方式外,還可與 LDAP 或是 RADIUS 此類的遠端服務搭配來進行認證的工作,以下要介紹如何使用 LDAP 來進行認證。
全部的設定皆以上一篇為基礎,保留原有設定,並加入 LDAP 認證用的相關設定,以下是設定內容:
vpn server
# 用來認證使用者帳號密碼的 script
# 【注意】務必用「絕對路徑」指定 script 位置
# 「via-env」的目的是以使用者輸入的訊息作為 script 的參數
auth-user-pass-verify /etc/openvpn/ldap_auth.sh via-env
# 以使用者輸入的帳號為 common name
# 不用 client certificate 中的 common name
username-as-common-name
vpn client
# 以帳號密碼的方式進行認證
auth-user-pass
接著以下是 ldap_auth.sh 的內容:
然後要讓此 script 讓 others 可以有執行(x)的權限,如此一來 LDAP 認證應該就可以正常進行了。#!/bin/sh
# LDAP Server 的位址
LDAP_HOST=ldap.example.com
# 檢查輸入是否有錯誤
if [ "$username" = "anonymous" || "$username" = "Anonymous" || -z "$username" || -z "$password" ] ; then
exit 1;
fi
# 查詢 LDAP Server 中的帳號密碼資訊
ldapwhoami -x -h $LDAP_HOST -D uid=$username,ou=users,dc=example,dc=com -w $password
if [ "$?" = "0" ]; then
exit 0;
else
exit 1;
fi
exit 1;
假設只要進行 LDAP 的帳號密碼認證就好呢?
或許有人會有這種疑問吧? 或是我多慮了........? @_@...算了,不重要...
如果要取消 client certificate 的密碼認證,只要在 vpn server 中加入以下設定:
# 不需 client certificate 相關資訊並在 vpn client 中將以下兩行註解:
client-cert-not-required
cert keys/vpn_client_cert.pem如此一來,只要輸入 LDAP 的帳號密碼就可以完成認證囉!
key keys/vpn_client_key.pem
實作心得感想
為了搞這個整整花了我一天,測試半天,中間一直出錯,但一直找不到錯誤原因........
結果發現加入設定「verb 6」可以變成 debug mode,如此一來顯示出來的訊息就相當詳細了!(當然不值得看的訊息也一堆啦......@_@) debug 也相對方便許多~問題也就解決了.....
OpenVPN真的是一套相當好用又免費的VPN軟體,完全不輸給需要付費的企業版軟體,client安裝檔案又小.如果要透過LDAP認證但是又只限制某些人才能使用,請問做的到嗎
回覆刪除最簡單的方法,是將能用的帳號集中在相同的 sub tree 中;不然就是要使用 OpenLDAP 的 search、filter 的方法來達成應該也是可以的!
回覆刪除