![Postfix 中继 - Main.cf](https://linux22.com/image/501395/Postfix%20%E4%B8%AD%E7%BB%A7%20-%20Main.cf.png)
我有一台 RHEL 5.4,Postfix 运行良好,可以进行本地交付。该机器位于单独的网络上,除了防火墙上的 SMTP 端口外,没有外部访问权限。我试图让 nagios 向外部电子邮件地址发送警报。我查看了日志,一切都很顺利,但我从未收到过测试消息。
如果我将 nagios 警报邮件改回 nagios@thismachine,我会收到警报。但是当我将其设置为发送到 LAN 之外的电子邮件帐户(例如 alert.outside.somehwere.com)时,它就会丢失。这是我的 main.cf 文件,用于消化并查看我犯了哪些错误。
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = $mydomain
mydomain = localhost.thismachine.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
##
mynetworks = 127.0.0.0/8
## RELAY DOMAIN ##
relay_domain = 3.50.70.200
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
disable_dns_lookups = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
编辑: 现在我收到下面列出的错误。BIND 不在此系统上。就像我说的,它只是在 LAN 上,只需通过公司防火墙即可允许 nagios 警报从这台机器发出到创建的外部地址。
Name service error for name = somedomain.com type=MX: Host not found, try again
答案1
有几种方法可以解决这个问题。
第一种方法是使用“邮件中心”方法。防火墙边缘是否有一个“官方”电子邮件服务器可以替代使用?这个想法是,任何非本地地址都会被转发到“中心”,然后中心会为您完成将邮件路由到外部的繁重工作。它还消除了防火墙穿透的需要。本地地址在本地(在同一主机上)传递,远程地址“去其他地方”,每个人都很开心。它还在一定程度上简化了设置,并使将消息发送到外部的任务不是你的责任。
如果“集线器”不可用(或不理想),那么我会考虑修复您的名称解析。错误
Name service error for name = somedomain.com type=MX: Host not found, try again
...表示正在尝试递送,但无法确定WHO传递到(假设您发送消息到 somedomain.com)。检查您的设置/etc/resolv.conf
,确保您使用的 DNS 服务器可以解析“外部”名称;您当前使用的 DNS 可能仅支持 LAN“内部”的名称,并且不会解析外部名称(通常是出于安全原因)。在紧急情况下,您可以随时使用 OpenNIC DNS 服务器暂时提供名称解析,但您应该记住它不是“官方”的,可能会有自己的问题。您最终会希望用一些更简单的设置来替换这些设置(啊哼) 永恒的。
如果somedomain.com
实际上是你的机器隐藏在域后面,和如果错误消息是由您联系的目的地生成的,则问题在于服务器无法通过反向查找正确识别。
答案2
两件事,postfix 仅设置一次配置设置,因此您只需要为中继主机设置一个设置,如果您想要故障转移,则需要使用 DNS 和多个 A 或 MX 记录。
此外,relay_domain
这不是一个有效的设置。
否则,几乎可以肯定这是路径上的一些垃圾邮件过滤。
答案3
你应该设置relayhost
在日志文件中,我看到邮件是queued
,而不是sent
。在我的设置邮件接收状态下sent
。这很奇怪:
Dec 17 07:52:34 ivvi sendmail[31921]: nBHCqYV0031921: from=root, size=61, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Dec 17 07:52:34 ivvi sendmail[31921]: nBHCqYV0031921: [email protected], delay=00:00:00, mailer=esmtp, pri=30061, dsn=4.4.3, stat=queued
在我的设置中(CentOS 5.3 上的 postfix),邮件由 smtp 守护程序传递,而不是 sendmail。你确定正在运行的是 postfix,而不是 sendmail 吗?
答案4
运行
postconf -n
以查看您的配置实际上是什么。考虑main.cf
用此命令的输出替换您的,以摆脱拼写错误的条目和诸如此类的东西。我猜这
3.50.70.200
就是你要发送邮件的服务器?如果是这样,你需要类似 的内容relayhost = [3.50.70.200]
。请注意[]
,它们很重要。