寄出邮件时,postfix使用系统的resolver(即DNS client,能向DNS server查询网域信息的函数库)来取得DNS信息。收信时,你的网域的DNS必须能提供递送信息(MX或A记录)给外界查询,让其他MTA能够找到你的postfix server。
DNS对于寄信程序的影响
postfix的smtp MDA必须要能够取得MX与A记录,才能决定收信主机的名称与ip地址。也就是说,在寄信程序中,postfix至少要进行两次DNS查询,第一次是为了取得MX主机名称,另一次是取得该主机名称的ip地址。由于postfix使用操作系统的resolver来访问DNS server,因此,运行postfix的系统至少要能够访问一台DNS server。虽然大部分运行postfix的系统通常也会运行DNS server,但是这并非必要条件。
如果你怀疑自己的系统不能够正确的查询DNS信息,有三个命令行工具可以帮你找出问题:nslookup、dig以及host。绝大部分unix系统都应该安装这三个工具。你可以利用这些工具查出特定网域的所有类型的资料记录,包括让postfix能将邮件送到正确主机的MX记录。
DNS问题可能源自于postfix所在系统本身的设定错误,也可能是目标网域的DNS server没有设定好。当你寻找问题原因时,有非常重要的一点必须谨记在心:postfix总是先查mx记录,然后再查A记录。即使你可以顺利查出网域名称的ip地址,但是如果该网域没有提供mx信息,postfix不一定能够在第一次就顺利寄出邮件。
配置文件选项
投递邮件时,postfix从DNS系统查出目标网域的所有MX资源记录,然后依据优先值来排序。在postfix顺利连接到收信方的smtp server之后,对方会以状态码来回答smtp MDA的要求。介于2xx范围之间的状态码代表答应要求;若是返回4xx范围内的状态码,表示对方遇到呢暂时性的错误;如果是状态码在5xx范围内,表示发生永久性问题。
PTR记录
为了防治垃圾邮件,现在有许多SMTP server要求客户端的ip地址必须要能够查出有效的PTR资源记录。因此,你的postfix系统的ip地址必须在DNS系统里有一个指向postfix主机规范名称的PTR记录,这样才能确保所有SMTP SERVER都原意收下你寄出的邮件
DNS对于收信程序的影响
要让postfix收下特定网域的邮件,运行postfix的主机本身名称必须被列在该网域的MX记录里,而且postfix也必须被设定成可以收下该网域的邮件。postfix能收下三种网域的邮件:系统本身所处的本地网域(local domain)、转发网域(relay domains)、虚拟网域(virtual domains)。其中虚拟网域可能是使用虚拟别名(virtual aliases)或虚拟邮箱(virtual mailboxes)。每一种网域都必须被列在特定的postfix参数才有效。
网域类型 参数
本地 mydestination
转发 relay_domains
虚拟邮箱 virtual_mailbox_domains
虚拟别名 virtual_alias_domains
同一个网域不可同时列于不同参数中。如果postfix在两个参数找到同一个网域,它会发出警告。如果你在日志文件看到“mail for example.com loops back to myself“这样的错误信息,通常是因为你的postfix server被列在某网域的MX列表里,但是postfix却没被设定成可以收下该网域的邮件。
常见问题
DNS设定不当所造成的问题,通常没有立刻可见的效果,只能从日志文件里的错误信息来分析。
”mail for domain loops back to myself“ (某网域的邮件绕回我自己)
所有关于DNS的错误中,这可能是最常见的。问题原因是你的postfix server被列在某网域的MX列表里,但是你没让postfix知道,它自己就是该网域的邮件终点站。所以,解法就是将该网域列在mydestination参数,或是设定为虚拟网域或转发网域。倘若你的postfix server是列在porxy或NAT设备之后,它可能无法察觉自己是某网域的MX主机,在这种情况下,你得将proxy系统得ip地址加到proxy_interfaces参数
“host found but no data record of requested type“(能找到主机,但是没有指定数据类型得记录)
网域得DNS数据库里找不到MX记录,而且网域名称自己也没有A记录。你得要联络该网域得DNS管理员才能解决这问题。如果你自己就是DNS域名数据库得管理员,请确定你的邮件服务器的主机名称确实列在该网域的MX记录里。
”no mx host for domain has a valid A record“
网域的DNS数据库有MX记录,但是查不出mx主机名称所对应的ip地址。你得要联络该网域DNS管理员才能解决这问题。对于你自己得网域,请确定mx记录所列得每一个主机名称,都有一个有效而且正确得A记录。
”host not found, try again“
从DNS系统中查询不出任何有意义得结果。有可能是DNS serer断线或拒绝服务,甚至故障。如果能确定该网域得DNS SERVER正常运作无误,问题可能是网络,或是postfix server系统本身得resolver没有设定妥当。对于最后一种可能,你应该检查系统的/etc/nsswitch.conf与/etc/resolv.conf配置文件。
通过上文介绍,我们知道了DNS对Postfix的寄信和收信程序的影响。希望对大家有所帮助!
【编辑推荐】
- 深入了解 Linux下安装DNS+Sendmail服务
- 服务器集群高可用性注意事项:DNS与故障转移
- 大多企业仍然容易受到DNS缓存中毒攻击
- 对于企业来说 免费的DNS合适吗?
- 教你如何设置Postfixadmin的自动回复
- 如何对Postfix进行资源控制
- Postfix中的地址操作大全