Exim4 设置允许我在不成为开放中继的情况下发送电子邮件

Exim4 设置允许我在不成为开放中继的情况下发送电子邮件

因此,我购买了一台 VPS 和一个域名(my_domain.com例如),现在我想建立自己的基于 exim4 的电子邮件基础设施,用于学习目的。为了不产生开放中继,我需要对身份验证的最佳实践有一些基本的了解。

我最初的理解是,MTA(exim4)在身份验证时应该扮演两个角色:

  • 当我的 MUA(例如 MacBook 上的 Apple Mail)通过 SMTP 连接到它时,它必须坚持进行身份验证。如果发件人地址是[email protected],则 VPS 上的(Debian)用户的用户名/密码me应该可用。我的 ISP 分配了可变的 IP 地址,因此我无法将 MAU 固定为特定的地址,也不知道适用的范围。无论如何,经过这样的身份验证后,MTA 应该将消息发送(中继?)到相关的 MTA(例如mail.your-domain.com,在),而无需进一步的身份验证。

  • 当另一个 MTA(mail.your-domain.com比如说,在)通过 SMTP 联系我的 MUA 时,它应该仅当目标域是my_domain.com(即,允许将其作为本地域)时才保留它进行传送,否则将其转储(即,不充当开放中继)。

我的问题有两个方面:我的基本理解是否正确,以下一组答案是否可以dpkg-reconfigure exim4-config实现此设置/目标?

mail name: my_domain.com
IP-addresses to listen on for incoming SNMP connection: (the VPS)
local domains: mail;my_domain.com
domains to relay mail for: (none)
machines to relay mail for: (none)
keep DNS-queries minimal: no
delivery method for local mail: mbox format in /var/mail
split configuration file into small files: no
root and postmaster mail recipient: root

我目前感到困惑,因为其中没有提到任何身份验证(或者 MTA 甚至可以基于什么理由区分来自 MUA 或其他 MTA 的 SMTP 连接)以及是否会“转储”发送到本地域以外的域的消息。在我看来,这似乎允许我的 MTA 从my-domain.com任何地方接收消息,而不是开放中继,但也不允许我的 MUA 通过它发送任何消息。

答案1

exim功能强大且足够灵活,可以扮演您想要的任何角色。但对于正常的 SMTP 操作,唯一需要身份验证的情况是“有人想通过我提交或转发消息”。提交和转发应受到严格限制,以防止被 DNSBL 驱逐。如果exim服务于某个子网,s&r 通常仅限于该子网。但如果客户端主机在互联网上漫游,并且来自各个子网的 IP 动态变化,则限制客户端的唯一可能性就是身份验证。

首先,你必须启用 SSL/TLS 的 SMTP 加密

daemon_smtp_ports       = 25 : 465 : 587 
tls_on_connect_ports    = 465
tls_certificate         = /path/exim.crt
tls_privatekey          = /path/exim.key

生成的自签名对openssl就足够了。加密是端口 25 上的普通 SMTP 或 587 上的 MSA 的选项,并且是 465 上的 SMTPS 的必需选项。

仅对加密客户端可以进行身份​​验证,以防止通过未加密的连接传递登录密码:

auth_advertise_hosts    = ${if eq{$tls_cipher}{}{}{*}}

$tls_cipher建立 TLS 时生成的任何非空值都是开始身份验证的好兆头。

现在我们可以使用 ACL:

acl_smtp_connect        = acl_conn
acl_smtp_rcpt           = acl_rcpt
acl_smtp_data           = acl_data

begin acl
.....
acl_rcpt:
  accept authenticated = *
  accept         hosts =  : +relay_from_hosts
  require      domains = +relay_to_domains : +local_domains
  deny

这里我们在三种情况下接受 s&r 的消息:

  1. 如果客户端已经通过身份验证
  2. 如果客户端来自知名主机/子网列表
  3. 如果消息是发往我们某个域的传入消息。
  4. 最后一条规则deny不是必需的,因为第三条规则deny隐含地规定了这一点,但是为了更好地理解,我喜欢在所有情况下都明确地给出最终的接受/拒绝。

其他 MTA 通常通过第三条规则传递,无论它们是否经过身份验证。我们不能要求其他 MTA 进行身份验证,因为 RFC 没有强制要求这样做。但我们严格限制所有外部 MTA 只向我们的域发送消息。在任何情况下,我们都不会将他们的消息转发到其他域。

答案2

Debian 配置提供的设置适用于普通本地使用。更复杂的设置(例如身份验证)将需要手动编辑配置。

重新配置拆分配置可能更容易。然后您可以在 /etc/exim4/conf.d/auth/ 中启用身份验证。文件 30_exim4-config_examples 包含许多注释掉的示例,这些示例应该足以帮助您完成操作。

plain_server代码片段使用passwd/etc/exim4/ 中的一个文件,其中包含以冒号分隔的用户名和密码。默认情况下,exim 仅在连接加密时提供身份验证,这是一件好事。

我使用 dovecot 的身份验证服务来验证 exim 中的用户;这样,如果用户可以访问 dovecot(例如 IMAP),那么他们可以使用相同的凭据通过 exim 发送电子邮件。

相关内容