RGJ
(Richard - Communiteq)
1
摘要: Discourse 的地理封锁插件
GitHub: GitHub - communiteq/discourse-geo-blocking
安装: 请遵循 插件安装指南。
客户: 此插件由 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 个赞
Jagster
(Jakke Lehtonen)
4
我马上试试。我怎么会错过这个呢 
我需要地理封锁几个国家和 AS,但出于显而易见的原因,我不能像使用其他网站那样使用 Varnish 来完成这项任务。如果它仍然可用,这将解决这个令人头疼的问题。
fokx
6
感谢您开发这个有用的插件,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 个赞
RGJ
(Richard - Communiteq)
7
您需要添加一些 Ember 代码来拦截路由器。
不过,我认为您需要采取不同的方法。此插件并非为此类特定过滤而构建。
创建一个单独的插件,该插件具有根据用户地理位置添加/删除用户到组的机制,可能会效果更好,然后您可以利用现有的组安全来限制或允许访问论坛的特定部分。
3 个赞
agemo
(agemo)
8
这是一个方便的插件,但什么可能会阻止它按预期工作?首先,插件安装正常,这不是问题。
我设置了一些被阻止的国家/地区,然后使用 VPN 从这些国家/地区进行访问进行测试,但没有遇到任何阻止警告。
也许 VPN 是问题所在。并非所有 VPN 都相同?
mcdanlj
(Michael K Johnson)
9
此插件不应阻止 VPN。
除此以外,它显然会阻止被阻止地理区域中的 VPN 出口节点。
1 个赞
agemo
(agemo)
10
好的,感谢您的提示。我没有考虑到出口节点,也不知道连接中的出口节点在哪里。我的IP地址读取结果对我来说已经足够了,它与正在测试地理封锁的地区/国家相匹配。
所以反过来,我封锁了我所在区域的区域,并且没有使用VPN,而是使用另一台设备,我可以在其中测试固定和蜂窝网络,但仍然没有任何反应,正如拨入时预期的那样,没有地理封锁生效。
RGJ
(Richard - Communiteq)
11
请理解,代理、VPN 或 Tor 始终能够规避这类机制。该插件不应阻止这些。地理封锁是出于法律原因,或为了阻止普通访客访问。
你这样做过吗?
1 个赞
RGJ
(Richard - Communiteq)
拆分了此话题
12
5 个帖子已拆分为新主题:MaxMindDB 问题
Jagster
(Jakke Lehtonen)
13
看起来这是在使用旧的 fa-user 图标而不是 user。这会导致很多错误。
2 个赞
感谢这个很棒的插件。
如果它的目的是防止垃圾邮件或不受欢迎的国家访问公共页面,对于私有的 Discourse 实例,它是否也能阻止不良机器人扫描?
1 个赞
Jagster
(Jakke Lehtonen)
16
都有点,但具体情况具体分析。官方来说,它会禁止不受欢迎的国家,但它不会区分可能是人类和机器人。
RGJ
(Richard - Communiteq)
17
如果您的实例是私有的(即需要登录),那么机器人无论如何都无法访问它(除非它们是专门为此设计的,能够创建账户并登录)。
Jagster
(Jakke Lehtonen)
18
我们已经有了创建账户的机器人🤷♂️
爬虫是另一回事,因为它们会窃取内容。公共实例上存在问题的垃圾邮件机器人,对于私人论坛来说是完全类似的问题。这就是为什么我们有 AI 扫描内容。
对我来说,地理封锁可以减少相当数量的不受欢迎的呼叫和登录。我可以使用它,因为我有一个全芬兰的论坛 ,但全球论坛当然不能使用它。
每一个“敲门者”都会增加 Web 服务器的负载,但 Discourse 与 PHP 世界不同。机器人可以轻易地对 WordPress 产生类似 DDoS 的效果,然后地理封锁可能是防御策略的一部分。但我猜 Discourse 对此免疫得多。
但是,如果必须允许所有国家,地理封锁对垃圾邮件机器人没有帮助。
感谢您的回复,确实他们不会获得任何数据,但我仍然在 nginx 日志中看到它们,并且它仍然会产生不必要的连接,所以我安装了这个简单的工具,可以在连接到 VPS 之前阻止来自某些国家的连接,而不是让它到达 docker discourse 实例 GitHub - friendly-bits/geoip-shell: User-friendly and versatile geoblocker for Linux
1 个赞
RGJ
(Richard - Communiteq)
20
是的,这是一个很棒的工具。请注意,这会造成一个“硬”阻止,而该插件则会提供一个漂亮且可配置的消息,您可以将其显示给被阻止的用户。
2 个赞