Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187586
  • 博文数量: 64
  • 博客积分: 1451
  • 博客等级: 上尉
  • 技术积分: 665
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-24 10:07
文章分类

全部博文(64)

文章存档

2010年(7)

2009年(57)

我的朋友

分类: LINUX

2009-09-09 12:22:13

2009-4-15 追风 转载请注明出处。

本文主要参考英文版IPsec HOWTO

IPsec安全技术全接触


本篇为IPsec HOWTO的第四部分,介绍手动配置IPsec的传输模式和通道模式。

IPsec的安装配置及使用

本节主要介绍如何Linux系统上使用IPsecLinux内核版本必须是大于2.5.47或者2.6及以上版本。

 

安装

 

l        内核

最新版的Linux内核可以在

 

cd /usr/local/src

tar xvjf /path-to-source/linux-.tar.bz2

cd linux-

make menuconfig

make bzImage

make modules

make modules_install

make install

注意,在配置内核的时候,要保证如下选项已被选中

Networking support (NET) [Y/n/?] y

  *

  * Networking options

  *

  PF_KEY sockets (NET_KEY) [Y/n/m/?] y

  IP: AH transformation (INET_AH) [Y/n/m/?] y

  IP: ESP transformation (INET_ESP) [Y/n/m/?] y

  IP: IPsec user configuration interface (XFRM_USER) [Y/n/m/?] y

 

Cryptographic API (CRYPTO) [Y/n/?] y

  HMAC support (CRYPTO_HMAC) [Y/n/?] y

  Null algorithms (CRYPTO_NULL) [Y/n/m/?] y

  MD5 digest algorithm (CRYPTO_MD5) [Y/n/m/?] y

  SHA1 digest algorithm (CRYPTO_SHA1) [Y/n/m/?] y

  DES and Triple DES EDE cipher algorithms (CRYPTO_DES) [Y/n/m/?] y

  AES cipher algorithms (CRYPTO_AES) [Y/n/m/?]

 

l        用户层工具

 

最新的工具可以到

注意:当Linux内核版本高于2.6.10是,使用的ipsec-tools版本比需要是0.5或更高版本。

 

配置和使用

在前面原理那一章节中,我没已经知道了IPsec的使用有两种模式:传输模式和通道模式。并且安全联盟(SA)的建立也有两种方法:手动方式和使用IKE协议。接下来将分别介绍这几种模式和方法。 

手动方式建立SA

顾名思义,手动方式就是建立通道链接时所需要的所有参数,都需要管理员来指定,这种方式并不需要IKE协议的参与。建立链接所使用的协议,加密算法,密钥等,都需要管理员来决定。

传输模式

对于学习如何使用IPsec来说,这是最好的入门方式,因为它的设置最简单。假设两台主机的IP地址分别是192.168.1.00和192.168.2.100。

存储在SAD和SPD中的所有参数全部可以通过setkey命令更改。可以查看该命令的man手册了解详细用法。

       详细的配置都写在/etc/setkey.conf中,然后执行setkey –f /etc/setkey.conf即可。适用于手动建立SA传输模式的setkey.conf如下:

#!/usr/sbin/setkey -f

 

# Configuration for 192.168.1.100

 

# Flush the SAD and SPD

flush;

spdflush;

 

# Attention: Use this keys only for testing purposes!

# Generate your own keys!

 

# AH SAs using 128 bit long keys

add 192.168.1.100 192.168.2.100 ah 0x200 -A hmac-md5

0xc0291ff014dccdd03874d9e8e4cdf3e6;

add 192.168.2.100 192.168.1.100 ah 0x300 -A hmac-md5

0x96358c90783bbfa3d7b196ceabe0536b;

 

# ESP SAs using 192 bit long keys (168 + 24 parity)

add 192.168.1.100 192.168.2.100 esp 0x201 -E 3des-cbc

0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831;

