SSL VPN

使用Linux建置企業虛擬私有網路SSL VPN(上)

2012-01-09
近幾年來,寬頻網路飛快地成長,使用者在使用之餘,更須要兼顧安全性,對企業而言,建構一套安全通道讓遠端的使用者能夠安全地存取企業內部資料將變得非常重要。有鑑於此,本文將介紹各種VPN技術,並示範如何在OpenSuSE 11.4上建置OpenVPN,以及怎樣進行細部設定讓OpenVPN運作得更順暢更安全。
隨著資訊安全及寬頻網路近幾年來的快速發展,使用者在使用網路時,安全性及其所使用的相關應用程式在安全性方面顯得相當重要。如何建構一個安全通道,讓遠端的使用者能夠透過有效加密的保護並結合防火牆等功能,安全地存取企業內部資料,並能在電腦處理個人資料保護法案修正為個人資料保護法後,有效且安全存取組識內資料,便成為各企業或組識一個重要的議題。

筆者研究也陸續建置了一些不同類型的VPN Service,包含PPTP、XL2TP、IPSce、OpenVPN(SSL VPN)等等。本文即分別針對常用的PPTP及OpenVPN(SSL VPN),介紹其技術背景和說明,並說明如何使用OpenSuSE 11.4建置OpenVPN(SSL VPN)。

VPN技術介紹

VPN即為虛擬私有網路(Virtual Private Network,VPN),簡單地說,就是在公共開放的網路上,提供專屬之通訊連結網路的主要技術,經常用於連接中、大型企業或團體與團體間之私人網路的通訊方法。

虛擬私有網路是利用加密通道(Tunneling Protocol)來達到加密保護、傳送端認證、訊息準確性等安全效果。此技術如果使用得當,可以在不安全的網際網路上傳送可靠且安全的訊息。

在傳送的過程中需要特別注意的是,加密的訊息是否可以自行控制,沒有加密過的虛擬私有網路是不安全的,被竊取資料的危險性相對提高。

PPTP通道技術

點對點隧道協定(Point-to-Point Tunneling Protocol,PPTP)是以GRE協定向對方做一般的點對點傳輸,使用TCP 1723埠來發起和管理GRE狀態。PPTP因為易於設定以及是第一個支援微軟撥號連線的VPN協定,因此被廣泛採用。

以往Linux缺乏完整的PPTP支援是因為MPPE(Microsoft Point-to-Point Encryption)是專利軟體。但是,自從在2005年10月28日發布的Linux 2.6.14起,Linux核心提供完整的PPTP支援(包含自由版本的MPPE)。

PPTP的運作方式是藉由將網路協定資料段封裝(Encapsulated)在IP封包中,然後透過網際網路傳送。經過封裝之後的封包,會被網路上任何路由器或機器視為一般IP封包般傳送,直到抵達通道的另一端之後,才將傳送端封裝上去的IP表頭取下。

若使用者從網際網路上任何地方,例如家中ADSL連線或國外等非企業組識單位內,透過與公司內部PPTP VPN Server建立PPTP連線後,使用者即可取得公司內部所發出的IP位址,此時該部電腦就像在公司內使用網路一樣。使用者便能夠順利使用透過公同內部IP位址方可運用的資源。詳細的PPTP規格定義在RFC2637,可參考網址「http://tools.ietf.org/html/rfc2637」。

OpenVPN(SSL VPN)

OpenVPN是透過OpenSSL加密庫中的SSLv3/TLSv1協議函數庫,建構企業內部虛擬私有網路,OpenVPN允許參與建立VPN的單點使用公開金鑰、電子證書或是帳戶/密碼來進行身分認證。它並不是一個Web-based的VPN軟體,也不與IPsce及其他VPN軟體相容,目前OpenVPN能夠在Linux、FreeBSD、OpenBSD、Solaris、Mac OS X與微軟的Windows 2000/XP/Vista/2003上運行。

OpenVPN預設採用1194埠做通訊,並且推薦使用UDP協議,不過同時也支援TCP,使用者可以自己修改。OpenVPN提供了Tun和Tap驅動兩種虛擬網路介面,透過它們可以建立Layer3的IP通道或是虛擬Layer2乙太網路,後者可以傳送任何類型的Layer2乙太網路封包,並可以使用LZO演算法壓縮。使用Layer3或Layer2時,使用者可以依自己的網路架構做選擇。

