- IPv4がNATを基本的に使用するため、より安全だという主張は、セキュリティとアドレス変換の混同に由来する
- NAT(Network Address Translation) はセキュリティ機能ではなく、IPv4アドレス不足を解決するためのアドレス節約メカニズムである
- NATの動作はポートマッピングを基盤として複数のデバイスが1つのグローバルIPを共有するようにすることにすぎない
- 実際に外部トラフィックを遮断する役割はNATではなく、ステートフルファイアウォール(stateful firewall) が担う
- IPv6環境でも基本的にファイアウォールが未認可トラフィックを遮断するため、NATがないことがセキュリティ低下を意味するわけではない
NATとセキュリティの混同
- IPv4がNATを使うためより安全だという主張は、誤った認識である
- NATはセキュリティ機能ではなく、アドレス節約(address conservation) のための技術である
- IPv6でもNATは使用できるが、それがセキュリティを強化するわけではない
- NATは内部ネットワークの複数デバイスが1つのグローバルIPアドレスを共有できるようにする
- パケットの宛先ポートを基に宛先IPを書き換え(rewrite) してルーティングを行う
- ネットワーク管理者が設定したポートマッピング(port mapping) またはポートフォワーディング(port forwarding) ルールに従って動作する
NATの実際の動作方式
- NAT環境では、外部から入ってくるトラフィックが想定外の宛先ポートを持つ場合、内部デバイスには転送されない
- このようなトラフィックはグローバルIPを持つデバイス側にとどまり、内部ネットワークへはルーティングされない
- このためNATが外部アクセスを遮断しているように見えるが、これは副次的な結果にすぎず、セキュリティ設計上の目的ではない
ファイアウォールの役割
- NATが提供すると誤解されがちなセキュリティ効果は、実際にはステートフルファイアウォール(stateful firewall) に由来する
- ほとんどの現代的なルーターは、NATの有無に関係なくデフォルトでインバウンドトラフィックを遮断するファイアウォールポリシーを含んでいる
- ファイアウォールはパケットを書き換えたりルーティングしたりする前に、想定外の宛先トラフィックを破棄(drop) する
- 例としてUniFiルーターのデフォルトIPv6ファイアウォールルールは次のとおり
- Established/Relatedトラフィックを許可(アウトバウンドへの応答トラフィック)
- Invalidトラフィックを遮断
- そのほかすべてのトラフィックを遮断
IPv6環境におけるセキュリティ
- IPv6ネットワークでもデフォルトのファイアウォールルールが未認可のインバウンドトラフィックを遮断する
- 外部からIPv6デバイスへの未要求トラフィックを許可するには、明示的にファイアウォールルールを追加する必要がある
結論
- IPv6がNATを使わないという理由でセキュリティが弱くなるという主張には根拠がない
- 実際のセキュリティはNATではなく、ファイアウォールポリシーとトラフィック制御ルールによって決まる
- IPv6環境でも適切なファイアウォール設定により、デフォルト拒否(default-deny) のセキュリティ戦略を維持できる
1件のコメント
Hacker News の意見
議論に参加する前に、RFC 4787 のセクション 5 を確認することを勧める
NAT はファイアウォールではないにもかかわらずトラフィックをフィルタリングし、その結果として一定レベルのセキュリティ機能を提供する
現実には NAT は単なるアドレス変換を超えて発展してきており、IPv6 が NAT を使わなくてもファイアウォールで同じフィルタリングを実装できる
Linux netfilter は NAT とファイアウォールの両方を実装しており、
natテーブルの DNAT/SNAT ルールは NAT、filterテーブルの REJECT/DROP ルールはファイアウォールの役割を果たすNAT ルールだけが適用されている場合、既存の接続に属さないトラフィックもそのまま通過させる
NAT が外向きの接続を作る際に状態テーブルを生成し、それに対応するインバウンドパケットを許可する過程を扱っている
つまり、この文書でいう “filtering” は未要求のインバウンド接続を意味しない
IPv6 も IPv4 と同程度に安全にできるが、設定次第で変わる
システムやアプリケーションのエンジニアが問題全体を理解せず、NAT と境界ファイアウォールに依存するのは悪いセキュリティ習慣
特に実装実態とかけ離れるほど、RFC の信頼性は下がる
米国のモバイルネットワークでは、NAT なしでも IPv6 アドレスを使っている
たとえば T-Mobile は 464XLAT で IPv4 を IPv6 上にトンネリングしている
これは NAT なしでも大規模にステートフルファイアウォールを運用できることを示している
Termux と netcat でテストしたところ、IPv4 は CGNAT の背後だが IPv6 は直接接続できた
ネットワーク容量が足りないなら、それを解決すべき
IPv6 が普及すれば、人々は直接通信するのが当たり前になるはず
ネットワークエンジニアとして最初に学んだのは、NAT とセキュリティの関係だった
IPv4 のプライベートアドレス (192.168.0.1) は外部から到達しにくいが、IPv6 のグローバルアドレスはデバイス情報を露出させる可能性がある
IPv6 には Prefix Translation のような代替手段があり、NAT の利点を一部維持しつつ透過的なアクセスを可能にする
どちらも内部アドレス同士、あるいは外部アドレス同士で揃えて比較すべき
CGNAT 環境ではインバウンド接続が不可能なので、IPv6 でも同じ形で制限できる
NAT66 でプレフィックスを隠せるが、実質的なセキュリティ上の利点は大きくない
多くのハッカーは NAT とファイアウォールの違いを混同している
NAT はセキュリティのためのものではなく、セキュリティはファイアウォールが提供する
NAT は名前空間化、ファイアウォールはポリシーベースのセキュリティ
名前空間化それ自体も、攻撃者にリソースの「名前すら分からなくさせる」強力なセキュリティ特性
IPv6 ファイアウォールは 1 行の誤ったルールで全世界に公開されうる
ファイアウォールがなくても NAT だけで内部リソースを保護できる
NAT は家庭用ネットワークの攻撃面を 1 台のルーターにまで縮小する
一方でファイアウォールはデフォルト設定が異なる場合があり、その結果 IPv6 が一般ユーザーにはセキュリティ後退に感じられる
UPnP が NAT のセキュリティを壊すと主張するのは、PCP がファイアウォールを壊すと言うのと同じ
NAT のデフォルト拒否特性が IPv4 セキュリティの利点だという主張について
IPv6 のデフォルト拒否ルールも同じセキュリティ水準を提供するので、構造的なセキュリティ差はない
IPv4 NAT と IPv6 のデフォルト拒否ルールは同じ不変条件を維持する
どちらも設定を誤れば同様に脆弱になりうる
NAT があるから大丈夫だと油断し、IPv6 ファイアウォール未設定のせいで SBC がハッキングされた経験がある
原因は NAT ではなく IPv6 の設定ミスだった
NAT もセキュリティ問題を引き起こす
リフレクション攻撃や、アドレスとエンドポイントの分離による追跡困難が生じる
以前 AOL が少数の egress アドレスを共有していたため、一部ユーザーのブロックが難しかった事例がある
しかし時間が経つにつれて、NAT はセキュリティ信仰(cargo cult) のように扱われるようになった
ISP やルーター設定によって NAT の効果は変わる
NAT は意図されたセキュリティ機能ではないが、副次的なセキュリティ効果をもたらす
IPv6 では各デバイスが直接アドレスを受け取るなら、デフォルト拒否ファイアウォールが必要
UPnP 仕様リンク
NAT がセキュリティの根拠だと主張する人はネットワークをよく分かっていない、という意見に対して
当時、プライバシーアドレスの蓄積問題で SIP サーバーが失敗した事例を共有している
関連する議論は Reddit VOIP スレッド でも依然として有効
NAT がインバウンドトラフィックをドロップしないという主張について
NAT は単にアドレス変換を行うだけで、パケットをドロップしない
このフィードバックを反映して本文を修正したとのこと