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