第一部分VPN 簡介及其分類
1 PPTP-Based VPN
PPTP (Point to Piont Tunneling Protocol)是由微軟發起的可以工作在包括在Windows95 在內的微軟多個作業系統上的協議.雖然已經用了相當長的時間,但其仍然存在許多安全性漏洞.它主要是基於GRE(Generic Routing Encapsulation) 通過隧道來傳送一個ppp 串連Linux 系統上的PPTP實現主要代表是PoPToP. 如果需要用PPTP ,建議用基於IPSEC的L2TP 來代替PPTP,因為它更加安全,並且提供了和PPTP 一樣的功能
2 SSL-Based VPN (Openvpn)
加密通訊端層(SSL) 虛擬私人網路(VPN) 逐漸流行起來,這種VPN 的最大好處在於,僅僅需要一個單獨的TCP或者UDP連接埠隨便可以輕易的穿越大多數防火牆進行資料傳送.SSL VPN 是在Linux 系統上最容易實現的就是OpenVPN.
3 IPSec (IP Security) 是一種比較老的也是採用最為廣泛的VPN技術.是用IETF開發的一組身分識別驗證和資料加密協議,提供了私人性,完整性,真實性和防重播等安全服務,可以用於IP網路中的資料保密,完整性檢查,身分識別驗證,密鑰管理等許多方面
IPSec 在Linux上的實現主要分為兩類
第一類是Frees/wan 項目,該項目在2004 就已經終止了開發,而Free/wan 已經分裂為Openswan 和stringswan 兩個項目.他們提供自身的內涵堆棧(Kernel stack),也可以基於新近的核心中所提供的代碼
第二類是BSD之上的KAME,它中能使用內涵堆棧.
大多數IPsec 規範本神並不在本網中為遠程主機提供一個虛擬IP,不過仍用不少為此而實現的擴充可以解決如此類問題.可以將Microsoft 的支援的L2TP 的產品運行於IPsec 之上
IPSec是連線導向的協議,被許多商業路由器所採用,OpenSwan 是基於自身的XAUTH擴充,也可以作為Cisco,Nortel 以及其他多家VPN整合產品的用戶端
IPSec 可以在不改變防火牆規則的情況下,在核心層級相當容易的對什麼能通過隧道或者什麼不能做出安全的處理,其在實現NET-TO-NET 以及host-to-Net 的配置方面也表現出了很大的靈活性.但在靈活也就意味著實現起來的困難,所有IPSec 的成功配置運行相當有難度,此外,儘管已經在對NAT-Travle 的支援方面做了不少的改進,但還是不能較好的工作於一些NAT Gateway之後
OpenSWan 支援2.0,2.2,2.4 以及2.6 核心,可以運行在不同平台下,OpenSWan是開源項目FreeS/Wan 停止開發後的後繼分支項目,OpenSWan 是由三個主要組件構成:
1 組態工具(ipsec 命令指令碼)
2 Key 管理工具(Pluto)
3 核心組件(KLIPS/26sec)
26sec 使用2.6核心內建模組Netkey,用來替代OpenSwan 開發的KLIPS模組,2.4及以下版本核心無Netkey模組,只能使用KLIPS
如果您用的是2.6.9以上的核心,推介使用的26sec,2.6.9以下版本的核心NETKEY存在BUG,推介使用KLIPS
第二部分 下載安裝openswan 及其配置
1 #wget http://www.openswan.org/download/openswan-2.6.34.tar.gz
#tar xvf openswan-2.6.34.tar.gz
#make programs
#make install
2 驗證是否安裝正確
#depmod -a
#mkdprobe ipsec
#ipsec –version
如果顯示如下,則說明已經載入IPSEC stack
Linux Openswan U2.6.34/K2.6.18-164.el5 (netkey)
See `ipsec --copyright' for copyright information.
3 修改Linux 核心參數
#vim /etc/sysctl.conf
net.ipv4.ip_forward=0
net.ipv4.conf.default.rp_filer= 1
修改為
net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filer=0
4 執行以下命令是設定生效
#sysctl –p
5 禁用icmp
#vim disable_send_accept_redirects.sh
#!/bin/bash
# Disable send redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
# Disable accept redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo "1" > /proc/sys/net/core/xfrm_larval_drop
#chmod +x disable_send_accept_redirects.sh
#bash disable_send_accept_redirects.sh
6 產生key
#mv /dev/random /dev/random.bak
#ln –s /dev/urandom /dev/random
#ipsec newhostkey --output /etc/ipsec.secrets
注: mv 和ln –s 的目的是為了第三步的IPSec 操作節省時間
第三部分,配置OpenSwan
一. openswan 的串連方式
1) NET-TO-NET 串連方式
使用該種串連方式,可以將來年改革不同位置的networks 串連成為一個虛擬 專用網路;串連建立後,兩端的主機可以同名的互相訪問.不過.在兩個網關之間以及網關到對方內部網路內主機不能實現透明的互相訪問.這也是第二中方式Road Warrior 存在的部分原因
使用這種方式必須滿足以下條件:
I 兩個network 都有自己的Linux 網關,且每個網關都安裝了OpenSwan;
II 每個子網的IP段不能出現疊加
2) Road Warrior 方式
該種方式用以實現遠程主機到本網的安全撥入,主要用於經常有員工出差時可以遠程安全的訪問企業內部的資源
使用這種方式應該滿足以下條件:
I 一個具有靜態IP地址的Linux 網關,安裝Openswan
II 一個安裝了OpenSwan 的Latop,可以是動態IP地址
在本地的網關是最好安裝tcpdump,以便測試連接
OpenSwan 支援多種認證方式,如RSA,RSK,XAUTH,x.509 等;最常用到的是RSA和x.509
本文出自 “Gone with the wind” 部落格