登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
 内容搜索 网页 下载 源代码
热点文章
  用OpenSWAN做Linux下的IPSec..
  让你的Linux桌面更安全
  AIX常见问题整理
  DHCP服务器的安装及正确配置
  windows消息大全
  Windows服务端口大全
  实现电子邮件身份验证的迫切..
  Windows非法操作祥解
  当网管几年的经验总结
  站长必备:防御DDOS攻击终极..
  如何:强化 TCP/IP 堆栈安全
  全面提速Windows XP
本站原创
最新招聘信息

您现在的位置:立华软件园->安全防线->安全配制
用OpenSWAN做Linux下的IPSec VPN的详细配置指南
发表日期:2006-12-15作者:toorq[转贴] 出处:安全焦点  

用Openswan组建Linux IPSec
    
by toorq


1.概述
2.安装Openswan
3.认证和配置
    3.1 RSAsig认证方式的配置
    3.2 x.509证书认证的配置
    3.3 RoadWarrior模式的配置
5.Windows客户端的配置
*****
1.概述
    LInux上的VPN支持主要有三种:
    
    1)IPSec 's VPN 其主要代表有 FreeS/WAN、KAME

    IPSec在Linux上支持主要有两个主要的分类,一为FreeS/WAN,现在已经停止开发,其分裂为两个项目,Openswan与 Strongswan。其可以用自身的IPsec内核堆栈(Kernel stack),称为KLIPS,也可以用2.6内核中的堆栈代码(下面我们称其为26sec),可以说是非常的灵活。还有就是来自BSD世界的KAME。 KAME只能用内核堆栈。

    IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。

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

    SSL只要跑在应用层,所以理所当然的配置简单,只要机子能跑TCP或UDP就行,也可以穿过大多的防火墙。

    3)PPTP-Based VPN 有(PoPTop)

    PoPTop可以说是PPTP在Linux下的实现。不过,IPSec上跑L2TP更安全。

2.安装Openswan
    
    因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。
    因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用2.6自带的实现代码。同时本文使用Debian Sarge作为实验系统,在Debian上安装。
    #apt-get install openswan
    如果你想从源码安装,到http://www.openswan.org/code下载软件包,然后按照包中的说明安装。由于我们使用26sec,所以只要make programs;make install就可以搞定。值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。
    你也可以用
    #ipsec verify来检验你的安装

3.认证和配置

3.1 RSA Signature(RSA数字签名)认证的配制

    Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys或x.509证书方式。RSA Signature比较简单,我先介绍下所要使用的命令

    生成一个新的RSA密钥对
    #ipsec newhostkey  --output /etc/ipsec.secert
    按left或right格式生成RSA Sig
    #ipsec showhostkey --left(或--right)

    知道了上面的命令,我们就可以配置一个net-to-net,就是网关对网关的通讯。所在的Linux主机为通讯的网关,作为其子网的出口,对于子网的用户来所是透明的,远程的子网在通讯后可以像自己的局域网一样的访问。
    
    本文使用VMWare架设起一个四台虚拟Linux主机来进行试验。因为要在不同的机子上进行配置,所以请读者认清主机名。

    192.168.183.44(子网客户机,计算机名RA)
    <->
    192.168.49.2(Left网关主机,计算机名melin,同时eth1配置为192.168.183.1)
    <->
    192.168.49.3(Right网关主机,计算机名right,同时eth1配置为192.168.233.1)
    <->
    192.168.233.44(子网客户机,计算机名RB)

    两个网关主机当然要安装好Openswan。同时用iptabels配置好NAT伪装。

    然后我们运行下面的命令

    //melin    
    #ipsec newhostkey --output /etc/ipsec.secert
    #ipsec showhostkey --right >> /etc/ipsec.conf
    #vi /etc/ipsec.conf //编辑ipsec.conf配置文件
    #scp /etc/ipsec.conf root@right_GW_ipaddress:/etc/ipsec.conf //把ipsec.conf拷贝到right网关,目的是为了让right的到left的rsasig。
    //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

