永远不要使用二级域名作为 Linux Hostname - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
baobao1270
V2EX    程序员

永远不要使用二级域名作为 Linux Hostname

  baobao1270
baobao1270 2023-06-15 10:17:28 +08:00 8134 次点击
这是一个创建于 854 天前的主题,其中的信息可能已经有所发展或是发生改变。

最近发现了使用二级域名作为 Linux Hostname 会有坑,甚至还会造成潜在的信息安全问题。因此写了一篇博客,总结如下,全文可以在 https://josephcz.xyz/technology/linux/never-use-2ld-as-hostname/ 阅读

如果我们使用二级域名作为 Hostname

倘若我们将服务器的 Hostname 切换为二级域名,例如 example[.]com 时,会发生什么呢?在这里我们假设一个没有被任何人注册的域名,例如 some-not-registered-domain[.]com;并假设 com[.]com 这一域名被恶意人士注册。

接下来,我们使用 ping 命令,加上需要解析的域名,看看实际访问的域名时哪一个:

ping 命令结果对比图

是的,在使用二级域名作为 Hostname 的情况下,当 ping 一个尚未注册的域名 some-not-registered-domain[.]com 时,由于 Hostname 和 Search Domain 的配置,会自动 fallback 到 some-not-registered-domain[.]com[.]com 上!遗憾的是,不管是否使用 Search Domain ,这个问题都存在而将 Hostanme 设置为 FQDN 让这个问题更加隐蔽了。

这个问题不仅影响了 ping 、curl ,也影响了几乎所有使用 glibc 的程序:OpenSSL 、MySQL 、Nginx 、Apache……等等。如果它们的某个功能需要解析域名,则都会有同样的问题。

未被注册的域名值得警惕,但是这一问题如果发生在你自己的域名上呢?

如果我们使用已经被注册的域名作为 Hostname

回到我遇到的问题上来。我刚刚设置了 api-v2023[.]josephcz[.]xyz 这一域名的解析。而 DNS 解析的生效需要时间,在递归 DNS 未获取到生效的记录的情况下,会返回一个空记录。而空记录和 NXDOMAIN 错误一样,会触发 Search Domain 的 fallback 机制。因此,服务器上对 api-v2023[.]josephcz[.]xyz 全部被发送到了 api-v2023[.]josephcz[.]xyz[.]xyz

使用 tcpdump -i ens3 -nt -s 500 port domain 命令可以清楚地看到这一过程:

IP 10.0.0.12.57943 > 1.1.1.1.53: 27244+ A? api-v2023[.]josephcz[.]xyz. (35) IP 10.0.0.12.57943 > 1.1.1.1.53: 19043+ AAAA? api-v2023[.]josephcz[.]xyz. (35) IP 1.1.1.1.53 > 10.0.0.12.57943: 19043 0/1/0 (106) IP 1.1.1.1.53 > 10.0.0.12.57943: 27244 0/1/0 (106) IP 10.0.0.12.46092 > 1.1.1.1.53: 51629+ A? api-v2023[.]josephcz[.]xyz[.]xyz. (39) IP 10.0.0.12.46092 > 1.1.1.1.53: 61104+ AAAA? api-v2023[.]josephcz[.]xyz[.]xyz. (39) IP 1.1.1.1.53 > 10.0.0.12.46092: 51629 3/0/0 CNAME xyz[.]xyz., A 52.9.36.254, A 54.241.183.58 (85) 

好在 XYZ 域名的注册局保留了 XYZ[.]XYZ。但是如果换成解析其他域名,例如 some-api-host[.]aws 或者 pki[.]goog,而相关域名的注册局又忘记保留了 awsgoog 之类的域名呢?

结论

在设置 Linux 的 Hostname 时,永远不要使用一个二级域名无论是将 Hostname 设置为 FQDN 还是配置 Search Domain 。永远使用一个三级或以上的、受你自己控制的域名作为 Hostname 。

此外,启用强制性的 TLS 并正确部署证书信任也可以在一定程度上缓解这一问题由于对方无法获得正确的 TLS 证书,即使解析被 fallback 到恶意攻击者的域名上,也难以窃取你的机密信息。

25 条回复    2023-06-16 07:35:52 +08:00
EvineDeng
    1
EvineDeng  
   2023-06-15 10:27:49 +08:00
也曾遇到过这个问题,但从未深究,谢谢 op 。
momocraft
    2
momocraft  
   2023-06-15 10:30:11 +08:00
用 HOSTNAME.local 是不是也没有这个问题
xxx027
    3
xxx027  
   2023-06-15 10:31:42 +08:00
localhost.localdomain
mozhizhu
    4
mozhizhu  
   2023-06-15 10:41:32 +08:00
我喜欢在二级设为区域名称;例如:hostname.(home|abcnet).aaa.com ;
没想到还有这个坑;
est
    5
est  
   2023-06-15 10:43:29 +08:00
所以 ICANN 就很鸡儿烦。搞那么一大堆 tld ,现在大家都猜不出哪些后缀是安全的了。
summericy
    6
summericy  
   2023-06-15 10:54:19 +08:00
谢谢分享,之前还没注意过这个问题
baobao1270
    7
baobao1270  
OP
   2023-06-15 10:55:51 +08:00   1
