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

Как отключить SMTP-доступ для определенных пользователей в Exim, используя Dovecot Authenticator

Мне нужно сделать учетную запись электронной почты Dovecot IMAP только для получения, чтобы пользователи могли просматривать, перемещать, удалять существующие электронные письма, но без возможности отправлять электронную почту из этой учетной записи.

Отправка осуществляется через exim, принимающий SMTP-соединения от MUA. Он использует Dovecot в качестве аутентификатора, например:

dovecot_plain:
     driver = dovecot
     public_name = PLAIN
     server_socket = /var/run/dovecot/auth-client
     server_set_id = $auth1

Как я могу сделать что-то вроде:

   unless_login_name_is = notallowed1@mydomain.com : notallowed2@mydomain.com

Изменить: вот что не работает ...

acl_smtp_mailauth = acl_check_mailauth

...

acl_check_mailauth:                                                                                                                                                                           
  deny condition = ${if eq{$authenticated_sender}{banned.user@example.com} {yes}{no}}

Я подумал, что это может быть неправильное условие, но сделал следующее:

acl_check_mailauth:                                                                                                                                                                           
  deny

тоже не имеет никакого эффекта. я прочел руководство но не обнаружил, что это помогло мне понять, что происходит.

Изменить 2: попытка acl_smtp_auth

Как было предложено @wurtel, я попытался использовать вместо этого этот ACL. Однако теперь я столкнулся с другой проблемой: AUTH приходит в ОБЫЧНОЙ форме, которая выглядит как

PLAIN <base64encodedvalue>

Чтобы получить имя пользователя, мне нужно его расшифровать, однако ${base64d:${sg{$smtp_command_argument}{^PLAIN }{}}} возвращает пустую строку.

Я думаю, это потому, что <base64encodedvalue> при декодировании начинается с нулевого байта!

(Благодаря комментариям от @wurtel, которые помогли исключить мои первоначальные возражения)

Я добился этого, изменив acl_smtp_auth со следующим ACL:

acl_check_mail:

  deny
    condition   = ${lookup{$authenticated_id}lsearch{/etc/exim4/users-not-allowed-to-send-mail}{yes}{no}}
    message     = "Sending mail is not enabled for this account"
    log_message = "Denied sending mail as '$authenticated_id'"

  # Uncomment the following to debug:
  # warn log_message = "acl_check_mail is accepting mail for '$authenticated_id'"

  accept

Тогда у меня есть файл на /etc/exim4/users-not-allowed-to-send-mail с такими строками, как

disabled.account@example.com
also.disabled@example.com

Обратите внимание, что ${lookup} достаточно полезен, чтобы не соответствовать пустому $authenticated_id со строкой в ​​файле.