公网与私有地址空间
公网 IP
192.0.2.10
全球唯一,可从任何地方路由
私有地址段
无法在公共互联网上路由
为什么私有 IP 地址段绝不应该公开解析
RFC 1918 划出了三个 IPv4 地址段,即 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16,专门供私有网络内部使用,原因恰恰是公共 IPv4 地址不够让每个私有网络中的每台设备都拥有全球唯一的地址。这些地址段同时在全球数百万个互不相关的网络内部被重复使用。您家里的路由器几乎肯定分发的是 192.168.x.x 的地址,几乎所有其他人的路由器也是如此。
公共域名解析到这个范围意味着什么
由于这些地址只在发出查询的那个本地网络内才有意义,所以解析到其中之一的公共域名,往好了说是配置错误,往坏了说则是有意让面向公众的系统,向其自身内部网络中恰好位于该地址的任何设备发起请求。公共互联网根本不知道 10.0.0.5 究竟指的是什么,它会因发出查询的网络不同而对应不同的机器。
| 地址段 | 名称 | 为什么要屏蔽 |
|---|---|---|
| 10.0.0.0/8 | 私有(RFC 1918) | 在数百万个互不相关的网络内部被重复使用 |
| 172.16.0.0/12 | 私有(RFC 1918) | 同上 |
| 192.168.0.0/16 | 私有(RFC 1918) | 同上,是常见的家用路由器地址段 |
| 127.0.0.0/8 | 环回 | 指向发出查询的机器自身 |
| 169.254.0.0/16 | 链路本地 | 包含 169.254.169.254,即云元数据端点 |
| 100.64.0.0/10 | 共享地址空间(RFC 6598) | 运营商级 NAT,常常被手写的屏蔽列表遗漏 |
| 0.0.0.0/8 | 未指定 | 不是真正可路由的目的地 |
| 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | 文档用地址段 | 保留用于示例,绝不会用于实际环境 |
- 合法的公共域名没有任何理由解析到私有地址段内的地址,如果看到这种情况,应当把它视为值得调查的信号,而不是正常的结果。
- IPv6 也有自己对应的私有或保留地址段,即唯一本地地址(fc00::/7)和链路本地地址(fe80::/10),需要同样的处理。
在解析环节就过滤掉这些地址段,而不是相信看起来像公共域名的域名总会解析到看起来像公网的地址,是任何代表用户解析域名的工具应当达到的基本要求。
大多数屏蔽列表会忘记的地址段
100.64.0.0/10,即 RFC 6598 所定义的“共享地址空间”,其知名度远不及 10.0.0.0/8 或 192.168.0.0/16,尽管它在公共互联网上同样无法路由。它专为运营商级 NAT 而存在,让运营商可以在内部为大量用户连接编址,而不必为每一个连接都占用公共 IPv4 空间。由于它比经典的 RFC 1918 地址段更新、知名度更低,它是手写屏蔽列表中最常被遗漏的一个,而这正是只有当有人故意把域名指向其中的地址时,才会暴露出来的那种漏洞。
“故障关闭”与列表本身同样重要
屏蔽列表的好坏,取决于当地址完全无法解析时会发生什么。格式错误的输入、不常见的写法,或者无法清晰匹配任何已知地址段的值,都不应默认被当作“大概没问题”,安全的默认做法是拒绝任何无法确定归类为公网的地址,而不是只拒绝明确匹配已知恶意地址段的地址。这种“故障关闭”的姿态,才能让屏蔽列表对付那些还没人想到要添加的地址段,而不只是列表上已有的那些知名地址段。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
本主题的免费工具
相关阅读
SSRF 会让服务器沦为不知情的代理
攻击者
构造请求 URL
存在漏洞的服务器
被 SSRF 诱骗而发起请求
169.254.169.254
元数据端点
凭据
返回给攻击者
云元数据端点:隐蔽的攻击面
一个看似不可路由的 IP 地址,就能让云实例读取凭证和配置信息,因此它也是 SSRF 攻击中最常见的目标之一。本文解释其原理与防御思路。
同一个地址,四种写法
SSRF 攻击详解:DNS 如何被利用
服务端请求伪造往往只始于一个域名:您的服务器被诱骗去解析并请求它。本文说明 DNS 在其中扮演的角色以及真正有效的防御。
同一个域名,两个不同的答案
首次请求
解析为公网 IP
校验
通过,看起来安全
TTL 过期
数秒之后
第二次请求
解析为 127.0.0.1
什么是 DNS 重绑定?为什么值得关注
一个域名先解析到安全的公网地址,随后又解析到内部地址:DNS 重绑定让 DNS 本身成为攻击面。了解它的原理,以及唯一可靠的防御方法。