歡迎您光臨本站 註冊首頁

用Openswan組建Linux IPSec ---第一部分

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

Openswan組建Linux IPSec

---Linux下建立IPSEC的vpn第一部分


1.
概述
2.
安裝Openswan
3.
認證和配置
3.1 RSAsig
認證方式的配置
3.2 x.509
證書認證的配置
3.3 RoadWarrior
模式的配置
5.Windows
客戶端的配置
*****
1.
概述
LInux
上的VPN支持主要有三種:

1)IPSec 's VPN
其主要代表有 FreeS/WANKAME

IPSec
Linux上支持主要有兩個主要的分類,一為FreeS/WAN,現在已經停止開發,其分裂為兩個項目,Openswan

Strongswan.其可以用自身的IPsec內核堆棧(Kernel stack),稱為KLIPS,也可以用2.6內核中的堆棧代碼(下面我們稱其為26sec),可以說是非常的靈活.還有就是來自BSD世界的KAME. KAME只能用內核堆棧.

IPSec
差不多是最老的VPN標準了,她的依然很安全,當然是在配置好以後.言下之意,她的配置比較麻煩.本文下面將做說明.

2)SSL-Based VPN
其主要代表有 OpenVPN

SSL
只要跑在應用層,所以理所當然的配置簡單,只要機子能跑TCPUDP就行,也可以穿過大多的防火牆.

3)PPTP-Based VPN
(PoPTop)

PoPTop
可以說是PPTPLinux下的實現.不過,IPSec上跑L2TP更安全.

2.
安裝Openswan

FreeS/WAN已經在2004年三月停止開發,所以我們使用她的後繼項目Openswan來做我們的IPSec實驗.其相比FreeS/WAN有個好處,如果使用 26sec 的時候,Openswan不用打補丁,就可以用nat.

IPSec工作在網路層,所以需要系統內核態的支持,上面說過,有兩個選擇,用自帶(26sec)的或用Openswan(KLIPS)的,為了方便(如何打補丁和編譯內核不是本文討論的重點),本文使用2.6自帶的實現代碼.同時本文使用RHEL AS4.0作為實驗系統,在RHEL AS4.0上安裝.

http://www.openswan.org/code下載軟體包,然後按照包中的說明安裝.由於我們使用26sec,所以只要make programs;make install就可以搞定.值得注意的是,現在的Openswan已經內建些個好用的補丁,比如x.509NAT Traversal的支持,使用起來非常的方便.

#tar –zxvf openswan-

2.4.9.tar.gz
# make KERNELSRC=/lib/modules/`uname -r`/build module minstall

# make programs install


你也可以用
#ipsec verify
來檢驗你的安裝

3.
認證和配置

一、 RSA SignatureRSA數字簽名)認證的配製



Openswan支持許多不同的認證方式,包括RSA keyspre-shared keysx.509證書方式.RSA Signature比較簡單,我先介紹下所要使用的命令