add 192.168.2.100 192.168.1.100 esp 0x301 -E 3des-cbc

0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df;

 

# Security policies

spdadd 192.168.1.100 192.168.2.100 any -P out ipsec

           esp/transport//require

           ah/transport//require;

 

spdadd 192.168.2.100 192.168.1.100 any -P in ipsec

           esp/transport//require

           ah/transport//require;

如果想替换以上文件中的key,可以用如下命令产生新的随机key:

$ # 128 Bit long key

$ dd if=/dev/random count=16 bs=1| xxd -ps

16+0 Records ein

16+0 Records aus

cd0456eff95c5529ea9e918043e19cbe

 

$ # 192 Bit long key

$ dd if=/dev/random count=24 bs=1| xxd -ps

24+0 Records ein

24+0 Records aus

9d6c4a8275ab12fbfdcaf01f0ba9dcfb5f424c878e97f888

 

在setkey.conf中,首先刷新SAD和SPD,紧接着就是创建AH的安全联盟(SA)和ESP的安全联盟(SA),add命令是添加一条SA到SAD中,以

add 192.168.1.100 192.168.2.100 ah 0x200 -A hmac-md5

0xc0291ff014dccdd03874d9e8e4cdf3e6;

为例,该行命令降添加一个新的SA到SAD中,加密的方向是 192.168.1.100->192.168.2.100,其中ah表示使用的是ah协议,SPI是0x200,验证算法要加上-A参数(如果加 -E,则表示加密,加-C,则表示压缩),采用的算法的hmac-md5,紧跟算法之后是密钥。密钥需要是double-quoted “ASCII”格式的,或者是以0x开头的十六进制数。

对于AH和ESP两种协议,Linux支持以下几种算法:hmac-md5 , hmac-sha, des-cbc ,3des-cbc。

 

spdadd命令是添加一条SP到SPD中,策略定义了哪些包将会被IPsec保护,并且定义了所用的协议,模式等,以

spdadd 192.168.1.100 192.168.2.100 any -P out ipsec

           esp/transport//require

           ah/transport//require;

为例,方向是192.168.1.100->192.168.2.100,配合“-P out”参数,即从192.168.1.100发向192.168.2.100的包将会得到保护。所保护的协议是any,即任何协议的数据包都会得到保 护。Ipsec表示使用的是IPsec协议。接下来是定义使用的哪种IPsec协议以及传输模式和级别。由例可见,esp和ah协议都又使用,两种协议都 是传输模式,级别是require(require/user)不知级别有何用。

 

/etc/setkey.conf不仅要在节点的一段配置,还要在另一个节点配置,只是需要改一下传输的方向,最简单的办法是将spdadd行的out改为in,in改为out即可。如下:

注意:两个节点配置文件中的key必须相同

 

#!/usr/sbin/setkey -f

 

# Configuration for 192.168.2.100

 

# Flush the SAD and SPD

flush;

spdflush;

 

# Attention: Use this keys only for testing purposes!

# Generate your own keys!

 

# AH SAs using 128 bit long keys

add 192.168.1.100 192.168.2.100 ah 0x200 -A hmac-md5

0xc0291ff014dccdd03874d9e8e4cdf3e6;

add 192.168.2.100 192.168.1.100 ah 0x300 -A hmac-md5

0x96358c90783bbfa3d7b196ceabe0536b;

 

# ESP SAs using 192 bit long keys (168 + 24 parity)

add 192.168.1.100 192.168.2.100 esp 0x201 -E 3des-cbc

0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831;

add 192.168.2.100 192.168.1.100 esp 0x301 -E 3des-cbc

0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df;

 

# Security policies

spdadd 192.168.1.100 192.168.2.100 any -P in ipsec

           esp/transport//require

           ah/transport//require;

 

spdadd 192.168.2.100 192.168.1.100 any -P out ipsec

           esp/transport//require

           ah/transport//require;

 

