| 在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内核可以在
http://people.redhat.com/sgrubb/files/lspp/找到,如果不是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。
上一页 [1] [2] [3] [4] 下一页
|