服务器(硬件)更改后,Postfix 不发送/允许接收消息

服务器(硬件)更改后,Postfix 不发送/允许接收消息

我们有一台运行 Ubuntu 12.04 的旧笔记本电脑,用作网络/ftp/邮件服务器,它可以正常工作,但由于这台笔记本电脑本身就很旧而且不可靠,因此在它完全停止工作之前,我们购买了一台台式机来替换它。

由于新台式机的视频卡存在问题,我们无法使用 Ubuntu 12.04,因此我们安装了 Ubuntu 13.10 并对其进行配置。

由于我们从网络中移除了笔记本电脑,因此我们保留了相同的计算机名称和本地 IP 地址,以使配置尽可能接近旧服务器。

然而,由于 Postfix 每次尝试发送邮件时都会抛出错误 451 4.3.0 查找失败,并且也无法接收任何电子邮件,因此出现了问题。

我们的 main.cf 文件是我们在旧服务器上使用(并运行)的文件的副本(请注意,我们使用 EHCP)

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name powered by Easy Hosting Control Panel (ehcp) on Ubuntu, www.ehcp.net
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no
myhostname = m21-traducoes.com.pt
relayhost = 
mydestination = localhost, 89.152.248.139
mynetworks = 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/16, 10.0.0.0/8,  89.152.248.0/24
virtual_alias_domains = 
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_client_access hash:/var/lib/pop-before-smtp/hosts,reject_unauth_destination
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota."
virtual_overquota_bounce = yes
debug_peer_list = 
sender_canonical_maps = 
debug_peer_level = 1
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $mynetworks $virtual_mailbox_limit_maps $transport_maps

alias_maps = hash:/etc/aliases

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated,check_client_access hash:/var/lib/pop-before-smtp/hosts,reject_unauth_destination
smtpd_destination_concurrency_limit = 2
smtpd_destination_rate_delay = 1s
smtpd_extra_recipient_limit = 10
disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20

此配置以前有效,但现在每次我尝试在 squirrelmail 中发送邮件时,它都会报告:

Message not sent. Server replied: 
Requested action aborted: error in processing
451 4.3.0 <[email protected]>: Temporary lookup failure

而且我也无法从外部向其发送邮件。有什么想法吗?

编辑:以下是 MXToolBox 向我的域报告的一些问题,希望能回答@Teun Vink:

              BlackList      Mail Server     Web Server    DNS
  Error           4              0               2          0
  Warnings        0              0               0          3
  Passed          0              6               3          12

因此该域名在某个黑名单上,但这根本不能解释错误。未发现邮件服务器问题(除了它不工作)。这两个 Web 服务器错误是因为我没有 HTTPS 工作(没有 SSL 证书)所以测试失败。当它与另一台机器一起工作时,我们已经出现了这 3 个 DNS 警告,并且与我无法控制的东西有关:

   SOA Refresh Value is outside of the recommended range
   SOA Expire Value out of recommended range
   SOA NXDOMAIN Value too high

我搜索过,据我所知,只有销售零售的人可以改变这些价值,而他们不会。

编辑2:我解决了一半的问题。在新机器上安装了 postfix,但没有安装 postfix-mysql,所以它无法连接到数据库(新手错误)。修复该问题后,我现在可以毫无问题地向外部发送邮件,但我仍然无法接收来自外部的邮件。发件人没有收到任何有关未送达的警告消息,但邮件没有进入收件箱,日志显示:

Nov 13 15:11:57 m21-traducoes postfix/smtpd[5872]: NOQUEUE: reject: RCPT from re
lay4.ptmail.sapo.pt[212.55.154.24]: 451 4.3.5 <relay4.ptmail.sapo.pt[212.55.154.
24]>: Client host rejected: Server configuration error; from=<[email protected]>
 to=<[email protected]> proto=SMTP helo=<sapo.pt>
Nov 13 15:11:57 m21-traducoes postfix/smtpd[5872]: disconnect from relay4.ptmail
.sapo.pt[212.55.154.24]

编辑3:从 main.cf 中删除 smtpd_relay_restrictions 参数允许我接收来自外部的邮件 - 但(我认为)也使我成为一个开放中继 - 这是不行的。有什么想法吗?

答案1

临时查找失败通常是由 DNS 问题引起的。请检查 DNS 是否正常工作,以及您是否可以解析要向其发送电子邮件的域的 MX 记录。

答案2

嗯,这是一个奇怪的问题,但我终于弄明白了,并通过两个步骤解决了它:

1 - 检查 mail.log(我应该从那里开始)我注意到 postfix 无法访问 mysql 数据库。经过一番研究,我发现 postfix 已安装但 postfix-mysql 未安装。所以我只是使用以下命令重新安装了所有邮件包:

sudo apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

这使得我最终可以向外部发送邮件但无法接收它。

2 - 经过反复的折腾和谷歌搜索,我注释掉了 main.cf 中的 smtpd_relay_restrictions 行,重新启动了 postfix,然后,我就可以收到来自外部的邮件了。几次测试表明,注释掉这行并不能让我成为一个开放的中继(不知道为什么),所以对我来说已经足够好了

现在一切正常

相关内容