问题
本文描述了为什么尽管去往相同的目的地,但某些连接被Cato阻止而其他连接被允许的原因。
例如,下面的事件信息搜集展示了同一来源尝试连接到相同目标IP上的相同协议的情况。 然而,尽管其中一个连接被阻止,另一个还是被允许。

故障排除
在本节中,我们将探讨可能导致Cato不同处理连接的几个常见场景。 了解这些场景对于优化和有效故障排除连接至关重要。 让我们在下方详细探讨其中的每一个。
1. 不对称路由
当Cato对完整流量没有可见性时,它可能缺乏足够的信息来准确地将数据分类到适当的应用程序中。 结果,即使存在允许特定协议(如HTTPS)的防火墙规则,非对称路由也可能导致流量被错误分类为TCP。 不幸的是,这种错误分类可能导致连接被阻止,因为它与允许的防火墙规则不符。 要进行更深入的调查,建议在问题发生时,从源到目的地以及反向执行追踪路由。 通过比较正向和反向路径,我们可以验证这是否确实是问题的原因。
2. 重叠自定义应用程序
当涉及到影响连接的自定义应用程序时,进行其定义的深入检查至关重要。 过于简化的自定义应用程序定义可能导致Cato不一致地识别应用程序。 如果存在允许连接到自定义应用程序的防火墙规则,但由于自定义应用程序的定义方式,其识别变得不一致,导致连接的间歇性阻塞。 因此,在处理面向自定义应用程序的连接时,我们建议遵循自定义应用程序操作中列出的最佳实践,以确保行为一致。
3. 用户意识延迟
当用户初次连接到Cato网络时,基于AD和Identity-Agent的用户意识机制需要几秒钟以将源IP地址映射到相应的用户名。 在此短暂时期内,初始用户流量可能会根据意外的防火墙规则进行处理。 但是,一旦用户意识成功识别出用户名,将会执行相应的防火墙规则。
4. 应用程序识别超时 (HTTP/1.1)
现代浏览器通过超文本传输协议 (HTTP/1.1)同时开放多个 TCP 连接以提高页面加载性能。 这些连接中的一些在建立后短暂处于空闲状态——未立即发送超文本传输协议请求,这意味着目的地主机名尚不可见。 当Cato通过Socket站点处理流量时,它会在每个连接到达时进行评估。 如果在评估时目标主机名不存在,流量将不会与使用FQDN或域名作为匹配条件的任何防火墙规则匹配,即使此类规则已正确配置。
这是预期行为,特定于通过Socket站点(办公模式)处理的HTTP/1.1流量。 这种情况不会发生在SDP客户端上,后者在流量转发之前提供目的地上下文。 以下是可能导致此问题的条件:
仅支持HTTP的网站
浏览器打开一个备用TCP连接(HTTP/1.1行为 — Chrome最多可以打开6个并行连接)
在1秒内,该备用连接上未发送HTTP GET请求
建议的解决方案
如果您使用Firefox,可以将\u003ccode class=\"_ca0qyh40 _u5f3m5ip _n3tdyh40 _19bvm5ip _2rkofajl _11c819w5 _1reo1wug _18m91wug _1dqoglyw _1e0c1nu9 _bfhk187e _16d9qvcn _syazi7uo _vwz41kw7 _1i4q1hna _o5721jtm\" data-renderer-mark=\"true\" style=\"font-family:\u0026quot;Atlassian Mono\u0026quot;, ui-monospace, Menlo, \u0026quot;Segoe UI Mono\u0026quot;, \u0026quot;Ubuntu Mono\u0026quot;, monospace;font-variant:normal;font-stretch:100%;font-size:12.25px;line-height:inherit;font-optical-sizing:auto;font-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-variation-settings:normal;font-language-override:normal;border-radius:4px;border-style:none;-webkit-box-decoration-break:clone;box-decoration-break:clone;overflow:auto;padding:2px 0.5ch;display:inline;overflow-wrap:break-word;background-color:rgba(5, 21, 36, 0.06);white-space:pre-wrap;color:rgb(41, 42, 46);orphans:2;text-align:start;text-indent:0px;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;\">network.http.max-persistent-connections-per-server\u003c/code\u003e\u003cspan type=\"spanMark\" style=\"color:rgb(41, 42, 46);background:rgba(5, 21, 36, 0.06);font-family:Helvetica;font-size:14px;font-variant-ligatures:normal;font-variant-caps:normal;orphans:2;text-align:start;text-indent:0px;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:pre-wrap;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline !important;\"> \u003c/span\u003e 设置为\u003cstrong\u003e1\u003c/strong\u003e 在\u003cspan type=\"spanMark\" style=\"color:rgb(41, 42, 46);background:rgba(5, 21, 36, 0.06);font-family:Helvetica;font-size:14px;font-variant-ligatures:normal;font-variant-caps:normal;orphans:2;text-align:start;text-indent:0px;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:pre-wrap;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline !important;\"> \u003c/span\u003e\u003ccode class=\"_ca0qyh40 _u5f3m5ip _n3tdyh40 _19bvm5ip _2rkofajl _11c819w5 _1reo1wug _18m91wug _1dqoglyw _1e0c1nu9 _bfhk187e _16d9qvcn _syazi7uo _vwz41kw7 _1i4q1hna _o5721jtm\" data-renderer-mark=\"true\" style=\"font-family:\u0026quot;Atlassian Mono\u0026quot;, ui-monospace, Menlo, \u0026quot;Segoe UI Mono\u0026quot;, \u0026quot;Ubuntu Mono\u0026quot;, monospace;font-variant:normal;font-stretch:100%;font-size:12.25px;line-height:inherit;font-optical-sizing:auto;font-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-variation-settings:normal;font-language-override:normal;border-radius:4px;border-style:none;-webkit-box-decoration-break:clone;box-decoration-break:clone;overflow:auto;padding:2px 0.5ch;display:inline;overflow-wrap:break-word;background-color:rgba(5, 21, 36, 0.06);white-space:pre-wrap;color:rgb(41, 42, 46);orphans:2;text-align:start;text-indent:0px;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;\">about:config\u003c/code\u003e。
更新防火墙规则以使用目标IP地址而不是FQDN/域名。
或者,如果目标服务器支持,HTTP/2消除了这种行为,因为它使用单一的多路复用连接,不会打开空闲的并行TCP连接。
5. 规则中的完全限定域名
另一个常见的场景是Cato对看似相似的连接处理不同(阻止或允许),是在防火墙规则或自定义类别/应用中使用完全限定域名 (FQDN) 时。 在深入细节之前,让我们检查两个事件,两个事件都来自相同的源IP地址并发送到相同的IP地址和端口,但结果不同 - 一个被允许,一个被阻止。

