![如何配置 Roundcube/Dovecot 实现*有效*的双因素身份验证](https://linux22.com/image/667979/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20Roundcube%2FDovecot%20%E5%AE%9E%E7%8E%B0*%E6%9C%89%E6%95%88*%E7%9A%84%E5%8F%8C%E5%9B%A0%E7%B4%A0%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
有多个 Roundcube 插件提供双因素身份验证。但是,我现在发现的问题是,我仍然可以通过 IMAP/SMTP 直接登录,而不需要 2-FA(显然)。2-FA 在这里(实际上)没用。
我认为我可以通过引入特定于应用程序的密码并采取类似措施来解决这个问题,就像谷歌对他们的 2-FA 和不支持它的应用程序所做的事情一样。
现在,我想我可以为每个用户自动生成一个 Roundcube 的应用专用密码,该密码与用于登录 Roundcube Web 界面的密码不同。结果是用户仍然可以使用自己的密码 + 2-FA 登录 Roundcube,但不能直接将相同的密码用于 IMAP/SMTP。但是,我似乎找不到一种方法来配置 Roundcube 以使用与用于登录 Web 界面的密码不同的 IMAP 密码。
Roundcube 和 Dovecot 都在同一台机器上运行。
我是不是漏掉了什么?我的做法合理吗?这个问题似乎可以以比我尝试的更优雅的方式解决,所以我是不是漏掉了什么?我真正想要的是尽可能使用 2-FA 身份验证,在其他地方使用特定于应用程序的密码。
谢谢你!
答案1
经过进一步尝试后,我发现了两个合理的解决方案/解决方法,至少对于这个简单的情况而言。
选项 1:使用 allow_nets。 Dovecot 允许 passdb 返回各种额外字段,包括“allow_nets”(http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/AllowNets)。通过将 allow_nets 设置为 Roundcube 使用的密码 127.0.0.1,任何来自其他来源的登录尝试都将失败。如果 Roundcube 位于不同的机器上,显然需要调整 IP。这种方法的问题在于非静态 IP 地址,以及如果用户有其他非 2-FA 方式登录,例如通过与 Roundcube 在同一台机器上运行的代理。
选项 2:使用 CheckPassword 编写自定义身份验证脚本。使用 checkpassword 驱动程序(http://wiki2.dovecot.org/AuthDatabase/CheckPassword) 允许编写自定义身份验证脚本。您可以在其中检查客户端 IP 或执行完全不同的操作。这里可能存在的问题是性能,您可能需要一些额外的配置来进行用户查找,因为 checkpassword 不支持用户查找。此外,验证用户实际尝试登录的方式的问题仍然存在。