什麼是 Bogon IP 位址及其重要性
Bogon IP 位址是指來自私有、保留或未配發空間的位址,不應作為流量來源出現在公開網際網路上。這個名稱源自「bogus」(偽造的),相關範圍由 IANA 及一組 RFC 所訂定,因此檢查某個位址是否為 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:迴路(loopback)。169.254.0.0/16:鏈路本地(link-local),在 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:多播(multicast)。240.0.0.0/4:保留供未來使用,另加上有限廣播位址255.255.255.255。
在 IPv6 方面,對應的範圍包括 ::/128(未指定)、::1/128(迴路)、fc00::/7(唯一本地位址)、fe80::/10(鏈路本地)、ff00::/8(多播)以及 2001:db8::/32(文件用)。IPv4 映射位址(例如 ::ffff:0:0/96)與 NAT64 前綴 64:ff9b::/96 也值得注意,因為它們是轉換機制,同樣不應作為用戶端位址出現。一些較舊的文章也會列出 192.88.99.0/24(6to4 中繼 anycast),該範圍已被棄用。
為何日誌中的 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 位址沒有地理定位,因此對它們略過地理定位與信譽查詢,可省下請求。