我用了这和这博客文章配置 postfix 以使用身份验证将邮件转发到特定服务器。在 main.cf 中进行了以下设置:
# sender-dependent sasl authentication
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
# default relayhost setting
relayhost = [fully.qualified.target.server]:587
# smtp authentication settings
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CAfile = /var/lib/ca-certificates/ca-bundle.pem
smtp_use_tls = yes
smtp_tls_security_level = encrypt
我创建了 /etc/postfix/sender_relay,内容如下:
[email protected] [fully.qualified.target.server]:587
[email protected] [fully.qualified.target.server]:587
[email protected] [fully.qualified.target.server]:587
[email protected] [fully.qualified.target.server]:587
并将其编码为 lmdb,postmap sender_relay
以便在 /etc/postfix/ 中创建 sender_relay.lmdb
我创建了 /etc/postfix/sasl_passwd,内容如下:
[email protected] [email protected]:password1
[email protected] [email protected]:password2
[email protected] [email protected]:password3
[email protected] [email protected]:password4
[fully.qualified.target.server]:587 [email protected]:passwordDefault
并使用 对其进行编码postmap sasl_passwd
。
现在,当我尝试使用该中继发送电子邮件时,我收到:
1 月 16 日 11:57:08 邮件 postfix/qmgr[12939]: 199FA1206D3:[电子邮件保护],大小=454,nrcpt=1(队列活动)
1 月 16 日 11:57:38 邮件 postfix/smtp[12952]: 连接到 fully.qualified.target.server[ip.of.target.server]:587: 连接超时
1 月 16 日 11:57:38 邮件 postfix/smtp[12952]: 199FA1206D3:[电子邮件保护]、relay=none、delay=1062、delays=1032/0.03/30/0、dsn=4.4.1、status=deferred(连接到 fully.qualified.target.server[ip.of.target.server]:587:连接超时)
虽然我编辑了 master.cf 以获取调试输出,但我没有获得更多信息:
smtp inet n - n - - smtpd -v
我使用 openssl 检查了证书/连接:
openssl s_client -connect fully.qualified.target.server:587 -starttls smtp -crlf
并且没有发现任何问题。我还能做什么来调试这种情况?
平台是 openSuse Leap 15.3
答案1
仅供对此感到困惑的人参考:这确实是另一个系统的防火墙问题。它阻止了邮件通信。
正如 Nikita 在评论中所建议的,我使用 tcpdump 检查连接并发现 telnet / openssl 使用接口 eth0 而 postfix 使用接口 tun0(该机器上有一个 VPN 隧道)。
并且 VPN 隧道的“端点”阻止了所有 SMTP 端口。
我让流量通过正确的接口,现在 postfix 可以执行其应有的操作并且调试也能正常进行。
我只是感到困惑,因为当底层 tcpip 连接被阻止时,postfix 不会显示任何调试输出。因此我认为我的调试参数没有被 postfix 使用。