2009-11-09

OpenVPN auth over LDAP--實做

繼前一篇的[OpenVPN–純架設-by ssl],已將vpn的啟用與設定測試成功…接下來,為了方便認證vpn的使用者為學校的教職員工,故要把vpn的認證方式(auth)從單純的ssl憑證改為校內LDAP-SERVER的認證

當然,這也是為何我會拿openvpn來架vpn-server的主因,因為,他有人家寫好的OpenVPN-auth-ldap的plugin…

主要參考網頁
  1. Google-Project-openvpn-auth-ldap
  2. OpenVPN on Linux Mysql LDAP 驗證
網路上這方面的資料也不多,就連國外的資料也少少,一大堆人只是把問題丟上去…也沒看幾個人回應,所以參考網頁只是參考…不代表你一定得照著做

如前篇,VPN auth over LDAP也一樣有幾個重點步驟
  1. openvpn-auth-ldap的compile環境
  2. 把openvpn-auth-ldap給plugin上openvpn,還要編寫auth_ldap.conf
  3. testplugin auth_ldap.con的測試
  4. client的config修改

[1. openvpn-auth-ldap的compile環境]
這方面是我認為最麻煩的地方,先確認自己電腦是否安裝了libgcc/gcc/gcc-objc/gcc-c++
粗體的那一個最重要,因為沒它你就不能compile openvpn-auth-ldap的config

確定安裝的套件之後,接著就是到參考網頁1下載openvpn-auth-ldap的source下來,利用[tar -zxvf]來解壓後進入該資料匣,利用以下指令
[linux/auth-ldap-2.0.3#./configure --prefix=安裝路徑 --with-openvpn=openvpn-source-file的路徑]
--prefix=安裝路徑-->你不使用這個參數也行,只是他會用他預設的路徑去安裝,但我們要有一個觀念,自己安裝的東西最好統一,比較好找
--with-openvpn=openvpn-source-file的路徑--->這個一定要有,因為它要用openvpn的一些東東(廢話),注意,他要指定的是你用來安裝openvpn的source-file路徑,不是你電腦openvpn安裝的路徑唷(就上openvpn官網抓符合的版本source下來解壓就對了)

configure結束,就可以執行[make && make install],如果你上面的東西都ok的話,應該可以幸運的結束…

不過,請注意,在make install時我發生了一個問題,openvpn-auth-ldap的安裝程式他不會去自己create指定路徑下的一些資料匣,所以,如果有發現在install時程式說什麼lib/openvpn-auth-ldap.so找不到之類的…建議,先按他提示的把資料匣先建好,再來[make install]一次…然後再到你指定安裝的路徑看一下lib/src/tools底下有沒有東西…不過基本上,我的安裝是只有在lib底下發現openvpn-auth-ldap.so,但實際上,應該src/tools中也要有東西,像src底下要有一個testplugin的程式…若沒有,就到source-file的src底下拷就行了,因為會用到

再來最後把openvpn-auth-ldap-source-file底下auth_ldap.conf拷貝到你指定的openvpn-auth-ldap路徑底下
然後把openvpn-auth-ldap安裝路徑/lib/openvpn-auth-ldap.so拷貝或做shortcut到/usr/lib/openvpn/plugin/lib/底下…就結束重點步驟1
[2. 把openvpn-auth-ldap給plugin上openvpn,還要編寫auth_ldap.conf]
這裡分二個小步驟:
  1. 把openvpn-auth-ldap plugin on openvpn
    只要開啟openvpn的server.conf,在檔尾加上
    [plugin /usr/lib/openvpn/plugin/lib/openvpn-auth-ldap.so "/openvpn-auth-ldap install path/auth_ldap.conf"]

    [client-cert-not-required]
    就可以了,記得重啟openvpn
  2. 編寫auth_ldap.conf
    這個檔案,只有你有玩過ldap的人應該就能明白什麼東西該填什麼
    只有二個重點
    a. 如果你ldap不走TLS加密的話,請得,auth_ldap.conf中的TLSEnable給remark或後面用no
    b. 不需要group search,就把Authorization中的Group註解,不然會影響ldap_bind
[3. testplugin auth_ldap.con的測試]
這裡十分簡單…也是測試你auth_ldap.conf有沒有寫錯的好時間
利用重點步驟1上說的[./path/testplugin /path/auth_ldap.conf]來測試
[4. vpn-client的config修改]
這一點也十分簡單

編輯client.conf

把[cert xxx.crt]跟[key xxx.key]給disable

然後在檔尾加上[auth-user-pass]
以上四點做完後,最好再次確認opevpn-server有沒有重新啟動…

ok的話,就可以在client端(windows xp)利用openvpn-win-gui來connect,如果你client正確的話,應該馬上就會出現一個對話視窗要你輸入使用者帳號及密碼…我做的方式是指定學校教職員工的mail帳密,如果你auth_ldap.conf設定正確的話,輸入正確的帳號密碼,應該就會by pass…

(怎麼指定是[教職員工],這就是要在auth_ldap.conf的Authorization裡,屬於people的SearchFilter中去寫判斷)

4 則留言:

平凡人的想像 提到...

感謝你的文章,想請教是不是有這樣的可能,不同群組分配不同 VPN IP ?

死狐狸 提到...

當然是可以的…

雖然我有一段時間沒碰了…

但印象中,client會得到的ip是依照連入的server的位置來區分的…

也就是說,如果你想用n個群組來分,基本上,你的server的config中bind的port就要有n個…

然後每一個群組就連入特定的port,這樣就可以分了…

平凡人的想像 提到...

其實我有找到資料是分配靜態 ip 的方式,我也有試過,但如果同1個群組有1個以上連線的話,就會互搶連線,所以在想有沒有辦法分配動態 ip

死狐狸 提到...

在http://cheaster.blogspot.tw/2009/11/openvpn-by-ssl.html
裡面的設定方式就是client是dhcp取得由vpn server放出來的ip

而且,我印象中,openvpn大部份的文章都是該client以dhcp的方式取得vpn的ip