在選擇使用TCP或UPD協議時,需要注意如果有高延遲或是遺失封包較多的情況,建議選擇TCP協議作為底層傳輸的協定,因UDP協定為不可靠傳輸,網路不穩定時可能會導致要求通道上層的協議進行重傳,效率非常低。

OpenVPN是基於SSL(Secure Socket Layer)進行資料加密傳輸,運作方式與PPTP大不同,不過最終的目的不外乎只是利用此通道進行公司內部資料的存取,接下來介紹如何在OpenSUSE 11.4下建置OpenVPN。

安裝作業系統及OpenVPN相關套件

必須先安裝OpenSUSE 11.4作業系統,然後做安裝前的準備,接著安裝OpenVPN。安裝後,立即啟動OpenVPN,進行細部設定。

安裝OpenSUSE 11.4作業系統

因本文主要介紹OpenVPN如何安裝及設定,作業系統方面就不再詳述。筆者安裝OpenSUSE 11.4時,使用最快速最簡易的方式進行安裝,若需要什麼應用程式或是相關套件,在作業系統安裝完後需要OpenVPN相依套件時,再追加安裝。

安裝前準備

筆者習慣把光碟裡所有的安裝套件先複製到系統的某個目錄底下,例如在「/tmp」目錄底下建立一個「rpms」目錄,執行指令為「mkdir /tmp/rpms」,然後把光碟掛載(mount)到「media」目錄底下,使用指令是「mount /dev/dvd /media」(「/dev/dvd」目錄視使用者需求而變更)。

