我在家庭路由器后面的 Raspberry Pi 上运行 postfix,并配置了动态 DNS。postfix 可以正常发送电子邮件,但似乎无法接收。
我认为家用路由器和动态 DNS 没问题,我在 Raspberry Pi 上托管了一个网站,它运行良好,并且可以公开访问。因此,要么是我的 MX 记录配置不正确,要么是 postfix 配置不正确(我认为)。
(我在下面删除了我的主机名)。
为 myhostname.ddns.net 配置动态 DNS
- IPv4 地址:我的 Raspberry Pi 的 IP 地址
- MX 记录:myhostname.ddns.net,优先级 1
家庭路由器上的端口转发配置
D Service Port Internal Port IP Address Protocol
1 80 80 192.168.0.10 ALL # web server
2 22 22 192.168.0.10 ALL # ssh
3 25 25 192.168.0.10 TCP # mail server
在第三台电脑上,不是 Raspberry Pi
ping myhostname.ddns.net
:有效,我看到我的 Raspberry Pi 的 IP 地址响应了。- 将浏览器指向
http://myhostname.ddns.net
: 有效,我可以看到网站的根目录。这证实了动态 DNS 正在运行,并且家庭路由器转发正在运行。 - 在 Gmail 帐户上,发送邮件
[email protected]
大约 24 小时后失败,并显示“传递不完整,收件人服务器未接受我们的连接请求。超时”。如果您知道一种更快的测试方法,不需要等待 24 小时,请告诉我。
在 Raspberry Pi 上,以“pi”身份登录
$ mail
No mail for pi
$ dig myhostname.ddns.net MX +short
1 myhostname.ddns.net
$ sudo postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 16232
$ sudo netstat -plutn | grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 16232/master
$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
$ cat /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Raspbian)
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_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_relay_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination
myhostname = myhostname.ddns.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = myhostname.ddns.net, myhostname, localhost.localdomain,
localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
mailbox_command =
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
$ cat /etc/mailname
myhostname.ddns.net
更新
康卡斯特封锁了 25 端口,请参阅https://www.xfinity.com/support/articles/email-port-25-no-longer-supported
答案1
这里有几件事您需要检查。
我猜 Google 无法向您发送电子邮件是因为您没有 MX 记录。但让我们暂时假装这不是问题,然后让我们解决其他问题。(不,出于许多原因,DDNS 不会向您提供 MX)
确保您可以从 Internet 连接到端口 25。我猜您无法做到这一点,但要进行测试,请执行以下操作:
nc -vv myhostname.ddns.net 25
或者
telnet myhostname.ddns.net 25
这应该显示您是否被允许连接到端口 25 - 请注意,某些 ISP 可能会阻止到端口 25 的传入连接。当然,您需要检查 pi 上的内部防火墙(您运行的是什么 Linux 发行版?)
一旦连接到服务器,您将能够使用 telnet/nc 发送电子邮件。
EHLO myhostname.ddns.net
(您应该看到这里以 250 开头的几行)
mail from: [email protected]
rcpt to: email@to_send_it_to.com
subject: Test email
然后开始输入电子邮件。最后一行以单个“.”结尾,如下所示:
Test email from my server.
.
然后你应该会看到电子邮件已发送或至少已被接受。无需等待 24 小时 :)
- 我真的怀疑您是否能够将 Pi 电子邮件服务器用于除少数测试之外的任何用途。首先,您没有 MX 记录,也无法控制 DKIM、PTR 和 SPF……换句话说,它无法投入生产,人们也不会接受来自您服务器的电子邮件。而且您使用的是动态 IP,这意味着您的 IP 被 99% 的垃圾邮件过滤器阻止。是的,只是因为它不是静态的。
答案2
康卡斯特表示康卡斯特网络的端口被阻止您可以使用端口 587。
编辑:ComCast 还表示 --> 如果您正在运行邮件服务器,请联系康卡斯特客户安全保证中心 1-877-807-6580 以获取有关此阻止的更多信息。