OpenVPN 機敏資料 加解密 專線 虛擬私人網路

防疫分流遠距辦公連線必備 Tunneling加解密技術概覽簡介

安全省錢虛擬私有網路 開源OpenVPN輕鬆架設

2021-02-18
若有傳輸機敏資料的需求,但又礙於專屬線路過於昂貴,可考慮在網際網路上利用虛擬線路的方式,建立一個僅供特定傳輸雙方進行資料傳輸的管道。本次實作將採用開源碼中著名的VPN程式OpenVPN以及加解密軟體OpenSSL來建立相關機制。

 

隨著網際網路的興起,人與人之間不再像是資訊孤島,時時刻刻不斷地利用網際網路來進行資料傳輸,就如一條資訊高速公路般,所有的傳輸資訊均毫無遮掩地在上面奔馳,而其速度取決於當下壅塞的情況。但這也意謂著,在未做任何防護的情況下,任何人均可能取得相關資訊。

而在現實生活,經常會有想要私密地傳輸機敏資訊的需求,且不希望相關資料暴露在公開的網際網路上,讓其他人有機會取得相關資料。在過去,大概都會選擇採用專屬線路的方式來申請一個專屬於個別用戶的線路。但採用此類方式,所付出的成本非常昂貴,恐非一般用戶所能夠負擔。在此情況下,或許可以換個角度思考,是否可以利用便宜的網際網路線路來達到類似專屬線路的功能?

答案是肯定!我們可以利用虛擬私人網路(Virtual Private Network,VPN)機制,在網際網路上利用虛擬線路的方式,建立一個僅供特定傳輸雙方進行資料傳輸的管道。

在此所述的虛擬線路指的並非利用實體上專有線路進行連接,而是利用穿隧(Tunneling)的技術,設法在兩個不同的網路上建立一個虛擬隧道進行資料傳輸,就像是在高速公路建立一個隱形的特定車道一樣。如此一來,即可利用便宜的網際網路來達到專屬線路的好處。

除此之外,由於VPN支援相關的加解密功能,所以可利用密碼系統機制針對資料進行加解密,以達到資料機密傳輸及確保資料完整性的目的。因此,這裡將介紹如何使用開源碼社群中最富盛名的VPN程式OpenVPN,以及著名的加解密軟體OpenSSL來建立相關機制,本次實作所使用的軟體如表1所列。

什麼是VPN

VPN是一種用於在公開的網際網路上進行私人網路通訊的方法,主要的目的在於在兩個不同的網路間進行網路連線。其所使用的技術,大致可分為穿隧技術(Tunneling)、加解密技術(Encryption & Decryption)、金鑰管理技術(Key Management)、使用者與設備身分鑑別技術(Authentication)等四類,以下分別加以介紹。

穿隧技術(Tunneling)

穿隧技術(Tunneling)的原理其實很簡單,就是將原始的封包(Packet)當成資料,並重新進行封裝(Encapsulation),組成新的封包,而後再將此封包利用網際網路傳輸到接收端。對方取得封包後,再解封裝,取得原來的封包資訊,藉此達到資訊機密傳輸的目的。為完成上述的運作,穿隧技術使用了不同的協定來傳輸,相關協定如下所述:

Carrier Protocol

Carrier Protocol是一種傳遞封裝後封包所使用的協定。

Encapsulation Protocol

Encapsulation Protocol是用來封裝原本封包資料所使用的協定,常用協定如下所述:

‧點對點隧道協議(Point to Point Tunneling Protocol,PPTP):PPTP並不是網際網路工程任務組組織(Internet Engineering Task Force,IETF)所建議的標準,而是由微軟、3Com等廠商所制定的標準,利用PPP(Point-to-Point Protocol)協議來封裝原始資料,此協定通常使用PAP(Password Authentication Protocol)、CHAP(Challenge Handshake Authentication Protocol)或使用微軟的MPPE(Microsoft Point-to-Point Encryption,微軟點對點加密)的加解密演算法進行連接時加解密功能。此協定主要運作在OSI(Open System Interconnection Model) LEVEL 2(Data Link Layer)。

