Postfix 拒绝作为中继主机发送电子邮件。它一直说:
连接到 mydomain.com[xxx.xx.xxx.xxx]:25: 连接被拒绝
但是端口 25 是开放的:
sudo netstat -ntlp
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN 39162/mysqld
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 57910/proftpd: (acc
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 614/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 762/sshd: /usr/sbin
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 70265/master
tcp6 0 0 :::3306 :::* LISTEN 39162/mysqld
tcp6 0 0 :::80 :::* LISTEN 61217/apache2
tcp6 0 0 :::22 :::* LISTEN 762/sshd: /usr/sbin
tcp6 0 0 ::1:25 :::* LISTEN 70265/master
tcp6 0 0 :::443 :::* LISTEN 61217/apache2
我不知道这个问题从何而来。
有人能帮助我吗?
答案1
您的中继主机需要身份验证。也就是说,您需要证明您有权通过此中继主机发送邮件。通常,中继主机操作员会为您提供凭证(一些登录名和密码),您可以在 Postfix 中配置这些凭证,以便在与中继主机通信时使用。
SMTP 客户端身份验证的配置(用于 Postfix 与中继主机(即 SMTP 服务器)通信时使用)在Postfix SASL 操作指南。 就是这样:
在后缀中main.cf
:
relayhost = [relay.host.name]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
第一行设置中继主机,第二行启用身份验证,第三行指定存储每个中继主机凭据的文件 — 即/etc/postfix/sasl_passwd
。在该文件中输入:
[relay.host.name] username:password
postmap /etc/postfix/sasl_passwd
对此文件进行更改后以及postfix reload
编辑后始终运行main.cf
。还限制对此文件的访问,因为它包含敏感信息:
chmod 0600 /etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd
请注意,如果您的中继主机希望您在另一个端口上提交(例如,当我必须设置中继主机时,我在smtp submission
端口上进行了设置tcp/587
),那么您需要在文件中同时指定relayhost = [relay.host.name]:submission
这main.cf
一点sasl_passwd
。
Postfix SMTP 客户端不支持“直接 SMTPS”(他们称之为“wrappermode”),其中 SMTP-over-SSL 服务器期望在端口上直接进行 SSL 握手tcp/465
(就像 Google 所做的那样)。它仅支持使用 STARTTLS 命令启动端口 25 或 587 上的 TLS。
答案2
Connection refused
表示没有任何东西在给定接口上的给定端口上进行监听。并且您的 netstat 输出显示端口 25 仅在127.0.0.1
环回接口上进行监听。
如果您尝试从另一台机器访问它,则无法访问。
要让 Postfix 监听所有接口,你需要更改inet_interfaces
:
inet_interfaces = all
如果您有多个接口并且不想让它监听所有接口,您还可以提供一个以逗号分隔的它应该监听的 IP 地址列表。