如何使用 Dovecot Authenticator 禁用 Exim 中某些用户的 SMTP 访问

如何使用 Dovecot Authenticator 禁用 Exim 中某些用户的 SMTP 访问

我需要将 Dovecot IMAP 电子邮件帐户设置为仅接收,以便用户可以浏览、移动、删除现有电子邮件,但不能从该帐户发送电子邮件。

发送是通过 exim 接受来自 MUA 的 SMTP 连接来完成的。它使用 Dovecot 作为身份验证器,如下所示:

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

我怎样才能做这样的事情:

   unless_login_name_is = [email protected] : [email protected]

编辑:这是不起作用的......

acl_smtp_mailauth = acl_check_mailauth

...

acl_check_mailauth:                                                                                                                                                                           
  deny condition = ${if eq{$authenticated_sender}{[email protected]} {yes}{no}}

我认为可能是条件出了问题,但是这样做:

acl_check_mailauth:                                                                                                                                                                           
  deny

也没有效果。我读过手册但没有发现它能帮助我理解发生了什么。

编辑2:尝试acl_smtp_auth

根据 @wurtel 的建议,我尝试使用此 ACL。但是我现在遇到了另一个问题:AUTH 以 PLAIN 形式出现,如下所示

PLAIN <base64encodedvalue>

为了获得用户名,我需要对其进行解码,但是${base64d:${sg{$smtp_command_argument}{^PLAIN }{}}}返回的却是一个空字符串。

我认为这是因为<base64encodedvalue>解码时以 NUL 字节开头!

答案1

(感谢@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其中包含类似

[email protected]
[email protected]

请注意,${lookup}不将$authenticated_id文件中的一行与空白行匹配就足够有帮助了。

相关内容