在fedora中深入淺出VPN技術

火星人 @ 2014-03-12 , reply:0


  

  隨著網路通信技術的發展和網路應用的不斷湧現,越來越多的用戶數據和企業信息在互聯網進行傳送。隨之而來的是越來越多的黑客和網路威脅,他們對這些機密、敏感的數據採用各種手段進行竊取、篡改和破壞,從而達到其不可告人的目的。因此,通信數據的安全性受到前所未有的挑戰。鑒於這個目的,保證數據傳輸安全的VPN技術應運而生。

  VPN技術原理

  虛擬專用網可以幫助遠程用戶、公司分支機構、商業夥伴及供應商同公司的內部網建立可信的安全連接,並保證數據的安全傳輸。通過將數據流轉移到低成本的壓網路上,一個企業的虛擬專用網解決方案將大幅度地減少用戶花費在城域網和遠程網路連接上的費用。同時,這將簡化網路的設計和管理,加速連接新的用戶和網站。另外,虛擬專用網還可以保護現有的網路投資。隨著用戶的商業服務不斷發展,企業的虛擬專用網解決方案可以使用戶將精力集中到自己的生意上,而不是網路上。虛擬專用網可用於不斷增長的移動用戶的全球網際網路接入,以實現安全連接;可用於實現企業網站之間安全通信的虛擬專用線路,用於經濟有效地連接到商業夥伴和用戶的安全外聯網虛擬專用網。

  虛擬專用網至少應能提供如下功能:

  加密數據,以保證通過公網傳輸的信息即使被他人截獲也不會泄露。

  信息認證和身份認證,保證信息的完整性、合法性,並能鑒別用戶的身份。

  提供訪問控制,不同的用戶有不同的訪問許可權。

  VPN具有以下優點:

  (1)降低成本:企業不必租用長途專線建設專網,不必大量的網路維護人員和設備投資。利用現有的公用網組建的Intranet,要比租用專線或鋪設專線要節省開支,而且當距離越遠時節省的越多。如:某企業的北京與紐約分部之間的連接,不太可能自鋪專線;當一個遠程用戶在紐約想要連到北京的Intranet,用撥號訪問時,花的是國際長途話費;而用VPN技術時,只需在紐約和北京分別連接到當地的Internet就實現了互聯,雙方花的都是市話費。

  (2)容易擴展:網路路由設備配置簡單,無需增加太多的設備,省時省錢。對於發展很快的企業來說,VPN就更是不可不用了。如果企業組建自己的專用網,在擴展網路分支時,要考慮到網路的容量,架設新鏈路,增加互聯設備,升級設備等;而實現了VPN就方便多了,只需連接到公用網上,對新加入的網路終端在邏輯上進行設置,也不需要考慮公用網的容量問題、設備問題等。

  (3)完全控制主動權:VPN上的設施和服務完全掌握在企業手中。例如,企業可以把撥號訪問交給NSP去做,由自己負責用戶的查驗、訪問權、網路地址、安全性和網路變化管理等重要工作。

  二、 VPN的分類

  VPN的分類方式比較混亂。不同的生產廠家在銷售它們的VPN產品時使用了不同的分類方式,它們主要是產品的角度來劃分的。不同的ISP在開展VPN業務時也推出了不同的分類方式,他們主要是從業務開展的角度來劃分的。而用戶往往也有自己的劃分方法,主要是根據自己的需求來進行的。下面簡單介紹從不同的角度對VPN的分類。

  1.按接入方式劃分

  這是用戶和運營商最關心的VPN劃分方式。一般情況下,用戶可能是專線上(因特)網的,也可能是撥號上網的,這要根據擁護的具體情況而定。建立在IP網上的VPN也就對應的有兩種接入方式:專線接入方式和撥號接入方式。

  (1)專線VPN:它是為已經通過專線接入ISP邊緣路由器的用戶提供的VPN解決方案。這是一種“永遠在線”的VPN,可以節省傳統的長途專線費用。

  (2)撥號VPN(又稱VPDN):它是向利用撥號PSTN或ISDN接入ISP的用戶提供的VPN業務。這是一種“按需連接”的VPN,可以節省用戶的長途電話費用。需要指出的是,因為用戶一般是漫遊用戶,是“按需連接的,因此VPDN通常需要做身份認證(比如利用CHAP和RADIUS)

  2.按協議實現類型划

  這是VPN廠商和ISP最為關心的劃分方式。根據分層模型,VPN可以在第二層建立,也可以在第三層建立(甚至有人把在更高層的一些安全協議也歸入VPN協議。)

  (1)第二層隧道協議:這包括點到點隧道協議(PPTP)、第二層轉發協議(L2F),第二層隧道協議(L2TP)、多協議標記交換(MPLS)等。

  (2)第三層隧道協議:這包括通用路由封裝協議(GRE)、IP安全(IPSec),這是目前最流行的兩種三層協議。

  第二層和第三層隧道協議的區別主要在於用戶數據在網路協議棧的第幾層被封裝,其中GRE、IPSec和MPLS主要用於實現專線VPN業務,L2TP主要用於實現撥號VPN業務(但也可以用於實現專線VPN業務),當然這些協議之間本身不是衝突的,而是可以結合使用的。

  3.按VPN的發起方式劃分

  這是客戶和IPS最為關心的VPN分類。VPN業務可以是客戶獨立自主實現的,也可以是由ISP提供的。

  (1)發起(也稱基於客戶的):VPN服務提供的其始點和終止點是面向客戶的,其內部技術構成、實施和管理對VPN客戶可見。需要客戶和隧道伺服器(或網關)方安裝隧道軟體。客戶方的軟體發起隧道,在公司隧道伺服器處終止隧道。此時ISP不需要做支持建立隧道的任何工作。經過對用戶身份符(ID)和口令的驗證,客戶方和隧道伺服器極易建立隧道。雙方也可以用加密的方式通信。隧道一經建立,用戶就會感覺到ISP不在參與通信。

  (2)伺服器發起(也稱客戶透明方式或基於網路的):在公司中心部門或ISP處(POP、Point of presence)安裝VPN軟體,客戶無須安裝任何特殊軟體。主要為ISP提供全面管理的VPN服務,服務提供的起始點和終止點是ISP的POP,其內部構成、實施和管理對VPN客戶完全透明。

  在上面介紹的隧道協議中,目前MPLS只能用於伺服器發起的VPN方式。

  4.按VPN的服務類型劃分

  根據服務類型,VPN業務大致分為三類:接入VPN(Access VPN)、內聯網VPN(Intranet VPN)和外聯網VPN(Extranet VPN)。通常情況下內聯網VPN是專線VPN。

  (1)接入VPN:這是企業員工或企業的小分支機構通過公網遠程訪問企業內部網路的VPN方式。遠程用戶一般是一台計算機,而不是網路,因此組成的VPN是一種主機到網路的拓撲模型。需要指出的是接入VPN不同於前面的撥號VPN,這是一個容易發生混淆的地方,因為遠程接入可以是專線方式接入的,也可以是撥號方式接入的。

  (2)內聯網VPN:這是企業的總部與分支機構之間通過公網構築的虛擬網,這是一種網路到網路以對等的方式連接起來所組成的VPN.

  (3)外聯網VPN:這是企業在發生收購、兼并或企業間建立戰略聯盟后,使不同企業間通過公網來構築的虛擬網。這是一種網路到網路以不對等的方式連接起來所組成的VPN(主要在安全策略上有所不同)。

  5.按承載主體劃分

  營運VPN業務的企業;既可以自行建設他們的VPN網路,也可以把此業務外包給VPN商。這是客戶和ISP最關心的問題。

  (1)自建VPN:這是一種客戶發起的VPN.企業在駐地安裝VPN的客戶端軟體,在企業網邊緣安裝VPN網關軟體,完全獨立於營運商建設自己的VPN網路,運營商不需要做任何對VPN的支持工作。企業自建VPN的好處是它可以直接控制VPN網路,與運營商獨立,並且VPN接入設備也是獨立的。但缺點是VPN技術非常複雜,這樣組建的VPN成本很高,QoS也很難保證。

  (2)外包VPN:企業把VPN服務外包給運營商,運營商根據企業的要求規劃、設計、實施和運維客戶的VPN業務。企業可以因此降低組建和運維VPN的費用,而運營商也可以因此開拓新的IP業務增值服務市場,獲得更高的收益,並提高客戶的保持力和忠誠度。筆者將目前的外包VPN劃分為兩種:基於網路的VPN和基於CE(用戶邊緣設備)的管理型VPN(Managed VPN)。基於網路的VPN通常在運營商網路的呈現點(POP)安裝電信級VPN交換設備。基於CE的管理型VPN業務是一種受信的第三方負責設計企業所希望的VPN解決方案,並代表企業進行管理,所使用的安全網關(防火牆、路由器等)位於用戶一側。

  6.按VPN業務層次模型劃分

  這是根據ISP向用戶提供的VPN服務工作在第幾層來劃分的(注意不是根據隧道協議工作在哪一層劃分的)。

  (1)撥號VPN業務(VPDN):這是第一種劃分方式中的VPDN(事實上是按接入方式劃分的,因為很難明確VPDN究竟屬於哪一層)。

  (2)虛擬租用線(VLL):這是對傳統的租用線業務的模擬,用IP網路對租用線進行模擬,而從兩端的用戶看來這樣一條虛擬租用線等價於過去的租用線。

  (3)虛擬專用路由網(VPRN)業務:這是對第三層IP路由網路的一種模擬。可以把VPRN理解成第三層VPN技術。

  (4)虛擬專用區域網段(VPLS):這是在IP廣域網上模擬LAN的技術。可以把VPLS理解成一種第二層VPN技術。三、 使用OpenVPN

  OpenVPN 是一個強大、高度可配置、基於ssl的 VPN (Virtual Private Network)Open Source 軟體。它具有多種的驗證方式以及許多強大的功能。OpenVPN工作在OSI模型的第2或第3層,使用SSL/TLS協議進行網路傳輸。支持多種客戶認證方法,如證書、smart cards,加上用戶名密碼的證書認證等。除此以外,還有強大的ACL功能限制客戶的信息交換。

  OpenVPN可以運行在多種操作系統中,包括:Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris。通過使用OpenVPN,可以實現:

  使用特定udp或tcp埠實現兩台主機的之間的VPN連接。

  實現C/S結構,實現多台client通過server伺服器互連互通。

  通過TLS/SSL加密保證數據傳輸的安全。

  通過數據的壓縮,提高數據傳輸的速度。

  主流Linux的安裝光碟中已經自帶了OpenVPN的安裝程序,在系統安裝的時候,用戶可以選擇進行安裝。如果系統安裝時沒有安裝,用戶也可以隨時使用安裝盤進行安裝。為了確認系統是否已經安裝該軟體,可以使用如圖 1的命令,進行查看,圖中顯示結果表明系統已經安裝了該軟體:

  

 

  圖 1 查詢OpenVPN的安裝情況

  (1)製作證書

  1.製作證書前的準備

  複製openVPN證書工具包,在安裝完openVPN后,系統會在/etc下建一個openVPN的目錄,這樣我們可以把openVPN證書工具包拷貝到/etc/openVPN目錄下,需要注意如下幾個主要的存放位置:

  證書工具包默認位置:/usr/share/openVPN/easy-rsa

  準備配置證書位置:/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文件,需要進行如下幾個操作:

  註釋掉export CA_EXPIRE=3650,在前面加個#號即可

  註釋掉export KEY_EXPIRE=3650,在前面加個#號即可

  修改證書默認值(如圖 2中白色區域所示)

  

 

  圖 2 修改vars文件中的相應區域

  3.初始化證書庫

  主要包括初始化變數庫和清空變數庫兩個步驟,如下所示的命令(參見圖 3):

  //初始化變數庫

  #./vars

  //清空證書庫

  #./clean-all

  

 

  圖 3 初始化證書庫

  4.證書驗證機制

  執行如下命令,如圖 4所示,在執行過程中,輸入對應的信息,完成後在keys目錄下,會生成ca.crt和ca.key這兩個文件:

  

 

  圖 4 完成證書驗證機制

  5.生成伺服器證書

  執行./build-key-server server命令,執行完成後在keys目錄下,會生成server.crt、server.csr和server.key這三個文件,如圖 5所示:

  

 

  圖 5 生成伺服器證書

  6.生成客戶端證書

  在openVPN中,這種配置方法是每一個登陸的VPN客戶端需要有一個證書,每個證書在同一時刻只能供一個客戶端連接(如果有兩個機器安裝相同證書,同時撥伺服器,都能撥上,但是只有第一個撥上的才能連通網路)。所以需要建立許多份證書。執行./build-key VPN_client1命令將執行完成後在keys目錄下,會生成VPN_client1.crt、VPN_client1.csr和VPN_client1.key這三個文件,如圖 6所示:

  

 

  圖 6 為客戶端VPN_client1生成客戶端證書

  一個伺服器端可以配多個客戶端證書,但是每個客戶端都不能一樣,主要體現在Common Name這裡,每一個客戶端的Common Name都必須不一樣,用戶可以再繼續建出多個客戶端證書,如下所示:

  #./build-key VPN_client2

  #./build-key VPN_client3

  7.編譯證書

  採用./build-dh命令將剛剛生成出來的證書和鑰匙等等進行了一次加密演算法,然後證書和鑰匙都準備好了,此時在keys目錄下,會生成dh1024.pem文件。如圖 7所示:

  

 

  圖 7 編譯證書(2)配置服務端

  如果以上所述的七步都運行正常的情況下,用戶就開始配置服務端了,如果中間過程有出現什麼問題,建議清空證書庫,重新來過,執行./clean-all來清空庫即可。

  配置客戶端需要執行如下幾個步驟:

  (1)首先把幾個證書、鑰匙和驗證機制都拷貝到/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)然後把伺服器的配置文件拷貝到/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服務端已經配置成功了,如下所示:

  #/etc/init.d/openVPN start

  (5)設置開機自啟動openVPN,使用如下命令,找到openVPN服務(如圖 8所示),並選中服務確認即可,下次系統啟動的時候會自動載入openVPN服務:

  #ntsysv

  

 

  圖 8 設置OpenVPN開機啟動

  (6)設置防火牆,使得VPN流量能夠正常通過。在系統管理中,打開防火牆配置,開啟OpenVPN和SSH(前面打溝即可),如圖 9所示:

  

 

  圖 9 設置防火牆

  (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

  其中,主要考慮如下幾個參數的設定:

  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進行安全通信了。 (4)一個具體的配置實例

  假設要搭建一個VPN服務,VPN服務端是有兩個IP地址,其中eth0(172.16.6.79)提供VPN服務,由外部通過172.31.16.0/24通過1194埠撥入,然後通過eth1(192.168.253.79)訪問192.168.253.0/24去維護伺服器。

  具體的配置如下:

  1.伺服器端配置

  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 內容如下:

  ;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 內部網段計算機

  push "route 172.16.6.0 255.255.255.0"

  route 172.31.13.0 255.255.255.0

  (2)/etc/openVPN/ccd/client1 內容如下:

  ifconfig-push 10.8.0.5 10.8.0.6

  iroute 172.31.13.0 255.255.255.0

  2.客戶機端配置

  VPN client1 的目錄/etc/openVPN 下有文件ca.crt,ca.key client1.crt,client1.key 和client1.conf。

  /etc/openVPN/client1.conf 內容如下:

  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





[火星人 via ] 在fedora中深入淺出VPN技術已經有113次圍觀

http://www.coctec.com/docs/security/show-post-72515.html