postgresql 查询在 VPN 上无限期挂起 - 新防火墙

postgresql query hangs indefinitely over VPN - new firewall

我们有一个产品,本地 linux 机器 "SCANNER" 在本地网络上进行一些轮询,然后通过 OpenVPN 连接将信息填充到我们云服务器的数据库中,使用 pg_query(服务器是 运行 PostgreSQL 9.5.5)。

SCANNER 上有一个 PHP (5.5.9) 守护程序,它在 'while' 循环中检查数据库以完成工作。这一直很有效,并且在我们所有的客户端网络上继续有效,除了一个最近出现了一个奇怪的问题。

在他们升级防火墙后(检查点 5200,据我们所知,所有规则都是正确的,允许通过 VPN 从 SCANNER 到我们的云服务器的流量),一个脚本中的一个查询无限期挂起。以下是我们注意到的症状:


大多数时候,查询工作正常并且脚本继续。每隔一段时间,pg_query() 调用会阻塞并且永远不会 returns。这并不是说有错误;该调用实际上会永远阻塞(或者在我们手动重启之前的许多小时)。

此查询已存在很长时间,在我们的任何其他客户端或此客户端更改防火墙之前,我们从未遇到过此问题。

我们可以通过观察云服务器上的 pg_stat_activity table 来判断查询确实进入了云端,然后永远位于 table 中。在每种情况下,pg_stat_activity.state='idle' 和 pg_stat_activity.waiting=false

在此期间,我们仍然可以通过 VPN 从 SCANNER ping 云服务器,并且我们可以继续从 SCANNER 上的其他脚本和 SCANNER 的命令行成功查询其远程数据库。

这个客户端恰好有两台不同的 SCANNER 机器,它们在不同的子网上,但在同一防火墙后面。这个问题随时可能发生在任何一个上,但不一定同时发生在两者上(至少没​​有任何统计意义)。

如果我们重新启动守护进程,问题就会暂时解决。但它通常会在 2 秒到几小时后的某个时间再次出现。


我们正在寻找可能解决问题的任何输入,无论它与我们的应用程序还是防火墙本身有关(我们已获准根据需要进行修改)。欢迎提出任何需要澄清的问题。

提前致谢!

Check Point 防火墙有许多高级威胁保护,根据获得的刀片,该设备可能会阻止您的数据库和应用程序之间的通信。尝试使用 Check Point 日志工具(Tracker、SmartEvent 或 NGSE)来过滤防火墙日志。过滤源或目标是扫描程序或数据库服务器 IP 地址的所有事件。如果您的 TCP 数据包中有一些 drop ou 块,日志将显示。

如果您的防火墙拓扑使用群集配置,请尝试检查您的配置,它可能配置错误,并且数据库 TCP session 处于活动状态,但数据包正在使用另一个网络路径。

如果您使用的是 Check Point VPN 客户端,请尝试将其更新到最新版本并使用最新的更新包更新您的防火墙设备 (Take)。

如果问题仍然存在,请获取证据以证明在没有 Check Point 硬件的情况下您的通信不会停止,以及您的问题的一些证据,并要求您的 Check Point 解决方案提供商使用 Check Point 开立案例。

我们解决了这个问题。从技术上讲,我们从未弄清楚它发生的确切原因,但 VPN 服务器以错误的顺序接收 UDP 数据包,或者有时根本不接收。防火墙没有给我们任何迹象表明它正在这样做,所以我们最好认为它是 CheckPoint 多层威胁保护的未记录 side-effect。

我们改用 OpenVPN over TCP 而不是 UDP,这似乎解决了问题。希望我们在 long-term!

中不会受到任何不利影响