‧Level 2隧道協議(Layer Two Tunneling Protocol,L2TP):L2TP可視為PPTP協定的後續版本,與PPTP相同的是,都是使用PPP(Point-to-Point Protocol)協議對原始數據進行封裝,而其主要不同點在於,PPTP使用單一隧道(Tunnel),L2TP則使用多隧道及L2TP可以提供隧道的驗證功能,而PPTP不支援隧道驗證功能。此協定主要運作在OSI LEVEL 2(Data Link Layer)。

‧IPSec(Internet Protocol Security,網際網路安全協定):這是一種透過對IP協定的封包進行加密及認證來保護IP協定的網路傳輸協定,此協定主要運作在OSI LEVEL 3(NetWork)。

‧TLS/SSL(Transport Layer Security/Secure Sockets Layer):SSL早已廣泛地應用在各種資訊技術中(最常見的運用便是網站伺服器),利用其加解密的功能,提供資料機密傳送的功能,也因此可應用在VPN中。由於SSL本身幾乎就被所有的瀏覽器支援,因此使用者端不需要安裝額外的軟體來支援SSL連接功能,僅需使用瀏覽器即可。

Passenger Protocol

Passenger Protocol是被封裝之原始封包原來所使用的協定。

加解密技術(Encryption & Decryption)

為了達到資料機密及完整傳輸目的,本次將利用密碼系統來完成雙方能夠在安全前提下傳輸完整的資訊。密碼系統依照其應用型態,可分為對稱式密碼(Symmetric)及非對稱式密碼(Asymmetric)。

對稱式密碼

所謂的對稱式密碼(Symmetric),就是進行資料傳輸的雙方,在傳輸之前互相約定一個暗號(一般稱之為金鑰),而後傳輸雙方便利用這個金鑰來加解密文件,如圖1所示。

圖1  對稱式密碼(Symmetric)運作示意圖。

傳送端在傳輸資料之前,先以金鑰來加密所要傳送的資料,而後接收端在接收到加密後的資料之後,再以相同的金鑰來解開此資料以取得原先的資料。此種方式最大優點在於其加解密的運算速度相當快,目前常用對稱式密碼系統的演算法包括DES(Data Encryption Standard)、IDEA(International Data Encryption Algorithm)、RC5(Ron’s Code)、AES(Advanced Encryption Standard)等加密系統。

非對稱式密碼

非對稱式密碼(Asymmetric)有別於上述所說明的對稱式密碼系統,它是利用兩把金鑰(兩者為相互對應,公開金鑰及私有金鑰)來完成資料加解密,相關說明如下所述:

‧公開金鑰(Public Key):公開金鑰會置於公開的地方,提供給所有人下載。而每把公開金鑰均會對應一把相應的私有金鑰。

‧私有金鑰(Private Key):私有金鑰並不公開,需要個別保管,是用來解開由相對應的公開金鑰所加密的資料。

非對稱式密碼系統應用的相關流程,如圖2所示。傳送端利用公開金鑰來加密欲傳送的文件,接著傳送加密後的文件至接收端。接收端在接收到加密後的文件之後,再以相對應的私有金鑰來解密,並取得原有的文件。

圖2  非對稱式密碼系統應用相關流程。

此外,為了提高傳輸的效率,VPN通常會使用如3DES或DES等對稱式密碼金鑰進行傳輸資料的加解密。

金鑰管理(Key Management)技術

金鑰可說是密碼系統的靈魂所在,因此需要一個完善的金鑰管理系統,負責管理金鑰的產生、交換、儲存、使用、銷毀及更替的處理,目前常用的金鑰管理技術可分為KIP(Simple Key management for IP)或ISAKMP/Oakley(又稱為IKE)。

使用者與設備身分鑑別技術

使用者與設備身分鑑別技術(Authentication) 主要是用來確認連線者的身分,可利用使用者名稱和密碼或IC卡認證的方式來確認使用者的身分,另一方面,也可利用如認證管理中心(CA)的方式,為個人及機關團體進行認證及相關憑證的簽發,以確認使用者的身分。

開始動手實作

