<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

当前×××软硬结合、种类繁多,各种层出不穷的×××产品数不胜数,功能也日益复杂;这里,我们以客户需求的变化为牵引,进行一次×××世界的连连看。限于篇幅的原因,我们仅仅提供重要且容易出错的信息供参考。
 
一、第一关:PIX-PIX
 

客户提出要看一个***的模型,鉴于演示性质,要求不高,也没有提出协商参数和网络结构方面的需求,我们选择了cisco pix这个较为热门的***设备进行点到点的互通。

 

对于硬件***产品来说,由于不涉及到安装和调试环境的问题,因此配置方法都大同小异,无论是命令行还是WEB界面配置,都需要完成网络、协商、算法、访问控制等方面的配置,由于网上pix相关的实例太多,我们在这里仅仅列一下配置。

 

模型:192.168.0.1--192.168.0.2

 

192.168.0.2:
crypto isakmp enable outside

access-list outside_20_cryptomap line 1 extended permit ip interface inside host 192.168.X.1

access-list inside_nat0_outbound line 1 extended permit ip interface inside host 192.168.X.1

tunnel-group 192.168.0.1 type ipsec-l2l

tunnel-group 192.168.0.1 ipsec-attributes

  pre-shared-key XXXX

  isakmp keepalive threshold 10 retry 2

crypto isakmp policy 10 authen pre-share

crypto isakmp policy 10 encrypt 3des

crypto isakmp policy 10 hash sha

crypto isakmp policy 10 group 2

crypto isakmp policy 10 lifetime 86400

crypto ipsec transform-set ESP-3DES-SHA esp-3des esp-sha-hmac

crypto map outside_map 20 match address outside_20_cryptomap

crypto map outside_map 20 set  peer  192.168.0.1

crypto map outside_map 20 set  transform-set  ESP-3DES-SHA

crypto map outside_map interface  outside

nat (inside) 0 access-list inside_nat0_outbound  tcp 0 0 udp 0 

crypto isakmp enable outside
 
192.168.0.1:

access-list outside_20_cryptomap line 1 extended permit ip interface inside host 192.168.X.2 

access-list inside_nat0_outbound line 1 extended permit ip interface inside host 192.168.X.2 

tunnel-group 192.168.0.2 type ipsec-l2l

tunnel-group 192.168.0.2 ipsec-attributes

  pre-shared-key XXXX

  isakmp keepalive threshold 10 retry 2

crypto ISAkmp policy 10 authen pre-share

crypto isakmp policy 10 encrypt 3des

crypto isakmp policy 10 hash sha

crypto isakmp policy 10 group 2

crypto isakmp policy 10 lifetime 86400

crypto ipsec transform-set ESP-3DES-SHA esp-3des esp-sha-hmac

crypto map outside_map 20 match address outside_20_cryptomap

crypto map outside_map 20 set  peer  192.168.0.2 

crypto map outside_map 20 set  transform-set  ESP-3DES-SHA

crypto map outside_map interface  outside

nat (inside) 0 access-list inside_nat0_outbound  tcp 0 0 udp 0 
 
这样就将一个简单的ipsec ***建起来了,简单吧?

 

需要提醒的是:如果采用图形界面的ASDM的话,要注意在6.0版本以上,ipsec ***的向导位置发生了变化,移到了顶部的菜单。
IPSEC ×××连连看
 

二、第二关:PIX-ISA
客户随即提出了新的要求,要软硬结合的实现刚才的模型。
难度小有增加,但是难不倒我们,因为只要是标准的***产品,互通一般是没有问题的,这里我们选用了微软的ISA做对端。
根据微软官方文档,可以非常轻松的实现,因此在此也不赘述了。文档如下:

 

三、第三关:ISA1-ISA2-ISA3-ISA4

本关客户提出了新的需求,他们旗下的四家子公司,ABCD,其中AB之间、CD之间已经建立的×××链接,现在希望能够仅仅将BC连起来就实现全网的两两ipsec互访。且由于已经部署了ISA平台,这次需要在全部为ISA的基础上实现。
这次有些难度了,一截一截的建立***并不难,难就难在转发。
我们看下模型:
 
外部接口:192.168.1.1--192.168.2.1  192.168.3.1--192.168.4.1

                                         10.0.0.1---10.0.0.2