生成一個新的RSA密鑰對
#ipsec newhostkey --output /etc/ipsec.secert
leftright格式生成RSA Sig
#ipsec showhostkey --left
(或--right

知道了上面的命令,我們就可以配置一個net-to-net,就是網關對網關的通訊.所在的Linux主機為通訊的網關,作為其子網的出口,對於子網的用戶來所是透明的,遠程的子網在通訊后可以像自己的區域網一樣的訪問.

本文使用VMWare架設起一個四台虛擬Linux主機來進行試驗.要在不同的機子上進行配置,所以請讀者認清主機名.

172.16.40.18(right子網客戶機,計算機名RA
<->


192.168.32.30(right網關主機,計算機名VPN,同時eth1配置為172.16.40.254
<->
192.168.32.29
left網關主機,計算機名ora92,同時eth1配置為172.16.50.254
<->
172.16.50.18
(left子網客戶機,計算機名RB

兩個網關主機當然要安裝好Openswan.

然後我們運行下面的命令

//ora92----left
#ipsec newhostkey --output /etc/ipsec.secert
#ipsec showhostkey --left >> /etc/ipsec.conf
#vi /etc/ipsec.conf //
編輯ipsec.conf配置文件
#scp /etc/ipsec.conf root@right_GW_ipaddress:/etc/ipsec.conf

//ipsec.conf拷貝到right

網關,目的是為了讓right得到leftrsasig.


//vpn----right
#ipsec newhostkey --output /etc/ipsec.secert
#ipsec showhostkey --right >> /etc/ipsec.conf
#vi /etc/ipsec.conf
#scp /etc/ipsec.conf root@left_GW_ipadress:/etc/ipsec.conf


然後分別從前啟動ipsec服務
#ipsec setup restart //
這個你的系統不同點不同

這裡的編輯ipsec.conf應該為(配置文件中的#為註釋,和shell中不同)
version 2.0 # conforms to second version of ipsec.conf specification

# basic configuration

config setup

nat_traversal=yes

nhelpers=0

include /etc/ipsec.d/examples/no_oe.conf

conn linux-to-linux conn必須定行寫

left=192.168.32.29

leftsubnet=172.16.50.0/24

leftid=@ora92

# RSA 2192 bits ora92 Thu Jul 19 13:52:56 2007 leftrsasigkey=0sAQN8mHncm 6AV77BxYsCx/IuYbz6cpsAnXdJGEDkDohsUQs9U/uyZ7ru0DIq4PkjQ/D/kS9VXyc1ZHv9WmwNzTnO cVFMuC3Ld4epFpb4w 5HzEhpPG1U63o0H 8z4OqJg9a7yE9z93EJnLcciyyRuCpE4voNPUIuuQKpOjK641OfQu6zFZqJhCGnFr IL80WTykN/ZbKVFLe Dao5EGXpqafnTSiXq2xMgpo5uMxOogjsdjRu8 H0Qw2U2FGN2kgin4P/qbdQY9CQSgs8SMo3aHF3xrdPX9bDOmZYZJrl0c3uELtElNrTouGig4c3amNMpUSigXisitbqy5SNGQnOLZlJzlPCVkR8GofWOvaNEBSuAH

right=192.168.32.30

rightid=@vpn

rightsubnet=172.16.40.0/24

# RSA 2192 bits vpn Thu Jul 19 14:01:03 2007 rightrsasigkey=0sAQOyv/cshJnUxULJtaiG 3aDeUIuzbe6c0eVmcEp4l/GK/Qd8yRD/PWfqBsJCP Bg3PieoEM GwFXE2GE9h8pPzXwiMfxBTwTx3RHxYK/6mA9sxGJerCD9Ro1IgpRfQFzVio1UBukN5YX6rnrfvbBDNwzidL8JHyNtKXMbw56U7qsXxhkVsF0Xwk5gkH5ONj571xbPF ckO4ATxMFVQG1VeWyi5JMYt58vUY1ipVRTg2YMcwZR tPAIP/9Vr2XoUF5fzQ0WEQrU6XPXrGta/Ma

0F5yfAjMbBXp87tmLQL88x2V5jC7GikSS8rReuRP9bv9OC879jVrvy98ExMEW YdsCSrIKOqqx6D rINCnXUjS0E5F

auto=start

然後在任意一方網關主機運行
ipsec auto --up net-to-net
,這個時候,兩個客戶機之間應該可以互相ping的通,就像在一個內網一樣.
比如在RA上可以
$ping 172.16.50.18
ping的過程中,在任意一個網關上用tcpdump嗅探
#tcpdump -i eth0
可以看到這樣的包
IP 172.16.40.18 > 172.16.50.18:icmp 64:echo request seq 10
IP 192.168.32.29 > 192.168.32.30: ESP(spi=0xeb73b78b,sed=0xa)
IP 172.16.50.18 > 172.16.40.18: ESP(spi=0x1601e0bd,sed=0xb)
可以看到兩個網關已經用ESP在通訊,說明成功.

另外,這一行
include /etc/ipsec.d/examples/no_oe.conf
意為關閉Opportunistic Encryption在你不知道她到底做了什麼之前,還是關掉她為好,打開no_oe.conf文件,發現其內容如下,我們將在本文的第五部分討論這個話題.

conn block
auto=ignore

conn private
auto=ignore

conn private-or-clear
auto=ignore

conn clear-or-private
auto=ignore

conn clear
auto=ignore

conn packetdefault
auto=ignore

二、 x.509證書認證的配置

x.509
證書方式當然更靈活,要是VPN的客戶比較多,總不能,每個都記住長長的rsasig吧.使用x.509證書認證,我們需要裝上openssl(現在的Linux基本自帶,沒有的www.openssl.org下一個裝上).

1)
然後,找到openssl.cnf文件,這個文件保存著對openssl證書生成的默認值,她的位置一般為:


Debian: /etc/ssl/openssl.cnf
RedHat: /usr/share/ssl/openssl.cnf
用編輯器打開,變數名目繁多,比較有用的有
"default_days"
,證書失效的天數,默認一般為365天,改為3650,這樣十年才過期:).
"default_bits"
,密鑰長度,默認為1024,你可以改為2048,更安全,當然速度也更慢……
"req_distinguished_name"
,默認的信息設置,如果你和我一樣閑每次去生成密鑰的時候去填的麻煩,就改之.

2)
建一個目錄來放你的CA,我們這裡用/root/ca,記的把他的許可權設置為700,你不希望其他用戶可以看到你的私鑰吧.

3)
找到"CA.sh"腳本的位置,在不同系統上稍有不同
Debian: /usr/lib/ssl/misc/CA.sh
RedHat: /usr/share/ssl/misc/CA
編輯她,把DAYS="-days 365"365改成你希望的數值,注意要比openssl.cnf中的"default_days"要大,當時也不要太大,一般為15年到20年就好了.

4)
生成證書
~/ca$/usr/lib/ssl/misc/CA.sh -newca ;
生成一個待簽名的根證書,用她來給其他證書進行簽名認證.默認生成在demoCA