@momocraft .local 可以避免这个问题

@mozhizhu 你这个是四级域名了,没问题的,只有二级域名会有问题
SingeeKing
    8
SingeeKing  
PRO
   2023-06-15 11:00:16 +08:00
没被 ndots 坑过的人生是不完整的 [手动狗头]
feedcode
    9
feedcode  
   2023-06-15 11:05:21 +08:00   1
关于这个
> 服务器上对 api-v2023[.]josephcz[.]xyz 全部被发送到了 api-v2023[.]josephcz[.]xyz[.]xyz
大概率是服务器配置的问题, 估计有 options ndots:n (n>2) 或者你的发行版的不是 glibc

glibc 默认 ndots 是 1,
https://linux.die.net/man/5/resolv.conf
Resolver queries having fewer than ndots dots (default is 1) in them will be attempted using each component of the search path in turn until a match is found.
hyq
    10
hyq  
   2023-06-15 12:41:47 +08:00
ping some-not-registered.com. <-- 最后有个点
是不是这种方式不会被影响到?
newaccount
    11
newaccount  
   2023-06-15 13:18:20 +08:00
感谢分享,跟着博客去看了下 RFC 1178 ,确实挺有意思的
hljjhb
    12
hljjhb  
   2023-06-15 13:25:58 +08:00
@SingeeKing hhh 人生经验
ho121
    13
ho121  
   2023-06-15 13:39:14 +08:00
# man resolv.conf

search Search list for host-name lookup.
By default, the search list contains one entry, the local domain name. It is de
termined from the local hostname returned by gethostname(2); the local domain name
is taken to be everything after the first '.'. Finally, if the hostname does not
contain a '.', the root domain is assumed as the local domain name.
Keystroke
    14
Keystroke  
   2023-06-15 14:08:52 +08:00
ping 命令结果对比图的第 5 行,为什么 Search Domain 是 com ,Ping 域名 web 的时候实际 Ping 域名是 web.example.com
baobao1270
    15
baobao1270  
OP
   2023-06-15 14:38:26 +08:00
@feedcode
@SingeeKing

是的,我的 ndots 确实是 1 。但是无论 ndots 是多少,如果 absolute domain 的解析结果是 NXDOMAIN ,都会进行「添加 search name 的查询」

所以这个问题上 ndots 不是主要问题

---


@Keystroke 似乎上我从 Typora 里复制 Markdown 的时候复制错了。稍后会更新图片,但是 CDN 缓存刷新需要时间。

---


@hyq 这种不会影响。但是在配置各种应用( nginx 、mysql )的时候很少会记得多加一个点吧。
ecloud
    16
ecloud  
   2023-06-15 14:46:16 +08:00
什么人会用二级域名当主机名?难以理解这种需求……
feedcode
    17
feedcode  
   2023-06-15 15:04:33 +08:00
@baobao1270 you are right
hyq
    18
hyq  
   2023-06-15 16:24:36 +08:00
@baobao1270 是的,很少会记得加这个点。以前不太理解这个.到底有什么意义,看到你这个问题,就明白了这个点代表的含义
alect
    19
alect  
   2023-06-15 16:57:47 +08:00
我有几十台主机,每个主机就是用的单独的二级域名区分,并没有觉得有问题。
tril
    20
tril  
   2023-06-15 19:33:17 +08:00
这让我想到另一个原理类似的漏洞:
某些硬路由的默认域使用了[.]host ,无法修改。而 cn[.]host 域名被黑产抢注,所有子域名全部跳转到恶意网站。结果就是该路由下访问任意一个不存在的[.]cn 域名(一种常见情况是拼写错误,例如 tsighua[.]edu[.]cn )会被尝试解析成[.]cn[.]host ,进而被跳转到恶意网站。
baobao1270
    21
baobao1270  
OP
   2023-06-15 19:39:09 +08:00
@alect 我感觉你可能误解了二级域名的含义
root domain: .
top-level domain: .com
second-level domain: example.com
third-level domain: www.example.com

如果你用的是 third-level domain ,那么不会有问题
如果你用的是 second-level domain ,这个坑我提醒过你了,并不是你不觉得有问题就代表问题不存在
ncepuzs
    22
ncepuzs  
   2023-06-15 20:28:01 +08:00
offtopic:为什么会用二级域名做服务器的 hostname ?
alect
    23
alect  
   2023-06-15 20:47:49 +08:00
@baobao1270 哦,我误解了,我其实用的是 sub.abc.com 这种
Andim
    24
Andim  
   2023-06-16 04:44:58 +08:00
@alect 你这是标准的 FQDN ,不能算二级域名,
baobao1270
    25
baobao1270  
OP
   2023-06-16 07:35:52 +08:00
@Andim 又在这个帖子下看到概念错误的了
FQDN 是相对的
. 是 FQDN
com 是 FQDN
exemple.com 也是 FQDN
www.example.com 还是 FQDN

但是相对于 exemple.com ,www 不是 FQDN ,www.example.com 是 FQDN
也就是说「 FQDN 」是类似「绝对路径」这样一个概念,就好比 Linux 上的根路径 / 也是一个绝对路径。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2971 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 13:00 PVG 21:00 LAX 06:00 JFK 09:00
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86