查看防火墙规则
在给定示例中,连接是根据WAN防火墙规则被阻止或允许的。
要进行更深入的调查,请按照以下步骤:
导航到CMA中的WAN防火墙部分,搜索相关的规则。
很明显,规则1对应于监控(允许)事件。 此规则特别允许“内部Web服务器”下分类的连接。 点击规则显示“内部Web服务器”来自自定义类别。
相比之下,规则5与阻止事件一致。 该规则旨在阻止HTTP(s)流量以及其他服务。

查看应用/类别
既然我们根据防火墙规则确认连接是基于“内部Web服务器”自定义类别的匹配被允许的,让我们进一步调查以了解该匹配的条件。
导航到资源>类别>自定义类别
在自定义类别列表中,找到并选择“内部Web服务器”类别。
在类别详情中,可以看到“内部Web服务器”类别的成员与webserver.dyow-homelab.com的完全限定域名 (FQDN) 匹配。
这表明与FQDN匹配的连接将被允许。 (为了Cato正确识别主机名,我们需要查看DNS查询/响应)

任何不完全匹配FQDN的连接都将被拒绝。 例如,如果访问的网站包括 "www",即 www.webserver.dyow-homelab.com(根据DNS查询),那么它将与CMA中已定义的完全限定域名(FQDN)不匹配。 为了解决这个问题,可以改为定义一个域名对象。 这将允许匹配包含已定义域的所有子域。 详见Cato WAN 防火墙。

在此已阻止连接示例中,用户尝试使用目标IP地址访问服务器而不是FQDN。 在这种情况下,由于没有任何DNS查询/响应,Cato无法识别主机名,规则不匹配。
在没有前置DNS请求的情况下发生直接IP访问时,Cato利用其DNS缓存来尝试将域名与给定IP匹配。 如果缓存中不包含任何域,Cato将无法将其与主机名或FQDN关联。 因此,上述示例中的连接将被阻止。
因此,当配置允许防火墙规则以完全限定域名(FQDN)为依据进行匹配时,客户必须使用其域名访问服务器,以确保连接不中断。
注意:
如果您正在使用内部DNS服务器,请确保其所有DNS查询都通过Cato Cloud进行路由,无论配置的目的地DNS服务器如何。 有关DNS最佳实践,请参考最佳实践-DNS与您的Cato账户
替代解决方案
即使在使用域名访问站点并且DNS查询/响应确实通过Cato后,防火墙规则不匹配的情况仍继续发生,可以实施以下解决方案:
用户PC上的DNS缓存可能与PoP上的DNS缓存不同,这将导致Cato无法将服务器IP与FQDN关联。 在使用内部DNS服务器的情况下,DNS的TTL(生存时间)可以缩短,从而迫使PC更频繁地产生DNS查询。
在防火墙规则中使用自定义应用/类别中的IP/端口组合与服务器匹配。 在上面的示例中,将自定义应用程序设置为IP地址192.168.2.25和端口8080。 即使存在DNS缓存不匹配或Cato Cloud上缺少DNS查询,这也将强制规则匹配。