地理屏蔽插件

摘要: Discourse 的地理封锁插件

:link: GitHub: GitHub - communiteq/discourse-geo-blocking
:arrow_right: 安装: 请遵循 插件安装指南
:moneybag: 客户: 此插件由 Sketchfab 赞助。

功能

可用于完全阻止某些国家或网络访问您的论坛,例如用于欺诈防护或遵守制裁。

该插件利用了 Discourse 中已有的 MaxMindDB 数据库。

配置

  • 启用插件
  • 将所有您想阻止的网络添加到 geo_blocking_asn_blocklist。在数字前加上 AS,例如 AS12345
  • 将所有您想阻止的国家和地区添加到 geo_blocking_country_region_blocklist。接受以下格式:
    • 国家全名(例如:Belgium
    • 国家 ISO 代码(例如:JP 代表日本)
    • 国家全名后跟一个点,然后是地区名称(例如:Switzerland.Jura)。

  • 如果您启用了 geo blocking detailed reason,则错误消息将包含导致用户被阻止的国家/地区或网络。

对比

  • 要测试该插件,您可以检查 geo blocking log blocked 和/或 geo blocking log allowed,并在您的论坛上检查 /logs

支持的国家和地区的完整列表,请参阅 list_of_countries_and_regions.txt

注意事项和警告

如果匿名访问者被阻止,他们仍然可以缓存主页内容约一分钟。

错误页面不包含“热门”和“最新”主题,因为这会向被阻止的用户泄露内容。

25 个赞

理查德,感谢您对这个项目的快速响应!

4 个赞

谢谢。非常有帮助。

1 个赞

我马上试试。我怎么会错过这个呢 :woozy_face:

我需要地理封锁几个国家和 AS,但出于显而易见的原因,我不能像使用其他网站那样使用 Varnish 来完成这项任务。如果它仍然可用,这将解决这个令人头疼的问题。

是的,该插件仍在维护和运行中。

2 个赞

感谢您开发这个有用的插件,Richard。

我做了一些小的修改以适应我的用例:阻止某些地区用户的特定网址。我所做的是,在 add_model_callback(:application_controller, :before_action) 中,添加一些与 request.fullpath 匹配的规则,例如:

return unless request.fullpath.start_with?(*SiteSetting.topic_geo_blocking_exact_paths.split('|'))

我发现,如果我在浏览器地址栏中直接输入网址来访问它,这种 URL 级别的地理位置阻止可以工作。但是,如果我通过点击 Discourse 主页上的链接来导航到该网址,它就不起作用。(但在按 F5 刷新页面后,它会被阻止。)

您能就如何解决这个问题给我一些建议吗?谢谢。

1 个赞

您需要添加一些 Ember 代码来拦截路由器。

不过,我认为您需要采取不同的方法。此插件并非为此类特定过滤而构建。

创建一个单独的插件,该插件具有根据用户地理位置添加/删除用户到组的机制,可能会效果更好,然后您可以利用现有的组安全来限制或允许访问论坛的特定部分。

3 个赞

这是一个方便的插件,但什么可能会阻止它按预期工作?首先,插件安装正常,这不是问题。

我设置了一些被阻止的国家/地区,然后使用 VPN 从这些国家/地区进行访问进行测试,但没有遇到任何阻止警告。

也许 VPN 是问题所在。并非所有 VPN 都相同?

此插件不应阻止 VPN。

除此以外,它显然会阻止被阻止地理区域中的 VPN 出口节点。

1 个赞

好的,感谢您的提示。我没有考虑到出口节点,也不知道连接中的出口节点在哪里。我的IP地址读取结果对我来说已经足够了,它与正在测试地理封锁的地区/国家相匹配。

所以反过来,我封锁了我所在区域的区域,并且没有使用VPN,而是使用另一台设备,我可以在其中测试固定和蜂窝网络,但仍然没有任何反应,正如拨入时预期的那样,没有地理封锁生效。

请理解,代理、VPN 或 Tor 始终能够规避这类机制。该插件不应阻止这些。地理封锁是出于法律原因,或为了阻止普通访客访问。

你这样做过吗?

1 个赞

5 个帖子已拆分为新主题:MaxMindDB 问题

看起来这是在使用旧的 fa-user 图标而不是 user。这会导致很多错误。

2 个赞

已修复,感谢反馈!

4 个赞

感谢这个很棒的插件。
如果它的目的是防止垃圾邮件或不受欢迎的国家访问公共页面,对于私有的 Discourse 实例,它是否也能阻止不良机器人扫描?

1 个赞

都有点,但具体情况具体分析。官方来说,它会禁止不受欢迎的国家,但它不会区分可能是人类和机器人。

如果您的实例是私有的(即需要登录),那么机器人无论如何都无法访问它(除非它们是专门为此设计的,能够创建账户并登录)。

我们已经有了创建账户的机器人🤷‍♂️

爬虫是另一回事,因为它们会窃取内容。公共实例上存在问题的垃圾邮件机器人,对于私人论坛来说是完全类似的问题。这就是为什么我们有 AI 扫描内容。

对我来说,地理封锁可以减少相当数量的不受欢迎的呼叫和登录。我可以使用它,因为我有一个全芬兰的论坛 [1],但全球论坛当然不能使用它。

每一个“敲门者”都会增加 Web 服务器的负载,但 Discourse 与 PHP 世界不同。机器人可以轻易地对 WordPress 产生类似 DDoS 的效果,然后地理封锁可能是防御策略的一部分。但我猜 Discourse 对此免疫得多。

但是,如果必须允许所有国家,地理封锁对垃圾邮件机器人没有帮助。


  1. 如果有一天准备好投入生产,翻译人员可能会改变这种情况 ↩︎

感谢您的回复,确实他们不会获得任何数据,但我仍然在 nginx 日志中看到它们,并且它仍然会产生不必要的连接,所以我安装了这个简单的工具,可以在连接到 VPS 之前阻止来自某些国家的连接,而不是让它到达 docker discourse 实例 GitHub - friendly-bits/geoip-shell: User-friendly and versatile geoblocker for Linux

1 个赞

是的,这是一个很棒的工具。请注意,这会造成一个“硬”阻止,而该插件则会提供一个漂亮且可配置的消息,您可以将其显示给被阻止的用户。

2 个赞