*************************
用Openswan组建Linux IPSec

by toorq
E-mail:toorq at 163 dot com
*************************

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

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

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

    2)SSL-Based ××× 其主要代表有 Open×××

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

    3)PPTP-Based ××× 有(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
    如果你想从源码安装,到 [url]http://www.openswan.org/code[/url]下载软件包,然后按照包中的说明安装。由于我们使用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证书方式当然更灵活,要是×××的客户比较多,总不能,每个都记住长长的rsasig吧。使用x.509证书认证,我们首先需要装上openssl(现在的Linux基本自带,没有的 [url]www.openssl.org[/url]下一个装上)。

    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)所需工具

[url]http://***.ebootis.de/package.zip[/url]下载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选择完全安装),在 [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;838079[/url]还有一片关于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客户端的注意事项可以查阅 [url]http://wiki.openswan.org/index.php/Win2K[/url]

toorq 编辑于 2006-10-25 18:52
 
===================================================================
 
bash
发表于:2006-10-24 15:36
发帖: 1
积分: 0
注册: 2006-09-10
在Linux下安装OpenSWAN之前,有没有一些必须安装的软件啊?
fatb
发表于:2006-10-24 17:07
发帖: 2006
积分: 0
注册: 2003-04-26
挺一下
我还在捣鼓freeswan。。。赶紧换openswan去
strongswan这个名字我挺喜欢的,可惜Y的一定要编译内核,动作太大了。
不知道toorq能否弄一个精简版的啊,就主机拨入×××的 :)
我也在弄中……

btw:你怎么不提交到XFOCUS首页去啊,挺详细的文章,而且也不是直接翻译HOWTO

#########
转了一圈,发现最新的不一定是最合适的,呵呵,我还是搞回freeswan了
openswan在我那系统上装起来问题太多了。

fatb 编辑于 2006-10-24 18:28
---
/dev/null
toorq
发表于:2006-10-25 07:31
发帖: 104
积分: 0
注册: 2004-06-26
我不知道怎么提交到首页之前……我已经提交到安全文摘,可是没有显示出来是不是要等待审核呢?

OpenSWAN最好的优点就是不要从新编译内核,和2.6的的配合比FreeSWAN好。

toorq 编辑于 2006-10-25 07:37
fatb
发表于:2006-10-25 10:35
发帖: 2006
积分: 0
注册: 2003-04-26
那是他在2.6内核下的应用啊,2.6的内核带ipsec的了
我需要在2.4下面搞定他,redhat的机器
关键他klips的rpm在2.4下面装了会报错
我现在尝试一下用freeswan的klips+openswan。。。。
---
/dev/null
fatb
发表于:2006-10-25 11:35
发帖: 2006
积分: 0
注册: 2003-04-26
[url]http://hmyblog.vmmatrix.net/sdbwww/pub/books/Packt.Publishing.Building.And.Integrating.Virtual.Private.Networks.With.Openswan.Jan.200620060628185701.rar[/url]
这本书把IPSEC ×××和openswan讲的很详细
推荐一吧。
---
/dev/null
fatb
发表于:2006-10-25 12:26
发帖: 2006
积分: 0
注册: 2003-04-26
晕啊
要nat-t必须打内核补丁,sigh,看来我还是用open***好了。
---
/dev/null
toorq
发表于:2006-10-25 12:39
发帖: 104
积分: 0
注册: 2004-06-26
Open×××和OpenSWAN是不一样的东西,Open×××跑在应用层,当然配置起来要方便。:)
fatb
发表于:2006-10-25 14:04
发帖: 2006
积分: 0
注册: 2003-04-26
是的,但ssl ***不如ipsec ***安全啊,有可能会被MIM,但没办法了。
据说openswan如果不用证书的话,配置起来也很简单,不过我没弄下去了,无用功,关键Y的NAT不行。
---
/dev/null
tombkeeper
发表于:2006-10-25 14:11
发帖: 3565
积分: 0
注册: 2001-09-20
open***用Static Key方式、用户名/口令方式应该都没有MIM的危险吧?
---
无耻至极则潇洒如西门吹雪
无脑至极则常胜如独孤求败
toorq
发表于:2006-10-25 18:44
发帖: 104
积分: 0
注册: 2004-06-26
我用的Debian,貌似是可以不编译内核用nat-t,太久没有看了,记忆有点模糊。