config setup
    interfaces=%defaultroute
    nat_traversal=yes
    
conn %default
    authby=rsasig
    compress=yes

#关掉 Opportunistic Encryption
include /etc/ipsec.d/examples/no_oe.conf

conn    net-to-net
    left=192.168.49.2
    leftsubnet=192.168.183.0/24
    leftid=@melin
    leftnexthop=%defaultroute
    right=192.168.49.3
    rightsubnet=192.168.233.0/24
    rightid=@right
    rightnexthop=%defaultroute
    # RSA 2192 bits   melin   Mon May 29 03:42:49 2006
    leftrsasigkey=0sAQ...(leftrsasigkey值,省略)
    # RSA 2192 bits   right   Wed May 31 22:11:59 2006
    rightrsasigkey=0sAQ...
    auto=add

然后在任意一方网关主机运行
    ipsec auto --up net-to-net,这个时候,两个客户机之间应该可以互相ping的通,就像在一个内网一样。
    
    比如在RA上可以

    $ping 192.168.233.44
    
    在ping的过程中,在任意一个网关上用tcpdump嗅探

    #tcpdump -i eth0
    
    可以看到这样的包

    IP 192.168.233.44 > 192.168.183.44:icmp 64:echo request seq 10
    IP 192.168.49.2 > 192.168.49.3: ESP(spi=0xeb73b78b,sed=0xa)
    IP 192.168.49.3 > 192.168.49.2: ESP(spi=0x1601e0bd,sed=0xb)
    可以看到两个网关已经用ESP在通讯,说明成功。

    值得注意的是,如果网关主机开了iptables来做IP伪装(MASQUERADE)或NAT,需要竞争两个子网地址的转发,比如在我们例子中的Left主机上原来有
    #echo 1 > /proc/sys/net/ipv4/ip_forward
    #iptables -t nat -A POSTROUTING -o eth0 -s 192.168.183.0/24 -j MASQERADE
    把改为
    #iptables -t nat -A POSTROUTING -o eth0 -s 192.168.183.0/24 -d ! 192.168.233.0/24 -j MASQERADE
    即不转发目标地址为Right主机下的子网。

    另外,这一行
    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

3.2 x.509证书认证的配置

    x.509证书方式当然更灵活,要是VPN的客户比较多,总不能,每个都记住长长的rsasig吧。使用x.509证书认证,我们首先需要装上openssl(现在的Linux基本自带,没有的www.openssl.org下一个装上)。

    1)然后,找到openssl.cnf文件,这个文件保存着对openssl证书生成的默认值,她的位置一般为:
    Debian: /etc/ssl/openssl.cnf
    RedHat 7.x+: /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 7.x+: /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 melin.pem
    ~ca$mv newreq.pem melin.key //别搞反了,小的那个文件是key:),另外如果要生成的主机证书,填入的信息相同可能出错
    用同样的方法生成right.pem和right.key文件。这样我们就有了同样的根证书生成的两个证书文件。
    把文件拷贝到相应的位置:

    在Left主机主机上
    melin:~/ca#cp melin.key /etc/ipsec.d/private
    melin:~/ca#cp melin.pem /etc/ipsec.d/certs
    melin:~/ca#cp demoCA/cacert.pem /etc/ipsec.d/cacerts
    melin:~/ca#cp crl.pem /etc/ipsec.d/crls/crl.pem
    用安全的渠道(scp或软盘,别用ftp)把一下文件拷贝到right上
    melin.pem
    right.key
    right.pem
    demoCA/cacert.pem
    crl.pem
    也拷贝到正确的地方
    melin#cp right.key /etc/ipsec.d/private
    melin#cp right.pem /etc/ipsec.d/certs
    melin#cp melin.pem /etc/ipsec.d/certs
    melin#cp crl.pem /etc/ipsec.d/crls
    melin#cp cacert.pem /etc/ipsec.d/cacerts/cacert.pem
    
    5) 配置ipsec
    首先是/etc/ipsec.secrets加上
    : RSA /etc/ipsec.d/private/right.key "password"
    password就是生成主机密钥的时候输入的密码

    这里有几个密码要搞清楚,在生成根证书的时候输入密码是用来生成其他证书的,CA.sh -sign的时候要填入,ipsec.secrets填入的密码是CA.sh -newreq时候输入的密码。

    然后当然就是/etc/ipsec.conf在本例子中的ipsec.conf分别为

