我正在尝试使用 postfix 和 dbmail 通过我的 freebsd 服务器向外部地址发送电子邮件。
我注意到以下几点:
我的服务器 -> 我的服务器 = 好的
外部服务器 -> 我的服务器 = 好的
MYSERVER -> EXTERNALSERVER = 错误(454 4.7.1 中继访问被拒绝)
为什么我会收到此错误?我认为这与我的 main.cf 有关
####MAIN.CF######
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
default_privs = nobody
myhostname = server.domain.nl
mydomain = domain.nl
myorigin = $mydomain
inet_interfaces = all
virtual_transport = dbmail-lmtp:localhost:24
virtual_mailbox_domains = domain.nl
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8 [::1]/128
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
inet_protocols = ipv4
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination
答案1
是不是您没有正确地进行身份验证(通过邮件客户端)来发送出站电子邮件,或者没有设置 mynetworks 以便允许您网络中的所有系统无需身份验证即可发送?
https://serverfault.com/questions/42519/how-to- Correct-postfix-relay-access-denied
答案2
当我设置sendmail
时,我遇到了类似的错误消息这个线程。对我来说,问题是我通过端口 465(即带 TLS 的 SMTP)进行身份验证,但协议要求在身份验证后运行 TLS,例如通过端口 25(即不带 TLS 的 SMTP)进行身份验证。
解决方案是将端口更改~/.authinfo
为
machine server.domain.tld login [email protected] port 25 password XYZ
更新: 我不是 SMTP 专家。我的回答是基于我的经验和这个线程,其中一条评论提到了关于我使用端口 25 进行身份验证的反驳:
这不是 SMTP AUTH 的工作方式:您使用相同的端口(在本例中为 587)进行身份验证和发送。
答案3
从历史上看,电子邮件客户端 (MUA) 使用到端口 25/TCP 的 SMTP 连接将外发邮件发送到其本地邮件服务器,或者邮件服务器 (MTA) 将电子邮件从一台邮件服务器传递到另一台邮件服务器。标准中不包括身份验证。事实证明这是一个非常糟糕的主意。
为了解决由此引起的问题,现代邮件服务器通常设置为使用端口 587 接受来自客户端的传入电子邮件。使用此端口时,通常强制进行身份验证,并且强烈建议使用 TLS 加密(使用 STARTTLS)。
端口 25 越来越多地专用于仅“有效”邮件服务器之间的流量,并且特定邮件服务器的有效性主要由各种 DNS 记录决定。
“中继访问被拒绝”意味着您当前无权通过外部服务器向任何其他邮件服务器发送电子邮件,即邮件中继,例如
YOURSERVER -> EXTERNALSERVER -> THIRD-PARTY-SERVER
将会被阻止。如果您发送的电子邮件的目标地址与 EXTERNALSERVER 直接负责的域之一匹配,则该电子邮件仍应被接受,除非您未通过其他反垃圾邮件检查。
其他邮件服务器可能会对传入 SMTP 连接应用多种反垃圾邮件测试:
连接时,连接主机需要声明其声称的主机名。接收主机将对源 IP 地址执行反向 DNS 查找:DNS 报告的名称与连接主机声明的名称是否匹配?还执行常规的正向 DNS 查找:DNS 报告的该名称的 IP 地址是否与连接实际来自的源 IP 地址匹配?这是最古老的反垃圾邮件测试之一。如果您未通过此测试并且未进行身份验证,则您将只能将电子邮件发送到目标主机直接负责的电子邮件地址,而不能发送到任何第三方。
还有 DNS SPF 记录,可以(可选)指定特定 DNS 域中的哪些主机应该向互联网发送电子邮件。如果您的域有 SPF 记录(尝试
dig domain.name TXT
查看)和该记录表明您的主机是不应该是邮件服务器,并且您没有进行身份验证,外部服务器可能会完全拒绝您的连接尝试。DNS MX 记录是电子邮件传送的另一个重要部分:它们指定为特定域提供服务的邮件服务器的实际主机名。为了确定收件人的电子邮件
[email protected]
应发送到何处,电子邮件服务器将首先查找 的 MX 记录domain.example
。您可以使用类似 的命令自己完成dig domain.example MX
。如果特定 DNS 域没有 MX 记录,则存在后备规则:如果存在普通旧 DNS A 记录,domain.example
并且由该 A 记录标识的 IP 地址中的主机侦听端口 25/TCP,则发送到该域的任何电子邮件都将发送到该 IP 地址。对于反垃圾邮件检查,该邮件的 MX 记录发送主机可能会被检查:想法是“如果你看起来没有准备好接收电子邮件,那么你可能也不应该发送它。”由于邮件服务器设置多种多样,这不可能是一个硬性规定,但它偶尔会被用作“是否是垃圾邮件?”中的一个小的积极/消极因素。决定。
如果您是家庭用户甚至是小型企业,没有静态公共 IP 地址,互联网服务提供商可能会选择将您视为简单的电子邮件客户端,并且仅允许您将传出 SMTP 连接发送到提供商的电子邮件服务器。此时他们可能需要进行身份验证,或者根据其网络的物理结构,他们可能允许未经身份验证的连接。在这种情况下,您仍然可以拥有自己的私人邮件服务器;它只需要像普通电子邮件客户端一样通过提供商的邮件服务器发送所有外发电子邮件。根据经典 Sendmail 中配置选项的名称,这有时称为“智能主机”配置。现代,通常需要使用端口 587 和身份验证,而不是传统的未经身份验证的端口 25。
在您自己的服务器中接收传入电子邮件还取决于您的互联网提供商允许的内容。如果您的连接是 NAT 的(家庭和小型企业互联网连接越来越多),则在不通过 NAT 为端口 25 打开固定隧道的情况下接收传入连接将是不可能的。如果您的 IP 地址偶尔发生变化,保持电子邮件相关的 DNS 记录始终处于最新状态对于电子邮件传送的可靠性至关重要。
一旦您拥有了公共静态 IP 地址和自己的 DNS 域,您通常会被认为“足够大”,可以在整个互联网的眼中拥有“真正的”邮件服务器。设置邮件服务器时,您应该密切关注与电子邮件传送相关的各种类型的 DNS 记录,并确保您的服务器使用为其注册的确切名称进行自我介绍(SNMP 连接中的 HELO/EHLO 消息)在 DNS 中。还要确保反向 DNS 记录(PTR 记录,用于 IP 地址 -> 域名映射)正确。
答案4
我的网络 = 127.0.0.0/8 [::1]/128
取消它。 # 每行羊数 # mynetworks = 127.0.0.0/8 [::1]/128