1、軟件說明
一、Openswan簡介 python
Openswan是Linux下IPsec的最佳實現方式,其功能強大,最大程度地保證了數據傳輸中的安全性、完整性問題。 openswan支持2.0、2.二、2.4以及2.6內核,能夠運行在不一樣的系統平臺下,包括X8六、X86_6四、IA6四、MIPS以及ARM。 vim
Openswan是開源項目FreeS/WAN中止開發後的後繼分支項目,其分裂爲兩個項目,Openswan與 Strongswan,Openswan由三個主要組件構成:配置工具(ipsec命令腳本)、Key管理工具(pluto)、內核組件(KLIPS/26sec)26sec使用2.6內核內建模塊Netkey,用來替代Openswan開發的KLIPS模塊,2.4及如下版本內核無Netkey模塊支持,只能使用KLIPS。若是你用的是2.6.9以上的內核,推薦使用26sec,能夠不用給內核打Nat-T補丁就可使用NAT,2.6.9如下版本內核的NETKEY存在Bug,推薦使用KLIPS。IPSec差很少是最老的×××標準了,她的依然很安全,固然是在配置好之後。言下之意,她的配置比較麻煩。本文下面將作說明。
由於FreeS/WAN已經在2004年三月中止開發,因此咱們使用她的後繼項目Openswan來作咱們的IPSec實驗。其相比FreeS/WAN有個好處,若是使用 26sec 的時候,Openswan不用打補丁,就能夠用nat。
二、Openswan的安裝 安全
由於IPSec工做在網絡層,因此須要系統內核態的支持,上面說過,有兩個選擇,用自帶(26sec)的或用Openswan(KLIPS)的,爲了方便(如何打補丁和編譯內核不是本文討論的重點),本文使用CentOS源中編譯好的Openswan來進行實驗。# yum install openswan 若是你想從源碼安裝,到http://www.openswan.org/code 下載軟件包,而後按照包中的說明安裝。因爲咱們使用26sec,因此只要make programs;make install就能夠搞定。值得注意的是,如今的Openswan已經內建些個好用的補丁,好比x.509和NAT Traversal的支持,使用起來很是的方便。你也能夠用下面的命令來檢驗你的安裝。
# ipsec verify
三、Openswan的認證方式
Openswan支持許多不一樣的認證方式,包括 :bash
RSA keys、 (RSA Signature比較簡單)網絡
pre-shared keys、dom
xauth或x.509證書方式。.tcp
四、Openswan的鏈接方式:
1) Network-To-Network方式 本文重點是以此來完成企業需求的ide
Network-To-Network方式是把兩個網絡鏈接成一個虛擬專用網絡。當鏈接創建後,每一個子網的主機均可透明地訪問遠程子網的主機。工具
要實現此種鏈接方式,要知足如下兩個條件: 測試
I. 每一個子網各自擁有一臺安裝有OpenSWan的主機做爲其子網的出口網關或者路由;
II.每一個子網的IP段不能有疊加
(2)Road Warrior方式
當使用Network-To-Network方式時,做爲每一個子網網關的主機(openswan server)不能像子網內部主機那樣透明訪問遠程子網的主機,也就是說:若是你是一個使用LClient的移動用戶,常常出差或是在不一樣的地點辦公,你的LClient將不能用Network-To-Network方式與公司網絡進行鏈接。Road Warrior方式正是爲這種狀況而設計的,鏈接創建後,你的LClient就能夠鏈接到遠程的網絡了。(或者使用SSL ***的開源產品open***來實現出差時候,遠程撥號訪問的需求)
更多詳情請參見OpenSWan項目主頁:http://www.openswan.org
5、本文將從如下幾點進行測試
net-to-net模型 **********
1)基於pre-shared keys認證方式(PSK)
2)基於RSA Signature認證方式(RSA數字簽名)
3)基於數字證書認證方式(x.509證書)
4)基於XAUTH認證方式(IPSec/Xauth PSK)
RoadWarrior
5)基於pre-shared keys認證方式(PSK)
6)基於RSA Signature認證方式(RSA數字簽名)
7)基於數字證書認證方式(x.509證書)
8)基於XAUTH認證方式(IPSec/Xauth PSK)
2、環境說明
一、網絡拓撲
二、實驗目的
本使用目的是爲了實現client1和client2兩個不一樣地區不一樣子網的互通。即不一樣機房,不一樣網段的內網機器通訊
三、實驗環境介紹
設備名稱
IP地址信息
所屬機房
北京 ***server1外網 eth0 192.168.2.48 橋接內網 eth1 192.168.183.1 VMnet1網關 192.168.2.1
上海 ***server2 外網eth0 192.168.2.111 橋接內網eth1 192.168.233.1 VMnet2網關 192.168.2.1client1 ---北京 eth0 192.168.183.44 VMnet網關 192.168.183.1 說明,我使用的是網關路由模式,是client機器經過此網關來通訊 client2 ----上海 eth0 192.168.233.44 VMnet4 網關 192.168.233.1
我本地的網絡是192.168.2.0/24網段,爲了讓×××Server能夠上網,我這邊把×××Server的eht0設定到了192.168.2.0/24網段,而且網卡設定爲橋接,其餘的網絡安裝上面表格配置好,這樣咱們就能夠所有遠程操做了,把每一個主機的主機名修改好,這樣便於咱們觀察。
3、Openswan環境部署
一、開啓數據轉發 # vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 二、關閉icmp重定向# sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf # sysctl -p 三、關閉SELinux# setenforce 0 四、安裝openswan (兩臺***serve上面都是一樣操做 # yum install openswan lsof -y # rpm -ql openswan //查看安裝了那些文件。 # ipsec --version //查看ipsec的版本 [root@***server1 etc]# ipsec --version Linux Openswan U2.6.32/K2.6.32-431.el6.x86_64 (netkey) See `ipsec --copyright' for copyright information. 這裏並無加載任何的IPsec stack,當啓動IPsec後會自動加載系統自帶的netkey。 [root@***server1 etc]#service ipsec start [root@***server1 etc]# ipsec verify //對ipsec進行驗證(兩臺***serve上面都是一樣操做)
#################
重要說明,若是前邊的步驟沒作安裝文檔完成,彙報一下錯誤,致使接下來的未知錯誤
[root@localhost ~]# ipsec verify Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.32/K(no kernel code presently loaded) Checking for IPsec support in kernel [FAILED] SAref kernel support [N/A] Checking that pluto is running [FAILED] whack: Pluto is not running (no "/var/run/pluto/pluto.ctl") Two or more interfaces found, checking IP forwarding [FAILED] whack: Pluto is not running (no "/var/run/pluto/pluto.ctl") Checking NAT and MASQUERADEing [OK] Checking for 'ip' command OK] Checking /bin/sh is not /bin/dash [OK] Checking for 'iptables' command [OK] cat: /etc/ipsec.d/examples/no_oe.conf: No such file or directory cat: /etc/ipsec.d/examples/no_oe.conf: No such file or directory Opportunistic Encryption Support
因此, 確保ipsec verify的結果都是如圖所示方可繼續接下來的配置
咱們能夠看到openswan監聽在UDP的500和4500兩個端口,其中500是用來IKE密鑰交換協商,4500的NAT-T是nat穿透的
4、Openswan配置(network-to-network)
一、基於pre-shared keys認證方式(PSK)
在***server1()上面做以下修改,裏面的配置參數不少,你們能夠參照man ipsec.conf裏面的講解# vim /etc/ipsec.conf [root@melin etc]# grep -Ev '#|^$' ipsec.conf.psk config setup protostack=netkey nat_traversal=yes virtual_private= oe=off conn net-to-net ike=aes256-sha2_256;modp2048 phase2alg=aes256-sha2_256;modp2048 authby=secret type=tunnel left=192.168.2.48 leftsubnet=192.168.183.0/24 leftid=@test1 leftnexthop=%defaultroute right=192.168.2.111 rightsubnet=192.168.233.0/24 rightid=@test2 rightnexthop=%defaultroute auto=add /add表明只是添加,但並不會鏈接,若是爲start則表明着啓動自動鏈接.
一樣在另外一臺***server2上面配置和***sever1同樣的配置文件
即: scp ipsec.conf 192.168.2.111:/etc/ (兩臺***serve上面的ipsec.conf配置文件是同樣的)
[root@***server1 etc]# vim /etc/ipsec.secrets 192.168.2.48 %any 0.0.0.0 : PSK "123" 這個文件的格式爲:「Local Ip address」 「remote ip address」 : PSK 「your key」 在192.168.2.111(***server2)上面修改爲以下 [root@***server2 etc]# vim /etc/ipsec.secrets 192.168.2.111 %any 0.0.0.0 : PSK "123" 重啓兩個***服務 # service ipsec restart而後啓動一下咱們的con # ipsec auto --up net-to-net (此處因爲ipsec.conf中auto=add,因此須要手動添加)
當咱們看到ipsec sa estabilished,就證實咱們鏈接成功了,也能夠從中看到一些加密方法,密鑰交換參數,咱們也能夠在配置文件裏面添加以下信息進行修改。(記得保持同步到***server2)
ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048
而後在clinet1上面去ping對端子網的設備,能夠看到以下,可是×××Server是不能ping通對方子網的設備的。
client1上的操做:
route add default gw 192.168.183.1
咱們能夠在任意×××Server網關上面抓包,查看數據信息
# tcpdump -i eth1 -nn
# tcpdump -i eth0 -nn
其中ESP(Encapsulating Security Payload)就是加密數據。
echo request
echo reply
代表既能夠發送請求,也能夠收到迴應包
測試經過後,能夠把鏈接配置中 auto=add
更改成: auto=start
這樣當Openswan啓動時就可自動進行鏈接。
到此咱們net-to-net基於psk模式的×××就搭建成功了。
########################################################################################
2、基於RSA Signature認證方式(RSA數字簽名)
注:由於我是接着上面的實驗進行操做,一直有問題沒法解決,後來從新安裝了一下,安裝下面的流程一次就成功了。
openswan的安裝方式同本文剛開始安裝同樣,下面咱們主要講解配置的不一樣。
下面提到的L-Server指的是192.168.2..48(×××Server1), R-Server指的是192.168.2.111(×××Server2)。 在L-Server上面進行以下操做生成一個新的RSA密鑰對 # ipsec newhostkey --output /etc/ipsec.secrets(能夠先不操做)由於這個生成過程太過緩慢,咱們使用下面方面進行加速生成 # rm -rf /dev/random# ln -s /dev/urandom /dev/random # ipsec newhostkey --output /etc/ipsec.secrets 在R-Server上面執行一遍 # rm -rf /dev/random# ln -s /dev/urandom /dev/random # ipsec newhostkey --output /etc/ipsec.secrets 在L-Server上執行ipsec showhostkey --left獲得L-Server的公鑰 # ipsec showhostkey --left
在R-Server上執行ipsec showhostkey --right獲得R-Server的公鑰
# ipsec showhostkey --right
請記住這兩個key,後面會用到,也可使用重定向加到配置文件裏面
L-Sserver:
編輯/etc/ipsec.conf文件
# vim /etc/ipsec.conf
# scp /etc/ipsec.conf 192.168.2.111:/etc (同步到R-server上)
# service ipsec restart
# ipsec auto --up net-to-net
當咱們看到ipsec sa estabilished,就證實咱們鏈接成功了
測試經過後,能夠把鏈接配置中 auto=add
更改成: auto=start
# service ipsec restart
測試:
在一端client1去ping另外一端的客戶機client2,而後咱們在***server上面抓包查看。
咱們能夠在任意×××Server1網關上面抓包,查看數據信息
# tcpdump -i eth1 -nn
# tcpdump -i eth0 -nn
此時一切測試成功以後
# chkconfig ipsec on
基於RSA Signature認證方式(RSA數字簽名)搭建完畢。