AF8.0.85替换Juniper防火墙 一、项目背景: 某客户因看中我司AF安全能力,故采购了三台AF替换juniper老防火墙。客户的juniper防火墙分布在三个区域A城、B城、C城,考虑到逐台替换难度较大,所以割接时是三个地方一块替换,均使用我司防火墙进行组网连接。三台juniper防火墙型号为: A城: juniper SRX240 B城: juniper SRX240 C城: SSG 550M 项目主要难度在于前期脚本翻译等技术性问题,后期主要是割接路由组网问题,项目涉及老型号Juniper设备防火墙脚本翻译,OSPF、BGP以及IPSECVPN。
二、前期准备工作 因涉及到前期juniper设备脚本的翻译,配置较多,翻译难度较大,故花了较长时间,在交付和研发同事的共同努力下完成了脚本的翻译,这里提供部分脚本内容以及里边的字段解释,仅供参考: 项目中涉及到的命令行解释示例: 基础配置部分: name-sever //DNS配置。 interfaces { ge-0/0/3 { unit 0 { family inet { address xx.xx.xx.xx/xx; } } } //防火墙接口配置(interface有可能为lo0为本地环回口配置,为st0则是聚合口配置)。 routing-options { static { route 0.0.0.0/0 next-hop 121.18.55.161; //静态(static)路由信息,next-hop为下一跳。 router-id xx.xx.xx.xx/xx; autonomous-system xxxx; //本地环回配置,autonomous-system为OSPF的AS号
BGP部分 bgp:这个部分定义了BGP协议的配置。
metric-out 200 //这个配置设置了BGP出口路由的度量值为200。 preference 40 //这个配置设置了BGP路由的优先级为40。 local-as xxxx //这个配置设置了本地AS号为xxxx。 group xxxx //这个部分定义了一个名为"xxxx"的BGP邻居组。 type external //这个配置指定了邻居组的类型为外部。 import xxxxx //这个配置指定了导入路由的策略为"xxxx"。 export [ 2bgp xxxxx ] //这个配置指定了导出路由的策略为"2bgp"和"xxxx"。 neighbor xx.xx.xx.xx //这个配置指定了邻居的IP地址为xx.xx.xx.xx peer-as xxxx //对应的AS号为xxxx。 export abc-def-h //这个配置指定了导出路由的策略为"abc-def-h"。
OSFP协议部分: Ospf: //表示这个部分定义了OSPF协议的配置。 export VPN2OSPF //这个配置指定了导出路由的策略为"VPN2OSPF"。 reference-bandwidth 1g //这个配置设置了参考带宽为1G。 area 0.0.0.0 //这个配置定义了OSPF的区域0.0.0.0。 interface lo0.0 //这个配置指定了接口lo0.0作为OSPF区域0.0.0.0的一部分。 interface st0.0 //这个配置指定了接口st0.0作为OSPF区域0.0.0.0的一部分, passive设置为被动模式。 interface ge-0/0/8.0 //这个配置指定了接口ge-0/0/8.0作为OSPF区域0.0.0.0的一部分,并设置度量值为10。
路由映射和访问控制列表: prefix-list xxxx //定义某个访问控制列表的名称,后边可以添加地址段 policy-statement xxxx //创建某个路由映射规则,xxxx为规则名称,命令后边一般是路由映射的具体内容, 例如: policy-statement 2bgp { term ZHZ1 { from { prefix-list ZHZ; } then accept; } }
意思是创建了一条名为2bgp的路由映射条目,定义ZHZ1的执行动作(term),内容为匹配到访问控制列表为ZHZ的网段后进行放通处理(accept),若有preference字样为设置路由优先级。
网络对象和区域: security-zone trust //安全区,定义名称为trust,类似于我们的内网区域 address-book //地址池,我们AF的网络对象,后边一般就是跟很多自定义的地址
application tcp445 { protocol tcp; source-port 0-65535; destination-port 445; } //端口组,类似于防火墙的自定义服务对象,后边定义了具体协议、源目端口等信息。 地址转换: nat { source { pool INTERNET { address { 123.xx.xx.xx/32; 公网地址 } } rule-set TtoP { from zone trust; to zone Public; rule source-nat-rule { match { source-address 0.0.0.0/0; } then { source-nat { interface; } } } } } //源地址转换策略,简单来说就是源区域为trust区域,访问目的区域为public区域,所有的源地址转换为出接口公网地址.
应用控制策略(命令示例): from-zone trust to-zone Public { policy VPN-data { match { source-address any; destination-address any; application any; } then { permit; } } } //规则名称:VPN-data,原区域trust,目的区域Public,规则内容为源目地址端口都为any,最终动作为拒绝。(类似于我司AF的默认拒绝策略)
三、最终方案 在翻译完ABC城三个地方的脚本之后,剩下的就是割接验证,由于是三个地方同时进行割接,故提前和研发同事沟通好了割接方案。方案中涉及两个补丁包,后来合成为一个补丁包,主要解决了两个问题: 1. bgp 不支持通过vpntun口建立邻居 2.traceroute 跟踪路由,经过vpn口后显示*号(应客户要求必须将路由跟踪的*去掉)
改动思路: 1.放开动态路由对vpntun口的引用, bgp 可以通过vpntun建立邻居(因为目前的AF还不支持,客户场景特殊,需要通过vpntun口建立BGP邻居) 2.上送vpn口的icmp差错报文,需要填充反方向flow,使其可以找到正确的session。
最终方案确定:OSPF+BGP+ipsecvpn组网 整体方案: 1)ABC三地AF之间建立IPsec VPN隧道,然后通过VPN建立BGP邻居 2)BGP重发布OSPF路由,可根据联网需求,在重发布时配置路由映射,控制对端能拿到的本端内网网段路由; 3)ABC三个地方内部分别跑OSPF(内网使用OSPF),并且OSPF重发布BGP的路由,重发布时配置路由映射,过滤自身内网网段,避免路由冲突。 4)客户AF直连了一个国外SDW设备,主要功能就是通过SDW建立VPN隧道,下发BGP路由信息,SDW设备为Aryaka,使用这类设备组网,如果隧道建立不起来,那么路由无法下发,没有路由信息自然国内外的业务也就不通了。
Aryaka设备原理简单介绍:该设备需要通过连公网,然后使用防火墙的公网接口地址与中心端建立IPSEC隧道。值得注意的是,这里只能用特定的公网地址去连接中心端,若接口上有多个公网IP,做源地址转换的时候需要指定转换公网地址。如果后续有接触这种国外的SDW设备,可以了解一下设备工作原理再进行排查,会节省很多时间。
四、总结 类似于这类国外设备的替换,通常都是比较困难的,尤其是在配置翻译这块,像juniper这样的设备,本身就全是英文,虽然有WEB界面但是找起来也比较困难,如果遇到只有命令行的界面,翻译替换难度就可想而知。建议在替换这类包含多分支组网、复杂的路由环境的设备时,先了解清楚客户的组网拓扑,帮助我们在割接时有更多的思路,也便于理解客户的网络,从而缩短割接时间甚至一次性成功。 |