为什么 sendmail 将我的主机名附加到未知的目标域?

为什么 sendmail 将我的主机名附加到未知的目标域?

我正在测试邮件退回的处理。当我向坏域发送测试电子邮件时,例如:[电子邮件受保护],我在日志中收到以下错误:

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

最后,我可能错过了一两步,立即做这件事,一切都会成功。想要变得非常聪明,忘记论坛和人或信息,你会比论坛更快地变得聪明。可能需要一整夜,但无价的经验相信这一点。

相关内容