В dovecot легко настроить специальный запрос passdb, чтобы ограничить доступ IMAP для определенных пользователей, например см. эту документацию на вики dovecot.
Но когда я использую веб-рассылку, например Roundcube, и хочу, чтобы ее могли использовать все остальные пользователи (а не только пользователи, которым я разрешил использовать IMAP для каждого метода, описанного выше), этот подход терпит неудачу.
Какой была бы идея рабочей конфигурации?
Веб-рассылка находится на том же сервере, что и dovecot. Может быть, специальный созданный SQL-passdb-statement вместе с дополнительным полем allow_nets для локального адреса для всех пользователей, использующих только веб-почту? Или специальная опция в самом Roundcube?
Я нашел способ не вдаваться в накладные расходы extra_fields и вместо этого использовать простую переменную '% r'. Он разрешается на удаленный ip, поэтому я могу использовать что-то вроде
WHERE active = '1'\
AND ('%s' = 'pop3' OR (imap_allowed = true OR '%r' = '1.2.3.4'))
Сначала проверяется случай по умолчанию pop3 (через '% s'), затем
Вы можете сделать в своем запросе 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, я почти уверен, что мой на самом деле не сработает, но идея должна быть твердой.