目錄下的cacert.pem文件(在openssl.cnf中的 CA_default子段設置)下.輸入的密碼為用來生成其他證書的密碼.-sign的時候用.


~/ca$openssl ca -gencrl -out crl.pem
生成一個與根證書相對應的crl文件
然後開始生成給主機用的證書
~/ca$/usr/lib/ssl/misc/CA.sh -newreq
生成待簽名認證的證書,默認名字為newreq.pem,輸入的密碼用在填些/etc/ipsec.secrets中.
~/ca$/usr/lib/ssl/misc/CA.sh -sign
對證書進行簽名認證,默認名字為newcert.pem
~/ca$/usr/lib/ssl/misc/CA.sh -verify
認證一下
然後重命名文件
~ca$mv newcert.pem ora92.pem
~ca$mv newreq.pem ora92.key //
別搞反了,小的那個文件是key:),另外如果要生成的主機證書,填入的信息相同可能出錯
用同樣的方法在right――vpn主機上生成

vpn.pemvpn.key文件.這樣我們就有了同樣的根證書生成的兩個證書文件.
把文件拷貝到相應的位置:
5
)在Left主機主機上
ora92:~/ca#cp ora92.key /etc/ipsec.d/private
ora92:~/ca#cp ora92.pem /etc/ipsec.d/certs
ora92:~/ca#cp demoCA/cacert.pem /etc/ipsec.d/cacerts
ora92:~/ca#cp crl.pem /etc/ipsec.d/crls/crl.pem
用安全的渠道(scp或軟盤,別用ftp)把ora92.pem文件拷貝到right
ora92:~/ca#scp /etc/ipsec.d/certs/ora92.pem root@192.168.32.30:/etc/ipsec.d/certs/ora92.pem


6
)在right主機主機上
也拷貝到正確的地方
vpn:~/ca#cp vpn.key /etc/ipsec.d/private
vpn:~/ca#cp vpn.pem /etc/ipsec.d/certs
vpn:~/ca#cp crl.pem /etc/ipsec.d/crls
vpn:~/ca#cp cacert.pem /etc/ipsec.d/cacerts/cacert.pem


用安全的渠道(scp或軟盤,別用ftp)把vpn.pem文件拷貝到left
vpn:~/ca#scp /etc/ipsec.d/certs/vpn.pem root@192.168.32.29:/etc/ipsec.d/certs/vpn.pem

7)
配置ipsec
left
上:/etc/ipsec.secrets加上
: RSA /etc/ipsec.d/private/ora92.key "password"
password
就是生成主機密鑰的時候輸入的密碼

Right上:/etc/ipsec.secrets加上
: RSA /etc/ipsec.d/private/vpn.key "password"
password
就是生成主機密鑰的時候輸入的密碼

這裡有幾個密碼要搞清楚,在生成根證書的時候輸入密碼是用來生成其他證書的,

CA.sh -sign的時候要填入,ipsec.secrets填入的密碼是CA.sh -newreq時候輸入的密碼.

然後當然就是/etc/ipsec.conf在本例子中的ipsec.conf分別為

#Left(ora92)
version 2.0

config setup
interfaces=


[火星人 ] 用Openswan組建Linux IPSec ---第一部分已經有1011次圍觀

http://coctec.com/docs/linux/show-post-49382.html