我有一个配置,其中我们有一个 MTA 负责从多个内部服务器发送电子邮件。
所有内部服务器都在多个不同的域上运行 Postfix。它们都配置为通过 MTA 进行中继。我正在尝试设置 DKIM 以签署来自所有内部服务器的出站电子邮件。
我已经安装了 opendkim,并且服务器能够签署本地生成的出站电子邮件。
MTA配置如下:
opendkim.conf:
Syslog yes
Logwhy yes
UMask 002
Canonicalization relaxed/simple
Mode s
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
OversignHeaders From
UserID opendkim
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
Socket inet:8891@localhost
主文件:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mta.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mta.mydomain.com localhost
relayhost =
mynetworks = 127.0.0.0/8 1.1.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
canonical_maps = hash:/etc/postfix/canonical
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
签名表:
*@domain1.com default._domainkey.domain1.com
*@*.domain1.com default._domainkey.domain1.com
*@domain1.co.uk default._domainkey.domain1.co.uk
*@*.domain1.co.uk default._domainkey.domain1.co.uk
*@domain2.co.uk default._domainkey.domain2.co.uk
*@*.domain2.co.uk default._domainkey.domain2.co.uk
*@domain3.co.uk default._domainkey.domain3.co.uk
*@*.domain3.co.uk default._domainkey.domain3.co.uk
受信任的主机:
127.0.0.1
localhost
1.2.3.50
1.2.3.52
1.2.3.53
1.2.3.54
1.2.3.29
service2.domain2.co.uk
host2.domain2.co.uk
我已经配置了 /etc/opendkim/trusted.hosts,其中包含我希望签名其电子邮件的内部主机列表。我还添加了密钥并将其添加到相关的 DNS 记录中。
我已经测试过使用 sendmail 在 MTA 上生成邮件,并且这些邮件都正确签名。但是,当测试从其他远程内部服务器生成邮件时,所有邮件均未签名。我也没有在 MTA 上看到任何有关原因的记录,尽管使用 tcpdump 我可以看到流量流向本地主机的端口 8891。
我正在测试的主机向 Postfix 标识自己是 host2.domain2.co.uk:
Dec 20 16:28:32 mta postfix/smtpd[3765]: connect from host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/smtpd[3765]: 1B4BB439BD: client=host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/cleanup[3768]: 1B4BB439BD: message-id=<[email protected]>
Dec 20 16:28:32 mta postfix/qmgr[1494]: 1B4BB439BD: from=<[email protected]>, size=109206, nrcpt=1 (queue active)
Dec 20 16:28:32 mta postfix/smtpd[3765]: disconnect from host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/smtp[3759]: 1B4BB439BD: enabling PIX workarounds: disable_esmtp delay_dotcrlf for somecompany-co-uk.mail.protection.outlook.com[104.47.0.36]:25
Dec 20 16:28:33 mta postfix/smtp[3759]: 1B4BB439BD: to=<[email protected]>, relay=somecompany-co-uk.mail.protection.outlook.com[104.47.0.36]:25, delay=1.3, delays=0.14/0/0.18/1, dsn=2.6.0, status=sent (250 2.6.0 <[email protected]> [InternalId=73138998102968, Hostname=AS8PR05MB8037.eurprd05.prod.outlook.com] 119126 bytes in 0.104, 1115.744 KB/sec Queued mail for delivery)
Dec 20 16:28:33 mta postfix/qmgr[1494]: 1B4BB439BD: removed
编辑:进一步调查两个测试消息的标题(一个直接从主机使用 sendmail 发送,另一个从 MTA 后面的主机发送),并进一步调查 opendkim 日志,发现 DKIM 对这两条消息的签名显然成功,但来自其他主机的消息的 DKIM 签名被拒绝。
这是两个此类消息的 DKIM 日志(第一条成功,第二条失败):
Dec 22 12:06:16 mta opendkim[8130]: 65EB043A13: DKIM-Signature field added (s=default, d=domain3.co.uk)
Dec 22 12:06:52 mta opendkim[8130]: E723543AF0: DKIM-Signature field added (s=default, d=domain3.co.uk)
然而,查看 Gmail 中的 DKIM 结果,它们是不同的:
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass [email protected] header.s=default header.b=MVo7iz6A;
第二个:
ARC-Authentication-Results: i=1; mx.google.com;
dkim=neutral (body hash did not verify) [email protected] header.s=default header.b=TktWbhpC;
我不明白为什么这是不同的,但这一定是我所看到的问题的原因。