SSLO Outbound--内置证书应用域名无法使用SNI标识的访问流量如何Bypass之实现原理
2020-03-30 12:45:32
君子不器
上期遗留的问题想必大家比较疑惑,怎么在没有SNI,应用内置域名的情况下解决SSLO出方向场景下的上网问题呢?本期给了大家一个解决思路。以ANYDESK为例。
anydesk交互数据不使用SNI 标识握手,需要使用IP地址过滤,但anydesk 应用域名解析的A记录不唯一,同时不收敛,因此采用所有访问地址的PTR记录匹配,如果PTR记录包含anydesk.com内容则对流量BYPASS。
SSLO配置思路:
1、配置两个对虚拟VLAN的出方向Topologies,该Topologies只对虚拟VLAN生效。其中一个Topologies作为出方向标准的SSLO配置,另外一个bypass 全部流量。两个Topologies作为逻辑处理的第二层。
2、新增一个出方向的全0 的VS,对真实vlan internal生效,使用F5 IRULES 分配流量给两个SSLO Topologies 生成的VS。作为第一层。
3、流量处理逻辑如下:
针对TCP流量处理流程见下图,当TCP流量到F5后,因为F5物理接口是真实的VLAN,因此流量只会命中第一层,也就是我们创建的VS。流量到VS后,我们使用定义好的IRULES把流量分配到第二层SSLO创建好的VS上,可以针对4-7层的相关参数(IP/PORT/SNI/
URL/HOST/ TLS VERSION/等)定义分配方式,可以把F5无法解密的流量分配到BYPASS的Topologies,同时分配相应的service chain;正常解密的流量分配到证书替换的Topologies,并分配相应的service chain;如果该流量不需要过service chain,可以直接分配POOL,流量直接转发到下一跳。详见下图。
4、对非TCP流量在经过第一层VS处理后,可以按照不同的业务需求,设置不通的流量处理模型。如下图是常见的流量的处理模型。
推荐IRUELS: 格栅线部分需要修改。
when CLIENT_ACCEPTED {
set bypass 0
set dst_fqdn [RESOLV::lookup @223.5.5.5 -ptr [IP::local_addr]]
if {$dst_fqdn eq ""}{ set dst_fqdn [RESOLV::lookup @114.114.114.114 -ptr [IP::local_addr]] }
if { [class match $dst_fqdn contains bypass_table] } {
set bypass 1
}
if {[ip_protocol] eq 6} {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-in-t-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-in-t-4"
}
}
elseif {[ip_protocol] eq 17} {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-in-u-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-in-u-4"
}
}
else {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-ot-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-ot-4"
}
}
IRULES主要功能解释:
1、set dst_fqdn [RESOLV::lookup @223.5.5.5
-ptr [IP::local_addr]]
定位anydesk唯一的标识符是域名,因此使用PTR记录分流。该IRULES作用是使用223.5.5.5反向解析目的地址的PTR记录,并赋值给dst_fqdn
2、if {$dst_fqdn eq ""}{
set dst_fqdn [RESOLV::lookup @114.114.114.114
-ptr [IP::local_addr]] }
如果没解析到,则重新使用114.114.114.114再次解析
3、if { [class match $dst_fqdn contains bypass_table]
} { set bypass 1}
需要新建一个data
group bypass_table,在bypass_table查找是否包含dst_fqdn变量中的内,如果包含该内容,则赋值1给bypass。
4、 if {[ip_protocol] eq 6} {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-in-t-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-in-t-4"
}
}
elseif {[ip_protocol] eq 17} {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-in-u-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-in-u-4"
}
}
else {
if {$bypass}{
virtual "/Common/sslo_bypass.app/sslo_bypass-ot-4"
} else {
virtual "/Common/sslo_default.app/sslo_default-ot-4"
}
1、如果TCP流量同时bypass等于1则流量走VS sslo_bypass-in-t-4, bypass等于0则流量走VS sslo_default-in-t-4
2、如果UDP流量同时bypass等于1则流量走VS sslo_bypass-in-t-4, bypass等于0则流量走VS sslo_default-in-t-4
3、其他流量同时bypass等于1则流量走VS sslo_bypass-ot-4,
bypass等于0则流量走VS sslo_default-ot-4
以上就是解决方案的原理了,下一期给大家分享demo 配置。
发布评论 加入社群
相关文章

F5 SSLO IPV6测试环境搭建经验分享
欧权贵
2020-05-12 21:15:53 2934

Security_Device之ICAP_NO.3_流量分析
张郑文轩
2020-04-29 21:36:07 1053

SSLO使用国密算法配置描述
阿泽
2020-04-14 21:00:54 4557

回复评论
发布评论