IPsecとは ― AH・ESP・IKEとVPNの仕組み
IPsecとは、
IPsecとは、IPパケットそのものを暗号化・認証する仕組み
IPsecは、IPパケットを暗号化し、改ざんされていないかを確かめる規格群です。インターネットVPNで拠点同士をつなぐときに、広く使われています。
IPsecは、ネットワーク層でIPパケットを守ります。そのため、上で動くWebやメールなどのアプリは、IPsecを意識せずに守られます。全体の設計はRFC 4301に書かれています。
以下では、ESPとAHの違い、鍵を取り決めるIKEの流れ、NAPTを越える仕組みを説明します。
IPsecを構成するプロトコル:ESP・AH・IKE
IPsecは、1つのプロトコルではありません。データを守るプロトコルと、その準備をするプロトコルの組み合わせです。データを守るのは、ESPとAHの2つです。準備をするのが、IKEです。
| プロトコル | 役割 | 使う |
|---|---|---|
| ESP | 暗号化と改ざん検知 | IPのプロトコル番号50 |
| AH | 改ざん検知だけ | IPのプロトコル番号51 |
| IKE | 相手の認証と鍵の取り決め | UDP 500番(NATを越えるときは4500番) |
ESPはEncapsulating Security Payload、AHはAuthentication Headerの略です。IKEはInternet Key Exchangeの略で、名前のとおり鍵を交換します。データを送る前に、IKEが相手を確かめ、鍵を決めておきます。
ESPとAHにはポート番号がない
表の番号のうち、ESPとAHの番号はポート番号ではありません。IPヘッダには、次に続くものが何かを示す欄があります。この欄の値をプロトコル番号と呼びます。
| IPヘッダの | 次に | ポート番号 |
|---|---|---|
| 6 | TCP | ある |
| 17 | UDP | ある |
| 50 | ESP | ない |
| 51 | AH | ない |
TCPやUDPは、IPヘッダのすぐ後ろに続き、自分のヘッダにポート番号を持ちます。ESPとAHも、IPヘッダのすぐ後ろに続きます。ただし、TCPやUDPを使わないので、ポート番号の欄がありません。ポート番号そのものの意味は、ポート番号の記事で説明しています。
一方、IKEはUDPの上で動くので、ポート番号を持ちます。この違いが、後で見るNAPTとの相性に関わってきます。
AHとESPの違い:暗号化するかどうか
AHとESPは、どちらも受け取った側で、パケットが書き換えられていないかを確かめられます。送る側は、鍵を使ってパケットから検査用の値を計算します。その値をパケットに付けて送ります。受け取った側が同じ計算をして値が合わなければ、途中で書き換えられたと分かります。
違いは、暗号化の有無です。ESPは暗号化と改ざん検知の両方を行えますが、AHは改ざん検知だけを行います。AHで守ったパケットは、経路上から中身を読めます。
もう1つの違いは、守る範囲です。AHは、IPヘッダのうち途中で変わらない欄まで改ざん検知の対象にします。ESPは、自分より前にあるIPヘッダを対象にしません。
実際に使われるのは、ほとんどがESPです。RFC 4301は、IPsecの実装にESPを必須とし、AHは任意としています。ESPだけで、必要な守りをほぼ満たせるためです。
トンネルモードとトランスポートモード
ESPとAHには、パケットの包み方が2通りあります。元のIPパケットをヘッダごと保護して、新しいIPヘッダを付ける包み方をトンネルモードと呼びます。元のIPヘッダを残し、その後ろだけを保護する包み方は、トランスポートモードです。
トンネルモードの新しいIPヘッダには、VPNゲートウェイ同士のアドレスが入ります。VPNの記事の図に出てくる外側ヘッダが、これにあたります。拠点間VPNのように、ゲートウェイが通信の端になるときは、原則としてトンネルモードを使います。
トランスポートモードは、通信する2台のホストが、直接お互いを守るときに使います。IPヘッダを1枚足さない分、パケットは小さくなります。ただし元のIPヘッダが残るので、通信している2台のアドレスは経路上から見えます。
切り替えて確かめる:どこが暗号化され、どこが守られるか
ESPとAH、2つのモードの組み合わせは4通りです。赤い部分が暗号化される範囲、下の線が改ざん検知の対象になる範囲です。ESPの最後のICVは、受け取った側で照らし合わせる検査用の値です。
- 経路上から見える情報
- 新しいIPヘッダにある、ゲートウェイ同士のアドレスとプロトコル番号50です。ESPヘッダのSPIと通し番号も見えます。
- 家庭用ルータのNAPTを通れるか
- そのままでは通れません。ポート番号が暗号化の中にあるからです。UDP 4500番で包むと通れます。
- 経路上から見える情報
- 元のIPヘッダにある、通信する2台の本当のアドレスが見えます。ポート番号とデータは見えません。
- 家庭用ルータのNAPTを通れるか
- そのままでは通れません。ポート番号が暗号化の中にあるからです。UDP 4500番で包むと通れます。
- 経路上から見える情報
- すべて見えます。AHは暗号化をしないので、元のアドレスもデータの中身も読めます。
- 家庭用ルータのNAPTを通れるか
- 通れません。外側のIPアドレスを書き換えると、改ざんとして検出されます。
- 経路上から見える情報
- すべて見えます。中身は読めますが、書き換えれば受け取った側で分かります。
- 家庭用ルータのNAPTを通れるか
- 通れません。IPアドレスを書き換えると、改ざんとして検出されます。
ESPのトンネルモードでは、元のIPヘッダまで暗号化の中に入ります。経路上から読めるヘッダは、ゲートウェイ同士のアドレスが入った新しいIPヘッダと、ESPヘッダだけです。AHを選ぶと、どちらのモードでも中身はそのまま読めます。
新しいIPヘッダで元のパケットを包む並びは、暗号化をしないGREも同じです。GREとESPのトンネルモードの違いは、GREトンネルの記事の図で比べています。
SA:通信の前に決めておく取り決め
ESPで暗号化するには、両端が同じ暗号方式と同じ鍵を知っている必要があります。こうした取り決めのひとまとまりをSAと呼びます。SAは、Security Associationの略です。
SAは片方向です。拠点Aから拠点Bへの通信と、拠点Bから拠点Aへの通信は、別々のSAで守ります。そのため、ふつうの双方向の通信では、SAを1組2つ作ります。
ゲートウェイは、たくさんのSAを同時に持つことがあります。ESPヘッダには、どのSAで処理するかを示す番号が入っています。この番号をSPIと呼びます。受け取った側は、SPIを見て使う鍵を選びます。
IKEで鍵を取り決める流れ
SAの中身は、手で両端に設定することもできます。ただし鍵を定期的に変えるには、自動で決める仕組みが要ります。この自動の取り決めを行うのがIKEで、今の版はIKEv2です。仕様はRFC 7296です。
IKEv2は、ふつう4つのメッセージで準備を終えます。次の図は、VPNの記事と同じ2つの拠点の例です。
- 1
IKE_SA_INIT:方式を
決め、 鍵の 材料を 送り合う 開始する側が、使える暗号方式の候補を送ります。応答する側は、その中から1つ選んで返します。このとき両端は、Diffie-Hellmanという方法で鍵の材料を送り合います。送り合う値を盗み見られても、第三者には同じ鍵を計算できません。
- 2
IKE_AUTH:相手を
認証し、 データ用の SAを 決める 次のやり取りは、1で計算した鍵で暗号化して送ります。両端は名乗り合い、事前共有鍵や証明書で、本当にその相手かを確かめます。証明書の検証の仕組みは、電子証明書とPKIの記事にあります。同じやり取りの中で、データを運ぶESPのSAも1組決めます。
準備が終わると、データはESPで流れます。この準備のやり取りを守るSAを、IKE SAと呼びます。データ用のSAは、IKEv2ではChild SAと呼びます。
IKEv1のフェーズ1・フェーズ2との対応
参考書や設定の画面では、IKEのフェーズ1・フェーズ2という言葉もよく出ます。これは、古い版のIKEv1で使われていた呼び方です。
| IKEv1 | IKEv2 | |
|---|---|---|
| 鍵交換のための通り道を作る | フェーズ1(メインモードかアグレッシブモード) | IKE_SA_INIT と IKE_AUTH |
| データ用のSAを作る | フェーズ2(クイックモード) | IKE_AUTH の中で最初の1組を作る |
| 今の位置づけ | 古い版。RFC 4306で廃止 | 現在の標準 |
IKEv1では、フェーズ1で作るSAをISAKMP SAと呼んでいました。IKEv2のIKE SAにあたります。フェーズ2で作るIPsec SAは、IKEv2のChild SAにあたります。
NATトラバーサル:NAPTを越える仕組み
自宅のPCから、会社のVPNゲートウェイにIPsecでつなぐ場面を考えます。PCは 192.168.10.25 で、自宅ルータのグローバル側は 198.51.100.5 です。自宅ルータは、NAPTで送信元のアドレスとポート番号を書き換えます。
NAPTは、ポート番号で、どの内部機器の通信かを見分けます。ところがESPのパケットでは、TCPやUDPのヘッダが暗号化の中に入っています。外から見えるポート番号がないので、NAPTは戻りのパケットを振り分けられません。家庭用ルータには、IPsecパススルーという機能でESPを通せる製品もあります。ただし規格ではなく製品ごとの機能で、通せる台数にも制限があることが多いです。
AHは、さらに通しにくくなります。AHは外側のIPアドレスまで改ざん検知の対象にします。NAPTがアドレスを書き換えると、受け取った側では改ざんとして扱われます。
ESPをUDPで包んで通す
そこで、ESPのパケットの前にUDPヘッダを1枚足して送ります。この方法をNATトラバーサルと呼びます。ESPをUDPで包む形式はRFC 3948で決まっていて、ポート番号は4500番です。
NAPTは、足されたUDPヘッダのポート番号を書き換えて通します。受け取ったゲートウェイは、UDPヘッダを外して、ふつうのESPとして処理します。AHはこの方法の対象外です。RFC 3948は、AHの守り方がNATと両立しないことを理由に挙げています。
NATがあるかはIKEが調べる
IKEv2では、最初のIKE_SA_INITで、両端が自分の見ているアドレスとポート番号から計算した値を送り合います。届いた値が手元の計算と合わなければ、途中でNATが書き換えたと分かります。NATを見つけたら、その後のIKEとESPは、どちらもUDPの4500番で送ります。
NAPTの変換表の記録は、通信が途絶えると一定時間で消えます。そのためNATの内側の端末は、データがない間も1バイトだけの小さなUDPパケットを送ります。こうして記録を残しておく仕組みを、NATキープアライブと呼びます。
会社側のファイアウォールでは、IPsecを通すためにUDPの500番と4500番を開けます。NATトラバーサルを使わない相手がいるなら、プロトコル番号50のESPも通します。ルールの考え方は、ファイアウォールの記事を読むと分かります。
IPsec-VPNとSSL-VPNの違い
IPsecを使って作るVPNを、IPsec-VPNと呼びます。よく比べられるSSL-VPNは、HTTPSの記事で説明したTLSで暗号化します。
| IPsec-VPN | SSL-VPN | |
|---|---|---|
| 守る単位 | IPパケット | TLSの接続 |
| 使う番号の例 | ESP(50)、UDP 500・4500 | TCP 443 |
| アプリへの影響 | アプリは意識しない | ブラウザだけで使える製品もある |
| 多い使い方 | 拠点間VPN | リモートアクセスVPN |
IPsec-VPNは、IPパケットそのものを守るので、どのアプリの通信もまとめてトンネルに通せます。拠点のLAN同士を常時つなぐ用途に向いています。その代わり、途中のファイアウォールでUDP 500・4500番などを通す必要があります。AWSのSite-to-Site VPNもIPsecを使います。暗号化しない専用の回線の上に重ねる使い方は、AWS Direct Connectの記事で説明しています。
SSL-VPNの多くは、HTTPSと同じTCPの443番を使います。443番はたいていのネットワークで外向きに開いているので、外出先からでもつながりやすくなります。このため、リモートアクセスVPNで多く使われます。どちらも典型的な使い方で、決まった規則ではありません。
練習問題(全6問)
正解:AHは
AHは、
正解:元の
トンネルモードは、
正解:ESPは
ESPと
正解:NAPTは
NAPTは、
正解:データを
IKEは、
正解:IPsec-VPNは
IPsecは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