#Left(melin)
version 2.0

config setup
    interfaces=%defaultroute
    nat_traversal=yes
conn %default
    authby=rsasig
    compress=yes
    leftrsasigkey=%cert
    rightrsasigkey=%cert
    keyingtries=1
    disablearrivalcheck=no

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

conn net-to-net
    left=%defaultroute
    leftsubnet=192.168.183.0/24
    leftcert=melin.pem
    right=%any
    rightsubnet=192.168.233.0/24
    pfs=yes
    auto=add

#Right(right)
version 2.0

config setup
    interfaces=%defaultroute
    nat_traversal=yes
conn %default
    authby=rsasig
    compress=yes
    leftrsasigkey=%cert
    rightrsasigkey=%cert
    keyingtries=1
    disablearrivalcheck=no

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

conn net-to-net
    left=192.168.49.2
    leftsubnet=192.168.183.0/24
    leftcert=melin.pem
    right=%defaultroute
    rightsubnet=192.168.233.0/24
    rightcert=right.pem
    pfs=yes
    auto=add

    然后分别重新启动IPSec服务
    #ipsec setup restart
    在right上启动连接
    #ipsec auto --up net-to-net
    
    如果一切正确,两个子网之间就可以互相通讯了。

3)RoadWarrior模式的配置
    上面我们做的是网关对网关的配置,我们在应用中还有一种情况,员工带着比较本出差或在家,需要用IPSec连接到公司的网络。这个就是RoadWarrior模式。

    我们回到1)中RSA Keys配置的例子,在两台主机上添加这样的配置字段

#RoadWarrior,Road的机子,比如到处带着跑的笔记本,我们这里用right
conn road
    left=192.168.49.3 #如果是动态ip地址,可以填上%defaultroute
    leftnexthop=%defaultroute
    leftid=@melin
    leftrsasigkey=0sAQ... #本机的RSA Key
    right=192.168.49.2
    rightsubnet=192.168.183.0/24
    rightid=@right
    rightrsasigkey=0sAQO... #远程机子的RSA Key
    auto=add                      
############################
#Host 主机,我们这里用melin
conn road
    left=192.168.49.2
    leftid=@melin
    leftsubnet=192.168.183.0/24
    leftrsasigkey=0sAQ...
    rightnexthop=%defaultroute
    right=%any #不知道要传入的连接,所以用%any
    rightid=@right
    rightrsasigkey=0sAQ...
    auto=add

可以看出,RoadWarrior模式和Net-to-Net模式配置的区别,关键就是在于net-to-net模式Left和Right是相同的,通讯的主机处于固定的位置上,而RoadWarrior配置,Left就是自己(Local),Right就是远程主机(Remote)。所以看上去,两个的 Left和Right值是相反的。这个是配置的关键。

然后在RoadWarrior的主机上运行
    ipsec auto --up road
更改配置文件后记的要#ipsec setup restart重启Openswan Pluto。

接着就可以在right主机上ping到melin下的内网了
    right$ping 192.168.183.44
同样的可以在melin上
    melin#tcpdump -i eth0
看到ESP包的交换

下面我们回到使用证书的net-to-net例子

细心的读者可以发现,在证书的例子配置中,melin主机的right字段是用的是%any,整个配置类似于RoadWarrior的配置,可是又不同,实际上,这个仍然是net-to-net的配置。也可以把配置写成这样。

