← ブログに戻る

ボゴンIPアドレスとは何か、なぜ重要か

ボゴンIPアドレスとは何か、なぜ重要か

ボゴンIPアドレスとは、プライベート、予約済み、または未割り当ての空間にあるアドレスで、公開インターネット上でトラフィックの送信元として現れるべきではないものです。名前は「bogus(偽の)」に由来し、対象となる範囲はIANAと一連のRFCによって定められているため、アドレスがボゴンかどうかの確認は、推測ではなく、公開された標準ベースのリストに対する検索になります。

主なボゴン範囲

区別すべきグループが2つあります。予約済みの特殊用途の範囲は、標準によって定義されており、公開ルーティングされることはありません。未割り当ての空間は「フルボゴン」と呼ばれることもあり、どのレジストリもまだ割り当てていないアドレス空間です。以下の予約済みの範囲は、最もよく遭遇するものです。

  • 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リレーのエニーキャスト)も挙げているものがあります。

ログにボゴンがあると問題になる理由

公開インターネットを経由して届いたリクエストのクライアントとして、ボゴンが現れる場合、いくつかの可能性のどれかが当てはまり、必ずしも悪意があるとは限りません。原因が配管にあることはよくあります。リバースプロキシやロードバランサーが実際のクライアントアドレスを渡さないため、アプリケーションにはプロキシのプライベートアドレスが見えている、X-Forwarded-For のエントリが誤った位置から取られている、あるいはNATの設定によって内部アドレスが公開フィールドに漏れている、といったものです。これらは設定のバグで、レート制限、ジオロケーション、不正利用の報告を壊すため、修正する価値があります。

もう一つの原因は意図的なものです。送信元アドレスはパケットやヘッダーで偽造でき、攻撃者は、なりすましによるフラッドやフィルタリングの探りのために、ボゴンの送信元を使います。正当なトラフィックはこれらの範囲から発信され得ないため、上流の運用者はネットワークの境界でそれらをフィルタリングしており(BCP 38のイングレスフィルタリングの考え方)、自社のファイアウォールも、公開インターフェースに届くボゴンの送信元を破棄すべきです。ただし、ニュアンスに注意してください。ネットワーク内部ではプライベートアドレスは普通のものなので、このルールは公開との境界でのみ適用します。

予約済み空間と未割り当て空間

独自のフィルターを構築するときには、この区別が重要です。予約済みの範囲は標準によって固定されており、変更されることはまれなので、静的なテーブルは何年も正しいままです。未割り当ての空間は異なります。レジストリが時間をかけてブロックを割り当てていくため、昨年ボゴンだったアドレスが、今日は実在のネットワークに属していることがあるからです。未割り当てのブロックをハードコードしたフィルターは、過去に、新たに割り当てられた範囲の新規顧客をブロックしてしまったことがあります。予約済みのリストがアプリケーションコードに組み込むうえでより安全なのも、公開アドレスの所有に関する疑問がボゴンのリストではなくレジストリのデータに属するのも、そのためです。

アドレスの確認

任意のアドレスをボゴンIPチェッカーでテストできます。公開されているIPv4とIPv6の予約済み範囲と比較し、一致するブロックを参照テーブルとともに表示します。APIでは、IP検索のレスポンスに bogon と bogon_type が含まれるため、ログのパイプラインは、独自の範囲テーブルなしでこれらのアドレスにフラグを立てられます。レスポンスの全体はAPIドキュメントに一覧されています。

知っておくべき制限が1つあります。チェッカーが使うのは、実際にルーティングされているものをライブで見たものではなく、標準ベースの予約済みリストです。予約済みの範囲に含まれないアドレスが、割り当て済みである、あるいは到達可能であるとは保証されません。公開アドレスに実際に所有者がいるかどうかを調べるには、レジストリの記録を見るIP whois検索か、そのアドレスを広告しているネットワークを確認するASN検索を使ってください。

実践的な対処

  • アドレスは早い段階で正規化して検証し、公開クライアントIPを期待するフィールドではボゴンを拒否します。
  • 公開の境界ではファイアウォールのルールでボゴンの送信元を破棄しますが、内部のトラフィックには適用しないでください。
  • 予期せずボゴンが現れたときは、攻撃よりも設定ミスのほうが一般的なので、まずプロキシとロードバランサーの設定を確認します。
  • ボゴンアドレスにはジオロケーションがないことを覚えておき、これらにはジオロケーションとレピュテーションの検索をスキップして、リクエストを節約します。

率直な回答

プライベート、予約済み、または未割り当ての空間(10.0.0.0/8や192.168.0.0/16など)にあるアドレスで、公開インターネット上で送信元アドレスとして現れるべきではないものです。
もっとも多い原因は、プロキシやロードバランサーが実際のクライアントアドレスを転送していないといった設定の問題です。もう一つの主な原因は、なりすましや探りのトラフィックにおける偽造された送信元アドレスです。
アドレスを ipto のボゴンIPチェッカーに貼り付けるか、ipto のIP検索APIのレスポンスにある bogon と bogon_type のフィールドを読みます。どちらも、公開されているIPv4とIPv6の予約済み範囲とアドレスを比較します。
← ブログに戻る