Open***
環境:
拓撲圖:
出差人員win7 client
115.16.1.8/30
|
鄭州站點------------互聯網-------上海站點
內網:192.168.20.0 | 內網:192.168.10.0.24
|
eth0 : 1.1.1.1/30
北京Open ***(iptables)
eth1: 192.168.0.1/2 |
eth0: 192.168.0.100/24
公司內網網絡
希望屏幕前的你,能看懂O(∩_∩)O~
以下內容可能有錯誤的地方,發現了還行給予提示,發送到郵箱:[email protected]
在此謝過!!!
系統版本:CentOS release 6.6 (Final)---64位
內核版本:CentOS release 6.6 (Final)
軟件版本:open***-2.3.11-1.el6.x86_64
easy-rsa-2.2.2-1.el6.noarch
一、安裝前的準備
1.關閉SELINUX
$sudo sed -ri '/^SELINUX=.*/cSELINUX=disabled' /etc/selinux/config
2.在防火牆上開啓TCP 1194 端口,***的監聽端口
$sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$sudo iptables -t filter -A INPUT-p tcp -i eth0 –dport 1194 -j ACCEPT
3.時間同步,很重要哦
$sudo ntpdate 1.cn.pool.ntp.org
注:eth0爲open***的監聽網卡接口,是自己的網絡環境而定
二、安裝軟件
1.配置YUM
$sudo yum -y install epel-releas
2.開啓YUM緩存
$sudo sed -ri '/^keepcache=.*/ckeepcache=1' /etc/yum.con
3.清空YUM緩存的軟件包
$sudo yum clean packages
4.安裝軟件包
假如你有本地光盤鏡像源,用如下的方法之間安裝
$sudo yum -y install open*** easy-rsa
假如你可以連接互聯網,用如下的方法安裝
$sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-\
release-6-8.noarch.rpm
注意:上面是一行
5.把緩存好的open***所需要的軟件包打包,以備在其他Linux站點或客戶端用
$ tar jcf open***.tar.bz2 $(find /var/cache/yum/x86_64/6/ -iname "*.rpm" )
注:解壓的時候先看一下壓縮包裏的內容,用以下命令:
tar jtf open***.tar.bz2
你可以只解壓裏面的文件,不要裏面的目錄。用這個命令:
tar jxf open***.tar.bz2 --strip-components=7 -C 指定的文件夾
這裏的 7是解壓文件前面有斜槓“/”的個數,我這裏是7層
三、在***服務器端配置證書和私鑰
1.建立自簽名的CA證書和私鑰
a. 修改一下建立簽發證書需要的變量,基本作用就是設置一下籤發證書的單位的一些信息
$cd /usr/share/easy-rsa/2.0/
$sudo vim vars
export KEY_COUNTRY="CN" //國家
export KEY_PROVINCE="BJ" //省份
export
KEY_CITY="BJ" //城市
export KEY_ORG="SharkYun" //所屬機構
export KEY_EMAIL="[email protected]" //郵箱
$suod source vars //初始化變量
b. 生成CA的私鑰和證書(CA機構也就是這臺open*** server,字簽名的嘛!)
$sudo ./build-ca //一路回車
c. 爲這臺open*** server 生成私鑰和由CA機構簽名的證書
$sudo ./buid-key-server ***server //一路回車,輸2次y //***server是自定義的證書名字
d. 爲每個open***客戶端生成他們的私鑰和CA機構簽發的證書;因爲默認情況下,每個證書同一時間
只能提供一個客戶端進行登錄到*** server;這裏我們依次生成上海、鄭州以及出差人員西瓜甜的私
鑰和證書,證書名都是自定義的
$sudo ./buid-key bj-client //一路回車,輸2次y
$sudo ./buid-key zz-client //一路回車,輸2次y
$sudo ./buid-key xiguatian-client //一路回車,輸2次y
e. 創建祕鑰協商文件 迪菲·赫爾曼密鑰,這裏是新版本,會生成2048位的
$sudo ./build-dh //時間稍長,請耐心等待…
f. 爲了防止DDOS***和UDP淹沒等惡意***,生成一下 ta.key
$sudo open*** --genkey --sercret keys/ta.key
g. 到這裏,我們需要的密鑰和證書暫時創建完成,以後若還有出差人員需要,再創建一個就行了;
##現在查看一下。
$pwd
/usr/share/easy-rsa/2.0
$sudo ls -l keys
h. 把我們用到的證書和私鑰用合適的方式傳輸到合適的位置,每個客戶端都需要CA證書和,以及
open*** server 會需要CA證書和ta.key證書 ca.key
注意:這裏要說明一下,以 .crt 結尾的文件是簽名的證書,以 .key 結尾的文件是私鑰,以 .csr
爲 結尾的文件是申請簽名的用的,這個現在不需要了。以 .crt 和 .key 結尾的文件是我們需要的。
$sudo cp -a keys/{ca.crt,***server{crt,key},dh2048.pem,ta.key} /etc/open***/
下面的操作是把各個客戶端所需有的文件打包,方便傳送到各個客戶端的機器上;至於怎麼 傳,
建議用u盤吧,畢竟包含了敏感信息,不要用網絡。至於上海和鄭州的站點,安裝個加密軟件傳
送會比較安全。
$sudo cd keys
$sudo tar jcf bj-client.tar.bz2 ca.crt ta.key bj-client*
$sudo tar jcf zz-client.tar.bz2 ca.crt ta.key zz-client*
$suod tar jcf xiguatian-client.tar.bz2 ca.crt ta.key xiguatian-client*
四、配置open*** server
下面文中\表示一行中的shell內換行符,這個大家應該都知道啦。
1.先從示例中拷貝一份過來
$sudo cp /usr/share/doc/open***-2.3.11/sample /sample-config-files/server.conf /etc/open***/server.conf
注意: 上面是一行
2.配置open***server的配置文件,修改成爲一下內容
#*** server 的監聽地址
local 1.1.1.1
#監聽斷口
port 1194
#採用的協議,默認是udp協議;假如有http-proxy的話,就必須用tcp了。
proto tcp
#採用路由隧道模式
dev tun
#CA機構的證書的位置和名字,可以絕對路徑,也可以相對路徑,相對路徑是相對與此文件
#所在的目錄
ca ca.crt
#此***服務器的證書位置以及證書名字
cert ***server.crt
#此***服務器的私鑰位置和名字,這個文件要保護好,確保其安全!!!
key ***server.key # This file should be kept secret
#協商加密的文件
dh keys/dh2048.pem
#這個是隧道的網絡,第一個地址會分配個此***服務器
server 10.8.0.0 255.255.255.0
#客戶端重新連接***時,會優先從此文件中匹配後,分配給它地址,位置在此文件目錄下
ifconfig-pool-persist ipp.txt
#下面三項是用push來想所用客戶端發佈到各個站點內網的路由信息
push "route 192.168.10.0 255.255.255.0" //上海的內網
push "route 192.168.20.0 255.255.255.0" //鄭州的內網
push "route 192.168.0.0 255.255.255.0" //北京的內網
#下面兩項是用route來向本地發佈到各個站點的路由信息
route 192.168.10.0 255.255.255.0 //上海的內網
route 192.168.20.0 255.255.255.0 //鄭州的內網
#這裏說明一下,要想真正實現北京/上海和鄭州的各個內網之間互相通信,還需要在各自的內網主機設
#置各自的內網網關定義了各個站點的自定義配置文件所在的文件夾(這裏是#相對路徑),主要作用是
#用iroute來定義允許其他站點訪問自己的內網的網絡;在ccb文件夾下創建;
#各自站點的配置文件,文件名必須是和創建站點證書名字一樣!!!
client-config-dir ccd
#這個選項定義了客戶端和客戶端之間和以通信
client-to-client
#保持時間和超時斷開時間。//這個解釋是我自己的理解
keepalive 10 120
#這個是防止DDOS***,使用的私鑰位置和名字
tls-auth ta.key 0 # This file is secret
#傳輸數據進行過程中採用壓縮
comp-lzo
#***服務器啓動後會以下面的用戶和組運行,主動放棄root權限
user nobody
group nobody
#當服務器因超時主動斷開,客戶端重新連接時,保持的之前連接用的私鑰和地址的有效性
persist-key
persist-tun
#***服務器的狀態日誌
status open***-status.log
#日誌會以添加的形式去寫入日誌文件,注意要日誌切割!
log-append open***.log
#記錄日誌的級別,默認是3,5會有更多的信息讓我們去調試
verb 5
#這個好像就是日誌切割吧,不確定
mute 20
#下面最重要,定義了出差或者在家的客戶端,在採用證書的方式進行驗證的同時,還會
#採用用戶名和密碼的方式進行驗證
script-security 2
auth-user-pass-verify /etc/open***/auth_pass.sh via-file
#說明一下,auth_pass.sh是用到的腳本,腳本里有定義存放用戶名和密碼的文件
# via-file 表示從文件的方式獲取用戶名和密碼
#
via-env 表示從環境變量的方式獲取用戶名和密碼 //這種方式我還每嘗試成功。
#當我們採用TCP協議時,建議用此選項降低吞吐量,從而來降低網絡延時
socket-flags TCP_NODELAY
#享客戶端發佈此選項,因爲TCP協議嘛,需要兩端都設置
push "socket-flags TCP_NODELAY"
3.在open*** server上定義客戶端各個站點的配置文件
$sudo mkdir /etc/open***/ccb
$sudo vim /etc/open***/ccb/sh-client
iroute
192.168.10.0 255.255.255.0 //上海的內網
$sudo vim /etc/open***/ccb/zz-client
iroute
192.168.20.0 255.255.255.0 //鄭州的內網
4.編寫需要用到的腳本
$sudo vim /etc/open***/auth_pass.sh
#!/bin/bash
# the username+password is stored in a temporary file
# pointed to by $1
username=`head -1 $1`
password=`tail -1 $1`
if grep "$username:$password" pass_file > /dev/null 2>&1
then
exit 0
else
if grep "$username" pass_file > /dev/null 2>&1
then
echo "auth-user-pass-verify: Wrong password entered for user '$username'"
else
echo "auth-user-pass-verify: Unknown user '$username'"
fi
exit 1
fi
######################## The end ##############################
5.創建用戶和密碼對應文件
名字要和腳本中的一樣
$sudo vim /etc/open***/pass_file
xiguatian:123
shanghai:123
zhengzhou:123
#注意格式,密碼和用戶名中間是冒號;這顯然不安全,所有我們採用了證書雙重驗證。
6.在open*** server上開啓路由轉發功能
$sudo sed -i '/^net.ipv4_forward = */cnet.ipv4.ip_forward = \
1' /etc/sysctl.conf
$sudo sysctl -p
7.啓動服務,設置開機自啓動
$service open*** restart && chkconfing open*** on
客戶端的配置請看下一篇