#Left(melin)
conn net-to-net
    left=192.168.49.2
    leftsubnet=192.168.183.0/24
    leftcert=melin.pem
    right=192.168.49.3
    rightsubnet=192.168.233.0/24
    pfs=yes
    auto=add

#Right(right)
conn net-to-net
    left=192.168.49.2
    leftsubnet=192.168.183.0/24
    letcert=melin.pem
    right=192.168.49.3
    rightcert=right.pem
    pfs=yes
    auto=add

不过,如果是这样的net-to-net的配置,就需要把right.pem也拷贝到melin主机的/etc/ipsec.d/certs目录下。可以看出来,ipsec.conf的配置是非常灵活的。

下面我们给出使用RoadWarrior和使用证书的配置

#RoadWarrior(right)
conn road
    left=192.168.49.3(如果为动态ip,用%defaultroute)
    leftcert=right.pem
    right=192.168.49.2
    rightsubnet=192.168.183.0/24
    rightcert=melin.pem
    pfs=yes
    auto=add

#Host(melin)
conn road
    left=192.168.49.2
    leftsubnet=192.168.183.0/24
    leftcert=melin.pem
    right=%any
    pfs=yes
    auto=add
使用上面的配制后会发现一个问题,在right主机上
    right#ping 192.168.183.44
    right#ping 192.168.183.1
    是加密通讯
    可是
    right#ping 192.168.49.2(如果是在Internet,这个为主机在Internet上的ip)
    却是明文通讯,实际上,我们上面的RoadWarrior配置是让RoadWarrior主机和网关做在的局外通讯,如果要加密和网关的通讯,可以这么写

#RoadWarrior(right)
conn road-net
    rightsubnet=192.168.183.0/24
    also=road
conn road
    left=192.168.49.3(如果为动态ip,用%defaultroute)
    leftcert=right.pem
    right=192.168.49.2
    rightcert=melin.pem
    pfs=yes
    auto=add

#Host(melin)
conn road-net
    leftsubnet=192.168.183.0/24
    also=road
conn road
    left=192.168.49.2
    leftcert=melin.pem
    right=%any
    pfs=yes
    auto=add

在right上分别启动

right#ipsec auto --up road
right#ipsec auto --up road-net

另外可以用ipsec auto status查看连接的状态。如果想让连接在开机就启动,可以把auto字段改为start。

5.Windows客户端的配置

    让windows客户端可以连接上Linux的IPSec网关是很有用的,毕竟桌面还是Windows比较的多。


    1)当然是让Openswan的主机运行正常运行起来,我们这里使用,上文最接近的那个road和road-net配置。同时要注意Windows的IPSec服务已经运行。

    2)生成证书
    
    生成新的主机密钥对win.pem和win.key,然后,我们需要把她转化成Windows可以识别的p12格式:

~/ca$ openssl pkcs12 -export -in win.pem -inkey win.key -certfile demoCA/cacert.pem -out win.p12

获得根证书的信息,记下来,下面要用到

subject= /C=CN/ST=Fujian/L=Xiamen/O=Jimei University/OU=Chengyi College/CN=jianqiu/emailAddress=jianqiu414@stu.jmu.edu.cn

    3)所需工具

http://www.lihuasoft.net/uppic/d_0612150814430.zip下载Marcus Müller的ipsec.exe工具,解压到一个目录中,本例使用d:\ipsec

~/ca$ openssl x509 -in demoCA/cacert.pem -noout -subject
得到如下的信息
    
    4)创建需要的控制台

    运行mmc->添加删除管理单元->添加->IP安全策略管理->选择本地计算机->完成;
    添加删除管理单元->添加->证书->计算机账户->本地计算机->完成。

    5)添加证书

    在刚才我们新建的工作台的证书上,选择个人->所以任务->导入,然后把win.p12导入即可。

    6)安装IPSec工具

    首先需要安装ipsecpol.exe(Windows 2000)或ipseccmd.exe(Windows XP,在Windows安装光盘的UPPORT\TOOLS目录下,setup选择完全安装),在http://support.microsoft.com/default.aspx?scid=kb;en-us;838079还有一片关于XP SP2的这些个附加工具的说明。

    随后编辑d:\ipsec\ipsec.conf文件,把我们上面得到的证书的信息填入rightca,也可以用mmc的证书页面查看,编辑好的ipsec.conf看起来是这个样子的。