即使需要编译内核,自动化程度也高,把内核的补丁包和源码包抓回来编译一遍就好了:)
toorq
发表于:2006-10-25 18:54
发帖: 104
积分: 0
注册: 2004-06-26
引用 (fatb @ 2006-10-25 14:04)
是的,但ssl ***不如ipsec ***安全啊,有可能会被MIM,但没办法了。
据说openswan如果不用证书的话,配置起来也很简单,不过我没弄下去了,无用功,关键Y的NAT不行。

我的文章里也有不用证书的配置,就是第一个,要生成hostkey,几步就搞定。
fatb
发表于:2006-10-25 20:57
发帖: 2006
积分: 0
注册: 2003-04-26
引用 (toorq @ 2006-10-25 18:44)
我用的Debian,貌似是可以不编译内核用nat-t,太久没有看了,记忆有点模糊。



即使需要编译内核,自动化程度也高,把内核的补丁包和源码包抓回来编译一遍就好了:)
呵呵,关键那是肉鸡………………

根据那本PDF的书上所说,nat-t是要给内核打补丁再编译内核的



引用


NAT-Traversal Patch

If you are going to use KLIPS on either a 2.4 or a 2.6 kernel, it is strongly recommended to apply

the NAT traversal patch to the kernel, which can be generated from the Openswan source code. It

modifies some internal structures of the UDP packet format in the kernel. Note that this is not a

change to a kernel module, but a change to the kernel core itself.  

If you apply the NAT-T patch, you MUST rebuild both the kernel p_w_picpath (bzImage) and

all the kernel modules.



KLIPS NAT-Traversal support (openswan-2.4.0 and up)    /proc/net/ipsec_natt
你看你那机器上有/proc/net/ipsec_natt这个文件吗,值是多少啊,如果你机器上还有swan的话 :)

fatb 编辑于 2006-10-25 21:05
---
/dev/null
toorq
发表于:2006-10-26 18:39
发帖: 104
积分: 0
注册: 2004-06-26
文章里漏了一小段,没有把内核态的选择说清楚。由于IPSec工作在网络层,所以一定需要内核的堆栈支持。2.4内核中是没有这样原生的IPSec Stack的。所以一定需要打补丁,这个补丁还不能编译为模块。到了2.6多了个native IPSec Stack,所以我们有两个选择,KLIPS(大多代码是FreeS/WAN的)和2.6原生的(这个比较方便)。

如果是肉鸡的话,不想编译内核,加2.4要看具体情况了,比如Debian(Sarge)中的这份文档,(/usr/share/doc/README.Debian.gz)中有关于Kernel Support的一段:
引用


2) Kernel Support



Note: This package can make use of in-kernel IPSec stack, which is available in stock Debian kernel p_w_picpath (>=2.4.24 and 2.6.x).



If you want to use the openswan utilities, you will need the appropriate kernel modules. The Debian default kernel native IPSec stack (which is include in Linux 2.6 kernels and has been backported to Debian's 2.4 kernels) can be used out-of-the-box with openswan pluto, the key management daemon. This native Linux IPSec stack is of high quality, has all of the features of the latest Debian freeswan and openswan packages ( i.e. support for other ciphers like AES and NAT Traversal support) and is well integrated into the kernel networking subsystem(which is not true for the freeswan kernel modules). Howerver, it is not as well tested as the freeswan kernel modules simply because the code base is younger. But nonetheless, the easiest way to get IPSec support in Debian is to use the default kernels (or recompile from the Debian kernel sources) and install the mature freeswan pluto kernel management daemon.



If you do not want to use the in-kernel IPSec stack of newer 2.6 kernels or are building a custom 2.4 kernel, then kernel part is available in two forms: the kernel tree can be patched using the kernel-patch-openswan package, which will be applied automatically by make-kpkg, or stand-alone modules can be built using the openswan-modules-source package. Please note that, for building the modules, you need the _complete_,build kernel tree for invoking "make-kpkg modules_install", only having the kernel headers is not enough. NAT Traversal can not be used at the moment with the stand-alone modules, it will needs a small kernel pathc applied to the kernel tree. If you need NAT Traversal, please use either the in-kernel IPSec stack (which is preferred) or the kernel-patch-openswan package.



从那长长两段话里我们可以看出来,如果想使用发行版的内核,我们要看他的版本(比如Debian的2.4.24以上,可能有backported的2.6 Stack)和发行版的内核是怎么调校的(我还记的老的redhat用freeswan只要装个rpm就好),不过可以看出来2.4想要Nat-T,多半是要打补丁,重编译内核了。
 
==================================================================
 
发表于:2006-10-25 18:44
发帖: 104
积分: 0
注册: 2004-06-26
我用的Debian,貌似是可以不编译内核用nat-t,太久没有看了,记忆有点模糊。

即使需要编译内核,自动化程度也高,把内核的补丁包和源码包抓回来编译一遍就好了:)
toorq
发表于:2006-10-25 18:54
发帖: 104
积分: 0
注册: 2004-06-26
引用 (fatb @ 2006-10-25 14:04)
是的,但ssl ***不如ipsec ***安全啊,有可能会被MIM,但没办法了。
据说openswan如果不用证书的话,配置起来也很简单,不过我没弄下去了,无用功,关键Y的NAT不行。