内部接口: 100.0.1.0    100.0.2.0     100.0.3.0    100.0.4.0
命名号:        1                2                 3               4
                      

我们需要将四个***链接起来,相邻的***直接通信,间隔的***通过中间的***转发。

由于2和3之间已经使用192.168和1、4建立链接,无法再次使用这个接口地址进行链接。

因此增加一个10网段的接口用以2和3之间的链接;

这样1和4出现一个×××,为192网段;2和3出现两个×××,为192和10网段。

 

关键:两端的ISA很简单,只要和中间的2、3分别建立一条***即可,问题出现在中间的ISA,为了能够实现全网转发,必须将1和4的子网容纳到配置中来。

以3为例,站在192.168.3.X的角度看,内网不仅仅有100.0.3.X,同时还有100.0.1.X和100.0.2.X;站在10.X.X.2的角度看,内网就必须是100.0.3.X和100.0.4.X;

同时,还要在网络规则中配置两边内网的路由,在防火墙策略中配置两个***的互访。

这样才能实现跨***通信。

 

由于配置大部分相同,下面以3为例,其余的ISA只要稍加修改地址就好。

 

1、ISA管理界面-虚拟专用网络-创建×××点对点链接。

(由于ISA有傻瓜化向导,这里仅仅列出配置完后的样子)
 
其中***1为192网段,***2为10网段。

 

ISA3上192网段***1设置:(以下数据为ISA的虚拟专用网络设置中点到点设置摘要中提取的信息)

本地隧道终结点: 192.168.3.1

远程隧道终结点: 192.168.4.1

允许 HTTP 代理或 NAT 通讯到此远程站点,此远程站点配置

必须包括此本地站点隧道终结点的 IP 地址。

IKE 阶段 I 参数

    模式: 主模式

    加密: 3DES

    完整性: SHA1

    Diffie-Hellman 组: 组 2 (1024 位比特)

    身份验证方法: 预共享机密(XXXX)

    安全关联生存期: 28800 秒

IKE 阶段 II 参数:

    模式: ESP 隧道模式

    加密: 3DES

    完整性: SHA1

    完全向前保密: ON

    Diffie-Hellman 组: 组 2 (1024 位比特)

    重新生成**时间: ON

    安全关联生存期: 3600 秒

    重新生成** KB: OFF

远程网络 '×××1' IP 子网:

    子网: 100.0.4.0/255.255.255.0

    子网: 192.168.4.1/255.255.255.255(对端接口)

本地网络 '***2' IP 子网:(这里的本地就是前面提到过的,对于4来说,1、2都是我3的子网,都要宣告,这样才能让4知道我这里有1、2)

    子网: 10.0.0.1/255.255.255.255(对端接口)

    子网: 100.0.1.0/255.255.255.0

    子网: 100.0.2.0/255.255.255.0

本地网络 '内部' IP 子网:

    子网: 100.0.3.0/255.255.255.0

可路由的本地 IP 地址:(注意第二条,掩码出现254实际上包含了100.0.2.X和100.0.3.X,实际上意义是路由所有的本地内网,即1、2、3)

    子网: 100.0.1.0/255.255.255.0

    子网: 100.0.2.0/255.255.254.0

 

ISA3上10网段***2设置:

本地隧道终结点: 10.0.0.2

远程隧道终结点: 10.0.0.1

允许 HTTP 代理或 NAT 通讯到此远程站点,此远程站点配置

必须包括此本地站点隧道终结点的 IP 地址。

IKE 阶段 I 参数

    模式: 主模式

    加密: 3DES

    完整性: SHA1

    Diffie-Hellman 组: 组 2 (1024 位比特)

    身份验证方法: 预共享机密(XXXX)

    安全关联生存期: 28800 秒

IKE 阶段 II 参数:

    模式: ESP 隧道模式

    加密: 3DES

    完整性: SHA1

    完全向前保密: ON

    Diffie-Hellman 组: 组 2 (1024 位比特)

    重新生成**时间: ON

    安全关联生存期: 3600 秒

    重新生成** KB: OFF

远程网络 '***2' IP 子网:

    子网: 10.0.0.1/255.255.255.255

    子网: 100.0.1.0/255.255.255.0

    子网: 100.0.2.0/255.255.255.0

