我正在测试邮件退回的处理。当我向坏域发送测试电子邮件时,例如:[电子邮件受保护],我在日志中收到以下错误:
SYSERR(根):blahblahfail.org.mydomain.org。配置错误:邮件循环返回给我(MX 问题?)
看来如果目标域上的 dns 失败,sendmail 会将我的域附加到坏域。
为什么会出现这种情况?如果域名不好,我是否应该预期邮件会被退回?未知用户@好域名类型的退回邮件对我来说确实有效。
可能的相关 sendmail 配置行:
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
注意:我尝试删除always_add_domain 功能。我的域名列在 /etc/mail/local_host/names 中
答案1
这不是 sendmail 问题。这是由我的 dns A 记录中的通配符 (*) 引起的。
我不知道为什么,但如果名称没有得到解析,那么我的域名会附加到该名称中,然后 dns 查找会因为通配符而解析为我的 IP 地址。
这会影响 mail、curl、ssh。
如果我 ssh 到 badbadfailfail.com,我会 ssh 返回到我的 IP。
我正在删除 dns 记录中的通配符。
将其添加到 /etc/resolv.conf 中也可以:
search .
答案2
20 年来一直在 BSD/SYSTEM 5 系统上这样做
编辑/etc/nsswitch.conf
hosts: files myhostname dns
networks: files
编辑/etc/主机名
#your hostname.domainname
127.0.0.1 ns1.local localhost.local ns1 localhost
就是这样,不要在这里发挥创意。也将到 localhost 的环回保持为 127.0.0.1,否则你会破坏这里的东西,具体取决于你的“nix”
192.168.0.200 ns1.local localhost.local ns1 localhost
编辑你的sendmail.cf——是的,我知道它说什么,但我是对的,继续吧
/etc/mail/sendmail.cf
Fw/etc/mail/local-host-names %[^\#]
Cwns1 # your hostname alone
Dj$w.local # your domainname alone
编辑您的文件,告诉 sendmail 检查中继或将使用 sendmail 的主机。将其命名为您想要的名称,只要它与 cf 相匹配即可,即 /etc/mail/local-host-names - 这是默认值我认为最新的sendmail
localhost # Depending on your flavour of 'nix, BSD/SYSTEM 5, you NEED
#this or you'll break something trying to fix a "small" problem
ns1.local
localhost.local # Same as above, I compile code all the time that calls
#the loopback or 127.0.0.1
iptables,太多了,无法在这里介绍,但是有前端,但不是很多。我也用编写者的知识来编写代码。让我们确保允许端口 25、本地网络、53 UDP IF DNS 缓存服务器和 931 进入我们的环回,除非我们想破坏其他关键服务。
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.0.0/24 0.0.0.0/0
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 ctstate NEW
LOG icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 ctstate NEW LOG flags 0 level 4
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:123
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:931
DROP udp -- 0.0.0.0/0 0.0.0.0/0
LOG udp -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
DROP tcp -- 0.0.0.0/0 0.0.0.0/0
LOG tcp -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
DROP all -- 0.0.0.0/0 0.0.0.0/0
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
上面的示例很大程度上取决于您的配置、网络(我是 192.168.0.0/24),请自行解决,因为这不是“交换条件”。我面前有一个 PIX,网络上还有其他“东西”。删除 localhost.local 或您的环回需要您自担风险——许多操作系统人员将其硬编码到强制服务中,我见过其他答案,这些答案会让您消除这个,但不要这样做。
# /etc/hosts
192.168.0.200 ns1.local localhost.local localhost
127.0.0.1 ns1.local localhost.local ns1 localhost
好吧,让我们重新启动一切,不,不重新启动,我们是 'nix 系统管理员,唯一不起作用的是 uname -a,直到我们重新加载内核,不能从命令行执行此操作。成为 root 或 sudo ,无论你喜欢什么。新人坚持使用 sudo 是为了你好。
service hostname restart
ifdown eth0
/etc/init.d/sendmail stop
iptables -F
iptables -nL # should be clean, no rulez
ifup eth0
iptables-restore "file" # wherever you told iptables to
#iptables-save > "file" to write. Me, well
#iptables-save > /etc/fw/iptables.rulez
iptables-restore /etc/fw/iptables.rulez # Thats me, pay attention
#here or get whacked, firewalls are important and why we use 'nix
service hostname stop
service hostname start
/etc/init.d/sendmail start
hostname # should be hostname alone i.e. ns1
hostname -f # full host.domainname i.e. host.domainname for me it's ns1.local
service hostname status
/etc/init.d/sendmail start # tail -f /var/log/syslog or /var/log/messages
iptables-restore /etc/fw/iptables.rulez
tail -f /var/log/syslog or /var/log/messages # Again, depends on your 'nix
最后,我可能错过了一两步,立即做这件事,一切都会成功。想要变得非常聪明,忘记论坛和人或信息,你会比论坛更快地变得聪明。可能需要一整夜,但无价的经验相信这一点。