我的文章里也有不用证书的配置,就是第一个,要生成hostkey,几步就搞定。
fatb
发表于:2006-10-25 20:57
发帖: 2006
积分: 0
注册: 2003-04-26
引用 (toorq @ 2006-10-25 18:44)
我用的Debian,貌似是可以不编译内核用nat-t,太久没有看了,记忆有点模糊。



即使需要编译内核,自动化程度也高,把内核的补丁包和源码包抓回来编译一遍就好了:)
呵呵,关键那是肉鸡………………

根据那本PDF的书上所说,nat-t是要给内核打补丁再编译内核的



引用


NAT-Traversal Patch

If you are going to use KLIPS on either a 2.4 or a 2.6 kernel, it is strongly recommended to apply

the NAT traversal patch to the kernel, which can be generated from the Openswan source code. It

modifies some internal structures of the UDP packet format in the kernel. Note that this is not a

change to a kernel module, but a change to the kernel core itself.  

If you apply the NAT-T patch, you MUST rebuild both the kernel p_w_picpath (bzImage) and

all the kernel modules.



KLIPS NAT-Traversal support (openswan-2.4.0 and up)    /proc/net/ipsec_natt
你看你那机器上有/proc/net/ipsec_natt这个文件吗,值是多少啊,如果你机器上还有swan的话 :)

fatb 编辑于 2006-10-25 21:05
---
/dev/null
toorq
发表于:2006-10-26 18:39
发帖: 104
积分: 0
注册: 2004-06-26
文章里漏了一小段,没有把内核态的选择说清楚。由于IPSec工作在网络层,所以一定需要内核的堆栈支持。2.4内核中是没有这样原生的IPSec Stack的。所以一定需要打补丁,这个补丁还不能编译为模块。到了2.6多了个native IPSec Stack,所以我们有两个选择,KLIPS(大多代码是FreeS/WAN的)和2.6原生的(这个比较方便)。

如果是肉鸡的话,不想编译内核,加2.4要看具体情况了,比如Debian(Sarge)中的这份文档,(/usr/share/doc/README.Debian.gz)中有关于Kernel Support的一段:
引用


2) Kernel Support



Note: This package can make use of in-kernel IPSec stack, which is available in stock Debian kernel p_w_picpath (>=2.4.24 and 2.6.x).



If you want to use the openswan utilities, you will need the appropriate kernel modules. The Debian default kernel native IPSec stack (which is include in Linux 2.6 kernels and has been backported to Debian's 2.4 kernels) can be used out-of-the-box with openswan pluto, the key management daemon. This native Linux IPSec stack is of high quality, has all of the features of the latest Debian freeswan and openswan packages ( i.e. support for other ciphers like AES and NAT Traversal support) and is well integrated into the kernel networking subsystem(which is not true for the freeswan kernel modules). Howerver, it is not as well tested as the freeswan kernel modules simply because the code base is younger. But nonetheless, the easiest way to get IPSec support in Debian is to use the default kernels (or recompile from the Debian kernel sources) and install the mature freeswan pluto kernel management daemon.



If you do not want to use the in-kernel IPSec stack of newer 2.6 kernels or are building a custom 2.4 kernel, then kernel part is available in two forms: the kernel tree can be patched using the kernel-patch-openswan package, which will be applied automatically by make-kpkg, or stand-alone modules can be built using the openswan-modules-source package. Please note that, for building the modules, you need the _complete_,build kernel tree for invoking "make-kpkg modules_install", only having the kernel headers is not enough. NAT Traversal can not be used at the moment with the stand-alone modules, it will needs a small kernel pathc applied to the kernel tree. If you need NAT Traversal, please use either the in-kernel IPSec stack (which is preferred) or the kernel-patch-openswan package.



从那长长两段话里我们可以看出来,如果想使用发行版的内核,我们要看他的版本(比如Debian的2.4.24以上,可能有backported的2.6 Stack)和发行版的内核是怎么调校的(我还记的老的redhat用freeswan只要装个rpm就好),不过可以看出来2.4想要Nat-T,多半是要打补丁,重编译内核了。