在fedora中深入淺出VPN技術(shù)
原創(chuàng)【51CTO.com 獨家特稿】隨著網(wǎng)絡(luò)通信技術(shù)的發(fā)展和網(wǎng)絡(luò)應(yīng)用的不斷涌現(xiàn),越來越多的用戶數(shù)據(jù)和企業(yè)信息在互聯(lián)網(wǎng)進(jìn)行傳送。隨之而來的是越來越多的黑客和網(wǎng)絡(luò)威脅,他們對這些機(jī)密、敏感的數(shù)據(jù)采用各種手段進(jìn)行竊取、篡改和破壞,從而達(dá)到其不可告人的目的。因此,通信數(shù)據(jù)的安全性受到前所未有的挑戰(zhàn)。鑒于這個目的,保證數(shù)據(jù)傳輸安全的VPN技術(shù)應(yīng)運而生。
(1)降低成本:企業(yè)不必租用長途專線建設(shè)專網(wǎng),不必大量的網(wǎng)絡(luò)維護(hù)人員和設(shè)備投資。利用現(xiàn)有的公用網(wǎng)組建的Intranet,要比租用專線或鋪設(shè)專線要節(jié)省開支,而且當(dāng)距離越遠(yuǎn)時節(jié)省的越多。如:某企業(yè)的北京與紐約分部之間的連接,不太可能自鋪專線;當(dāng)一個遠(yuǎn)程用戶在紐約想要連到北京的Intranet,用撥號訪問時,花的是國際長途話費;而用VPN技術(shù)時,只需在紐約和北京分別連接到當(dāng)?shù)氐腎nternet就實現(xiàn)了互聯(lián),雙方花的都是市話費?! ?/P>
(2)容易擴(kuò)展:網(wǎng)絡(luò)路由設(shè)備配置簡單,無需增加太多的設(shè)備,省時省錢。對于發(fā)展很快的企業(yè)來說,VPN就更是不可不用了。如果企業(yè)組建自己的專用網(wǎng),在擴(kuò)展網(wǎng)絡(luò)分支時,要考慮到網(wǎng)絡(luò)的容量,架設(shè)新鏈路,增加互聯(lián)設(shè)備,升級設(shè)備等;而實現(xiàn)了VPN就方便多了,只需連接到公用網(wǎng)上,對新加入的網(wǎng)絡(luò)終端在邏輯上進(jìn)行設(shè)置,也不需要考慮公用網(wǎng)的容量問題、設(shè)備問題等。
(3)完全控制主動權(quán):VPN上的設(shè)施和服務(wù)完全掌握在企業(yè)手中。例如,企業(yè)可以把撥號訪問交給NSP去做,由自己負(fù)責(zé)用戶的查驗、訪問權(quán)、網(wǎng)絡(luò)地址、安全性和網(wǎng)絡(luò)變化管理等重要工作。
二、 VPN的分類
VPN的分類方式比較混亂。不同的生產(chǎn)廠家在銷售它們的VPN產(chǎn)品時使用了不同的分類方式,它們主要是產(chǎn)品的角度來劃分的。不同的ISP在開展VPN業(yè)務(wù)時也推出了不同的分類方式,他們主要是從業(yè)務(wù)開展的角度來劃分的。而用戶往往也有自己的劃分方法,主要是根據(jù)自己的需求來進(jìn)行的。下面簡單介紹從不同的角度對VPN的分類。
1.按接入方式劃分
這是用戶和運營商最關(guān)心的VPN劃分方式。一般情況下,用戶可能是專線上(因特)網(wǎng)的,也可能是撥號上網(wǎng)的,這要根據(jù)擁護(hù)的具體情況而定。建立在IP網(wǎng)上的VPN也就對應(yīng)的有兩種接入方式:專線接入方式和撥號接入方式。
(1)專線VPN:它是為已經(jīng)通過專線接入ISP邊緣路由器的用戶提供的VPN解決方案。這是一種“永遠(yuǎn)在線”的VPN,可以節(jié)省傳統(tǒng)的長途專線費用。
(2)撥號VPN(又稱VPDN):它是向利用撥號PSTN或ISDN接入ISP的用戶提供的VPN業(yè)務(wù)。這是一種“按需連接”的VPN,可以節(jié)省用戶的長途電話費用。需要指出的是,因為用戶一般是漫游用戶,是“按需連接的,因此VPDN通常需要做身份認(rèn)證(比如利用CHAP和RADIUS)
2.按協(xié)議實現(xiàn)類型劃
這是VPN廠商和ISP最為關(guān)心的劃分方式。根據(jù)分層模型,VPN可以在第二層建立,也可以在第三層建立(甚至有人把在更高層的一些安全協(xié)議也歸入VPN協(xié)議。)
(1)第二層隧道協(xié)議:這包括點到點隧道協(xié)議(PPTP)、第二層轉(zhuǎn)發(fā)協(xié)議(L2F),第二層隧道協(xié)議(L2TP)、多協(xié)議標(biāo)記交換(MPLS)等。
(2)第三層隧道協(xié)議:這包括通用路由封裝協(xié)議(GRE)、IP安全(IPSec),這是目前最流行的兩種三層協(xié)議。
第二層和第三層隧道協(xié)議的區(qū)別主要在于用戶數(shù)據(jù)在網(wǎng)絡(luò)協(xié)議棧的第幾層被封裝,其中GRE、IPSec和MPLS主要用于實現(xiàn)專線VPN業(yè)務(wù),L2TP主要用于實現(xiàn)撥號VPN業(yè)務(wù)(但也可以用于實現(xiàn)專線VPN業(yè)務(wù)),當(dāng)然這些協(xié)議之間本身不是沖突的,而是可以結(jié)合使用的。
3.按VPN的發(fā)起方式劃分
這是客戶和IPS最為關(guān)心的VPN分類。VPN業(yè)務(wù)可以是客戶獨立自主實現(xiàn)的,也可以是由ISP提供的。
(1)發(fā)起(也稱基于客戶的):VPN服務(wù)提供的其始點和終止點是面向客戶的,其內(nèi)部技術(shù)構(gòu)成、實施和管理對VPN客戶可見。需要客戶和隧道服務(wù)器(或網(wǎng)關(guān))方安裝隧道軟件。客戶方的軟件發(fā)起隧道,在公司隧道服務(wù)器處終止隧道。此時ISP不需要做支持建立隧道的任何工作。經(jīng)過對用戶身份符(ID)和口令的驗證,客戶方和隧道服務(wù)器極易建立隧道。雙方也可以用加密的方式通信。隧道一經(jīng)建立,用戶就會感覺到ISP不在參與通信。
(2)服務(wù)器發(fā)起(也稱客戶透明方式或基于網(wǎng)絡(luò)的):在公司中心部門或ISP處(POP、Point of presence)安裝VPN軟件,客戶無須安裝任何特殊軟件。主要為ISP提供全面管理的VPN服務(wù),服務(wù)提供的起始點和終止點是ISP的POP,其內(nèi)部構(gòu)成、實施和管理對VPN客戶完全透明。
在上面介紹的隧道協(xié)議中,目前MPLS只能用于服務(wù)器發(fā)起的VPN方式。
4.按VPN的服務(wù)類型劃分
根據(jù)服務(wù)類型,VPN業(yè)務(wù)大致分為三類:接入VPN(Access VPN)、內(nèi)聯(lián)網(wǎng)VPN(Intranet VPN)和外聯(lián)網(wǎng)VPN(Extranet VPN)。通常情況下內(nèi)聯(lián)網(wǎng)VPN是專線VPN。
(1)接入VPN:這是企業(yè)員工或企業(yè)的小分支機(jī)構(gòu)通過公網(wǎng)遠(yuǎn)程訪問企業(yè)內(nèi)部網(wǎng)絡(luò)的VPN方式。遠(yuǎn)程用戶一般是一臺計算機(jī),而不是網(wǎng)絡(luò),因此組成的VPN是一種主機(jī)到網(wǎng)絡(luò)的拓?fù)淠P?。需要指出的是接入VPN不同于前面的撥號VPN,這是一個容易發(fā)生混淆的地方,因為遠(yuǎn)程接入可以是專線方式接入的,也可以是撥號方式接入的。
(2)內(nèi)聯(lián)網(wǎng)VPN:這是企業(yè)的總部與分支機(jī)構(gòu)之間通過公網(wǎng)構(gòu)筑的虛擬網(wǎng),這是一種網(wǎng)絡(luò)到網(wǎng)絡(luò)以對等的方式連接起來所組成的VPN.
(3)外聯(lián)網(wǎng)VPN:這是企業(yè)在發(fā)生收購、兼并或企業(yè)間建立戰(zhàn)略聯(lián)盟后,使不同企業(yè)間通過公網(wǎng)來構(gòu)筑的虛擬網(wǎng)。這是一種網(wǎng)絡(luò)到網(wǎng)絡(luò)以不對等的方式連接起來所組成的VPN(主要在安全策略上有所不同)。
5.按承載主體劃分
營運VPN業(yè)務(wù)的企業(yè);既可以自行建設(shè)他們的VPN網(wǎng)絡(luò),也可以把此業(yè)務(wù)外包給VPN商。這是客戶和ISP最關(guān)心的問題。
(1)自建VPN:這是一種客戶發(fā)起的VPN.企業(yè)在駐地安裝VPN的客戶端軟件,在企業(yè)網(wǎng)邊緣安裝VPN網(wǎng)關(guān)軟件,完全獨立于營運商建設(shè)自己的VPN網(wǎng)絡(luò),運營商不需要做任何對VPN的支持工作。企業(yè)自建VPN的好處是它可以直接控制VPN網(wǎng)絡(luò),與運營商獨立,并且VPN接入設(shè)備也是獨立的。但缺點是VPN技術(shù)非常復(fù)雜,這樣組建的VPN成本很高,QoS也很難保證。
(2)外包VPN:企業(yè)把VPN服務(wù)外包給運營商,運營商根據(jù)企業(yè)的要求規(guī)劃、設(shè)計、實施和運維客戶的VPN業(yè)務(wù)。企業(yè)可以因此降低組建和運維VPN的費用,而運營商也可以因此開拓新的IP業(yè)務(wù)增值服務(wù)市場,獲得更高的收益,并提高客戶的保持力和忠誠度。筆者將目前的外包VPN劃分為兩種:基于網(wǎng)絡(luò)的VPN和基于CE(用戶邊緣設(shè)備)的管理型VPN(Managed VPN)。基于網(wǎng)絡(luò)的VPN通常在運營商網(wǎng)絡(luò)的呈現(xiàn)點(POP)安裝電信級VPN交換設(shè)備。基于CE的管理型VPN業(yè)務(wù)是一種受信的第三方負(fù)責(zé)設(shè)計企業(yè)所希望的VPN解決方案,并代表企業(yè)進(jìn)行管理,所使用的安全網(wǎng)關(guān)(防火墻、路由器等)位于用戶一側(cè)。
6.按VPN業(yè)務(wù)層次模型劃分
這是根據(jù)ISP向用戶提供的VPN服務(wù)工作在第幾層來劃分的(注意不是根據(jù)隧道協(xié)議工作在哪一層劃分的)。
(1)撥號VPN業(yè)務(wù)(VPDN):這是第一種劃分方式中的VPDN(事實上是按接入方式劃分的,因為很難明確VPDN究竟屬于哪一層)。
(2)虛擬租用線(VLL):這是對傳統(tǒng)的租用線業(yè)務(wù)的仿真,用IP網(wǎng)絡(luò)對租用線進(jìn)行模擬,而從兩端的用戶看來這樣一條虛擬租用線等價于過去的租用線。
(3)虛擬專用路由網(wǎng)(VPRN)業(yè)務(wù):這是對第三層IP路由網(wǎng)絡(luò)的一種仿真??梢园裋PRN理解成第三層VPN技術(shù)。
(4)虛擬專用局域網(wǎng)段(VPLS):這是在IP廣域網(wǎng)上仿真LAN的技術(shù)。可以把VPLS理解成一種第二層VPN技術(shù)。
#p#
三、 使用OpenVPN
OpenVPN 是一個強(qiáng)大、高度可配置、基于ssl的 VPN (Virtual Private Network)Open Source 軟件。它具有多種的驗證方式以及許多強(qiáng)大的功能。OpenVPN工作在OSI模型的第2或第3層,使用SSL/TLS協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸。支持多種客戶認(rèn)證方法,如證書、smart cards,加上用戶名密碼的證書認(rèn)證等。除此以外,還有強(qiáng)大的ACL功能限制客戶的信息交換。
OpenVPN可以運行在多種操作系統(tǒng)中,包括:Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris。通過使用OpenVpn,可以實現(xiàn):
使用特定udp或tcp端口實現(xiàn)兩臺主機(jī)的之間的vpn連接。
實現(xiàn)C/S結(jié)構(gòu),實現(xiàn)多臺client通過server服務(wù)器互連互通。
通過TLS/SSL加密保證數(shù)據(jù)傳輸?shù)陌踩?/P>
通過數(shù)據(jù)的壓縮,提高數(shù)據(jù)傳輸?shù)乃俣取?/P>
主流Linux的安裝光盤中已經(jīng)自帶了OpenVPN的安裝程序,在系統(tǒng)安裝的時候,用戶可以選擇進(jìn)行安裝。如果系統(tǒng)安裝時沒有安裝,用戶也可以隨時使用安裝盤進(jìn)行安裝。為了確認(rèn)系統(tǒng)是否已經(jīng)安裝該軟件,可以使用如圖 1的命令,進(jìn)行查看,圖中顯示結(jié)果表明系統(tǒng)已經(jīng)安裝了該軟件:
圖 1 查詢OpenVPN的安裝情況
(1)制作證書
1.制作證書前的準(zhǔn)備
復(fù)制openvpn證書工具包,在安裝完openvpn后,系統(tǒng)會在/etc下建一個openvpn的目錄,這樣我們可以把openvpn證書工具包拷貝到/etc/openvpn目錄下,需要注意如下幾個主要的存放位置:
證書工具包默認(rèn)位置:/usr/share/openvpn/easy-rsa
準(zhǔn)備配置證書位置:/etc/openvpn/
證書生成位置:/etc/openvpn/easy-rsa/2.0/keys
使用命令如下所示:
# cp -r /usr/share/openvpn/easy-rsa /etc/openvpn/
# mkdir /etc/openvpn/easy-rsa/2.0/keys
2.修改vars變量初始化配置文件
編輯easy-rsa/2.0/vars文件,需要進(jìn)行如下幾個操作:
注釋掉export CA_EXPIRE=3650,在前面加個#號即可
注釋掉export KEY_EXPIRE=3650,在前面加個#號即可
修改證書默認(rèn)值(如圖 2中白色區(qū)域所示)
圖 2 修改vars文件中的相應(yīng)區(qū)域
3.初始化證書庫
主要包括初始化變量庫和清空變量庫兩個步驟,如下所示的命令(參見圖 3):
//初始化變量庫
#./vars
//清空證書庫
#./clean-all
圖 3 初始化證書庫
4.證書驗證機(jī)制
執(zhí)行如下命令,如圖 4所示,在執(zhí)行過程中,輸入對應(yīng)的信息,完成后在keys目錄下,會生成ca.crt和ca.key這兩個文件:
圖 4 完成證書驗證機(jī)制
5.生成服務(wù)器證書
執(zhí)行./build-key-server server命令,執(zhí)行完成后在keys目錄下,會生成server.crt、server.csr和server.key這三個文件,如圖 5所示:
圖 5 生成服務(wù)器證書
6.生成客戶端證書
在openvpn中,這種配置方法是每一個登陸的VPN客戶端需要有一個證書,每個證書在同一時刻只能供一個客戶端連接(如果有兩個機(jī)器安裝相同證書,同時撥服務(wù)器,都能撥上,但是只有第一個撥上的才能連通網(wǎng)絡(luò))。所以需要建立許多份證書。執(zhí)行./build-key vpn_client1命令將執(zhí)行完成后在keys目錄下,會生成vpn_client1.crt、vpn_client1.csr和vpn_client1.key這三個文件,如圖 6所示:
一個服務(wù)器端可以配多個客戶端證書,但是每個客戶端都不能一樣,主要體現(xiàn)在Common Name這里,每一個客戶端的Common Name都必須不一樣,用戶可以再繼續(xù)建出多個客戶端證書,如下所示:
#./build-key vpn_client2
#./build-key vpn_client3
7.編譯證書
采用./build-dh命令將剛剛生成出來的證書和鑰匙等等進(jìn)行了一次加密算法,然后證書和鑰匙都準(zhǔn)備好了,此時在keys目錄下,會生成dh1024.pem文件。如圖 7所示:
圖 7 編譯證書
(2)配置服務(wù)端
如果以上所述的七步都運行正常的情況下,用戶就開始配置服務(wù)端了,如果中間過程有出現(xiàn)什么問題,建議清空證書庫,重新來過,執(zhí)行./clean-all來清空庫即可。
配置客戶端需要執(zhí)行如下幾個步驟:
(1)首先把幾個證書、鑰匙和驗證機(jī)制都拷貝到/etc/openvpn目錄下,如下命令所示:
# cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
# cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/
# cp /etc/openvpn/easy-rsa/2.0/keys/server.crt /etc/openvpn/
# cp /etc/openvpn/easy-rsa/2.0/keys/server.key /etc/openvpn/
(2)然后把服務(wù)器的配置文件拷貝到/etc/openvpn目錄下,如下所示:
# cp /usr/share/doc/openvpn-2.1/sample-config-files/server.conf /etc/openvpn/
(3)編輯/etc/openvpn/server.conf配置文件,去掉下述選項前面的;分號,以使其生效:
;user nobody
;group nobody
(4)啟動openvpn,查看一下端口1194是否已開放,如果1194已開放那就表明openvpn服務(wù)端已經(jīng)配置成功了,如下所示:
#/etc/init.d/openvpn start
(5)設(shè)置開機(jī)自啟動openvpn,使用如下命令,找到openvpn服務(wù)(如圖 8所示),并選中服務(wù)確認(rèn)即可,下次系統(tǒng)啟動的時候會自動加載openvpn服務(wù):
#ntsysv
圖 8 設(shè)置OpenVPN開機(jī)啟動
(6)設(shè)置防火墻,使得VPN流量能夠正常通過。在系統(tǒng)管理中,打開防火墻配置,開啟OpenVPN和SSH(前面打溝即可),如圖 9所示:
圖 9 設(shè)置防火墻
(3) 配置客戶端
配置客戶端vpn_client1需要使用源代碼包目錄sample-config-files里的client.conf 修改即可,如下片段所示:
client
dev tun
proto tcp
remote IP_address port
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert vpn_client1.crt。
key vpn_client1.key
#comp-lzo
其中,主要考慮如下幾個參數(shù)的設(shè)定:
proto tcp或proto udp:和server.conf 一致即可
remote IP_address port:指定vpn server 的IP 地址和端口
cert vpn_client1.crt和key vpn_client1.key:這2 行填給vpn_client1生成的密鑰文件
通過如上配置后,就可以使用OpenVPN進(jìn)行安全通信了。
#p#
假設(shè)要搭建一個VPN服務(wù),VPN服務(wù)端是有兩個IP地址,其中eth0(172.16.6.79)提供VPN服務(wù),由外部通過172.31.16.0/24通過1194端口撥入,然后通過eth1(192.168.253.79)訪問192.168.253.0/24去維護(hù)服務(wù)器。
具體的配置如下:
1.服務(wù)器端配置
vpn server 的目錄/etc/openvpn 下有文件ca.crt,ca.key,dh1024.pem,server.crt,server.key和server.conf 以及子目錄ccd。/etc/openvpn/ccd 目錄下有文件client1,client2 和client3。
(1)/etc/openvpn/server.conf 內(nèi)容如下:
;local a.b.c.d
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
client-config-dir ccd
#使vpn clients 能訪問vpn server 內(nèi)部網(wǎng)段計算機(jī)
push "route 172.16.6.0 255.255.255.0"
route 172.31.13.0 255.255.255.0
(2)/etc/openvpn/ccd/client1 內(nèi)容如下:
ifconfig-push 10.8.0.5 10.8.0.6
iroute 172.31.13.0 255.255.255.0
2.客戶機(jī)端配置
vpn client1 的目錄/etc/openvpn 下有文件ca.crt,ca.key client1.crt,client1.key 和client1.conf。
/etc/openvpn/client1.conf 內(nèi)容如下:
Client
dev tun
proto udp
remote 172.16.6.79 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
keepalive 10 120
【51CTO.COM 獨家特稿,轉(zhuǎn)載請注明出處及作者!】