使用open***構建安全***

使用open***構建安全***


***概述

***(Virtual PrivateNetwork)虛擬專用網絡,是依靠ISP和其他的NSP在公共網絡中建立專用的數據通信網絡的技術,可以爲企業之間或者個人之間提供安全的數據傳輸隧道服務。在***中任意兩點之間的連接並沒有傳統專網所需要的端到端的物理鏈路,而是利用公共網絡資源動態組成的,可以理解爲通過私有的隧道技術在公共數據網絡上模擬出來的和專網有同樣功能的點到點的專線技術,所謂虛擬是指***不需要去拉實際的物理線路,而是借用了公共Internet網絡來實現。

 

***的作用

***功能可以幫助公司遠程用戶公司的分支機構、商業合作伙伴及供應商等公司和自己的公司內部網絡之間建立可信的安全連接或者是局域網連接,確保數據的加密安全傳輸和業務訪問,對於運維工程師來說,可以連接不同的機房作爲局域網,處理相關的業務。


open ***的加密通信原理過程

open ***使用TLS加密是通過使用公開密鑰(非對稱密鑰,加密解密使用不同的key,一個稱爲public key,另一個是private key)對數據進行加密的。對於open ***使用TLS mode,首先server和client要有相同的CA證書,雙方通過交換證書驗證對方的合法性以決定是否建立***通信,然後使用對方CA把自己目前使用的數據加密方法(類似密鑰)加密後發送給對方,由於使用對方的CA加密,所以只有對方CA的對應的private key才能解密該字串,保證此密鑰的安全性,並且此密鑰定期改變,對於***來說,可能還沒有破解出密鑰,通信雙方已經更換密鑰了。


open***的基本信息處理過程

wKioL1lLgBPzgIRtAADRG2Hf6Dg541.jpg


理解了open***的基本概念,我們來做一個小實驗來實現open***的功能:


實驗


環境

***-server

eth0

IP:172.16.1.163

GW:172.16.1.2

eth1

IP:10.0.0.246
***-client

eth0

IP:10.0.0.247

GW:10.0.0.246(可選)


拓撲

wKiom1lMtyjTNvezAACyPXqJNF4587.jpg



***服務端的配置


同步時間

[root@***-server ~]# ntpdate  pool.ntp.org

[root@***-server ~]# echo '*/5 * * * *  /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1' >>/var/spool/cron/root     

[root@***-server ~]# crontab -l -uroot

*/5 * * * * /usr/bin/ntpdatepool.ntp.org > /dev/null 2>&1


安裝epel源,open***要在epel中下載安裝

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

 

安裝依賴包

[root@***-server~]#yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

 

安裝open***

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

 

生成Open***需要的證書

[root@***-server~]# yum -y install easy-rsa    #新版的***需要先下載easy-rsa

[root@***-server~]# cp -a /usr/share/easy-rsa/2.0/*  /etc/open***/  

[root@***-server~]# cd /etc/open***/

[root@***-serveropen***]# vi vars   #修改vars配置如下使得生成證書時不用再次輸入只需一路回車即可

exportKEY_COUNTRY="CN"

exportKEY_PROVINCE="BJ"

exportKEY_CITY="Beijing"

exportKEY_ORG="***-test"

exportKEY_EMAIL="[email protected]"

exportKEY_OU="testdomain"

[root@***-serveropen***]# chmod +x vars     #添加可執行權限

[root@***-serveropen***]# source vars        #執行腳本

NOTE:If you run ./clean-all, I will be doing a rm -rf on /etc/open***/keys

 

[root@***-serveropen***]# source clean-all   #初始化keys目錄並創建所需要的文件和目錄

[root@***-serveropen***]# source build-ca    #生成CA證書,用於簽發server和client證書,完成後生成ca.crt ca.key index.txt serial文件

[root@***-serveropen***]# source build-key-server server  #生成服務器端密鑰

[root@***-serveropen***]# source build-key client   #生成客戶器端密鑰

[root@***-serveropen***]# source build-dh   #生成Diffie Hellman文件,TLS server 需要使用的一個文件完成後生成dh1024.pem或dh2048.pem文件,大小在配置文件中定義。


編輯open***服務端配置文件

[root@***-server~]# cp /usr/share/doc/open***-2.3.13/sample/sample-config-files/server.conf/etc/open***/   #把配置文件模板拷貝到/etc/open***/

[root@***-serveropen***]# grep -Ev ";|#|^$" server.conf > 1  #去掉空行和註釋

[root@***-serveropen***]# cat 1 > server.conf   #輸出重定向到server.conf文件

[root@***-serveropen***]# vi server.conf  #編輯如下

port    1194      #監聽端口

proto  tcp        #使用的協議

