什么是 bogon IP 地址及其重要性
bogon IP 地址是来自私有、保留或未分配空间的地址,不应作为流量的源地址出现在公共互联网上。该名称来自“bogus”(虚假),相关地址段由 IANA 和一系列 RFC 规定,因此判断某个地址是否为 bogon,是对一份已发布的、基于标准的列表进行查询,而不是猜测。
主要的 bogon 地址段
有两类值得区分。保留的特殊用途地址段由标准定义,永远不会在公网上路由。未分配空间有时被称为“完整 bogon”(full bogons),是尚未被任何注册管理机构分配出去的地址空间。下面的保留地址段是你最常遇到的。
0.0.0.0/8:“本网络”;当主机尚无地址时会作为源地址出现。10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:RFC 1918 规定的私有网络。100.64.0.0/10:运营商级 NAT 的共享地址空间(RFC 6598)。127.0.0.0/8:环回。169.254.0.0/16:链路本地地址,在 DHCP 失败时自动分配。192.0.0.0/24:IETF 协议分配。192.0.2.0/24、198.51.100.0/24、203.0.113.0/24:文档用地址块(RFC 5737),你会在示例和教程中看到它们。198.18.0.0/15:网络基准测试(RFC 2544)。224.0.0.0/4:组播。240.0.0.0/4:保留供将来使用,另加255.255.255.255,即受限广播地址。
对于 IPv6,对应的地址段包括 ::/128(未指定)、::1/128(环回)、fc00::/7(唯一本地地址)、fe80::/10(链路本地)、ff00::/8(组播)和 2001:db8::/32(文档)。诸如 ::ffff:0:0/96 的 IPv4 映射地址和 NAT64 前缀 64:ff9b::/96 也值得关注,因为它们是转换机制,同样不应作为客户端地址出现。一些较早的文章还列出了 192.88.99.0/24(6to4 中继任播),该地址段已被弃用。
为什么日志中的 bogon 很重要
如果 bogon 作为经由公共互联网到达的请求的表观客户端出现,那么下面几种情况之一属实,而且并不总是恶意的。原因常常出在基础管道上:反向代理或负载均衡器没有传递真实的客户端地址,因此你的应用看到的是代理的私有地址;X-Forwarded-For 条目取自错误的位置;或者 NAT 配置把内部地址泄露到了公共字段中。这些是配置缺陷,值得修复,因为它们会破坏速率限制、地理定位和滥用举报。
另一种原因是蓄意的。源地址可以在数据包和请求头中被伪造,攻击者使用 bogon 源地址发起伪造洪泛,或探测过滤规则。由于合法流量不可能源自这些地址段,上游运营者会在网络边缘过滤它们(BCP 38 中入口过滤的思路),你自己的防火墙也应丢弃到达公网接口的 bogon 源地址。请注意其中的细微之处:在你的网络内部,私有地址是正常的,因此该规则只应用于公网边界。
保留空间与未分配空间
在构建自己的过滤器时,这一区别很重要。保留地址段由标准固定,很少变化,因此它们的静态表可以多年保持正确。未分配空间则不同,因为注册管理机构会随时间推移分配地址块,去年还是 bogon 的地址,今天可能属于某个真实网络。硬编码未分配地址块的过滤器,历史上曾拦截过新分配地址段的新客户,这就是为什么把保留列表嵌入应用代码更安全,也是为什么关于公网地址归属的问题应交由注册数据而不是 bogon 列表来回答。
检查地址
你可以在 bogon IP 检查器中测试任意地址,它会将地址与已发布的 IPv4 和 IPv6 保留地址段进行比对,并连同参考表显示匹配的地址块。在 API 中,IP 查询响应包含 bogon 和 bogon_type,因此日志管道无需任何自定义地址段表就能标记这些地址。完整响应见 API 文档。
有一个限制值得了解。该检查器使用的是基于标准的保留列表,而不是对实际路由情况的实时视图。位于保留地址段之外的地址,并不保证已分配或可达。要了解某个公网地址是否真有所有者,请使用 IP whois 查询查看注册记录,或使用 ASN 查询查看宣告它的网络。
实际处理
- 尽早规范化并验证地址;在期望公网客户端 IP 的字段中拒绝 bogon。
- 通过防火墙规则在公网边缘丢弃 bogon 源地址,但不要将其应用于内部流量。
- 当 bogon 意外出现时,首先检查代理和负载均衡器配置,因为配置错误比攻击更常见。
- 请记住 bogon 地址没有地理定位信息,因此对它们跳过地理定位和信誉查询,节省请求。