在簡單說明VPN技術後,接下來直接利用Linux來架設VPN的服務。為了方便起見,在此不自行手動安裝相關軟體,而是利用安裝批次檔(Script)來自動安裝及設定相關組態。

請執行下列的指令進行安裝(其中#為註解):

yum install openssl-devel  #安裝 OpenSSL相關的套件 yum install epel-release  #安裝Extra  Packages for Enterprise Linux的套 件,以便取得額外的套件  

#取得自動安裝相關環境的安裝批次檔 wget https://raw.githubusercontent. com/Angristan/openvpn-install/master/ openvpn-install.sh

接著,執行該批次檔,並根據其步驟相關的指示,填入相關資訊,即可完成安裝。相關操作步驟說明如下:

STEP 1:首先設定OpenVPN伺服器主機所在的IP資訊,如圖3所示。

圖3  設定OpenVPN主機所在IP資訊。

STEP 2:然後,確認是否要支援IPv6通訊協定,如圖4所示。

圖4  決定是否要支援IPV6通訊協定。

STEP 3:接著,設定OpenVPN伺服器運作時所使用的通訊埠資訊,預設應為1194,如圖5所示。

圖5  設定將使用的通訊埠。

STEP 4:如圖6所示,再設定OpenVPN伺服器運作時所採用的通訊協定。

圖6  指定通訊協定。

STEP 5:緊接著,設定OpenVPN伺服器所使用的DNS伺服器,如圖7所示。在此步驟後,就會開始安裝OpenVPN相關的軟體及套件。

圖7  設定DNS伺服器。

STEP 6:隨後,設定VPN用戶端名稱等相關資訊,本例為vpnclient,如圖8所示。

圖8  設定VPN用戶端名稱等資訊。

設定完成後,便會產生名稱為「vpnclient.ovpn」的認證檔案(此檔案是用來認證用戶端的身分),並在系統上產生一個tun網路裝置以接收來自VPN用戶端的連線,如圖9所示。

圖9  產生tun網路裝置以接收來自VPN用戶端的連線。

最後,就可以執行以下的指令來啟動OpenVPN伺服器:

systemctl start openvpn-server@server. service

在啟動OpenVPN伺服器後,可用如下的指令來檢查是否啟動成功:

systemctl status openvpn-server@server. service

如果回覆如圖10所示的資訊,即表示OpenVPN伺服器已啟動成功。

圖10  OpenVPN伺服器已啟動成功。

接著,繼續安裝用戶端的軟體,在此以Windows 10為例,連結至「https://openvpn.net/community-downloads/」網頁取得相關軟體並進行安裝。

安裝成功後,將OpenVPN伺服器上所產生的vpnclient.ovpn複製到「C:\Program Files\OpenVPN\config」目錄內,接著執行OpenVPN用戶端程式。此時,用戶端程式便會嘗試與OpenVPN伺服器連線。若連線成功,就會取得一個由OpenVPN伺服器所配發的IP(會與OpenVPN伺服器的tun網路介面同一個段),如圖11所示,表示已經順利地撥接至OpenVPN伺服器。

圖11  已順利撥接至OpenVPN伺服器。

此時,可以利用連線至「myip.com.tw」網站來取得上網時所使用的IP。如果一切順利,這時候該網站所顯示的來源IP應該為OpenVPN伺服器所使用的IP,這也意謂著,對Internet而言,會認為是由OpenVPN伺服器所連線,這也是VPN伺服器可用來突破限制來源IP的原因。例如一個網站僅允許位在美國的來源IP可連線,此時透過撥接至位於美國的VPN伺服器,再透過該VPN伺服器連線,即可繞過此類的限制。

在本次測試的過程中,曾發生無法正常上網的問題,這有可能是OpenVPN伺服器無法正常轉發OpenVPN用戶端所傳來的封包所致,若碰到這種情況,可在OpenVPN伺服器執行下列指令:

iptables -t nat -A POSTROUTING -s [openvpn伺服器的網段]/24  -j MASQUERADE

以本文為例,執行以下指令就能夠解決此類的問題:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24  -j MASQUERADE

至此,透過OpenVPN建立的虛擬私人網路就大功告成了!

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>

 


追蹤我們Featrue us

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

我知道了!