配置 Exim 以发送到内部和外部地址

配置 Exim 以发送到内部和外部地址

我接手了一个显然使用 Exim 作为其 MTA 的网站。假设我们可以通过以下方式访问该网站:

http://example.com/

在 Example Corp. 工作的用户注意到他们没有收到电子邮件当 PHP Web 应用程序尝试向以下地址发送邮件时:

[电子邮件保护] [电子邮件保护] ETC。

问题

SPF 记录当服务器从example.com 的主机名。但是,当我们将 example.com 作为主机名时,我们无法向 example.com 上的任何人发送电子邮件。

我更改了服务器上的主机名,但现在它不适用于现有的 SPF 记录(详情如下)。

我想我需要有关配置主机名或 Exim 的建议。

背景

发送到 GMail、Yahoo、Mailinator 等外部地址的电子邮件都顺利通过。我使用 Mailinator 来测试电子邮件,因为您可以向任何地址发送电子邮件,而无需创建完整帐户。我使用这样的语法进行了测试。

这次测试将会成功。

echo "This is message body." | mail -s "SMTP Test 1" -r "[email protected]" [email protected]

这次测试将会失败。

echo "This is message body." | mail -s "SMTP Test 1" -r "[email protected]" [email protected]

可以使用地址测试选项进行一些简单的路由测试。此测试将会成功。

exim -bt [email protected]
[email protected]
  router = dnslookup, transport = remote_smtp
  host mail.mailinator.com [2600:3c03::f03c:91ff:fe50:caa7] MX=10
  host mail.mailinator.com [23.239.11.30]                   MX=10

这次测试将会失败。

exim -bt [email protected]
[email protected] is undeliverable

这篇文章很有帮助,为我指明了主机名设置的方向。 http://jblev​​ins.org/log/主机名

我意识到公共 DNS 中有一个名为“store.example.com”的条目,它指向正确的 IP 地址。我将其输入为主机名。

sudo 主机名 store.example.com

确保 store.example.com 位于网络文件内。这应确保主机名在重启后保持不变。

sudo nano /etc/sysconfig/network

sudo service exim restart

问题是,现在 Google 抱怨缺少 SPF 记录。

已接收-Spf:无(google.com:[电子邮件保护]未指定允许的发送方主机)client-ip=xxx.xxx.xxx.xxx;

我知道我可以创建一个 SPF 记录,但使用现有的 example.com 记录会更简单。当这是主机名时,GMail 中的标头显示:

Received-Spf:通过(google.com:域名[电子邮件保护]指定 xxx.xxx.xxx.xxx 为允许的发送者)client-ip=xxx.xxx.xxx.xxx;

服务器环境

CentOS 版本 6.6

ls /etc/alternatives/ -l | grep mta

lrwxrwxrwx. 1 root root 23 Feb 23 09:28 mta -> /usr/sbin/sendmail.exim
lrwxrwxrwx. 1 root root 19 Feb 23 09:28 mta-mailq -> /usr/bin/mailq.exim
lrwxrwxrwx. 1 root root 29 Feb 23 09:28 mta-mailqman -> /usr/share/man/man8/exim.8.gz
lrwxrwxrwx. 1 root root 24 Feb 23 09:28 mta-newaliases -> /usr/bin/newaliases.exim
lrwxrwxrwx. 1 root root 15 Feb 23 09:28 mta-pam -> /etc/pam.d/exim
lrwxrwxrwx. 1 root root 19 Feb 23 09:28 mta-rmail -> /usr/bin/rmail.exim
lrwxrwxrwx. 1 root root 19 Feb 23 09:28 mta-rsmtp -> /usr/bin/rsmtp.exim
lrwxrwxrwx. 1 root root 18 Feb 23 09:28 mta-runq -> /usr/bin/runq.exim
lrwxrwxrwx. 1 root root 22 Feb 23 09:28 mta-sendmail -> /usr/lib/sendmail.exim

exim -bV
Exim version 4.72 #1 built 10-Oct-2014 09:23:33
Copyright (c) University of Cambridge, 1995 - 2007
Berkeley DB: Berkeley DB 4.7.25: (September  9, 2013)
Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc TCPwrappers OpenSSL Content_Scanning DKIM Old_Demime
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch ldap ldapdn ldapm nis nis0 nisplus passwd sqlite
Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
OpenSSL compile-time version: OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL runtime version: OpenSSL 1.0.1e-fips 11 Feb 2013
Configuration file is /etc/exim/exim.conf

答案1

我猜测 example.com 的邮件需要转发到该域的“真实”邮件服务器,或者也许所有邮件都应该转发到“智能主机”。

我不知道 Centos 的默认 exim 包是如何配置的(如果有的话)... 你应该把配置放在某处,这样我才能准确地说出需要更改什么。基本上:

  • 确保 example.com 未在 local_domains 中列出(检查dnslookup路由器,或至少检查配置中的第一个路由器之一(路由器按顺序处理,第一个匹配的路由器获胜)。

  • 搜索smarthost是否有这样的配置;您需要以某种方式将真实的邮件服务器的地址放入其中。

  • 您也可以将其作为第一个路由器:

    智能主机:驱动程序 = manualroute 域 = * 传输 = remote_smtp route_data = real.mailserver.example.com

进出口银行有关默认配置文件的描述。

答案2

SPF 的设计方式要求您添加另一个 SPF 记录:

域和主机识别有权代表它们发送电子邮件的机器。它们通过向现有 DNS 信息添加额外记录来实现这一点:每个具有 A 记录或 MX 记录的域名或主机都应具有指定策略的 SPF 记录(如果在电子邮件地址中或作为 HELO/EHLO 参数使用)。

它说“每个域名或主机...用于电子邮件地址或作为 HELO/EHLO 参数”。由于您更改了要发送的电子邮件地址,因此[电子邮件保护][电子邮件保护],您必须为 store.example.com 添加相应的 SPF 记录。

相关内容