IPsec入門!IPsecを利用したVPNの実現方法とは?

VPNのうち、ネットワーク層にIPを用いる方法には2種類あります。
NTTなどの通信事業者が提供するIP-VPNサービスを利用するIP-VPNと、IPsecを使ってインターネット上に独自にVPNを構築するインターネットVPNです。
補足:前回までの記事で見てきた「SSL-VPN」はトランスポート層にSSLを用いる方法です。目的は同じですが、VPNを実現するレイヤーが異なります。

今回の記事では、IPsecを使ってインターネット上に独自にVPNを構築するインターネットVPNの概要について見ていきます。

IPsecとは?

IPsecは、IPパケット単位での暗号化や認証、データの改ざん検出の機能を提供するプロトコルです。
ネットワーク層のプロトコルであるため、トランスポート層以上にはTCPでもUDPでもHTTPでもFTPでも何でも構いません。ただし、ネットワーク層のプロトコルはIPに限定されるため、ネットワーク層ではIP以外のプロトコルは使えません。

IPsecでの通信の流れ

IPsecでは、通信を行うときに仮想的な通信路であるSA(Secuity Association)を生成し、その中で通信を行います。SAには次の2種類があります。

SAの種類
  • ISAKMP SA(IKE SA)
  • IPsec SA

ISAKAP SA(IKE SA)

ISAKMP SA(Internet Security Association and Key Management Protocol)SAは、制御用のSAです。通信に先立ち、データ通信を安全に行うために暗号化アルゴリズムや暗号鍵などの情報をやり取りします。

IPsec SA

通信データを送るためのSAです。上り用と下り用でそれぞれ別のSAを生成します。さらに、IPアドレスやポート番号、プロトコルが異なると別々のSAを生成します。

下図はIPsec通信のイメージです。

「イニシエータ」は、はじめにIPsec通信を開始する機器のことで、「レスポンダ」は応答を返して通信路を確立する機器のことです。ピア(相手側)がルータの場合は、セキュリティゲートウェイ(SGW)と呼ぶこともあります。

暗号化アルゴリズムや認証方式などは事前にイニシエータ、レスポンダ双方で設定を合わせておくことになります。これらの設定が一致していないと、IPsecを使ったVPNで通信に失敗します。代表的ものを下表に示します。

暗号化アルゴリズム3DES、AESなど
認証方式Kerberos、公開鍵証明書、事前共有鍵など
ハッシュ関数MD5、SHA-1、SHA-256など

これらの整合性確認は、IKEという鍵交換プロトコルによって行われます。

IKE(鍵交換)

IPsecでは、通信データを暗号化するために共通鍵を使用します。共通鍵は通信相手との間だけで秘密になるように管理しなければなりません。その共通鍵を安全に交換するためのプロトコルがIKE(Internet Key Exchange protocol)です。

IKEは二つのフェーズから成り立っています。フェーズ1では、ISAKMP SAを確立し、安全な通信に必要となる情報を交換します。フェーズ2では、IPsec SAを確立し、安全な通信路を生成します。実際のユーザーデータはこのIPsec SA上を流れることになります。

フェーズ1でISAKMP SAを構築するための方法には、次の2種類があります。

メインモード

メインモードという名のとおり、基本的なモードであり、理由がなければこのモードを使用することになります。

通信相手の認証にはIPアドレスを含めて行うので、イニシエータ、レスポンダの両方でIPアドレスが固定である必要があります。IPsec対応ルータ同士の通信でよく使われます。

アグレッシブモード

メインモードに比べて処理が簡略化されているモードです。イニシエータのIPアドレスは固定でなくても通信が可能というのが特徴で、イニシエータがモバイルPC、レスポンダがルータとなるような構成でよく使われます。

結局どちらを使えば良いんですか?

メインモードはIPsec接続先のIPアドレスも認証情報として利用するので、両側で固定IPアドレスを持たないといけないんだ。対して、アグレッシブモードはIPアドレスを認証情報に含めないので動的IPアドレスでも認証できる。
固定IPアドレスを割り当てるには費用が掛かるのでアグレッシブモードを選ぶことでコスト面での利点があるんだよ。

じゃあ、アグレッシブモードを選べば良いですね?

そうとも言い切れないよ。メインモードの方がセキュリティの面では軍配が上がるんだ。なぜなら、認証情報であるIPアドレスは偽装が難しいからね。

でも、IPスプーフィングという発信元のIPアドレスを偽装する攻撃があったような…。

そのとおり!確かにIPアドレスを偽装することはできる。ただ、TCPによる通信の場合、3ウェイ・ハンドシェイクでコネクションを確立する必要があり、単純に偽装パケットを一つ送り込むだけではコネクションを乗っ取るような攻撃として成立しないんだ。

