![Postfix:中继访问被拒绝](https://linux22.com/image/533665/Postfix%EF%BC%9A%E4%B8%AD%E7%BB%A7%E8%AE%BF%E9%97%AE%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
当我通过 telnet 连接到运行 postfix 的服务器并尝试发送电子邮件时:
MAIL FROM:<[email protected]>
#=> 250 2.1.0 Ok
RCPT TO:<[email protected]>
#=> 554 5.7.1 <[email protected]>: Relay access denied
我无法在网站上或通过查看其他用户的问题/答案找到答案,我不知道从哪里开始。有什么想法吗?
更新
因此基本上查看文档:http://www.postfix.org/SMTPD_ACCESS_README.html(部分:使用 SMTP 访问限制列表进行选择),我似乎没有这些指令etc/postfix/main.cf
或smtpd_client_restrictions = permit_mynetworks, reject
其他任何的,所以我很困惑。
但实际上我要让 rails 应用程序连接到服务器并发送电子邮件,所以我不确定如何处理它。
我的配置文件如下:
# 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 (Ubuntu)
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
# TLS parameters
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_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = rerecipe-utils
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost, mail.rerecipe.com, rerecipe.com
relayhost =
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
mynetworks = 127.0.0.0/8 204.232.207.0/24 10.177.64.0/19 [::1]/128 [fe80::%eth0]/64 [fe80::%eth1]/64
需要注意的是它relayhost
是空白的,这是我安装 Postfix 时创建的默认配置文件,当测试连接时openssl
我得到了这个:
~% openssl s_client -connect mail.myhostname.com:25 -starttls smtp
CONNECTED(00000003)
depth=0 /CN=myhostname
verify error:num=18:self signed certificate
verify return:1
depth=0 /CN=myhostname
verify return:1
---
Certificate chain
0 s:/CN=myhostname
i:/CN=myhostname
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIBqTCCARICCQDDxVr+420qvjANBgkqhkiG9w0BAQUFADAZMRcwFQYDVQQDEw5y
ZXJlY2lwZS11dGlsczAeFw0xMDEwMTMwNjU1MTVaFw0yMDEwMTAwNjU1MTVaMBkx
FzAVBgNVBAMTDnJlcmVjaXBlLXV0aWxzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDODh2w4A1k0qiPNPhkrPj8sfkxpKPTk28AuZhgOEBYBLeHacTKNH0jXxPv
P3TyhINijvvdDPzyuPJoTTliR2EHR/nL4DLhr5FzhV+PB4PsIFUER7arx+1sMjz6
5l/Ubu1ppMzW9U0IFNbaPm2AiiGBQRCQN8L0bLUjzVzwoSRMOQIDAQABMA0GCSqG
SIb3DQEBBQUAA4GBALi2vvk9TGKJubXYJbU0PKmVmsfzFK35yLqr0keiDBhK2Leg
274sWxEH3ds8mUaRftuFlXb7RYAGNlVyTuMTY3CEcnqIsH7F2McCUTpjMzu/o1mZ
O/B21CelKetBd1u79Gkrv2vWyN7Csft6uTx5NIGG2+pGi3r0gX2r0Hbu2K94
-----END CERTIFICATE-----
subject=/CN=myhostname
issuer=/CN=myhostname
---
No client certificate CA names sent
---
SSL handshake has read 1203 bytes and written 360 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 1AA4B8BFAAA85DA9ED4755194C50311670E57C35B8C51F9C2749936DA11918E4
Session-ID-ctx:
Master-Key: 9B432F1DE9F3580DCC6208C76F96631DC5A4BC517BDBADD5F514414DCF34AC526C30687B96C5C4742E9583555A118232
Key-Arg : None
Start Time: 1292985376
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
250 DSN
奇怪的是,当我尝试从机器本身发送电子邮件时做工作:
echo test | mail -s "test subject" [email protected]
答案1
通常,当您看到这种类型的拒绝时,它与为访问中继而配置的内容有关,即允许发送/中继的内容?您是否刚刚设置了此服务器,它是否已到位?您尝试从哪里发送?请详细说明。
答案2
我无法在网站上或通过查看其他用户的问题/答案找到答案,我不知道从哪里开始。有什么想法吗?
谷歌搜索“postfix 中继”,然后点击第一个结果。如果您对文档有具体问题 - 或者如果您尝试了某些操作但认为它没有按描述工作 - 请告诉我们,我们将很乐意为您提供帮助。
答案3
通常,默认情况下,对于 postfix,为了中继您的消息,您要么来自某个区域mynetworks
,要么您的发件人电子邮件地址应该位于mydestination
。当然,这是默认设置,可以更改,通常通过 进行更改smtpd_client_restrictions
。在您的示例中,发件人是[email protected]
,这很可能不是您的域名。您的配置文件未指定 mydomain,$mydomain 将从服务器主机名域初始化。因此,由于您不是来自 mynetworks 并且不在 mydestination 中,您的邮件既不是在该 postfix 服务器上启动的,也不是在该 postfix 服务器上结束的,因此是中继,并且被拒绝。
另一方面,当您从机器本身(127.0.0.1)进入时,您位于 mynetworks 中,因此可以毫无问题地进行中继。
确实,正如 larsks 指出的那样,postfix 邮件中继的功能远不止几个“神奇”的配置指令。您应该熟悉 postfix 的大量在线文档。