在 dovecot 中设置一个特殊的 passdb 查询来限制某些用户的 IMAP 访问很容易,例如请参阅 dovecot wiki 上的文档。
但是,当我使用像 Roundcube 这样的网络邮件程序并希望允许其他每个用户使用它(而不仅仅是我按照上述方法允许使用 IMAP 的用户)时,这种方法会失败。
可行的配置想法是什么?
Webmailer 与 dovecot 位于同一服务器上。也许是一个特别制作的 SQL-passdb 语句以及一个 allow_nets 额外字段,用于所有仅限 webmailer 用户的本地地址?或者是 Roundcube 本身的一个特殊选项?
答案1
您可以根据字段在 MySQL 查询中执行某种 CASE 语句allow_nets
,例如SELECT password CASE WHEN allow_nets = '127.0.0.1' OR <whatever you're using> THEN allow_imap = 'true' ELSE allow_imap = 'false' END FROM users WHERE userid = '%u' and active='1'
查看 CASE 语句,我很确定我的实际上不起作用,但这个想法应该是可靠的。
答案2
我找到了一种方法,可以不进入 extra_fields 开销,而是使用一个简单的变量“%r”。它解析为远程 ip,所以我可以使用类似
WHERE active = '1'\
AND ('%s' = 'pop3' OR (imap_allowed = true OR '%r' = '1.2.3.4'))
首先测试默认情况 pop3(通过 '%s'),然后
- 谁始终被允许使用 IMAP?(表中的 imap_allowed 列)
- 或者谁使用 webmailer(远程 ip == webmailer ip)