Назад | Перейти на главную страницу

Разрешить IMAP для Roundcube и в качестве внешней службы только для некоторых специальных пользователей. Как настроить?

В 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'), затем

  1. кому всегда разрешен IMAP? (столбец imap_allowed в таблице)
  2. или кто использует веб-почту (удаленный ip == ip-адрес веб-почты)

Вы можете сделать в своем запросе 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, я почти уверен, что мой на самом деле не сработает, но идея должна быть твердой.