IPv6時代の「守りの要」:Egress-Only Internet Gatewayで紐解く、強固なネットワーク境界設計
クラウドネイティブなインフラを設計する際、IPv4の枯渇とNATの限界に辟易したエンジニアにとって、IPv6は福音です。しかし、「グローバルIPが付与される」という特性は、セキュリティ担当者の心臓を凍りつかせる事態でもあります。
特に、プライベートサブネット内のインスタンスから外部APIへ安全に通信させたい場合、安易なインターネットゲートウェイ(IGW)の利用は自殺行為です。ここで真価を発揮するのが、AWSなどで提供される Egress-Only Internet Gateway (EIGW) です。今回は、このEIGWを用いたIPv6通信のアーキテクチャを、パケットレベルの挙動からチューニングの勘所まで掘り下げて解説します。
—
1. EIGWの物理レイヤーとステートフル・インスペクションの真実
まず、EIGWが「なぜ安全なのか」という根本を理解しましょう。EIGWは、IPv4のNATゲートウェイと異なり、IPマスカレード(NAPT)を行いません。IPv6は本来、エンドツーエンドの通信が原則であり、EIGWの役割は「ルーティングの制御」と「ステートフルなフィルタリング」に集約されます。
EIGWを通過するパケットは、AWSのインフラ層で接続追跡テーブル(Connection Tracking)によって監視されます。
- アウトバウンド(送信): インスタンスから外部へのSYNパケットは通過を許可されます。
- インバウンド(受信): 外部からのSYNパケットは即座にドロップされます。ただし、確立されたセッションの戻りパケット(ACK/FIN等)のみが通過を許されます。
この挙動は、Linuxの iptables や nftables でいうところの conntrack モジュールがカーネル外のハードウェア・インフラ層で展開されているようなものです。このため、インスタンス側に余計な負荷をかけずに、強固なセキュリティ境界を確立できます。
—
2. ネットワークパフォーマンスを極限まで引き出すチューニング
EIGWを経由する通信であっても、TCPのパフォーマンスを左右するのは最終的にインスタンス側のカーネルパラメータです。特にレイテンシが厳しい環境では、以下のチューニングが決定打となります。
TCPバッファとウィンドウサイズの最適化
デフォルトのTCPバッファサイズでは、帯域幅遅延積(BDP: Bandwidth-Delay Product)をカバーできず、高スループット通信時にスループットが頭打ちになります。
# /etc/sysctl.conf に以下の設定を投入し、高レイテンシ・大容量通信に備える
# TCP受信ウィンドウの自動チューニング最大値を16MBに拡大
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# IPv6における断片化を防ぎ、MTUのオーバーヘッドを抑える(通常は1280以上だが1500を推奨)
net.ipv6.conf.all.mtu = 1500
# 接続確立後の再送制御を強化
net.ipv4.tcp_fastopen = 3 # TCP Fast Openを有効化し、3ウェイハンドシェイクのRTTを削減
TLSハンドシェイクの最適化
EIGWを通る通信の多くはHTTPSです。TLS 1.3への移行は絶対条件です。TLS 1.3ではハンドシェイクが1ラウンドトリップに短縮されており、EIGWのレイテンシと相まって、接続確立までの時間が劇的に改善されます。
—
3. セキュリティ設計における重大な脆弱性の回避策
IPv6環境における最大の脅威は、「意図しないグローバル到達性」です。どれほどEIGWでインバウンドをブロックしても、セキュリティグループ(SG)の設定が甘ければ、同一VPC内の他のインスタンスから直接到達されるリスクがあります。
セキュリティグループによる「防御の多重化」
EIGWのルーティング設定と併せて、以下のSG設計を徹底してください。
- Egressルール: 必要なAPIエンドポイントのプレフィックスリストのみに限定する。
- Ingressルール: IPv6の全トラフィックを明示的に拒否、あるいは特定の管理ホストからのみ許可する(
::/0は論外です)。
IPv6プライバシー拡張(Privacy Extensions)の無効化
サーバー用途のインスタンスにおいて、RFC 4941 で定義されるプライバシー拡張は逆効果です。一時的なインターフェースIDが生成されると、ログ追跡が困難になり、セキュリティ監査のノイズになります。
# /etc/sysctl.conf
# 一時的なアドレス生成を無効化し、固定のグローバルIPv6アドレスでの運用を徹底
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
—
4. 最後に:現場が求める「見えないネットワーク」を目指して
EIGWの設計において重要なのは、「通信できれば良い」という甘い考えを捨て、「パケットがどこを通り、どのステートを持ち、どのように破棄されるか」を可視化し続けることです。
VPCフローログを活用し、EIGWを経由するトラフィックの REJECT パターンを監視してください。もし意図しないポートへの接続試行が記録されているなら、それは外部からのポートスキャンではなく、内部のどこかで設定ミスが起きているサインかもしれません。
技術は常に進化しますが、プロトコルの本質と、ネットワークの「境界」に対する敬意を忘れない限り、私たちはどんなクラウド環境でも安全にシステムを運用できるはずです。次回の記事では、このEIGWを跨ぐ環境での ebpf を活用したパケットインスペクションについて掘り下げてみたいと思います。
それでは、良いSREライフを。
コメント