5

由于当用户在防火墙后可靠地到达我们在中国境外托管的正常端点时出现问题,我们正在寻找一种方法来可靠地确定用户当前是否在防火墙后并使用托管在其中的一组不同的端点 URL中国。

我们想做的是客户端可以进行的某种检查,例如访问我们知道将永远被防火墙永久阻止(或只能从内部访问)的 url 或检查网络配置的某些属性。

目前正在考虑的事情:

  1. 根据分配给中国的网络块列表检查设备的 IP
    • 如果设备位于 NAT 防火墙后面,则无法工作
  2. 执行从设备到已知在中国以外的主机的跟踪路由。如果数据包通过位于中国的主机(见上文)进行路由,则设备必须在中国。
    • 可能会起作用,但会在应用程序可以拨打电话之前引入延迟。
  3. 只问用户
    • 最坏的情况,这可能是最好的选择。
4

4 回答 4

3

我怀疑任何试图直接检查防火墙的方法都是不可靠的,可能在短期内,从长远来看肯定是。但是,由于您的目标是选择中国境内或境外的服务器,我建议使用设备时区作为快速而肮脏的“我在哪里?” 查看。例如,如果时区名称为,则Asia/Chungking使用中文服务器。例如,如果是Europe/Amsterdam,请不要使用中文服务器。检查中国大陆的每个时区,你可能会没事的。

您可以获得时区名称为TimeZone.current.identifier.

于 2018-03-12T22:57:37.873 回答
3

IP 地址范围,或者您可以查看一些主要被阻止的网站……也许是 Facebook、谷歌、华尔街日报?选择品种。

于 2018-03-09T00:51:45.117 回答
1

更技术性的方法可能是分析防火墙开始发送的 TCP RST 数据包。这份(第 5 页)白皮书展示了研究人员如何通过固定 TTL 值并注意何时不同(论文中的 61 与 42)来区分 TCP RST 与防火墙和他们的服务器。

当客户可能在中国(由其他信息确定)时,您可以在第一次连接时强制 RST,保存 TTL 值,然后在收到不同值的 RST 时注意。

于 2018-03-19T13:04:57.103 回答
0

我的建议是基于一些假设和一些验证流量来源的先前经验。

假设

  1. 您不断检查的任何 URL 最终都会被 GFWOC 管理员注意到。

    一个。这种交通模式将导致永久阻塞,

    湾。和/或用于跟踪尝试访问此 url 的设备(可能作为蜜罐),

    C。和/或重定向到某种内部状态赞助和监控的端点。

  2. 您可以通过防火墙将更新推送到您的 iOS 应用程序。

选项

  1. 使用 ppk 身份验证登录在中国境外创建一个端点,并将 ppk 文件包含在您的 iOS 应用程序中。端点返回使用 ppk 加密的消息,这样只有 iOS 应用程序的调用实例才能解密响应,这可能只是类似于“ext_endpoint_reached”或其他一些已知的确认消息。

    如果这无法正确解密或提供预期的消息,请故障转移到内部托管的端点。如果成功,则照常进行。

  2. 如果不允许出站加密流量,而入站加密流量被阻止,则可以使用两部分握手来代替。在这种情况下,调用者在外部端点 A 上注册出站连接。然后设备连接到端点 B,它只是同一服务后端的另一面,以查看它是否有一条消息等待符合某些只有iOS 应用程序实例。

    如果它在 B 找到的消息与预期的消息匹配,并且这可能是基于时间或日期或其他一些独特因素的简单关键字,则您已成功到达外部端点,而如果您没有收到预期的响应或没有响应,您知道您被阻止或重定向。

这两个选项都提供了一个故障转移来确认您正在攻击防火墙,并且都依赖于没有什么非常奇特的东西来提供外部的,可能是不可欺骗的,确认您在防火墙之外。

于 2018-03-19T16:49:21.040 回答