分类: LINUX
2008-04-23 08:25:24
因为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。