dev     tun        #基於路由的隧道

push "route 10.0.0.0 255.255.255.0"   #open***服務器所在局域網的網段

ca  /etc/open***/keys/ca.crt       #ca證書的路徑

cert  /etc/open***/keys/server.crt      #服務器端證書的路徑

key  /etc/open***/keys/server.key     #服務器端密鑰的路徑

dh  /etc/open***/keys/dh2048.pem  #DiffieHellman文件的路徑

server  10.8.0.0 255.255.255.0   #配置***客戶端使用的網段,Open***會自動提供基於該網段的DHCP服務但不能和任何一方的局域網段重複,必須保證唯一

ifconfig-pool-persist ipp.txt    #維持一個客戶端和virtual IP的對應表以方便客戶端重新連接時可以獲得同樣的IP

keepalive 10 120    #設置服務端檢測的間隔和超時時間 每 10 秒 ping 一次如果 120 秒沒有迴應則認爲對方已經宕機

cipher  AES-256-CBC    #設置OPEN***密碼使用AES-256

persist-key    #通過keepalive檢測超時後,重新啓動***,不重新讀取keys,保留第一次使用的keys

persist-tun    #通過keepalive檢測超時後,重新啓動***,一直保持tun或者tap設備是linkup的,否則網絡連接會先linkdown然後linkup

status  open***-status.log     #輸出短日誌,每分鐘刷新一次,以顯示當前的客戶端

verb  3     #設置日誌記錄冗長級別

 

啓動OPEN***服務端

[root@***-server~]# systemctl start open***@server.service 

[root@***-server~]# systemctl enable open***@server.service


查看是否獲得了一個VIP

[root@***-serveropen***]# ip add show

6:tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UNKNOWN qlen 100

    link/none

    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

       valid_lft forever preferred_lft forever

 

配置防火牆和開啓內核轉發功能

[root@***-server~]# vi /etc/sysctl.conf

net.ipv4.ip_forward= 1

[root@***-server~]# sysctl -p

net.ipv4.ip_forward= 1

[root@***-server~]# firewall-cmd --permanent --add-port=1194/tcp

success

[root@***-server~]# firewall-cmd --permanent --add-masquerade

success

[root@***-server~]# firewall-cmd --reload

success

 

Window7_64客戶端配置


步驟:

  1.  先在win7上安裝open***客戶端

  2. 把open***服務器的ca.crt,client.crt,client.key,還有模板文件client.conf拷貝到open***的安裝目錄下的config目錄

  3. 修改client.conf如下,然後更改後綴名爲client.o***


client         #定義這是一個client,配置從server端pull拉取過來,如IP地址,路由信息之類,Server使用push指令推送過來。

dev    tun      #定義open***運行的模式,這個地方需要嚴格和Server端保持一致

proto  tcp   #使用的協議

remote  172.16.1.163 1194     #服務端的IP和端口

resolv-retry infinite              #始終重新解析Server的IP地址(如果remote後面跟的是域名),保證Server IP地址是動態的使用DDNS動態更新DNS後,Client在自動重新連接時重新解析Server的IP地址。這樣無需人爲重新啓動,即可重新接入***

nobind       #定義在本機不邦定任何端口監聽incoming數據

persist-key

persist-tun

ca   ca.crt           #定義CA證書文件

cert   client.crt    #定義客戶端證書文件

key    client.key    #定義客戶端密鑰文件

remote-cert-tls server #指定採用服務器校驗方式

cipher   AES-256-CBC

verb   3    #設置日誌記錄冗長級別

 

驗證

啓動客戶端,嘗試連接,成功之後會獲得一個IP以及open***服務器推送過來的路由、IP

wKioL1lLhZ-CQpyQAAAOPz6eXrY759.png

路由

wKiom1lLha7i_4h9AAADtVjUnmk540.png

ping測試open***服務器所在內網的主機是否可以連通

wKiom1lLhbiDNGWxAAAaJ3U3G5M169.png

 

查看服務器端的日誌

[root@***-server open***]# cat open***-status.log
Open*** CLIENT LIST
Updated,Thu Jun 22 23:24:26 2017
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client,172.16.1.1:57718,15899,7283,Thu Jun 22 23:23:31 2017
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,client,172.16.1.1:57718,Thu Jun 22 23:23:33 2017
GLOBAL STATS
Max bcast/mcast queue length,0
END

 

linux客戶端配置

 

下載open***

[root@open***-client~]# yum -y install epel-release

[root@open***-client~]#yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

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

 

拉取在服務端的客戶端證書、密鑰、CA證書,還有配置文件

[root@open***-client~]#cd /etc/open***/

