跳到正文

IPSec打造FreeBSD下信息安全传输

      工具及图片都在压缩包中,解压密码:www.ringz.org http://dahubaobao.go.nease.net/IPSec.rar 欢迎进入环形区,一群技术狂热者的社区,www.ringz.org欢迎你的加入!注:转载请著名出处(包括这里的声明),谢谢!=====================================================================IPSec在FreeBSD下应用实例概述在当今的网络安全中,由于很多服务都是明文通讯,安全性非常底,所以,采用通讯加密是非常有必要的,否则很可能会被嗅探工具简听。IPSec作为加密通讯中的佼佼者,我们没理由不利用。关于IPSec,我想大家或多或少的都有一些了解,黑客防线也刊登过多篇IPSec的相关文章。不过,这些文章都是基于Windows下的,并且都是在讲如何过滤数据包,其实,过滤数据包的任务完全可以交给防火墙来处理,而IPSec真正的强大地方是它的通讯加密。鉴于此,我觉得有必要说说如果使用IPSec进行通讯加密。所以,我通过一段时间的学习,写下了此文,并且以FreeBSD为例,讲解如何使用IPSec与Windows/Unix进行加密通讯,希望能对安全爱好者以及BSD爱好者一些帮助。先介绍一下我测试的环境:本地:FreeBSD 4.9 STABLE IP:192.168.0.20目标:Wdinwos 2000 Advanced Server IP:192.168.0.1目的:使用IPSec加密所有IP报文,除广播、多播协议外。注意:这里不介绍如何使用IPSec过滤数据包,因为这些足可以交给IPFW来完成。一,什么是IPSecIPSec,即网际安全协议,它通过对IP报文进行加密,并将其封装在IP头中通过企业专用网或者公共网络发送。IPSec在网络层上保护TCP/IP 协议栈中所有 IP 和更高层的协议(例如 TCP、UDP、ICMP),应用程序可以享用经过IPSec处理的网络层的安全服务,而不必关心自身的安全机制。IPSec可在路由器、防火墙、主机上配置,实现端到端的安全通讯。IPSec工作在网络层,它可以使用隧道模式封装数据包或是直接加密整个数据包。之后就可以将加密后的数据包封装在新的IP包头中,最后传输到目的地。在目标收到数据包后,去除IP头部分,然后对其进行解密(这时已经完成了客户端到服务器密钥交换、认证工作),最后得到原始数据包。如图1就是IPSec的工作流程图。关于IPSec就简单说到这里,如果想深入了解,Windows系统上的IPSec帮助就是很好的资料。二,更新FreeBSDFreeBSD默认并不支持IPSec,这是因为默认内核GENERIC中并没有相关选项,所以需要自己添加,并重新编译内核。#cd /usr/src/sys/i386/conf#cp GENERIC DAHUKERNEL#vi DAHUKERNEL//添加IPSec相关选项,可参见图2options IPSEC options IPSEC_ESP options IPSEC_DEBUG//保存退出,下面更新系统源代码以及Ports#mkdir /root/ports_src_update#cd /usr/share/examples/cvsup#cp ports-supfile stable-supfile /root/ports_src_update/#cd /;cd /root/ports_src_update#vi ports-supfile//修改“default host=”为你想使用的服务器,比如我是:cvsup.freebsdchina.org#vi stable-supfile//同样是修改“default host=” 为你想使用的服务器#cvsup –g –L 2 ports-supfile//更新Ports,大概10-20分钟之间,视网络速度而定#cvsup –g –L 2 stable-supfile//更新系统源代码,同步到Stable。大概10-20分钟之间,视网络速度而定。在源代码更新完毕之后,就需要用新代码替换系统原有代码以及合并/etc下的配置文件,并且用新内核替换掉旧内核。当然,这步不是必须的,如果你不久之前更新过源代码(或者已经同步到Stable),就可以略过。但,你还是必须更新Ports和重新编译内核。#cd /;cd /usr/src#make buildworld //同步系统,这需要很长的时间,最少也要1个小时,也可以运行多个进程加快该过程:make –j4 buildworld#make buildkernel GENERIC=DAHUKERNEL#make installkernel GENERIC=DAHUKERNEL//编译内核,并用新内核(DAHUKERNEL)替换掉旧内核(GENERIC)。编译完成之后重新启动即可。提示:如果你以前编译过内核,应该先删除/usr/obj下的内核组件文件,这样即可以加快make的速度,又可以避免系统在遇到不能覆盖的文件时发生冲突。/usr/obj目录下的文件比较特殊,它使用了schg(system immutable)标志,这是一个安全措施,为防止意外操作提供的一个保护方法,即使是root用户,也不能删除该文件。如果需要绕过这个限制,可以使用如下方法:#cd /usr/obj#chflags –R noschg * #rm –rf *如果这个时候系统的安全级别为1或者更高(根据rc.conf文件中的定义),那么将无法使用上边的命令删除schg标志。需要重新启动系统到单用户模式下方能完成该操作。#cp –Rp /etc /etc.old#cd /etc#mergemaster –cv//同步配置文件,-v表示限制详细过程,-c表示将配置文件进行比较(diff)而不是合并,如果打算合并配置文件,可以使用-i参数。最后使用uname –a查看结果。现在,你的系统已经是最新的了,如果你是新安装的系统,请务必按照上边的方法更新系统,这样即可以补上一些安全漏洞,又可以为系统带来更好的性能,和乐而不为呢?!三,应用IPSec1,FreeBSD经过上边的设置,系统已经是最新的,但现在还不能使用IPSec,还需要安装一个为IKE (ISAKMP/Oakley) Key Management Daemon的软件,好在FreeBSD已经将其收录在Ports中,这样就不用在下载了。#cd /usr/ports/security/racoon#make install clean完成之后,我们需要对其进行相应的配置。它被安装到了/usr/local/etc/racoon/目录中,我们需要对psk.txt和racoon.conf进行编辑,以符合我们的需要。提示:在FreeBSD的世界里,凡是安装的软件(不管是通过Package还是Ports),都将安装到/usr/local目录下,配置文件放到/usr/local/etc下,库文件放到/usr/local/lib、/usr/local/libexec、/usr/local/libdata目录中,二进制文件放到/usr/local/bin、/usr/local/sbin目录中。这样做的好处是显而易见的,因为可以在不修改系统的情况下,将/usr/local目录下的子目录和所有文件直接复制到另一个新系统,而安装过的软件大部分都可以运行。#cd ../../../local/etc/racoon#cp psk.txt.dist psk.txt#chmod 0600 psk.txt//psk.txt权限必须修改为0600,并且为root所有,否则racoon无法运行#vi psk.txt//见图3,删除所有内容,只添加:目标IP 预共享密钥192.168.0.1 dahubaobao#cp racoon.conf.dist racoon.conf#chmod 0600 racoon.conf//两次chmod后,权限和文件所属应如图4所示。#vi racoon..conf//编辑配置文件,注释掉一些不需要的内容。这里需要分开来说,一个是使用CA认证,一个是不使用。如果不使用CA认证,我们就需要把关于CA认证的部分注释掉;如果需要使用,就使用OpenSSL创建CA证书,并在配置文件中填写相关信息(后面会说到)。具体如下。path certificate “/usr/local/etc/cert” ;//如果需要CA认证,这里不做任何改动;如果不需要,注释掉就可以了。这里就是放CA证书的目录。默认没有注释。log debug; //去掉注释,如果你需要日志的话。isakmp 192.168.0.20 [500];//去掉注释,添加本地IP。#my_identifier address;#my_identifier user_fqdn “sakane@kame.net“;#peers_identifier user_fqdn “sakane@kame.net“;#certificate_type x509 “mycert” “mypriv”;//这里是关于CA认证的地方,如果使用了CA认证,就需要根据使用OpenSSL创建CA证书时所填写的信息来修改这里;如果不使用,注释掉即可。#my_identifier user_fqdn “sakane@kame.net“;#peers_identifier user_fqdn “sakane@kame.net“;#certificate_type x509 “mycert” “mypriv”;//同上下面来看看如何使用OpenSSL来创建证书。#openssl genrsa -des3 -out ca.key 1024#openssl req -new -x509 -days 365 -key ca.key -out ca.crt#openssl genrsa -out win2000.key 1024#openssl req -new -key win2000.key -out win2000.csr#openssl x509 -req -days 166 -in win2000.csr -CA ca.crt -CAkey ca.key -CAcreateserial –outwin2000.crt#openssl pkcs12 -export -inkey win2000.key -certfile ca.crt -in win2000.crt -out win2000.p12//以上是为Windows 2000(目标)创建的证书,由于Windows 2000证书需要Pkcs12格式,所以使用上边这条命令进行转换。下面来创建FreeBSD(本地)系统上的证书。#openssl genrsa -out freebsd.key 1024#openssl req -new -key freebsd.key -out freebsd.csr#openssl x509 -req -days 166 -in freebsd.csr -CA ca.crt -CAkey ca.key -CAcreateserial –outfreebsd.crt//这样就创建了需要的证书文件,所有的相关文件都会在当前目录下。创建证书的过程可以参见图5、6、7。现在把win2000.p12复制到Windows 2000,然后运行mmc,“控制台—添加删除管理单元—添加—证书—添加—服务账户—下一步—本地计算机—下一步—IPSEC Policy Agent—完成”。最后如图8将证书导入即可。#mkdir /usr/local/etc/racoon/cert#cp * /usr/local/etc/racoon/cert/#chmod 0600 /usr/local/etc/racoon/cert/*//把证书文件复制到/usr/local/etc/racoon/cert目录中,然后修改配置文件,如下。my_identifier address;my_identifier user_fqdn “freebsd@ringz.com“;peers_identifier user_fqdn “win2000@ringz.comt“;certificate_type x509 “freebsd.crt” “freebsd.key”;peers_certfile “win2000.crt”;//在下面还有一处需要修改,跟这里完全一样,就不在多说了。现在就可以运行racoon,并指定一个放日志的地方#racoon -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log然后就可以加入安全策略了。加入安全策略需要使用Setkey命令,它是用来添加,更新,删除,显示内核中的安全策略数据库。Setkey可以执行标准输入操作和从文件的输入操作。图9是它的语法,下面解释一下参数的含义:-c //执行标准输入操作-f filename //执行从文件的输入操作-D    //打印出SAD。如果有选项-P,打印出SPD。-F    //清除SAD。如果有选项-P,则清除SPD。-a    //显示死了的SAD。-d    //允许打印调试信息。通常不会使用。-x    //循环显示发送到Pf_key接口的所有消息-h    //加入16进制显示Setkey还有很多属性,具体可以通过man setkey查看,这里只需用到Spdadd属性,使用它可以很简单的添加安全策略。#setkey -c