conn roadwarrior
    left=%any
    right=192.168.49.2
    rightca="C=CN,S=Fujian,L=Xiamen,O=Jimei University,OU=Chengyi College,CN=jianqiu,E=jianqiu414@stu.jmu.edu.cn"
    network=auto
    auto=start
    pfs=yes

conn roadwarrior-net
    left=%any
    right=192.168.49.2
    rightsubnet=192.168.183.0/44
    rightca="C=CN,S=Fujian,L=Xiamen,O=Jimei University,OU=Chengyi College,CN=jianqiu,E=jianqiu414@stu.jmu.edu.cn"
    network=auto
    auto=start
    pfs=yes
如果,你想要加密所有和192.168.49.2的连接

conn roadwarrior-all
    left=%any
    right=192.168.49.2
    rightsubnet=*
    rightca="C=CN,S=Fujian,L=Xiamen,O=Jimei University,OU=Chengyi College,CN=jianqiu,E=jianqiu414@stu.jmu.edu.cn"
    network=auto
    auto=start
    pfs=yes

注意rightca不要写错,可以通过我们刚才的控制台,依次打开,“IP安全策略,在本地计算机”->FreeSwan-> “roadwarrior-Host filter list”->“身份验证方法”->“使用由此证书颁发机构(CA)颁发的证书”里的字段。

然后到d:\tools目录下,运行ipsec

IPSec Version 2.2.0 (c) 2001-2003 Marcus Mueller
Getting running Config ...
Microsoft's Windows XP identified
Usage: Ipsec [-off] [-delete] [-debug] [-nosleep]


D:\Tools\ipsec>ipsec
IPSec Version 2.2.0 (c) 2001-2003 Marcus Mueller
Getting running Config ...
Microsoft's Windows XP identified
Setting up IPSec ...

        Deactivating old policy...
        Removing old policy...

Connection roadwarrior:
        MyTunnel     : 192.168.49.1
        MyNet        : 192.168.49.1/255.255.255.255
        PartnerTunnel: 192.168.49.2
        PartnerNet   : 192.168.49.2/255.255.255.255
        CA (ID)      : C=CN,S=Fujian,L=Xiamen,O=Jimei University,OU=Cheng...
        PFS          : y
        Auto         : start
        Auth.Mode    : MD5
        Rekeying     : 3600S/50000K
        Activating policy...

Connection roadwarrior-net:
        MyTunnel     : 192.168.49.1
        MyNet        : 192.168.49.1/255.255.255.255
        PartnerTunnel: 192.168.49.2
        PartnerNet   : 192.168.183.0/255.255.255.0
        CA (ID)      : C=CN,S=Fujian,L=Xiamen,O=Jimei University,OU=Cheng...
        PFS          : y
        Auto         : start
        Auth.Mode    : MD5
        Rekeying     : 3600S/50000K
        Activating policy...

d:\ipsec>ping 192.168.49.2
看到
Negotiating IP Security.
后有回复,说明连接成功。

如果ipsec工具在你的系统上运行有问题,请确认你的rightca有没有填错。也可以尝试到sourceforge.net下载Linsys IPSec Tool项目的lsipsectool.exe。另外,如果系统是Windows XP SP2,还要注意NAT-T的问题。具体Windows运行IPsec客户端的注意事项可以查阅http://wiki.openswan.org/index.php/Win2K
我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 用OpenSWAN做Linux下的IPSec VPN的详细配置指南
关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接

Copyright ©2001-2003 Allrights reserved
e_mail:站长:webmaster(at)lihuasoft.net
网站编程QQ群  
京ICP备05001064号

页面生成时间:0.00619