scp 172.16.1.163:/etc/open***/keys/{client.key,client.crt,ca.crt}  .

scp /usr/share/doc/open***-2.3.13/sample/sample-config-files/client.conf .

[root@open***-client open***]# ll

total 20

-rw-r--r--.1 root root 1724 Dec  7 07:40 ca.crt

-rw-r--r--.1 root root  205 Dec  7 08:14 client.conf

-rw-r--r--.1 root root 5355 Dec  7 07:40 client.crt

-rw-r--r--.1 root root 1704 Dec  7 07:40 client.key

 

修改配置文件如下

[root@open***-client open***]# cat client.conf

client

dev  tun

proto  tcp

remote 172.16.1.163 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

remote-cert-tls server

cipher AES-256-CBC

 

以後臺方式啓動open***客戶端

[root@open***-clientopen***]# /usr/sbin/open*** --config /etc/open***/client.conf &

 

查看進程

[root@open***-clientopen***]# ps -ef|grep open***

avahi       920     1  0 09:07 ?        00:00:00 avahi-daemon: running[open***-client.local]

root       7759  3278  0 09:41 pts/0    00:00:00 /usr/sbin/open*** --config/etc/open***/client.conf

root       7836  3278  0 09:43 pts/0    00:00:00 grep --color=auto open***

 

驗證是否獲得一個open***所在網段的IP

[root@open***-clientopen***]# ip add show

6:tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UNKNOWN qlen 100

    link/none

    inet 10.8.0.6 peer 10.8.0.5/32 scope globaltun0

       valid_lft forever preferred_lft forever

 

獲得的路由

[root@open***-clientopen***]# route -n

10.0.0.0        10.8.0.5        255.255.255.0   UG   0      0        0 tun0

 

測試連通性

[root@open***-clientopen***]# ping 10.0.0.247

PING10.0.0.247 (10.0.0.247) 56(84) bytes of data.

64bytes from 10.0.0.247: icmp_seq=1 ttl=63 time=3.19 ms

64bytes from 10.0.0.247: icmp_seq=2 ttl=63 time=1.73 ms

64bytes from 10.0.0.247: icmp_seq=3 ttl=63 time=1.63 ms

 

查看日誌

[root@***-server~]# cat /etc/open***/open***-status.log

Open***CLIENT LIST

Updated,Thu Jun 22 23:39:29 2017

CommonName,Real Address,Bytes Received,Bytes Sent,Connected Since

client,172.16.1.168:36040,5742,6154,Thu Jun 22 23:43:31 2017

ROUTINGTABLE

VirtualAddress,Common Name,Real Address,Last Ref

10.8.0.6,client,172.16.1.168:36040,Thu Jun 22 23:43:31 2017

GLOBALSTATS

Maxbcast/mcast queue length,0

END

 

增加證書

[root@***-serveropen***]# . vars 執行腳本

[root@***-serveropen***]# . build-key xiaoli 創建證書

[root@***-serveropen***]# ls keys/|grep xiaoli

xiaoli.crt

xiaoli.csr

xiaoli.key

然後把xiaoli.key,xiaoli.crt,還有模板配置文件client.conf拷貝到open***的安裝目錄下的config目錄,把client.conf改名爲爲xiaoli.o***,如下

wKioL1lMsHCRscLCAACUyuHKpXk731.jpg

 

吊銷證書

[root@***-serveropen***]# . vars 執行腳本

[root@***-serveropen***]# . revoke-full client 吊銷證書

Usingconfiguration from /etc/open***/openssl-1.0.0.cnf

RevokingCertificate 02.

DataBase Updated

Usingconfiguration from /etc/open***/openssl-1.0.0.cnf

client.crt:C = CN, ST = BJ, L = Beijing, O = ***-test, OU = testdomain, CN = client, name= EasyRSA, emailAddress = [email protected]

error23 at 0 depth lookup:certificate revoked

 

成功註銷某個證書之後,可以打開keys/index.txt文件,可以看到被註銷的證書前面,已標記爲R

[root@***-serverkeys]# cat index.txt

V       261205114539Z                01     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=server/name=EasyRSA/[email protected]

R       261205114553Z       161207153029Z       02     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=client/name=EasyRSA/[email protected]

V       261205150854Z                03     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=xiaoli/name=EasyRSA/[email protected]

 

在配置文件中告訴Open***服務器以後與客戶端連接的時候,通過crl.pem文件驗證該客戶端的證書是否已經被註銷。因此,我們需要在服務器端的配置文件加上相關配置然後重啓***服務

[root@***-serveropen***]# echo "crl-verify /etc/open***/keys/crl.pem" >>server.conf

[root@***-serverkeys]# systemctl restart open***@server.service



如有紕漏,歡迎指正。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章