为反向IP查询配置MAXMIND

什么是 MAXMIND,我为什么要使用它?

Discourse 使用 MAXMIND 来提供反向 IP 查询的地理信息。

如果没有 Maxmind 的数据库,您将看到类似以下内容:

或者,您可能在重建容器时注意到这条消息一闪而过:

MaxMind IP 数据库下载需要账户 ID 和许可证密钥
请设置 DISCOURSE_MAXMIND_ACCOUNT_ID 和 DISCOURSE_MAXMIND_LICENSE_KEY。有关更多详细信息,请参阅 https://meta.discourse.org/t/configure-maxmind-for-reverse-ip-lookups/173941。

我为什么要关心这个?

对于版主来说,查看某人登录的地理位置通常很有用,以便确定此人是否如其所述(以及所在位置),或用于诊断站点问题。(“哦,我们经常在 Special-ISP 上遇到问题。”)

此外,自 2.2.0.beta4 起,Discourse 还利用这些信息在检测到从新位置登录时通知管理员。如果没有 Maxmind 数据库,Discourse 将无法提供此通知。

如果我不设置 MaxMind 账户并生成许可证密钥会怎样?

您将无法进行反向查询。如果上述问题与您无关,那么忽略这一点通常不会带来任何不良后果。

如何设置 MaxMind 账户并获取账户 ID 和许可证密钥?

请参阅 Maxmind 的 Generate a license key 页面以获取最新说明,但您需要:

  • 访问 GeoLite2 注册 页面。
  • 登录后,在左侧导航栏的 <kbd>管理许可证密钥</kbd> 选项卡上生成许可证密钥。生成新密钥后,复制账户 ID 和许可证密钥。如果丢失,您需要重新生成一个新的。

然后,将密钥添加到 app.yml 的 ENV 部分,添加如下行:

  DISCOURSE_MAXMIND_ACCOUNT_ID: your-account-id-here
  DISCOURSE_MAXMIND_LICENSE_KEY: your-key-here

或者在 discourse-setup 提示时进行设置。

IPv6 用户注意事项

标准安装默认不完全支持 IPv6。如果您的服务器已配置 IPv6 并且需要 IPv6 地址的 Maxmind 信息,您需要确保用户的实际 IP 地址能够传递给 Discourse,通常通过使用将远程 IP 地址传递给 Discourse 的外部代理。这比标准安装需要更多的系统管理专业知识。

31 个赞

@pfaffman,‘我的许可证密钥’的 URL 包含您在 MaxMind 的账户 ID,因此除了您自己以外,其他人无法使用 :wink:

3 个赞

对我来说没问题!:winking_face_with_tongue:

不过有趣的是,三年来没有人抱怨过!这是一个维基,所以你可以自己修复。如果我记得的话,我会尝试在有电脑时更新。

2 个赞

显示有多少人真正阅读了这类页面 :grin:

我已经编辑了该页面 :nerd_face:

3 个赞

是吧!?我花了很多时间来创建它。不知道我怎么会忽略了链接只对我有效,但我想登录就足以让我和其他很多人分心了。

2 个赞

只是一个好奇的问题 @evert,您是故意留下括号的吗?如果是这样,它是否看起来像一个按钮会更好?

按钮示例

管理许可证密钥

<kbd>管理许可证密钥</kbd>
3 个赞

当然可以? :+1:t2:

2 个赞

据我所知,我一切正常

image

但所有用户的地点都显示为“未知”

任何帮助都将不胜感激。

您需要删除前面的#字符并重新构建。#字符使整行成为YAML文件中的注释。

5 个赞

谢谢,只需写出来然后退出或重建吗?

你必须重新构建。否则,Discourse 将无法识别 app.yml 的更改。

4 个赞

谢谢,已完成并正常工作 :hugs:

2 个赞

对于在座的大多数人来说,这可能不言而喻,但使用 VPN 的人可能会比其他人产生更多的警报。这只是对管理员的一个提醒,并不一定表示用户有恶意。

2 个赞

太好了!感谢这个教程。

1 个赞

请问,
当 Discourse 为管理面板执行 IP 查询(反向 IP 查询)时,它是依赖于离线 GeoIP 数据库还是每次都查询外部 API

谢谢!!

1 个赞

就上下文而言,我更倾向于通过将 Discourse 指向一个本地的 GeoLite2-City.mmdb 文件来离线处理 IP 查询,而不是调用外部 API。

还不支持 IPv6 吗?也许是时候把这些流量重定向到 IPv4 了 ):

我遇到了问题。我认为我的设置是正确的,但在下载 MaxMind 数据库时收到了 401 错误。

我使用的是标准安装,自托管且为最新版本。
我在 MaxMind 创建了一个账户,并添加了一个新的许可证密钥。

我编辑了 app.yml 的 ENV 部分,如下所示:

  ## MaxMind 地理位置 IP 地址密钥,用于 IP 地址查找
  ## 详情请参见 https://meta.discourse.org/t/-/137387/23
  DISCOURSE_MAXMIND_ACCOUNT_ID: [我的账户 ID]
  DISCOURSE_MAXMIND_LICENSE_KEY: [我的许可证密钥]

然后运行了 ./launcher rebuild app

在重建过程中,日志中记录了这些“401 未授权”错误:

MaxMind 数据库 GeoLite2-City 下载失败。: OpenURI::HTTPError : 401 错误
MaxMind 数据库 GeoLite2-ASN 下载失败。: OpenURI::HTTPError : 401 错误

(当然,我的 /var/www/discourse/vendor/data 目录中也没有任何数据库文件)

根据这个建议,我使用了MaxMind 开发人员门户上找到的命令——使用相同的凭据——直接下载了一个数据库:

curl -O -J -L -u [我的账户 ID]:[我的许可证密钥] \
'https://download.maxmind.com/geoip/databases/GeoLite2-City/download?suffix=tar.gz'

……这运行正常。

那么,从 Discourse 连接时导致 401 错误,我可能遗漏了什么?