如何更正Postfix的“拒绝中继访问”?


54

今天早上,为了更正安全证书中名称不匹配的问题,我遵循了如何修复邮件服务器SSL?中的建议步骤,但是现在,当尝试从客户端(在这种情况下,客户端是Windows Mail)发送电子邮件时,我收到以下错误消息。

拒绝的电子邮件地址为“ email@gmail.com”。主题“这是一个测试。',帐户:'mail.domain.com',服务器:'mail.domain.com',协议:SMTP,服务器响应:'554 5.7.1:中继访问被拒绝',端口:25,安全(SSL):否,服务器错误:554,错误号:0x800CCC79

编辑:我仍然可以从该帐户检索电子邮件,并且将电子邮件发送到同一域的其他帐户。我只是无法向我们域外的收件人发送电子邮件。

我尝试完全禁用TLS,但没有骰子,但仍然遇到相同的错误。

当我检查文件时mail.log,我看到以下内容。

Jul 18 08:24:41 company imapd: LOGIN, user=user_name@domain.com, ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <email@gmail.com>: Relay access denied; from=<user_name@domain.com> to=<email@gmail.com> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79

文件main.cf看起来像这样:

#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#

#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#

command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

#
# Some common configuration parameters;
#

inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host

myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain

smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop

#
# Receiving messages parameters;
#

mydestination = localhost, company 
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf

#
# Delivering local messages parameters;
#

mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"

biff = no

alias_database = hash:/etc/aliases

local_recipient_maps =

#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf


#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_sender_restrictions =
        permit_sasl_authenticated
        permit_mynetworks

smtpd_recipient_restrictions =
        permit_sasl_authenticated
        check_recipient_access hash:/etc/postfix/filtered_domains
        permit_mynetworks
        reject_unauth_destination

附带一提,我的雇主希望能够从本地网络内部和外部发送来自客户(Thunderbird和Outlook)的电子邮件。


6
你为什么不接受?
2014年

Answers:


58

TLS仅在smtp会话上启用加密,并且不会直接影响是否将允许Postfix中继消息。

发生中继拒绝消息,因为smtpd_recipient_restrictions规则不匹配。必须满足以下条件之一才能使消息通过:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    check_recipient_access hash:/etc/postfix/filtered_domains
    permit_mynetworks
    reject_unauth_destination

要解释这些规则:

permit_sasl_authenticated

允许通过SASL进行身份验证的发件人。这对于对通常被阻止的网络外部用户进行身份验证很有必要。

check_recipient_access

这将导致postfix在/ etc / postfix / filtered_domains中查找基于收件人地址的规则。(从文件名上的文件名来看,它可能只是阻止了特定域...检查gmail.com是否在其中列出?)

permit_mynetworks

这将允许IP地址与$ mynetworks中指定的IP范围匹配的主机。在发布的main.cf中,$ mynetworks设置为127.0.0.1,因此它将仅中继由服务器本身生成的电子邮件。

基于该配置,您的邮件客户端需要先使用SMTP身份验证,然后才能中继邮件。我不确定SASL正在使用哪个数据库。这是在/usr/lib/sasl2/smtpd.conf中指定的。大概它也使用与虚拟邮箱相同的数据库,因此您应该能够在邮件客户端中启用SMTP身份验证,并且已全部设置好。


14
smtpd_use_tls = no

您已禁用TLS,因此现在需要通过将其添加到来授权本地网络mynetworks。例如,

mynetworks = 192.168.1.0/24 127.0.0.0/8

这将修复仅从本地网络发送的问题。要从本地网络外部发送电子邮件,您需要使TLS身份验证有效。


我设置了smtpd_use_tls = yes,因为我们必须能够从网络外部发送电子邮件。但是,问题仍然存在。
诺亚古德里奇

将smtpd_tls_loglevel最多增加3个,并查看日志中是否显示任何有趣的内容(完成后,请记住将其回落为1或0)。
pgs

另外,尝试将smtp_use_tls设置为no(用于发送外部电子邮件)。参见postfix.org/postconf.5.html#smtp_use_tls
pgs 2009年

1
-1,因为不是每个人都可以禁用tls。
jgifford25 2011年

3
我并不是说他应该禁用tls;我是说,由于他已经禁用它,因此他需要设置mynetworks。完整的解决方案是让tls重新工作。
pgs

6

我认为您在mydestination中想念domain.com,因为是default relay_domains=$mydestination,因此您可以在配置行后追加:

mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain

要么:

relay_domains = $mydomain

service postfix restart每次编辑postfix conf文件时,请不要忘记重新启动postfix服务器()。


+ 1用于在主机列表中添加“ localhost,localhost.localdomain”(通常在某些系统上是个问题,但不清楚为什么在其他系统上不是问题)
Iain Collins

2

我在Outlook中遇到了相同的问题(带有dovecote和postfix后端),花了两天时间寻找解决方案并调整配置文件。我要做的就是在Outlook邮件设置的“发送”选项卡中选中“服务器要求身份验证”,现在我的邮件已发送到gmail。在http://support.bluetie.com/node/440上查看有关如何查找设置的详细说明。


2

这个问题困扰了我一段时间。我试图从server1.domain.com连接到server2.domain.com。

这是我解决的方法-

#/etc/postfix/main.cf
mydomain = server1.domain.com
myhostname = $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
alias_database = hash:/etc/postfix/virtual
myorigin = /etc/mailname
mydestination = localhost.localdomain localhost $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

您还需要确保正确设置了/ etc / hosts和/ etc / hostname,并确保在更改网络后运行以下命令-

sudo service networking restart

后缀配置更改后的以下内容

sudo service postfix reload

0

对我来说,我不得不添加localhostmynetworks不顾事实127.0.0.0/8已经在那里。因此,现在看起来:

mynetworks = 1.1.1.1/32, 127.0.0.0/8, localhost

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.