如何使用OpenVPN和PrivacyIDEA搭建雙因素認證的遠程接入
2016-02-20 19:34:21 來源: 肖磊 51CTO 評論:0 點擊:
對于公司來講,VPN遠程接入系統來滿足員工在家和出差途中訪問公司IT資源已經成為趨勢。但是,員工密碼管理意識薄弱,以及攻擊者利用社工庫進行攻擊等問題,往往給攻擊者提供了便利的渠道。使用雙因素認證體系是對密碼驗證手段非常有效的加強。當前這種安全身份驗證系統比較多,著名的就有RSA提供的安全身份認證系統。
RSA提供了完整的身份認證解決方案,特別是RSA SecurID雙因素身份認證解決方案,已成為該領域的事實標準,該解決方案以易于實現、成熟、可靠等特點在信息安全領域贏得廣泛信賴。RSA的產品覆蓋也非常的廣,除了傳統的硬件token設備,也有在智能設備上使用的軟token,非常方便。
但是對于中小型公司來講,使用RSA這種商用身份認證解決方案成本高昂。往往因為IT預算不足限制了企業對雙因素方案的選擇。
Google Authenticator項目是可用于多手機平臺的生成一次性密碼的軟件實現,包含可插拔驗證模塊(PAM)的實現。通過使用開放標準的Initiative for Open Authentication (OATH,與OAuth不同)來生成一次性密碼。支持RFC 4226文檔定義的基于HMAC的一次性密碼(HOTP)算法和由 RFC 6238文檔定義的基于時間的一次性密碼 (TOTP)算法。
隨著google-authenticator的成熟,使用openvpn和雙因素認證系統結合,讓搭建完全基于開源軟件的安全遠程接入系統成為可能。
OpenVPN是一個用于創建虛擬專用網絡(Virtual Private Network)加密通道的免費開源軟件。使用OpenVPN可以方便地在家庭、辦公場所、住宿酒店等不同網絡訪問場所之間搭建類似于局域網的專用網絡通道。
在PAM中使用Google Authenticator,提供雙因素認證已經實現。但是管理維護非常麻煩,也不直觀。用戶必須是系統賬戶,用戶修改pin碼或者生成新的token需要登陸系統,執行命令,對于小白用戶的使用有些困難,登錄系統也會有潛在的安全風險。對于管理員來講,不能使用公司現有的賬戶系統,需要在認證系統上創建管理另一套賬戶系統。
PrivacyIDEA是一個模塊化的認證系統,認證服務器。使用privacyIDEA可以增強本地登錄,VPN,遠程訪問,SSH連接,在認證期間訪問網站或門戶網站是很好使用的雙因素,提高現有應用程序的安全性。它最初被用于OTP(一次性密碼),認證設備來作為一個OTP服務器。但其他的“設備”之類的挑戰響應,SSH密鑰和X509證書也可提供。它可以運行在Linux系統并且是完全開源的。
PrivacyIDEA有著友好的管理界面。無論是管理員管理系統還是用戶自管理,都可以非常方便輕松的在Web上完成操作。PrivacyIDEA可以讀取本地文件中的用戶、數據庫中的用戶,也可以讀取LDAP中的用戶。這樣就可以完全和公司的賬戶系統聯動,非常方便。
PrivacyIDEA的HOTP、TOTP使用Google Authenticator。這樣,我們在智能手機上的使用Google Authenticator的APP將非常方便。
PrivacyIDEA提供了三種方式和OpenVPN集成。第一種,使用PAM的privacyidea_pam.py模塊。OpneVPN使用PAM認證,PAM調用privacyidea_pam.py模塊和PrivacyIDEA做驗證。第二種,直接集成OpenVPN和FreeRADIUS。OpenVPN使用radius認證,FreeRADIUS向PrivacyIDEA驗證。第三種,在OpenVPN中使用RADIUS的PAM模塊。
一、方案原理
綜合考慮我們使用第二種方式:OpenVPN+FreeRADIUS+PrivacyIDEA。這種方案非常容易排錯,通用性要好的多。
原理圖:
OpenVPN
相關步驟是首先遠端用戶發起VPN連接,提供認證信息。然后,OpenVPN向FreeRADIUS去做認證并提供用戶認證信息。接著,FreeRADIUS通過perl腳本向PrivacyIDEA驗證信息正確與否。然后,PrivacyIDEA將驗證結果發給FreeRADIUS,FreeRADIUS再將認證結果發送OpenvVPN。最后,OpenvVPN查看結果,認證成功建立連接。如果認證失敗,斷開連接,發送失敗信息。
二、軟件安裝和配置
我們在操作系統Ubuntu-Server14.04上進行具體操作。
1.安裝管理PrivacyIDEA
1.1 系統時間
TOTP是基于時間的一次性密碼,時間的一致與否直接關系到token碼和認證的成敗。所以,需要終端(手機)和privacyidea系統必須時鐘同步。
設置本地時區,開啟ntp服務。
1.2 添加PrivacyIDEA源
命令添加倉庫或者直接寫在/etc/apt/sources.list中。
- ##add-apt-repository ppa:privacyidea/privacyidea
或者:vi /etc/apt/sources.list 添加倉庫。
- deb http://ppa.launchpad.net/privacyidea/privacyidea/ubuntu trusty main
- deb-src http://ppa.launchpad.net/privacyidea/privacyidea/ubuntu trusty main
倉庫升級:apt-get update。
1.3 安裝PrivacyIDEA
- # apt-get install privacyidea-apache2
安裝成功后,需要安裝依賴包,生成一些web使用的證書。
創建privacyidea系統管理員
- #pi-manager admin add ideauser –e ideauser@gmail.com
默認系統的管理頁面:https://<you local_ip>,登錄Web界面,管理系統。
安裝完成就可以登錄管理界面,管理你的PrivacyIDEA了。
部分界面圖:
繼續……
2.安裝配置FreeRADIUS
PrivacyIDEA提供了FreeRADIUS的PrivacyIDEA版本。其實,也就是做了一些配置的FreeRADIUS。也可以直接安裝FreeRADIUS,然后在做配置。我們安裝FreeRADIUS的PrivacyIDEA版本。
2.1 安裝privacyidea-radius
- # apt-get install privacyidea-radius
FreeRADIUS配置的認證類型是Perl程序,PrivacyIDEA使用POST的方式和Perl程序交互。
默認Perl程序是/usr/share/privacyidea/freeradius/privacyidea_radius.pm。
在FreeRADIUS的配置中可以查看。
2.2 配置FreeRADIUS
配置RADIUS的clients文件。
- # vim /etc/freeradius/clients.conf
默認本機127.0.0.1是RADIUS的client,如果有其他的設備,加在clients中。
安裝完成可以先測試radius服務是否正常。
3.安裝配置OpenVPN。
3.1 安裝軟件easy-rsa方便證書的生成。
- # apt-get install easy-rsa
- # apt-get install openvpn
安裝easy-rsa,方便證書的生成。
3.2 生成證書
# 修改vars文件
cd /usr/share/easy-rsa/2.0/
vim vars
# 修改證書信息。
- export KEY_COUNTRY="CN"
- export KEY_PROVINCE="BeiJing"
- export KEY_CITY="BeiJing"
- export KEY_ORG="NetOps"
- export KEY_EMAIL=”netops@netops.com"
- export KEY_OU="netops"
# 初始化環境變量
- source vars
# 生成根證書、根密鑰、服務端證書、服務端密鑰、Diffie–Hellman key、ta.key文件。
- ./clean-all
- ./build-ca
- ./build-key-server OpenVPN
- ./build-dh
- openvpn --genkey --secret keys/ta.key
生成的證書文件會在當前目錄的keys目錄下。
3.3 配置OpenVPN
# 拷貝一份服務端配置文件到/etc/openvpn下。
- cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/
# 編輯配置文件
根據需求,修改協議、網段、證書密鑰、推送路由、DNS等。如下:
- port 1194
- proto tcp
- dev tun
- ca /usr/share/easy-rsa/2.0/keys/ca.crt
- cert /usr/share/easy-rsa/2.0/keys/server.crt
- key /usr/share/easy-rsa/2.0/keys/server.key
- dh /usr/share/easy-rsa/2.0/keys/dh2048.pem
- server 192.168.10.0 255.255.255.0
- ifconfig-pool-persist ipp.txt
- push "route 10.0.0.0 255.0.0.0"
- push "dhcp-option DNS 10.10.10.10"
- keepalive 10 120
- tls-auth /usr/share/easy-rsa/2.0/keys/ta.key 0
- comp-lzo
- persist-key
- persist-tun
- status openvpn-status.log
- log openvpn.log
- log-append openvpn.log
- verb 5
啟動OpenVPN,測試能否啟動,提早解決。
3.4 配置包轉發和防火墻
3.4.1 開啟包轉發
- # echo "1" > /proc/sys/net/ipv4/ip_forward
- # vim /etc/sysctl.conf
- net.ipv4.ip_forward = 1
3.4.2 配置防火墻
- #iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
- #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
記得保存iptables并開機自啟。
4.安裝Radiusplugin
Radiusplugin是OpenVPN支持RADIUS認證的插件。
在http://www.nongnu.org下載radiusplugin源碼包。
4.1 安裝gcc c++ libgcrypt
- # apt-get install gcc g++ libgcrypt11
4.2 編譯Radiusplugin
解壓包,進入目錄,使用命令make編譯。
4.3 配置Radiusplugin
拷貝目錄中的radiusplugin.cnf文件和radiusplugin.so文件到/etc/openvpn下。
修改radiusplugin.cnf文件。
- # vim radiusplugin.cnf
- server
- {
- acctport=1813
- authport=1812
- name=127.0.0.1
- retry=1
- wait=1
- sharedsecret=testing123
- }
sharedsecret必須和freeradius clients.conf中的sharedsecret一致。
5.再次修改OpenVPN配置文件
修改OpenVPN配置文件,客戶端使用用戶名密碼認證。OpenVPN使用RADIUS的認證方式:
5.1 修改配置文件server.conf
- # vim /etc/openvpn/server.conf
- client-cert-not-required
- username-as-common-name
- plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
6.重啟服務,測試
6.1 重啟服務
- /etc/init.d/radiusd restart
- /etc/init.d/openvpn restart
6.2 配置OpenVPN客戶端
安裝OpenVPN客戶端。下載根證書ca.crt,ta.key文件到OpenVPN安裝目錄的config目錄下,然后,配置客戶端xx.ovpn文件。
信息如下:
- client
- dev tun
- proto tcp
- remote <youipaddress> 1194
- resolv-retry infinite
- nobind
- persist-key
- persist-tun
- ca ca.crt
- ns-cert-type server
- tls-auth ta.key 1
- comp-lzo
- verb 3
- auth-user-pass
注意:客戶端如果安裝在Windows系統上,打開的時候要使用管理員權限,要不然系統不會添加VPN推送的路由。如果有多個VPN服務,可以將根證書ca.crt,ta.key文件和客戶端xx.ovpn文件同樣放置到config下的同一個目錄。
6.3 測試
具體PrivacyIDEA的使用,可以查看官方文檔,也可以查看我整理的<PrivacyIDEA管理>。
推薦分3步測試:1.測試PrivacyIDEA服務是否正常運行,token認證是否成功。2.測試RADIUS服務是否正常,RADIUS和PrivacyLDEA驗證是否成功。3.測試OpenVPN認證是否成功。根據提示基本就能判斷問題,然后解決即可。
先在智能手機上安裝google-authtication,在PrivacyIDEA上生成二維碼。然后,打開google-authtication,掃一掃添加賬戶。這個時候你就能看到30秒變一次的token碼了。接著,在PrivacyIDEA的【Tokens】界面,測試token的pin碼或者token碼是否正確。如下:
用命令radtest測試FreeRADIUS和PrivacyIDEA是否正常。也可以使用FreeRADIUS的debug模式開啟FreeRADIUS的服務,更方便的排錯。
再使用OpenVPN客戶端測試是否認證成功。有問題可以查看OpenVPN日志。
注意:Radiusplugin在Centos上有時候會因為版本問題報錯。可以換一個版本編譯。
因為版本問題,你需要直接安裝FreeRADIUS的話,需要先修改FreeRADIUS的認證類型位Perl程序并下載privacyidea_radius.pm文件。最好修改FreeRADIUS的相關配置,記得2.x版本和3.x版本不一樣。
作者介紹
肖磊,2014年畢業于西安郵電大學。現任職360網絡工程師,負責辦公網、無線網和VPN,喜歡網絡技術、linux技術等。
【編輯推薦】
相關熱詞搜索:OpenVPN PrivacyIDEA 遠程接入
