Open***部署實施方案

Open×××簡介

×××直譯就是虛擬專用通道,是提供給企業之間或者我的與公司之間安全數據傳輸的隧道,Open×××無疑是Linux下開源×××的先鋒,提供了良好的性能和友好的用戶GUI。[node

Open×××容許參與創建×××的單點使用共享金鑰,電子證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫中的SSLv3 /TLSv1 協議函式庫。Open×××能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X與Windows 上運行,幷包含了許多安全性的功能。它並非一個基於Web的×××軟件,也不與IPsec及其餘×××軟件包兼容。linux

        虛擬私有網絡(×××)隧道是經過Internet隧道技術將兩個不一樣地理位置的網絡安全的鏈接起來的技術。當兩個網絡是使用私有IP地址的私有局域網絡時,它們之間是不能相互訪問的,這時使用隧道技術就可使得兩個子網內的主機進行通信。例如,×××隧道技術常常被用於大型機構中不一樣辦公區域子網的鏈接。
有時,使用×××隧道僅僅是由於它很安全。服務提供商與公司會使用這樣一種方式架設網絡,他們將重要的服務器(如,數據庫,VoIP,銀行服務器)放置到一個子網內,僅僅讓有權限的用戶經過×××隧道進行訪問。若是須要搭建一個安全的×××隧道,一般會選用IPsec,由於IPsec ×××隧道被多重安全層所保護。

××× (虛擬專用網)發展至今已經不在是一個單純的通過加密的訪問隧道了,它已經融合了訪問控制、傳輸管理、加密、路由選擇、可用性管理等多種功能,並在全球的信息安全體系中發揮着重要的做用。也在網絡上,有關各類×××協議優缺點的比較是仁者見仁,智者見智,不少技術人員因爲出於使用目的考慮,包括訪問控制、 安全和用戶簡單易用,靈活擴展等各方面,權衡利弊,難以取捨;尤爲在VOIP語音環境中,網絡安全顯得尤其重要,所以如今愈來愈多的網絡電話和語音網關支持×××協議。web

一. ***分類算法

1. PPTP

點對點隧道協議 (PPTP) 是由包括微軟和3Com等公司組成的PPTP論壇開發的一種點對點隧道協,基於撥號使用的PPP協議使用PAP或CHAP之類的加密算法,或者使用Microsoft的點對點加密算法MPPE。其經過跨越基於 TCP/IP 的數據網絡建立 ××× 實現了從遠程客戶端到專用企業服務器之間數據的安全傳輸。PPTP 支持經過公共網絡(例如 Internet)創建按需的、多協議的、虛擬專用網絡。PPTP 容許加密 IP 通信,而後在要跨越公司 IP 網絡或公共 IP 網絡(如 Internet)發送的 IP 頭中對其進行封裝。數據庫

wKioL1d7202Qu12eAAERzBA1VF0880.png

2. L2TP

第 2 層隧道協議 (L2TP) 是IETF基於L2F (Cisco的第二層轉發協議)開發的PPTP的後續版本。是一種工業標準 Internet 隧道協議,其能夠爲跨越面向數據包的媒體發送點到點協議 (PPP) 框架提供封裝。PPTP和L2TP都使用PPP協議對數據進行封裝,而後添加附加包頭用於數據在互聯網絡上的傳輸。PPTP只能在兩端點間創建單一隧道。 L2TP支持在兩端點間使用多隧道,用戶能夠針對不一樣的服務質量建立不一樣的隧道。L2TP能夠提供隧道驗證,而PPTP則不支持隧道驗證。可是當L2TP 或PPTP與IPSEC共同使用時,能夠由IPSEC提供隧道驗證,不須要在第2層協議上驗證隧道使用L2TP。 PPTP要求互聯網絡爲IP網絡。L2TP只要求隧道媒介提供面向數據包的點對點的鏈接,L2TP能夠在IP(使用UDP),楨中繼永久虛擬電路 (PVCs),X.25虛擬電路(VCs)或ATM VCs網絡上使用。vim

wKiom1d725Gzw6IuAAH9LvRknns407.png

3. IPSec

IPSec 的隧道是封裝、路由與解封裝的整個過程。隧道將原始數據包隱藏(或封裝)在新的數據包內部。該新的數據包可能會有新的尋址與路由信息,從而使其可以經過網絡傳輸。隧道與數據保密性結合使用時,在網絡上竊聽通信的人將沒法獲取原始數據包數據(以及原始的源和目標)。封裝的數據包到達目的地後,會刪除封裝,原始數據包頭用於將數據包路由到最終目的地。windows

wKioL1d728HSinUcAADmwcBV8yw482.png

4. SSL×××

SSL協議提供了數據私密性、端點驗證、信息完整性等特性。SSL協議由許多子協議組成,其中兩個主要的子協議是握手協議和記錄協議。握手協議容許服務器 和客戶端在應用協議傳輸第一個數據字節之前,彼此確認,協商一種加密算法和密碼鑰匙。在數據傳輸期間,記錄協議利用握手協議生成的密鑰加密和解密後來交換 的數據。centos

wKioL1d73BaTyqwzAAHZ7hXeEBU588.png

SSL獨立於應用,所以任何一個應用程序均可以享受它的安全性而沒必要理會執行細節。SSL置身於網絡結構體系的傳輸層和應用層之間。此外,SSL自己就被幾乎全部的Web瀏覽器支持。這意味着客戶端不須要爲了支持SSL鏈接安裝額外的軟件。這兩個特徵就是SSL能 應用於×××的關鍵點。瀏覽器

二. 什麼是×××使用的隧道技術與隧道協議

        ×××隧道所使用的公共網絡能夠是任何類型的通訊網絡。能夠是Internet,也能夠是企業內部網。爲建立隧道,×××的客戶機和服務器必須使用相同的隧道協議,經常使用的隧道協議包括點對點隧道協議PPTP、第2層隧道協議L2TP和安全IP隧道模式IPSec。
   
   
按照開放系統互聯OSI參考模型劃分,隧道技術能夠分爲以第2層隧道協議爲基礎的技術和以第3層隧道協議爲基礎的技術。第2層隧道協議對應OSI模型中的數據鏈路層,使用幀做爲數據傳輸單位。PPTP和L2TP協議屬於第2層隧道協議,都是將數據封裝在點對點協議(PPP)的幀中經過Internet發送。第3層隧道協議對應OSI模型中的網絡層,使用包做爲數據傳輸單位。安全IP隧道模式IPSec屬於第3層隧道協議,是將數據包封裝在附加了IP包頭的新數據包中經過IP網絡傳送。
 
 
點對點隧道協議(PPTP,Point-to-PointTunnelingProtocol)將點對點協議(PPP,Point-to-PointProtocol)的數據幀封裝進IP數據包中,經過TCP/IP網絡進行傳輸。PPTP能夠對IP、IPX或NetBEUI數據進行加密傳遞。PPTP經過PPTP控制鏈接來建立、維護和終止一條隧道,並使用通用路由封裝(GRE,GenericRoutingEncapsulation)對PPP數據幀進行封裝。封裝前,PPP數據幀的有效載荷(有效傳輸數據)首先必須通過加密、壓縮或是二者的混合處理。
   
   
第2層隧道協議(L2TP,LayerTwoTunnelingProtocol)是PPTP和第2層轉發技術(L2F,LayerTwoForward)的結合。第2層轉發是Cisco公司提出的隧道技術。爲了不PPTP和L2F兩種互不兼容的隧道技術在市場上彼此競爭給用戶形成困惑和帶來不便,Internet工程任務委員會IETF要求將兩種技術結合在單一隧道協議中,並在該協議中綜合PPTP和L2F二者的優勢,由此產生了L2TP。L2TP協議將PPP數據幀封裝後,可經過TCP/IP、X.2五、幀中繼或ATM等網絡進行傳送。L2TP能夠對IP、IPX或NetBEUI數據進行加密傳遞。目前,僅定義了基於TCP/IP網絡的L2TP。L2TP隧道協議既可用於Internet,也可用於企業內部網。
   
   
爲了實如今專用或公共IP網絡上的安全傳輸,安全IP隧道模式IPSec使用安全方式封裝和加密整個IP包。它首先對IP數據包進行加密,而後將密文數據包再次封裝在明文IP包內,經過網絡發送到接收端的×××服務器。×××服務器對收到的數據包進行處理,在去除明文IP包頭,對內容進行解密以後,得到原始的IP數據包,再將其路由到目標網絡的接收計算機。
 
 
在這三種隧道協議中,點對點隧道協議PPTP和第2層隧道協議L2TP的優勢是對用微軟公司操做系統的用戶來講很方便,由於微軟公司已把它們做爲路由軟件的一部分;缺點是PPTP和L2TP將不安全的IP數據包封裝在安全的IP數據包內。PPTP和L2TP適用於遠程訪問虛擬專用網。安全IP隧道模式IPSec的優勢是它定義了一套用於認證、保護私密和數據完整性的標準協議,缺點是微軟公司對IPSec的支持不夠。IPSec適用於可信的局域網之間的虛擬專用網,即企業內部網×××應用。安全

Open×××

典型的SSL ×××應用如Open×××,是一個比較好的開源軟件。PPTP主要爲那些常常外出移動或家庭辦公的用戶考慮;而Open×××主要是針對企業異地兩地總分公司之間的×××不間斷按需鏈接,例如ERP在企業中的應用。

Open××× 容許參與創建×××的單點使用預設的私鑰,第三方證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫,以及SSLv3/TLSv1 協議。Open×××能在Linux、xBSD、Mac OS X與Windows 2000/XP上運行。它並非一個基於Web的×××軟件,也不與IPsec及其餘×××軟件包兼容。

隧道加密
Open×××使用OpenSSL庫加密數據與控制信息:它使用了OpesSSL的加密以及驗證功能,意味着,它可以使用任何OpenSSL支持的算法。它提供了可選的數據包HMAC功能以提升鏈接的安全性。此外,OpenSSL的硬件加速也能提升它的性能。

驗證
Open×××提供了多種身份驗證方式,用以確認參與鏈接雙方的身份,包括:預享私鑰,第三方證書以及用戶名/密碼組合。預享密鑰最爲簡單,但同時它 只能用於創建點對點的×××;基於PKI的第三方證書提供了最完善的功能,可是須要額外的精力去維護一個PKI證書體系。Open×××2.0後引入了用 戶名/口令組合的身份驗證方式,它能夠省略客戶端證書,可是仍有一份服務器證書須要被用做加密.

網絡
Open×××全部的通訊都基於一個單一的IP端口,默認且推薦使用UDP協議通信,同時TCP也被支持。Open×××鏈接能經過大多數的代理服務 器,而且可以在NAT的環境中很好地工做。服務端具備向客戶端「推送」某些網絡配置信息的功能,這些信息包括:IP地址、路由設置等。Open×××提供 了兩種虛擬網絡接口:通用Tun/Tap驅動,經過它們,能夠創建三層IP隧道,或者虛擬二層以太網,後者能夠傳送任何類型的二層以太網絡數據。傳送的數 據可經過LZO算法壓縮。IANA(Internet Assigned Numbers Authority)指定給Open×××的官方端口爲1194。Open××× 2.0之後版本每一個進程能夠同時管理數個併發的隧道。

Open×××使用通用網絡協議(TCP與UDP)的特色使它成爲IPsec等協議的理想替代,尤爲是在ISP(Internet service provider)過濾某些特定×××協議的狀況下。在選擇協議時候,須要注意2個加密隧道之間的網絡情況,若有高延遲或者丟包較多的狀況下,請選擇 TCP協議做爲底層協議,UDP協議因爲存在無鏈接和重傳機制,致使要隧道上層的協議進行重傳,效率很是低下。

安全
Open×××與生俱來便具有了許多安全特性:它在用戶空間運行,無須對內核及網絡協議棧做修改; 初始完畢後以chroot方式運行,放棄root權限;使用mlockall以防止敏感數據交換到磁盤。
Open×××經過PKCS#11支持硬件加密標識,如智能卡。


三. 環境部署

操做系統:centos6.6

應用軟件:open***,http(測試用),ntp,rsync或者scp(用來分發證書)

系統數量:3

具體應用:web(192.168.10.2)、***(eth0:192.168.10.1 eth1:20.20.20.1)client(20.20.20.2)

部署目標:client可以訪問web。

前期準備:在配置網段的時候,前期要先把應用軟件都裝上,防止配置完ip沒法鏈接yum,關閉selinux和iptables。


實現思路:

安裝open***軟件
CA配置
    自簽名證書
    爲 bj-***server 簽發證書
    爲 運維人員簽發證書(能夠複用)

四. 實際部署

  1. 安裝軟件(web,***server,***client)

    web(略:yum安裝,寫個測試頁,啓動服務)   

    ip配置(略:詳情請見ip具體應用)

    [***server and ***client]

[root@***server ~]# yum -y install open***

[***server]

[root@***server /]# cd /usr/share/doc/open***-2.0.9/easy-rsa/
[root@***server easy-rsa]# chmod +x *
[root@***server easy-rsa]# vim vars

export KEY_COUNTRY=CN
export KEY_PROVINCE=BJ
export KEY_CITY=BJ
export KEY_ORG="bj-***server"
export KEY_EMAIL="test@126.com"
[root@***server easy-rsa]# source vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/open***-2.0.9/easy-rsa/keys
[root@***server easy-rsa]#
[root@***server easy-rsa]# source vars
[root@***server easy-rsa]# ./clean-all
[root@***server easy-rsa]# ./build-ca     //生成ca根私鑰和根證書,別的選項都默認
Common Name (eg, your name or your server's hostname) []:ca

[root@***server easy-rsa]# ./build-key-server server  爲服務器端生成證書和祕鑰   [server 默認]

Generating a 1024 bit RSA private key
..............................................................++++++
........++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BJ]:
Locality Name (eg, city) [BJ]:
Organization Name (eg, company) [bj-***server]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:bj-server
Email Address [test@126.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/open***-2.0.9/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CN'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'BJ'
organizationName      :PRINTABLE:'bj-***server'
commonName            :PRINTABLE:'bj-server'
emailAddress          :IA5STRING:'test@126.com'
Certificate is to be certified until Jul  3 12:31:22 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@***server easy-rsa]#

2. ***client 簽發證書

[root@bj-***server easy-rsa]# ./build-key client1       //client1自定義證書名
Common Name (eg, your name or your server's hostname) []:client1

3. 建立密鑰協商文件 迪菲·赫爾曼密鑰

[root@***server easy-rsa]# ./build-dh
[root@***server easy-rsa]# ls keys/
01.pem    ca.key         client1.key  index.txt.attr      serial      server.csr
02.pem    client1.crt  dh1024.pem   index.txt.attr.old  serial.old  server.key
ca.crt    client1.csr  index.txt      index.txt.old       server.crt
[root@***server easy-rsa]# pwd
/usr/share/doc/open***-2.0.9/easy-rsa
[root@***server easy-rsa]# cd keys/
[root@***server keys]# cp ca.crt server.key server.crt dh1024.pem /etc/open***/
[root@***server keys]# ls /etc/open***/
ca.crt    dh1024.pem  server.crt    server.key
[root@***server keys]#

4. 修改open***

[root@***server keys]# cp /usr/share/doc/open***-2.0.9/sample-config-files/server.conf /etc/open***/
[root@***server keys]# vim /etc/open***/server.conf

local 20.20.20.1                 //***服務器提供服務的IP
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  
dh dh1024.pem
server 10.8.0.0 255.255.255.0      //隧道tun網絡
ifconfig-pool-persist ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
push "route 192.168.10.0 255.255.255.0"    //爲全部客戶添加到北京內網1的路由
push "route 192.168.20.0 255.255.255.0"    //爲全部客戶添加到北京內網2的路由
client-config-dir ccd                                           
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway"
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
;client-to-client                                                             
;duplicate-cn              //是否容許證書複用
keepalive 10 120
;tls-auth ta.key 0 # This file is secret
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status open***-status.log
log         open***.log
verb 3
mute 20


5.開啓路由轉發

[root@bj-***server ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@bj-***server ~]# sysctl -p

6. 開啓服務

[root@***server ~]# service open*** start
[root@***server ~]# chkconfig open*** on

7. 查看ip

[root@***server keys]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:d0:cd:4b:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.15/24 brd 192.168.122.255 scope global eth0
    inet6 fe80::5054:d0ff:fecd:4b2d/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:fb:18:d2 brd ff:ff:ff:ff:ff:ff
    inet 20.20.20.1/24 brd 20.20.20.255 scope global eth1
    inet6 fe80::5054:ff:fefb:18d2/64 scope link 
       valid_lft forever preferred_lft forever

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/[65534]
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

8. 將client證書導入client

***client

[root@***client ~]# cp /usr/share/doc/open***-2.0.9/sample-config-files/client.conf /etc/open***/

***server

[root@***server keys]# scp ca.crt client1.crt client1.key root@20.20.20.2:/etc/open***/
The authenticity of host '20.20.20.2 (20.20.20.2)' can't be established.
RSA key fingerprint is e4:30:be:43:07:0d:0c:a4:87:60:84:38:f8:ac:b8:04.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '20.20.20.2' (RSA) to the list of known hosts.
root@20.20.20.2's password: 
ca.crt                                        100% 1139     1.1KB/s   00:00    
client1.crt                                   100% 3405     3.3KB/s   00:00    
client1.key                                   100%  916     0.9KB/s   00:00    
[root@***server keys]# 
[root@***client ~]# ls /etc/open***/
ca.crt    client1.crt  client1.key  client.conf

9. 配置***client配置文件

[root@***client ~]# ls /etc/open***/
ca.crt  cd-client1.crt  cd-client1.key
[root@***client ~]# vim /etc/open***/client.conf 
client
dev tun
;dev-node MyTap
proto udp
remote 20.20.20.1 1194   //撥號地址==》***server
;remote-random
nobind
user nobody
group nobody
persist-key
persist-tun
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings
ca ca.crt
cert cd-client1.crt
key  cd-client1.key
;ns-cert-type server
;tls-auth ta.key 1
;cipher x
comp-lzo
verb 3
mute 20

10. ***client啓動

root@***client open***]# service open*** restart
Shutting down open***: [  OK  ]
Starting open***: [  OK  ]
[root@***client open***]# chkconfig open*** on

:證書錯誤啓動會出錯。

11.查看ip

[root@***client open***]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:f0:af:44:0f brd ff:ff:ff:ff:ff:ff
    inet 20.20.20.2/24 brd 20.20.20.255 scope global eth0
    inet6 fe80::5054:f0ff:feaf:440f/64 scope link 
       valid_lft forever preferred_lft forever

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/[65534]
    inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0

12. 測試

[root@***client open***]# curl 192.168.10.2
web test

五. windows訪問

  1. 安裝open***


open***-install-X.X.X.X-x86_64.exe

2.證書文件 ca.crt  cd-client1.crt  cd-client1.key導入

C:\Program Files\Open×××\config

3. 創建配置文件
默認不存在,須要去上層目錄去尋找

C:\Program Files\Open×××\config\client.o***
client
dev tun
proto udp
remote 20.20.20.1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert cd-client2.crt
key cd-client2.key
ns-cert-type  server
cipher BF-CBC
comp-lzo
verb 3
mute 20

wKioL1d768bxypLAAAEqvSd8zW4528.png-wh_50

client.o***目錄sample-config

wKioL1d77BThyuZfAAFIkkyxjco998.png-wh_50

正常啓動過程

wKiom1d77GewN-S1AAI1ZPCb1Lo526.png-wh_50

雙擊桌面圖標,就能夠訪問了,若是須要鏈接多個***,就須要重複上述步驟,而且把.o***的文件複製並更名,而後修改配置文件內容就能夠了,若是鏈接不上多是ntp有問題。

相關文章
相關標籤/搜索