1、软件说明
一、Openswan简介 python
Openswan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。 openswan支持2.0、2.二、2.4以及2.6内核,能够运行在不一样的系统平台下,包括X8六、X86_6四、IA6四、MIPS以及ARM。 vim
Openswan是开源项目FreeS/WAN中止开发后的后继分支项目,其分裂为两个项目,Openswan与 Strongswan,Openswan由三个主要组件构成:配置工具(ipsec命令脚本)、Key管理工具(pluto)、内核组件(KLIPS/26sec)26sec使用2.6内核内建模块Netkey,用来替代Openswan开发的KLIPS模块,2.4及如下版本内核无Netkey模块支持,只能使用KLIPS。若是你用的是2.6.9以上的内核,推荐使用26sec,能够不用给内核打Nat-T补丁就可使用NAT,2.6.9如下版本内核的NETKEY存在Bug,推荐使用KLIPS。IPSec差很少是最老的×××标准了,她的依然很安全,固然是在配置好之后。言下之意,她的配置比较麻烦。本文下面将作说明。
由于FreeS/WAN已经在2004年三月中止开发,因此咱们使用她的后继项目Openswan来作咱们的IPSec实验。其相比FreeS/WAN有个好处,若是使用 26sec 的时候,Openswan不用打补丁,就能够用nat。
二、Openswan的安装 安全
由于IPSec工做在网络层,因此须要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用CentOS源中编译好的Openswan来进行实验。# yum install openswan 若是你想从源码安装,到http://www.openswan.org/code 下载软件包,而后按照包中的说明安装。因为咱们使用26sec,因此只要make programs;make install就能够搞定。值得注意的是,如今的Openswan已经内建些个好用的补丁,好比x.509和NAT Traversal的支持,使用起来很是的方便。你也能够用下面的命令来检验你的安装。
# ipsec verify
三、Openswan的认证方式
Openswan支持许多不一样的认证方式,包括 :bash
RSA keys、 (RSA Signature比较简单)网络
pre-shared keys、dom
xauth或x.509证书方式。.tcp
四、Openswan的链接方式:
1) Network-To-Network方式 本文重点是以此来完成企业需求的ide
Network-To-Network方式是把两个网络链接成一个虚拟专用网络。当链接创建后,每一个子网的主机均可透明地访问远程子网的主机。工具
要实现此种链接方式,要知足如下两个条件: 测试
I. 每一个子网各自拥有一台安装有OpenSWan的主机做为其子网的出口网关或者路由;
II.每一个子网的IP段不能有叠加
(2)Road Warrior方式
当使用Network-To-Network方式时,做为每一个子网网关的主机(openswan server)不能像子网内部主机那样透明访问远程子网的主机,也就是说:若是你是一个使用LClient的移动用户,常常出差或是在不一样的地点办公,你的LClient将不能用Network-To-Network方式与公司网络进行链接。Road Warrior方式正是为这种状况而设计的,链接创建后,你的LClient就能够链接到远程的网络了。(或者使用SSL ***的开源产品open***来实现出差时候,远程拨号访问的需求)
更多详情请参见OpenSWan项目主页:http://www.openswan.org
5、本文将从如下几点进行测试
net-to-net模型 **********
1)基于pre-shared keys认证方式(PSK)
2)基于RSA Signature认证方式(RSA数字签名)
3)基于数字证书认证方式(x.509证书)
4)基于XAUTH认证方式(IPSec/Xauth PSK)
RoadWarrior
5)基于pre-shared keys认证方式(PSK)
6)基于RSA Signature认证方式(RSA数字签名)
7)基于数字证书认证方式(x.509证书)
8)基于XAUTH认证方式(IPSec/Xauth PSK)
2、环境说明
一、网络拓扑
二、实验目的
本使用目的是为了实现client1和client2两个不一样地区不一样子网的互通。即不一样机房,不一样网段的内网机器通讯
三、实验环境介绍
设备名称
IP地址信息
所属机房
北京 ***server1外网 eth0 192.168.2.48 桥接内网 eth1 192.168.183.1 VMnet1网关 192.168.2.1
上海 ***server2 外网eth0 192.168.2.111 桥接内网eth1 192.168.233.1 VMnet2网关 192.168.2.1client1 ---北京 eth0 192.168.183.44 VMnet网关 192.168.183.1 说明,我使用的是网关路由模式,是client机器经过此网关来通讯 client2 ----上海 eth0 192.168.233.44 VMnet4 网关 192.168.233.1
我本地的网络是192.168.2.0/24网段,为了让×××Server能够上网,我这边把×××Server的eht0设定到了192.168.2.0/24网段,而且网卡设定为桥接,其余的网络安装上面表格配置好,这样咱们就能够所有远程操做了,把每一个主机的主机名修改好,这样便于咱们观察。
3、Openswan环境部署
一、开启数据转发 # vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 二、关闭icmp重定向# sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf # sysctl -p 三、关闭SELinux# setenforce 0 四、安装openswan (两台***serve上面都是一样操做 # yum install openswan lsof -y # rpm -ql openswan //查看安装了那些文件。 # ipsec --version //查看ipsec的版本 [root@***server1 etc]# ipsec --version Linux Openswan U2.6.32/K2.6.32-431.el6.x86_64 (netkey) See `ipsec --copyright' for copyright information. 这里并无加载任何的IPsec stack,当启动IPsec后会自动加载系统自带的netkey。 [root@***server1 etc]#service ipsec start [root@***server1 etc]# ipsec verify //对ipsec进行验证(两台***serve上面都是一样操做)
#################
重要说明,若是前边的步骤没作安装文档完成,汇报一下错误,致使接下来的未知错误
[root@localhost ~]# ipsec verify Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.32/K(no kernel code presently loaded) Checking for IPsec support in kernel [FAILED] SAref kernel support [N/A] Checking that pluto is running [FAILED] whack: Pluto is not running (no "/var/run/pluto/pluto.ctl") Two or more interfaces found, checking IP forwarding [FAILED] whack: Pluto is not running (no "/var/run/pluto/pluto.ctl") Checking NAT and MASQUERADEing [OK] Checking for 'ip' command OK] Checking /bin/sh is not /bin/dash [OK] Checking for 'iptables' command [OK] cat: /etc/ipsec.d/examples/no_oe.conf: No such file or directory cat: /etc/ipsec.d/examples/no_oe.conf: No such file or directory Opportunistic Encryption Support
因此, 确保ipsec verify的结果都是如图所示方可继续接下来的配置
咱们能够看到openswan监听在UDP的500和4500两个端口,其中500是用来IKE密钥交换协商,4500的NAT-T是nat穿透的
4、Openswan配置(network-to-network)
一、基于pre-shared keys认证方式(PSK)
在***server1()上面做以下修改,里面的配置参数不少,你们能够参照man ipsec.conf里面的讲解# vim /etc/ipsec.conf [root@melin etc]# grep -Ev '#|^$' ipsec.conf.psk config setup protostack=netkey nat_traversal=yes virtual_private= oe=off conn net-to-net ike=aes256-sha2_256;modp2048 phase2alg=aes256-sha2_256;modp2048 authby=secret type=tunnel left=192.168.2.48 leftsubnet=192.168.183.0/24 leftid=@test1 leftnexthop=%defaultroute right=192.168.2.111 rightsubnet=192.168.233.0/24 rightid=@test2 rightnexthop=%defaultroute auto=add /add表明只是添加,但并不会链接,若是为start则表明着启动自动链接.
一样在另外一台***server2上面配置和***sever1同样的配置文件
即: scp ipsec.conf 192.168.2.111:/etc/ (两台***serve上面的ipsec.conf配置文件是同样的)
[root@***server1 etc]# vim /etc/ipsec.secrets 192.168.2.48 %any 0.0.0.0 : PSK "123" 这个文件的格式为:“Local Ip address” “remote ip address” : PSK “your key” 在192.168.2.111(***server2)上面修改为以下 [root@***server2 etc]# vim /etc/ipsec.secrets 192.168.2.111 %any 0.0.0.0 : PSK "123" 重启两个***服务 # service ipsec restart而后启动一下咱们的con # ipsec auto --up net-to-net (此处因为ipsec.conf中auto=add,因此须要手动添加)
当咱们看到ipsec sa estabilished,就证实咱们链接成功了,也能够从中看到一些加密方法,密钥交换参数,咱们也能够在配置文件里面添加以下信息进行修改。(记得保持同步到***server2)
ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048
而后在clinet1上面去ping对端子网的设备,能够看到以下,可是×××Server是不能ping通对方子网的设备的。
client1上的操做:
route add default gw 192.168.183.1
咱们能够在任意×××Server网关上面抓包,查看数据信息
# tcpdump -i eth1 -nn
# tcpdump -i eth0 -nn
其中ESP(Encapsulating Security Payload)就是加密数据。
echo request
echo reply
代表既能够发送请求,也能够收到回应包
测试经过后,能够把链接配置中 auto=add
更改成: auto=start
这样当Openswan启动时就可自动进行链接。
到此咱们net-to-net基于psk模式的×××就搭建成功了。
########################################################################################
2、基于RSA Signature认证方式(RSA数字签名)
注:由于我是接着上面的实验进行操做,一直有问题没法解决,后来从新安装了一下,安装下面的流程一次就成功了。
openswan的安装方式同本文刚开始安装同样,下面咱们主要讲解配置的不一样。
下面提到的L-Server指的是192.168.2..48(×××Server1), R-Server指的是192.168.2.111(×××Server2)。 在L-Server上面进行以下操做生成一个新的RSA密钥对 # ipsec newhostkey --output /etc/ipsec.secrets(能够先不操做)由于这个生成过程太过缓慢,咱们使用下面方面进行加速生成 # rm -rf /dev/random# ln -s /dev/urandom /dev/random # ipsec newhostkey --output /etc/ipsec.secrets 在R-Server上面执行一遍 # rm -rf /dev/random# ln -s /dev/urandom /dev/random # ipsec newhostkey --output /etc/ipsec.secrets 在L-Server上执行ipsec showhostkey --left获得L-Server的公钥 # ipsec showhostkey --left
在R-Server上执行ipsec showhostkey --right获得R-Server的公钥
# ipsec showhostkey --right
请记住这两个key,后面会用到,也可使用重定向加到配置文件里面
L-Sserver:
编辑/etc/ipsec.conf文件
# vim /etc/ipsec.conf
# scp /etc/ipsec.conf 192.168.2.111:/etc (同步到R-server上)
# service ipsec restart
# ipsec auto --up net-to-net
当咱们看到ipsec sa estabilished,就证实咱们链接成功了
测试经过后,能够把链接配置中 auto=add
更改成: auto=start
# service ipsec restart
测试:
在一端client1去ping另外一端的客户机client2,而后咱们在***server上面抓包查看。
咱们能够在任意×××Server1网关上面抓包,查看数据信息
# tcpdump -i eth1 -nn
# tcpdump -i eth0 -nn
此时一切测试成功以后
# chkconfig ipsec on
基于RSA Signature认证方式(RSA数字签名)搭建完毕。