なるほど、ISAKMP SAのコネクションを確立するにも事前共有鍵なども使って複数の要素でお互いを認証するから「IPアドレスという要素」を含めた方がより強固になるということですね!

IPsec通信で使用するセキュリティプロトコル

IPsecには、ESPとAHの2種類のセキュリティプロトコルが存在します。ESP(Encapsulating Security Payload)は、暗号化と認証、改ざん検出の機能を持ちます。一方、AH(Authentication Header)は、認証と改ざん検出の機能はありますが、暗号化の機能はありません。

Aさん

ん?なぜAHは暗号化しないのですか?

AHは、国民による暗号化通信を禁止している国を想定したプロトコルだからだよ。この辺のことはここではあまり深く気にしないで。日本ではESPを使うことがほとんどで、AHを使うことはまずないと思って良いよ。

通信モードの種類

IPsec SAで通信経路を確立し、実際の通信を行うときの通信モードには、トランスポートモードとトンネルモードの2つがあります。

トランスポートモード

トランスポートモードは、端末間でのIPsec通信です。元のパケットのデータ部分だけを暗号化し、IPヘッダは暗号化しません。

トンネルモード

トンネルモードは、VPN装置間でのIPsec通信です。元のパケットのIPヘッダごと暗号化します。

Aさん

トランスポートモードではIPヘッダを暗号化しないのに、なんでトンネルモードはIPヘッダを含めて暗号化するんですか?

トンネルモードは主に拠点ごとのLAN(LAN-LAN間)を繋げることを目的として使われるんだ。LAN内のPCはプライベートIPアドレスが割り当てられるけど、プライベートIPアドレスではインターネットを超えての通信はできないよね。これはつまり、トランスポートモードでは、クライアントPCにグローバルIPアドレスが付与されている場合でしか使用できないということなんだ。

上記2人の会話のとおり、トランスポートモードは端末間でIPsec通信を行うのに対し、トンネルモードはVPN装置間でIPsec通信を行います。主流はトンネルモードで、こちらを使うことがほとんどです。なぜなら、LANとインターネットの境界にあるルータ(VPN装置)にIPsecの設定をすれば、LAN内のPCに対して個別にIPsecの設定をする必要がないためです。

暗号化するのは誰?

Aさん

IPsecには、トランスポートモードとトンネルモードの2つの種類があるということでしたが、違いがよくわかりません。

両者の違いは「暗号化するのが誰なのか」を考えるとわかりやすいよ。

トンネルモード
  • トンネルモードは、IPsecの設定をIPsec対応ルータに対して行う。
  • ルータは、クライアントPCから受け取ったパケットを暗号化して、相手側のルータに送り、受け取った相手側ルータは復号化して宛先に送信する。
トランスポートモード
  • トランスポートモードは、IPsecの設定をPCに行う。
  • PC-PC間の全ての区間で通信を暗号化する目的で使用する。IPsecに対応したPCが必要。

IPsecまとめ

ここまででいろいろな仕組みや用語がでてきましたが、ここで、IPsec通信の流れをまとめます。
IPsecの通信は大きく分けて3つに分けられます。IKEが2つ(フェーズ1とフェーズ2)、実際の暗号化通信が1つで合計3つです。

IKEを使った鍵交換

まず、イニシエータとレスポンダの間で、お互いを認証し、暗号化方式を決め(例えば、3DESやAES)、通信データを暗号化する際に使用する共通鍵を交換します。これらの作業はフェーズ1、フェーズ2の二つのフェーズからなります。

フェーズ1でISAKMP SA(制御用のSA)を作成します。このSAはフェーズ2で利用します。

フェーズ2でIPsec SA(通信用のSA)を作成します。以降はこのSAを使用してIPsec通信が行われます。

ESPプロトコルを使ったIPsec通信

IKE(鍵交換)のフェーズ2で決めた暗号化アルゴリズムや認証方式を用いて、作成した共通鍵(暗号鍵)を使用してIPsec SAにてIPsec通信を行います。

何となくIPsecについてのイメージがついた気がするけど、まだあんまり自信がないかも。そもそも暗号化アルゴリズムとか認証方式とか〇〇モードとかなんでこんなに複雑なんですか?

確かに、複雑になってしまっているところはあるね。これは、どんな構成でも取り入れられるように、自由度を上げた結果なんだ。

IPsecは、安全なデータ通信を実現するための枠組みが決まっているだけで、どこでどんなセキュリティ機能を追加し、暗号化アルゴリズムやハッシュ関数、認証プロトコルは何にするかは利用者が自由に選べるというのが特徴と言えます。