210 likes | 436 Views
實驗 8:IPSec 之虛擬私有網路之建置. 實驗目的. 實驗目的 本實驗使用自由軟體 OpenSwan 來架設一 IPSec 的虛擬私有網路。藉由此實驗讓同學對於 IPSec 有更深一層的體驗。 實驗架構 本實驗 VPN 雙端的裝置作業系統為 Gentoo Linux Windows XP 為了讓客戶端使用最簡易的方式來建立 VPN 的連線,本實驗所採用的 VPN 類型如下: Remote access VPN L2TP/IPSec VPN IPSec 認證方式使用 pre-share key
E N D
實驗目的 實驗 8:IPSec 之虛擬私有網路之建置 • 實驗目的 本實驗使用自由軟體OpenSwan來架設一IPSec的虛擬私有網路。藉由此實驗讓同學對於IPSec有更深一層的體驗。 • 實驗架構 本實驗VPN雙端的裝置作業系統為 • Gentoo Linux • Windows XP 為了讓客戶端使用最簡易的方式來建立VPN的連線,本實驗所採用的VPN類型如下: • Remote access VPN • L2TP/IPSec VPN • IPSec認證方式使用pre-share key 採用上列類型實作出的VPN,客戶端無論身在何地,只要擁有合法的身份,即可使用VPN來做存取資料。 VPN伺服器設定流程
Openswan介紹 實驗 8:IPSec 之虛擬私有網路之建置 • Openswan介紹 Openswan 是一套基於ipsec的Linux工具,它的前身就是Freeswan(目前已停止開發), 本實驗我們使用OpenSwan實作IPSec VPN。 Openswan可以用來與多種不同的裝置連成VPN,以site-to-site建成VPN為例,兩個端點同為openswan的話,各種類型的ipsec都可以使用,另一種情況是,一端為openswan所架構的VPN 伺服端用來為windowsvpn 客戶端來連線;或是與廠商所販售的路由器或防火牆等的裝置連接,因此,Openswan成為目前opensource軟體中用來建置ipsec的主流軟體。 OpenSwan 官方網站
安裝L2TP、PPP 實驗 8:IPSec 之虛擬私有網路之建置 • 在核心中加入IPSec相關的協定 • 在使用IPSec之前,先檢查看看Linux核心是否有支援以下的選項。我們需要將以下選項編譯為模組。 Networking support ---> Networking options ---> <M> PF_KEY socket [*] TCP/IP networking <M> IP: AH transformation <M> IP: ESP transformation <M> IP: IPComp transformation <M> IPsec user configuration interface [*] Network device support <M> PPP (point-to-point protocol) support <M> PPP support for async serial ports <M> PPP support for sync tty ports <M> PPP Deflate compression <M> PPP BSD-Compress compression <M> PPP over Ethernet (EXPERIMENTAL) Device Drivers ---> Character devices ---> [*] Legacy (BSD) PTY support
安裝L2TP、PPP 實驗 8:IPSec 之虛擬私有網路之建置 • 在核心中加入IPSec相關密碼套件 • IPSec使用了相當多種的加解密演算法,因此在核心選項中也要將這些演算法與前頁的一併編譯成模組加到核心中。 Cryptographic options ---> --- Cryptographic API --- HMAC support <M> Null algorithms <M> MD4 digest algorithm <M> MD5 digest algorithm <M> SHA1 digest algorithm <M> SHA256 digest algorithm <M> SHA384 and SHA512 digest algorithms <M> DES and Triple DES EDE cipher algorithms <M> Blowfish cipher algorithm <M> Twofish cipher algorithm <M> Serpent cipher algorithm <M> Deflate compression algorithm
安裝L2TP、PPP 實驗 8:IPSec 之虛擬私有網路之建置 • 核心加入上述IPSec功能選項編譯完成之後,就可以開始安裝本實驗所需要的軟體套件,由於此VPN實作類型為L2TP/IPSec,因此才需要安裝下列套件,如果單純為IPSecVPN的話,就不需要安裝L2TP與PPP協定的套件。 • 安裝PPP L2TP了連線是基於PPP協定之上,因此為了安裝L2TP還要安裝PPP協定。 使用下列指令安裝 emerge pppd • 安裝L2TP 使用下列指令安裝 emerge xl2tpd • 安裝IPSec-tools 使用下列指令安裝 emerge ipsec-tools 安裝範例 #安裝PPP emerge pppd #安裝l2tp emerge xl2tpd #安裝ipsec-tools emerge ipsec-tools
設定L2TP 實驗 8:IPSec 之虛擬私有網路之建置 L2TP設定範例 • 設定L2TP.conf L2TP.conf設定的範例如左圖: [global]區域是本機(伺服端)的資訊,要注意的是L2TP所使用的port是固定的(UDP 1701)。 [lns]區塊的設定是給客戶端連線使用的,圖1為客戶端的對照圖。 • auth file=/etc/ppp/chap-secrets 指定此檔為認證檔案。 • ip range為伺服端發配給客戶端使用的IP。 • local ip指的是VPN伺服端用來與客戶端連線的一個窗口,他必須不存在ip range中,且要與ip range為同一網域。 其餘的設定套用就可以了。 [global] listen-addr = 140.125.32.19 port = 1701 auth file=/etc/ppp/chap-secrets [lns default] ip range = 192.168.123.1-192.168.123.20 local ip = 192.168.123.254 length bit = yes require chap = yes refuse pap = yes require authentication = yes name = LinuxVPN ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd 圖1
設定OpenSwan-ipsec.conf 實驗 8:IPSec 之虛擬私有網路之建置 • 設定/etc/ppp/options.l2tp L2TP的連線是基於PPP構成的,因此要設定PPP連線的設定。文件中的參數可使用man pppd來查看。這裡的設定是在客戶端完成VPN連線之後的組態設定。 • ipcp-accept-local 接受撥入方提供的IP地址 • ipcp-accept-remote 將接受撥入方自己的IP地址 • ms-dns DNS位址 • Crtscts 硬體流程控制 PPP設定範例 ipcp-accept-local ipcp-accept-remote ms-dns 140.125.252.1 noccp auth crtscts idle 1800 nodefaultroute debug lock proxyarp connect-delay 5000 silent
安裝OpenSwan 實驗 8:IPSec 之虛擬私有網路之建置 • 安裝OpenSwan 用下列指令安裝OpenSwan emerge openswan • 設定OpenSwan 設定IPSec相關文件如下 • ipsec.conf(/etc/ipsec/ipsec.conf) 此檔案中要設定ipsec的各項類型,主要是要設定各個通道所要執行的加密方式、ipsec的模式與金鑰交換的方式…等。 • ipsec.secret(/etc/ipsec/ipsec.secret) 此檔案中會放置認證的相關資料,例如:本實作是使用pre-share key來做認證,則此檔案中要設定pre-share key為何,若是採用證書的方式做認證的話,則證書要設定在此檔案中,其他認證方式亦同。 安裝OpenSwan • #安裝OpenSwan • emerge openswan • #openswan相關文件 • ipsec.conf(/etc/ipsec/ipsec.conf) • 設定ipsec主要的檔案 • ipsec.secret(/etc/ipsec/ipsec.secret) • 用來存放vpn認證所需的資料
設定OpenSwan-ipsec.conf 實驗 8:IPSec 之虛擬私有網路之建置 • 設定OpenSwan-ipsec.conf ipsec.conf的設定格式要注意,若格式錯誤ipsec不會成功開啟。此檔案的編寫是整個IPSec的主要核心,在此分為兩個部分來解說。本頁解說IPSec的基本設定與各個通道的預設設定區塊。 • Config setup config setup是ipsec service 基本設定config和conn都是設定區塊的起始行其下的設定參數都要用空格或 Tab 內縮編排,否則 service ipsec start 時會出現錯誤訊息。 • Conn %fault 每一段conn起頭的區塊就好比是程式中的副程式一般,在這個指的就是客戶端連線的條件為何,就為他建立何種通道。 conn %default 是各通道 (tunnel) 的共通設定若不設定 conn %default 可將本區塊裡的設定值分別寫入各通道的區塊中。 config setup # ipsec基本設定區塊interfaces=ipsec0=eth0 klipsdebug=none plutodebug=none overridemtu=1410 nat_traversal=yes virtual_private=%v4:192.168.123.0/24 conn %default #各個通道的預設設定區塊keyingtries=3 compress=yes disablearrivalcheck=no authby=secret #表認證的資料在ipsec.secret type=tunnel # ipsec通道模式keyexchange=ike ikelifetime=240m keylife=60m
設定OpenSwan-ipsec.conf 實驗 8:IPSec 之虛擬私有網路之建置 • 設定OpenSwan-ipsec.conf 本頁述敘的是remote-vpn的設定方式,在conn後面的命名都可以隨意設定,但在大多數的文件中roadwarrior指得是客戶端沒有使用固定的IP來連上VPN伺服器。當然也無須要跟文件中的命名相同。 • left為本機位址 left=%defaultroute • right為遠端位址 right=%any,%any表任何IP都可連。 • leftprotoport=17/1701 開啟udp=17/port=1701傾聽連線 • also=roadwarrior also的功能,就類似副程式跳躍,當有遠端主機使用17/1701連上伺服器時,即套用conn roadwarrior中的設定。 • Auto=add ipsec.conf預設為ignore,add表示自動配置此檔案。 conn roadwarrior-l2tp#for windows vpn client leftprotoport=17/1701 rightprotoport=17/1701 also=roadwarrior conn roadwarrior pfs=no #是否使用Perfect Forward Secrecy left=%defaultroute right=%any rightsubnet=vhost:%no,%priv auto=add
設定OpenSwan-ipsec.secret 實驗 8:IPSec 之虛擬私有網路之建置 • 設定OpenSwan-ipsec.secret • 位址 /etc/ipsec/ipsec.secret • 內容 填寫建立VPN時所需要的認證元件(如:金鑰、憑證、pre-share key)。 OpenSwan相當注重設定檔的格式,以設定Pre-share key為例,格式如下: 伺服端IP□客戶端IP:□PSK□”pre-share key” (其中,□為空格) 由於IPSec認證的方式有三種,在左圖列出了三種認證方式的格式為何,供大家參考。 ipsec.secret 140.125.32.19 %any: PSK “what are you doing now" ipsec.secret(三種認證方式設定範例) 資料來源: OpenSwan 官方網站 http://wiki.openswan.org
設定OpenSwan-ipsec.secret 實驗 8:IPSec 之虛擬私有網路之建置 • 設定chap.secret • 位址 /etc/ppp/chap.secret • 內容 放置使用者層級的帳戶。 此檔案放置使用者層級的帳號及密碼,當客戶端欲建立L2TP/IPSec時,除了要有正確的pre-share key之外還要有使用者層級的身分驗證,設定的格式如左圖所示。 圖1所示的即為客戶端的使用者層級的帳號與密碼。 • MS-CHAP身分驗證 為微軟公司擴展CHAP而成的,MS-CHAP是建構在PPP協定之下,使用MD4及DES進行認證。 伺服端的chap.secrets設定 # Secrets for authentication using CHAP # client server secret IP addresses es602 * “test" 192.168.123.0/24 圖1
驗證IPSec 實驗 8:IPSec 之虛擬私有網路之建置 • 驗證IPSec 用下列指令驗證OpenSwan/IPSec是否安裝成功用以下指令 ipsec verify 如果驗證的結果有問題,可以由以下的log檔案來除錯。 /var/log/everything/current /var/log/ppp/current 驗證OpenSwan是否正確安裝
VPN客戶端 連線 實驗 8:IPSec 之虛擬私有網路之建置 • VPN客戶端連線 此實驗中,我們使用Windows XP作業系統與VPN Server進行連線。 由於作業系統本身對於VPN的支援,所以設定較為簡易。L2TP使用UDP 1701埠,因此如果在配置上有問題,客戶端要注意防火牆是否有擋掉此連接埠。 • 本實驗將VPN客戶端連線流程分為三個部分: • 第一部分是”新增”:主要是用來新增一個VPN客戶端的連線。 • 第二部份是”設定”:是用來設定VPN類型以及相關的認證方式。 • 最後一個部分是”連線”:在設定完VPN之後,在連線的過程中,會驗證使用者層級的帳號密碼,確認為合法的使用者之後,就可以成功建立VPN連線, 。 VPN客戶端設定流程
VPN客戶端 新增 實驗 8:IPSec 之虛擬私有網路之建置 1. 新增一個連線精靈 2. 選擇如圖的選項,然後下一步 3. 選擇如圖的選項,然後下一步 4.此步驟的名稱可以隨便打,是為此連線的名稱 5.輸入VPN伺服器的IP 6.按下完成即完成連線
VPN客戶端 設定 實驗 8:IPSec 之虛擬私有網路之建置 2.一般預設的VPN類型為PPTP,因此要記得改回L2TP IPSec 1. 如圖選擇內容來設定 3. 在”安全性標籤”中找到 鈕, 來設定pre-share key。 4. 在”安全性標籤”中選擇”進階”,設定如圖。
VPN客戶端 連線 實驗 8:IPSec 之虛擬私有網路之建置 • 連線 • VPN客戶端最後一個步驟-連線。輸入合法的帳號及密碼之後,按下連線紐,若無錯誤即可連線成功。下圖的步驟2是成功連線的內容,內容顯示出,VPN客戶端從VPN 伺服端所配置到的private IP位址以及IPSec所採用的加密方式為何。 • 在下一頁,我們將要驗證VPN客戶端所收到的封包是否有經過加密。 2. 成功連線後的結果內容 1. 如圖鍵入正確的使用者名稱及密碼
驗證IPSec 實驗 8:IPSec 之虛擬私有網路之建置 • 驗證IPSec 在完成VPN的連線之後,我們在VPN的客戶端使用封包擷取軟體來觀察封包的型態為何。 擷取出的封包如下圖所示,IP位址140.125.32.19為VPN的伺服端,140.125.32.235為VPN的客戶端,所有的封包都是經由ESP加密過的。此結果代表VPN建置成功。
總結 實驗 8:IPSec 之虛擬私有網路之建置 • 總結 VPN的方式及種類都相當多樣化,本實驗說明如何架設以L2TP/IPSec為基礎的VPN,此種方式讓VPN客戶端能方便的設定及使用。 本實驗難度在於VPN伺服器的架設,對於Linux系統不熟悉的使用者,在實作之前,要先熟悉Linux系統一些基本的指令。另外,在架設VPN伺服器的過程中,善用系統log來除錯可大大節省架設時間。 雖然只需要熟悉指令以及openswan的文件就可以完成架設,但是若不懂IPSec、L2TP、VPN原理,對於openswan文件上的名詞一定是懵懵懂懂的,VPN連線的流程不了解的話,在除錯的過程之中也一定是倍感艱辛。如果想要事半功倍的完成此次的實作,務必要理論與實務並用。 對於VPN有興趣的使用者或是想要進一步的了解site-to-site VPN或是其他VPN上的認證方式,可以參考OpenSwan官方網站上的資料。
參考資料 實驗 8:IPSec 之虛擬私有網路之建置 • OpenSwan (http://wiki.openswan.org)。 • 鳥哥的私房菜 (http://linux.vbird.org/)。 • Gentoo Linux (http://www.gentoo.org/)。