本地网络 '×××1' IP 子网:

    子网: 100.0.4.0/255.255.255.0

    子网: 192.168.4.1/255.255.255.255

本地网络 '内部' IP 子网:

    子网: 100.0.3.0/255.255.255.0

可路由的本地 IP 地址:

    子网: 100.0.3.0/255.255.255.0

    子网: 100.0.4.0/255.255.255.0

 

2、ISA管理界面-配置-网络-网络规则

这里简单,只需要添加如下路由规则:

1、2----4

4----1、2

 
IPSEC ×××连连看
这里写的烦琐了些,其实是可以合成两条的。

 

3、ISA管理界面-防火墙策略

添加如下策略:

***1-***2允许

***2-***1允许

IPSEC ×××连连看
 

4、CMD-用route add指令压入两条路由

Persistent Routes:

  Network Address          Netmask  Gateway Address  Metric

        100.0.2.0    255.255.255.0        10.0.0.1       1

        100.0.1.0    255.255.255.0        10.0.0.1       1

 
原因是我们在测试中发现,在这种配置下,ISA压入10网段指向左侧的路由,将网关设成了10.0.0.2,这是3身上的网卡,我们需要指向2,即10.0.0.1;具体是什么原因导致这样的现象还不是非常清楚。这里路由设置注意加上-p参数,才能不至于在重启后消失。

这样,从1、2发向4的数据将进入***1,发往4;从4发向1、2的数据将进入***2,发向2;而3和2、4本来就依赖***已经互通,这样3的任务就完成了;

同理,2也依照这样的配置方法进行配置。

 
1、4则相对简单,以4为例,配置好和3的***后,增加目标地址1、2,其他步骤则可以省略,因为默认已经全部从该***转发了。

这样,全网均可实现***通信,且跨网数据全部经由***管道转发,没有明文。

 

四、第四关:FC9(S1)-FC9(S2)-FC9(S3)-FC9(S4)
本关客户提出了新的需要,由于业务的升级,服务器更换成了最新的Fedora9,需要将前面的***平台也整合进来。
由于模型和实现思路不变,我们感觉这次的难度并没有很大提升,然而真的是这样的吗?
 
我们决定采用FC自带的×××实现。
首先在安装FC的时候要注意安装ipsec-tools,在fc中,ipsec ***的实现被分解为几个部分,其中系统内核负责加密进程,由racoon实现,上层***则由ipsec-tools实现。

 

以S3为例。

1、打开路由转发

要使fc能够正常路由网络数据,必须先对/etc/sysctl.conf文件中的

 
IPSEC ×××连连看
进行修改,保证其处于打开状态,修改完后可用sysctl -p /etc/sysctl.conf指令刷新配置,无需重启。

 

2、配置ipsec ***

在网络配置工具的选项卡中,会出现ipsec一栏,可以启动***配置向导。

IPSEC ×××连连看
 

在处理网络网关时,一定要填写与相应的内网直连的网关,无论本地还是远程都一样。

 
IPSEC ×××连连看
依据向导完成配置,***就建立好了。

 

3、依需求调整其他配置

前面说过,fc的***实现由两部分组成,ipsec-tools和racoon;那么,这两个进程又分别维护着哪些配置文件呢?

 
ipsec-tools配置:

ipsec-tools的文件都放在/etc/sysconfig/network-scripts/下。

***配置:是在/etc/sysconfig/network-scripts/中建立了以ifcfg-你命名的***名称为文件名的脚本文件,以S3上建立的面向S4的***为例,格式如下:

IPSEC ×××连连看和我们前面用向导配置输入的数据是一致的,如同前面ISA的处理方式,我们要给S4发送1、2网段,于是我们添加了两个源内网。

预共享**:此时,在/etc/sysconfig/network-scripts/中以keys-你命名的***名称文件中以明文存储了刚才配置的预共享**。

至此,ipsec-tools管理的两个文件都明确了。

 

下面我们看看racoon这个主管加密协商的都有哪些法宝。

在修改这部分配置之前,强烈建议大家先用man racoon.conf指令通读手册,因为racoon的功能异常强大。

第一阶段(IKE)协商文件:/etc/racoon/192.168.4.1.conf

 
IPSEC ×××连连看
这里我们可以通过proposal{}的结构体制定多种加密集,供协商选择。

