![如何配置 Postfix 以进行每个发件人 SASL 身份验证](https://linux22.com/image/595477/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20Postfix%20%E4%BB%A5%E8%BF%9B%E8%A1%8C%E6%AF%8F%E4%B8%AA%E5%8F%91%E4%BB%B6%E4%BA%BA%20SASL%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
我有两个 gmail 帐户,我想将我的本地 postfix 服务器配置为客户端,使用依赖于发件人地址的凭据对 smtp.gmail.com:587 进行 SASL 身份验证。
因此,假设我的 gmail 帐户是:[email protected]
和。如果我在标题字段中[email protected]
发送了邮件,则 postfix 应使用凭据:对 gmail SMTP 服务器进行 SASL 身份验证。同样,对于,它应该使用。听起来相当简单。[email protected]
FROM
[email protected]:psswd1
[email protected]
[email protected]:passwd2
好吧,我按照 postfix 官方文档进行操作http://www.postfix.org/SASL_README.html,最后我得到了以下相关配置:
/etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_tls_security_level = secure
smtp_tls_CAfile = /etc/ssl/certs/Equifax_Secure_CA.pem
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache
smtp_tls_session_cache_timeout = 3600s
smtp_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
relayhost = smtp.gmail.com:587
在 /etc/postfix/sasl_passwd 文件中
[email protected] [email protected]:passwd1
[email protected] [email protected]:passwd2
smtp.gmail.com:587 [email protected]:passwd1
/etc/postfix/sender_relay
[email protected] smtp.gmail.com:587
[email protected] smtp.gmail.com:587
完成我所做的配置后:
$ postmap /etc/postfix/sasl_passwd
$ postmap /etc/postfix/sender_relay
$ /etc/init.d/postfix restart
问题是,当我从 发送邮件时[email protected]
,邮件最终到达的目的地是发件人地址[email protected]
,而不是[email protected]
,这意味着 postfix 始终忽略每个发件人的配置并使用默认凭据发送邮件(上面的第三行/etc/postfix/sasl_passwd
)。我多次检查了配置,甚至将它们与解决同一问题的各种博客文章中的配置进行了比较,但发现它们与我的配置大致相同。所以,如果我遗漏了什么,有人可以给我指出正确的方向吗?
非常感谢。
编辑:
以下是我从以下地址发送邮件时进入 /var/log/mail.log 的内容[电子邮件保护]发送到另一个“模糊”的邮件地址,[电子邮件保护]
Sep 11 17:28:24 host postfix/pickup[13235]: D0E71A4167D: uid=1000 from=<marwan>
Sep 11 17:28:24 host postfix/cleanup[13259]: D0E71A4167D: message-id=<20120911152824.GX10881@host>
Sep 11 17:28:24 host postfix/qmgr[13236]: D0E71A4167D: from=<marwan@host>, size=413, nrcpt=1 (queue active)
Sep 11 17:28:25 host postfix/smtp[13263]: setting up TLS connection to smtp.gmail.com[173.194.70.108]:587
Sep 11 17:28:25 host postfix/smtp[13263]: Verified TLS connection established to smtp.gmail.com[173.194.70.108]:587: TLSv1 with cipher RC4-SHA (128/128 bits)
Sep 11 17:28:32 host postfix/smtp[13263]: D0E71A4167D: to=<[email protected]>, relay=smtp.gmail.com[173.194.70.108]:587, delay=7.8, delays=0.1/0/2.7/5, dsn=2.0.0, status=sent (250 2.0.0 OK 1347377285 25sm9995878bkx.9)
Sep 11 17:28:32 host postfix/qmgr[13236]: D0E71A4167D: removed
至于 MAIL FROM 命令,当我增加 tls 日志记录级别时我注意到了它:
Sep 11 18:26:53 host postfix/smtp[14287]: Write 42 chars: MAIL FROM:<marwan@host> SIZE=405 AUTH=<>
那么,MAIL FROM 命令是否应该包含[电子邮件保护]?如果是的话,我该怎么做才能实现这一点?
顺便说一句,我没有编辑最后一行;我的本地主机名是“host”,我的本地用户名是“marwan”。
再次感谢。
答案1
Postfix(实际上任何 MTA)都不关心 FROM 标头。sender_dependent_relayhost_maps
设置查看信封(SMTP MAIL FROM)地址。
请包含相关日志,显示当您尝试使用其中一个例外发送邮件时发生的情况。
答案2
在和文件[]
中添加。isp.mailcom
sasl_passwd
sender_relay
例如。
/etc/postfix/sasl_passwd
:
[email protected] [email protected]:passwd1
[email protected] [email protected]:passwd2
[smtp.gmail.com]:587 [email protected]:passwd1
/etc/postfix/sender_relay
:
[email protected] [smtp.gmail.com]:587
[email protected] [smtp.gmail.com]:587