Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103753090
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-23 08:25:24

作者: Joshua Brindle/黄永兵译 出处:51CTO.com 
 
 
在SELinux中有两种标记网络通讯的方法:NetLabel,它是CIPSO的实现,另外一种是基于IPSec的标记,我将不讨论NetLabel,因为它仅仅提供了SELinux上下文MLS支持,并且主要是应用于传统的可靠的操作系统如HP-UX和Solaris与SELinux进行协作。基于IPSec的标记条目内容,目前只工作在SELinux系统之间。

因为NetLabel主要为传统的可靠的系统提供MLS支持,我将不讨论它,我将重点介绍基于IPSec的标记。

在这里将涉及到一些IPSec的知识,如果你对它们还不熟悉请参阅IPSec相关文档,尤其要知道什么是SPD和SA,以及它们在IPSec中的角色。

首先你需要准备一个支持IPSec的内核,如果你使用的是redhat的系统就很容易了,可以使用目前Fedora rawhide内核或LSSP内核,LSSP内核可以在

找到,如果不是redhat的系统,可以升级到2.6.22内核,它包含了IPSec的支持。

你还需要一个ipsec工具用来标记,rawhide或LSSP版本也将在这里用到,一旦你安装好所有需要的东西就可以开始使用IPSec标记了,我们将从简单的标记SA开始。

首先,我有一组程序用来测试并确定所有需要的东西都在工作,它们是一个简单的客户端和连接用的服务端,使用getpeercon()返回网络套接字的上下文。

client.c【译者注:内容见附录A】
server.c【译者注:内容见附录B】
编译它们并将其连接到libselinux:
gcc -o client client.c -lselinux
gcc -o server server.c –lselinux

首先尝试在没有IPSec的情况运行它们看会发生什么:

我的测试用机是192.168.147.132(主机名:scarecrow)和192.168.147.130(主机名:poisonivy),很明显,请替换为你的ip地址。

在192.168.147.132上运行服务端和客户端后,在其他机器上的输出类似下面这样:

[root@poisonivy ~]# ./client 192.168.147.132 
getpeercon: Protocol not available Received: Hello, (null) from (null)
[root@scarecrow ~]# ./server 
getsockopt: Protocol not available server: got connection from 
192.168.147.130, (null) 
getpeercon()返回协议不可用,因为在本次连接中没有标记被启用,你可以根据
错误信息来判断你是否使用了标记网络套接字。

如果我们在这两台机器之间不指定一个上下文而产生一个SA,我们将得到同样的结果: 

[root@scarecrow ~]# cat dev/ipsec/setkey.scarecrow.test 
spdflush; 
flush; 
spdadd 192.168.147.130 192.168.147.132 any
-P in ipsec esp/transport//require; 
spdadd 192.168.147.132 192.168.147.130 any 
-P out ipsec esp/transport//require; 
[root@poisonivy ~]# cat dev/ipsec/setkey.poisonivy.test 
spdflush; 
flush; 
spdadd 192.168.147.132 192.168.147.130 any 
-P in ipsec esp/transport//require; 
spdadd 192.168.147.130 192.168.147.132 any 
-P out ipsec esp/transport//require; 

然后运行:

[root@poisonivy ~]# setkey -f dev/ipsec/setkey.poisonivy.test 
[root@scarecrow ~]# setkey -f dev/ipsec/setkey.scarecrow.test 

注意:当尝试连接时,要想创建SA两台机器都需要运行racoon。

象之前那样运行服务端和客户端会得到同样的结果,你可以使用setkey –D来查看新创建的SA,注意它是没有标记的SA。

阅读(273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~