两个节点配置完毕后,分别执行setket –f /etc/setkey.conf 即可。如图6

                          

                       图6 传输模式

可以通过如下命令查看SAD和SPD:

# setkey -D

# setkey –DP

如果此时在一段执行ping命令,另一端执行tcpdump,可得到反馈如下:

12:45:39.373005 192.168.1.100 > 192.168.2.100: AH(spi=0x00000200,seq=0x1):

ESP(spi=0x00000201,seq=0x1) (DF)

12:45:39.448636 192.168.2.100 > 192.168.1.100: AH(spi=0x00000300,seq=0x1):

ESP(spi=0x00000301,seq=0x1)

12:45:40.542430 192.168.1.100 > 192.168.2.100: AH(spi=0x00000200,seq=0x2):

ESP(spi=0x00000201,seq=0x2) (DF)

12:45:40.569414 192.168.2.100 > 192.168.1.100: AH(spi=0x00000300,seq=0x2):

ESP(spi=0x00000301,seq=0x2)

 

通道模式

通常,两个节点作为网关时,采用通道模式,用于保护两个网络之间的数据传输,如图7

                               图7 通道模式

 

/etc/setkey.conf文件如下:

#!/usr/sbin/setkey -f

 

# Flush the SAD and SPD

flush;

spdflush;

 

# ESP SAs doing encryption using 192 bit long keys (168 + 24 parity)

# and authentication using 128 bit long keys

add 192.168.1.100 192.168.2.100 esp 0x201 -m tunnel -E 3des-cbc

0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831

-A hmac-md5 0xc0291ff014dccdd03874d9e8e4cdf3e6;

 

add 192.168.2.100 192.168.1.100 esp 0x301 -m tunnel -E 3des-cbc

0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df

-A hmac-md5 0x96358c90783bbfa3d7b196ceabe0536b;

 

# Security policies

spdadd 172.16.1.0/24 172.16.2.0/24 any -P out ipsec

           esp/tunnel/192.168.1.100-192.168.2.100/require;

 

spdadd 172.16.2.0/24 172.16.1.0/24 any -P in ipsec

           esp/tunnel/192.168.2.100-192.168.1.100/require;

 

注意:当使用的内核版本大于2.6.10时,要确保ipsec-tools版本大于0.5,否则需要定义forward策略,使用以下命令行代替原有命令行。

spdadd 172.16.2.0/24 172.16.1.0/24 any -P fwd ipsec

           esp/tunnel/192.168.2.100-192.168.1.100/require;

由配置文件可见,第一步仍然是刷新SAD和SPD。在该配置文件中,只是用了esp协议,esp协议可确保数据包的机密性和完整性。以

add 192.168.1.100 192.168.2.100 esp 0x201 -m tunnel -E 3des-cbc

0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831

-A hmac-md5 0xc0291ff014dccdd03874d9e8e4cdf3e6;

为例,首先要定义机密算法及其密钥,“-E 3des-cbc”和“0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831”,第二,要定义认证算 法及其密钥,“-A hmac-md5”和“0xc0291ff014dccdd03874d9e8e4cdf3e6”。另外,该行中多了“-m tunnel”,因为传输模式是默认的,可以不写该参数,而通道模式就必须在文件命令行中指明。

 

该文件同样需要在两个节点间都配置,只需要把out改为in,把in改为out即可。如何你是用的是forward策略,不是out或in,就需要交换一下apdadd后的IP地址。

安全策略中定义了网络中需要收到保护的IP地址,以172.16.1.0和172.16.2.0/24为源地址和目的地址的数据包将会得到保护。另外,通道模式中,安全策略必须指定两个网络网关的IP地址,并且要注意方向。

 

If you tunnel is not working, please check your routing. Your hosts need to know that they should send the packets for the opposite network to you vpn gateway. The easiest setup would be using your vpn gateway as default gateway.
阅读(2067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~