第二阶段(ipsec)协商文件:/etc/racoon/racoon.conf

 
IPSEC ×××连连看
同样的可以通过增加多个协商参数。

结尾还要采用include语句包含第一阶段的文件名,这里可以同时包含多个***。

预共享**:/etc/racoon/psk.txt

这个文件格式简单,没什么好解释的了。

 

4、压入route
和ISA一样,我们也需要将路由压入fc,采用route add指令将1、2的子网压入系统,指向左侧***网关。

 

5、启动***

对于***的启动非常简单,可以采用指令ifup 脚本名启动,也可以在前面看到的网络配置中用**”“取消**来控制。

 

6、失败的原因

对于这个模型,我们采用fc9并未获得成功,原因是ipsec-tools这个上层建筑采用了一种保护机制,对于我们前面手动添加的1、2网段进行了删除操作,最终只保留最上一行的网段配置,即必须吻合在向导内输入的数据,手工修改脚本文件无效。这种现象产生于*****以后,系统随即对ifcfg脚本就进行了修改,还原了只有一个网段的配置。我们在强制配上其他网段后,也仅仅能够实现三网互通,如S1-S2-S3,或者S2-S3-S4,始终无法将S1-S4联系起来。对于这个限制无法理解是由于对于网到网的***来说,是无需明确指定内网网段和网关的,只需要指定协商的两端地址即可,前面的ISA已经让我们感觉限制过多,没想到ipsec-tools更加厉害,不仅有些困惑。

 

五、第五关:openswan(S1)-openswan(S2)-openswan(S3)-openswan(S4)

客户鉴于前面模型的失败,提出要采用安全性更高,更为灵活的openswan实现ipsec的连接。
这次openswan建立在fc9,也就是说我们仅仅是在前面的基础上替换了ipsec-tools,用以解决子网不能指定多个的问题。对于openswan来说,racoon已经不起作用,openswan采用一个pluto进程来管理协商,其检查指令是setkey。且linux从内核2.6以后,已经采用netkey方式替换了KLIPS的ipsec内核,如果你还是要用KLIPS的话,需要在安装编译的时候加以调整。

 

以S3为例。

 

1、安装

安装openswan很简单,对于fc9有独立的fc9发行包,可以直接rpm安装,也可以通过源码包编译安装,难度都很小,这里就不赘述了。

 

2、检查环境

openswan提供了ipsec verify指令检测当前环境是否满足***配置需要。

 
IPSEC ×××连连看
这里要说明的是,openswan一样需要调整sysctl,但是要求比前面的模型高多了,基本上我们可以列出一张清单如下:

 
IPSEC ×××连连看
同时,我们还要关闭SElinux,此外,NAT和OE方面的检测则根据用户需要自行调整,检查不通过也是没关系的。

 

3、配置

openswan的配置只要关注两个文件,在配置前强烈建议man ipsec.conf查看手册。

这两个文件分别是/etc/ipsec.conf;/etc/ipsec.secrets

 

ipsec.conf用来管理ipsec协商和网络,配置如下:

第一部分,全局部分

 
IPSEC ×××连连看
主要管理NATT、OE、debug等级之类的比较大的方面。

第二部分,***实例部分

 
IPSEC ×××连连看
这里,网段的配置已经比较灵活了,可以配置内网和网关,也可以不用配,仅仅两个对端就可以。因为***的内网互通完全可以依赖路由实现。

有人问,协商的参数哪里去了?其实,不指定就是用默认的参数实现,指定的话也是在这一节,结构如下:

 
IPSEC ×××连连看
这里举了几个例子,如IKE参数可以用隔开,分别用加密-哈希-dh变换的格式实现,通过最后加表示强制,即要求对方必须采用这样的方式,ESP部分也是这样的含义,只是格式需如上图所示,时间也可以指定,此外,还有一个man手册中没有提到的开关,通过使用ikev2=never可以关闭ikev2版本,打开v1版本的协商。

 

ipsec.secrets用来管理**,配置如下:

10.0.0.1 10.0.0.2 : PSK XXXX

 

同样的需要为转发压入路由,就不单独讲了。

 

4、启动

openswan提供了丰富的配置和验证参数。

ipsec setup start|stop|restart 开关重启ipsec进程,包括加密进程;

ipsec auto --add name 将当前实例压入,但是如果前面配置了auto=add,就会自动压入,但是不启动;

