Exim:强制本地域用户进行电子邮件身份验证

Exim:强制本地域用户进行电子邮件身份验证

我正在使用 dovecot 和 postgresql 为虚拟用户配置 exim4,但遇到了一个无法解决的问题,情况如下:

我需要当“localdomain”用户尝试向另一个“localdomain”用户或外部用户发送电子邮件时,需要进行身份验证,否则拒绝该操作。

实际上我正在尝试避免任何类型的 smtp 开放中继。

实际上 smtp 工作正常,只需要设置该要求,我找不到正确配置 exim 以获取此行为的正确方法(是 acl 还是路由或传输规则?)

我该如何定义这个配置?

示例 1

220 我的服务器 ESMTP Exim 4.84 2016 年 3 月 31 日星期四 22:26:28 +0000
ehlo 本地主机
250-我的服务器你好本地主机[192.168.1.X]
250-尺寸 52428800
250-8BITMIME
250-流水线
250-AUTH 普通登录
250 帮助
邮件发件人:[电子邮件保护]
250 好
收件地址:[电子邮件保护]
250 已接受
数据
354 输入消息,以“.”结尾,独占一行
这绝不能发生,用户'[电子邮件保护]' 未经认证,
他必须还不能发送任何消息,直到使用
'auth login' 或 'auth plain',因为是本地域的用户。
250 确定 id=1all3Q-0004l2-V4

示例 2

220 我的服务器 ESMTP Exim 4.84 2016 年 3 月 31 日星期四 22:58:56 +0000
ehlo 本地主机
250-我的服务器你好本地主机[192.168.1.X]
250-尺寸 52428800
250-8BITMIME
250-流水线
250-AUTH 普通登录
250 帮助
邮件发件人:[电子邮件保护]
250 好
收件地址:[电子邮件保护]
250 已接受
数据
354 输入消息,以“.”结尾,独占一行
这已经有效了。
250 确定 id=1allZR-00050E-Sq

ACL RCPT-TO 配置文件

acl_check_rcpt:
  接受
    主机 = :
    控制 = dkim_disable_verify

  .ifdef CHECK_RCPT_LOCAL_LOCALPARTS
  否定
    域 = +本地域
    本地部分 = CHECK_RCPT_LOCAL_LOCALPARTS
    消息 = 地址中的限制字符
  。万一

  否定
    域 = !+本地域
    本地部分 = CHECK_RCPT_REMOTE_LOCALPARTS
    消息 = 地址中的限制字符
  。万一

  接受
    .ifndef CHECK_RCPT_POSTMASTER
    local_parts = 邮政局长
    。别的
    本地部分 = CHECK_RCPT_POSTMASTER
    。万一
    域 = +本地域:+中继到域

  .ifdef CHECK_RCPT_VERIFY_SENDER
  否定
    消息 = 失败!
    !acl = acl_local_deny_exceptions
    !验证 = 发送者
  。万一

  否定
    !acl = acl_local_deny_exceptions
    发送者 = ${如果存在{CONFDIR/local_sender_callout}\
                         {CONFDIR/本地发送者调出}\
                   {}}
    !验证 = 发送者/标注

  接受
    主机 = +relay_from_hosts
    控制 = 提交/发送者保留
    控制 = dkim_disable_verify

  接受
    已验证 = *
    控制 = 提交/发送者保留
    控制 = dkim_disable_verify

  要求
    消息 = 中继被拒绝!
    域 = +本地域:+中继到域

  要求
    验证 = 收件人

  否定
    !acl = acl_local_deny_exceptions
    收件人 = ${如果存在{CONFDIR/local_rcpt_callout}\
                            {CONFDIR/local_rcpt_callout}\
                      {}}
    !验证 = 收件人/标注

  否定
    message = 发件人信封地址 $sender_address 在此处本地列入黑名单。如果您认为这是错误的,请联系邮政局长
    !acl = acl_local_deny_exceptions
    发件人 = ${如果存在{CONFDIR/local_sender_blacklist}\
                   {CONFDIR/本地发送者黑名单}\
                   {}}

  否定
    消息 = 发件人 IP 地址 $sender_host_address 在此处本地列入黑名单。如果您认为这是错误的,请联系邮政局长
    !acl = acl_local_deny_exceptions
    主机 = ${如果存在{CONFDIR/local_host_blacklist}\
                 {CONFDIR/local_host_blacklist}\
                 {}}

  接受
    域 = +relay_to_domains
    端传
    验证 = 收件人

  接受

答案1

最后我自己解决了这个问题,我只需要在我的 acl 配置文件中添加下一个语句:

接受
   消息 = 必须授权
   域 = +本地域:+中继到域
   发件人 = : 正则表达式

这也可以通过条件语句和 perl 脚本来解决。

谢谢您的帮助。

答案2

只需确保 local_domains 不包含任何您想要要求身份验证的主机即可。这将防止这些服务器出现开放中继的情况。

但是,服务器通过 MX 向互联网发送电子邮件是很常见的。通常,在这种情况下您不需要身份验证。

确保relay_to_domains为空,或者仅包含您想要允许中继到的域。(您是此列表中任何域的开放中继。)

确保在接受 AUTH 请求之前需要 STARTTLS。否则,您的密码将很容易被嗅探。

相关内容