由於筆者使用的是DVD光碟,所以執行指令「cp -rf /midia/suse/i586/* /tmp/rpms/ &」把安裝光碟底下的rpm全部複製到「/tmp/rpms」目錄內。確認複製完畢,即可開始安裝。

安裝OpenVPN

開始安裝OpenVPN,執行指令「rpm -ivh openvpn-2.1.4-11.14.1.i586.rpm」。

▲安裝openvpn套件。

如果出現「package openvpn-2.1.4-11.14.1.i586 is already installed」訊息,代表系統預設已安裝此軟體。而OpenSUSE 11.4作業系統預設已安裝此軟體。

安裝好OpenVPN套件之後,必須複製相關設定檔至「/etc/」目錄內,執行指令「cp -r /usr/share/openvpn /etc/」開始複製動作。

▲複製相關設定檔。

隨後,執行指令「cd /usr/share/doc/packages/openvpn/」,切換至「/usr/share/doc/packages/openvpn/」目錄下,並使用指令「cp –rf * /etc/openvpn/」將底下所有檔案及目錄拷貝至「/etc/openvpn」目錄內。

▲複製設定檔至「openvpn」目錄。

緊接著設定初始化OpenVPN環境。先切換至「/etc/openvpn/easy-rsa/2.0/」目錄底下,然後使用指令「vi vars」開始編輯vars檔。

▲編輯vars檔。

利用vi文字編輯器開啟vars檔案後,便會看到檔案內容,移至畫面最下面,會看到5個變數的設定檔,如下圖所示。其中方框內淺色字體的部分,使用者可以自行設定內容。編輯好了之後,存檔離開。

▲設定SSL憑證預設值

然後,匯出(Export)剛剛所編輯的vars環境,使用「. ./vars」(請注意是兩點,點與點中間有空格)或「soruce var」指令。

▲執行vars檔。

接下來,使用指令「. ./clean-all」(請注意是兩個點,點和點中間有空格)清掉所有暫存的CA。

▲執行clean-all動作。

接著建置Root CA。使用指令「. ./build-ca」來執行此動作。

▲建置Root CA。

使用者會看到上圖中方框標示部分包含剛剛所編輯的vars檔下的5個變數會自動帶出。若需要做變更,在冒號(:)後面改為自已想要的參數即可。

隨後,執行指令「. ./build-key-server server」建置Server Key和Server Crt,如下圖所示。在下圖中,第一部分也會跳出在vars底下所設定的參數,使用者可自行設定。第二部分則要求輸入一組密碼和公司名字,使用者自訂即可。至於第三部分和第四部分,只是讓使用者確認是否要建立此憑證,選擇「y」即可。

▲建置Server Key及Server Crt。

接著建置Diffie Hellman,執行指令「. ./build-dh」。請留意,在該指令中是兩個點,點與點中間有空格。

▲建置Diffie Hellman。

開始編輯設定檔。由於剛裝好的OpenVPN並沒有server.conf檔,使用者必須自行從範例檔複製,因此執行以下兩個指令:

底下介紹的參數為常用的參數,如需要更多,請查看設定檔說明。


(此參數是指要Bind在那一個IP上面)


(OpenVPN Port預設為1194,採用預設即可)


(選擇使用那種協定,筆者採用TCP協定)


(選擇使用那一種通道方式,筆者採用Tap通道方式)


(以上ca、cert、key、dh四個參數為之前所產生的檔案,指定其檔案路徑即可)


(Server的IP將指定為192.168.100.1,而Client的IP則由Server來指定)


(ipp.txt會記錄Client所分配的IP,也可以手動設定Client的IP,不過要注意的是,ipp.txt底下所記錄的會與Server所發給Client的憑證名稱一樣)


(Client可以通往內部的網段)


(將Client的Defatul Gateway設定由VPN Server出去)


(設定Client的DNS Server)


(連線狀態,每10秒ping一次,如果60秒未收到封包,代表Client已斷線)


(同時間最多能有50個Client)


(採用lzo連線壓縮)


(每分鐘此Log自動更新連線狀態)


(系統預設會寫入「/var/log/messages」,使用者可以自行設定寫入位置和檔案)


(記錄Log的Level,預設即可)

設定檔設定完畢,存檔離開。(以上的IP位址依據使用者環境架構自行變更)

啟動OpenVPN

安裝好OpenVPN之後,執行指令「rcopenvpn start」來啟動OpenVPN,如下圖所示。若要停止,可使用指令「rcopenvpn stop」,而重新啟動的指令為「rcopenvpn restart」。

▲啟動OpenVPN。

使用「netstat -tnl」指令,若看到Port 1194為LISTEN,代表OpenVPN已經成功啟動。以上為Server安裝及設定檔的全部建置過程。

本文以Windows為Client,接下來須安裝OpenVPN Client軟體。OpenVPN Client軟體的下載網址為「http://swupdate.openvpn.net/community/releases/openvpn-2.1.4-install.exe」,目前較穩定版本是openvpn-2.1.4.install.exe,安裝過程如下圖所示,依序按下〔Next〕、〔I Agree〕、〔Install〕和〔繼續安裝〕等按鈕。

按下〔繼續安裝〕按鈕之後,此畫面會在電腦安裝一個網路介面卡,如下圖所示。OpenVPN就是透過此介面來做通訊。此為必要安裝。

最後,按下〔Finish〕按鈕就安裝完成,而桌面上也會出現一個〔Finish〕圖示。

安裝好Windows OpenVPN Client後,回到OpenVPN Server建立Client所需的憑證檔,請執行以下兩行指令:

如下圖所示,其中的user1可以自行變更或定義。在圖中,第一部分是也會在vars底下出現設定的參數,使用者自行設定即可。

▲建立使用者憑證。

而第二部分要求輸入一組密碼和公司名字,與當初Server設定的一樣即可。第三部分和第四部分則讓使用者確認是否要建立此憑證,選擇「y」即可。

Client所產生的檔案會出現在「/etc/openvpn/easy-rsa/2.0/keys/」目錄底下。接下來需複製的檔案如下:

將這四個檔案放到Client底下。以本文為例,須放到OpenVPN安裝的所在「config」目錄內,如下圖所示。

▲將這四個檔案放到OpenVPN的「config」目錄內。

將其所需的四個檔案放入「config」目錄後,然後編輯client.ovpn檔。使用文字編輯器編輯「config」目錄下的client.ovpn檔案,相關參數如下:

以上參數設定皆使用常用的參數,如需詳細之參數,可查閱client.ovpn說明。如果以上都設定好,就可以和Server做連線了。

連線方式如下所述。一開始,先雙按桌面上的〔OpenVPN GUI〕圖示,然後在開始工作列右邊會有一個程式於背景執行,如下圖所示。

▲出現OpenVPN GUI圖示。

將滑鼠移到此小圖示後按一下滑鼠右鍵,將會出現如下圖所示的快速選單。

▲快速選單中出現【Connect】選項。

點選快速選單中的【Connect】選項後,連線成功後就會出現如下的畫面。小圖示會變為綠色,而且指派(Assign)一個IP位址給Client。當出現這個畫面時,恭喜!Client已經可以和Server做連線了。

▲出現成功連線圖示。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!