ipsec auto --up name将当前实例启动,如果前面配置了auto=start,不仅会自动压入,还会自动启动。

ipsec look 查看当前ipsec协商状态,是否建立的链接等。

setkey -D 查看**协商完成后的状态。

 

六、第六关:freeswan(S1)-freeswan(S2)-freeswan(S3)-freeswan(S4)

此时,客户在应用中发现了问题,openswan不支持ah,这是因为ah本身带有的不安全的特点,已经被近年来部分***产品直接咔嚓掉了,我们决定采用openswan的前身,freeswan,同样的freeswan在2.6版本以后也取消的ah的支持,因此我们采用1.99版本。

为了支持比较老的freeswan,我们将系统换成了redhat9。

由于freeswan和openswan师出同门,因此配置格式和环境特别相似,下面我们只需要简单讲讲区别。

 
1、freeswan提供的ipsec verify检测的项目比较少,这也和redhat9不支持很多特性有关系。

 
IPSEC ×××连连看
 

ipsec的核心已经是老的KLIPS了。

 

2、ipsec setup start启动时如果报超过长度错误,需要在/usr/local/lib/ipsec/_confread中,注释掉如下两行:

IPSEC ×××连连看
 

3、ipsec.conf配置结构大体相似,如果要打开ah认证,可以在其中加上auth=ah一行。

 
4、针对IKE和ESP的参数指定,需要在spi上设置。

 
5、如果在启动时报没有加载ipsec模块,可以用modprobe ipsec进行加载。

 
6、freeswan没有提供setkey指令。

 

七、隐藏关:open*** ssl ***

最后,我们的客户使出了狠毒的一招,要求增加更高的安全性,在ipsec ***外面再包裹一层ssl ***……
我们继续努力!
 
1、下载open***软件,安装。
 
2、生成服务器和客户端的**及证书。这个网上教程很多,就不详细说明了。
 
3、修改配置文件。这里我们两边都有内网。
server端
server
port 1765
proto tcp

dev tun

ca ca.crt

cert server.crt

key server.key 

dh dh1024.pem

server 10.6.0.0 255.255.255.0(这里可以调整***隧道内地址)

push "route 192.168.1.0 255.255.255.0"(推送本地内网)

client-config-dir ccd(建立一个名为ccd的目录。和配置文件同级)

push "route 172.16.1.0 255.255.255.0"(推送目标内网)

push "route 192.168.2.0 255.255.255.0"

push "route 192.168.3.0 255.255.255.0"

client-to-client(打开客户端之间转发)

route 172.16.1.0 255.255.255.0(路由目标内网)

route 192.168.2.0 255.255.255.0

route 192.168.3.0 255.255.255.0

tls-server

tls-auth ta.key 0 

comp-lzo

user nobody

group nobody

persist-key

persist-tun

status open***-status.log

verb 5

 

建立ccd目录内的client文件,这步比较重要,很多人不通都是这步没有做,内容如下:

iroute 172.16.1.0 255.255.255.0(通知client端设置路由内网条目)

iroute 192.168.2.0 255.255.255.0

iroute 192.168.3.0 255.255.255.0

 

client端:

client

dev tun

proto tcp

remote 服务端IP地址 1756

resolv-retry infinite

nobind

user nobody

group nobody

persist-key

persist-tun

ca ca.crt

cert Client.crt

key Client.key

ns-cert-type server

tls-client

tls-auth ta.key 1

comp-lzo

verb 4
 
4、拨号
拨号过程中要注意,服务端先拨,获得隧道地址,图标变绿,然后拨客户端,完成后应该能够访问互相内网。
需要注意的一点是,客户端内网路由有时候会压不进去,需要手动添加。添加方式和win下设置路由方式相同。
 
至此,我们的闯关暂告一段落,虽然我们只是试用了***大军中小小的部分,其中绝大部分都还是免费的,但是其思想和理念都是相通的,在***大潮滚滚而来的时候,我们应当发扬革命传统,在少花钱多办事,少花钱办实事方面深入挖掘,相信有不少模型是可以实现。
文中各类***的用法只是最基本的配置,它们的功能远远不止列出的这一小部分,希望能够抛砖引玉,引起大家对多种***产品应用和研究的兴趣。

转载于:https://blog.51cto.com/netwalk/92251

相关文章: