新装開店(?)と呼ぶには遅きに失しているが、新しいコンテンツ最初の企画は、比較的簡単に外部から自ネットワークにアクセス出来るVertual Private Network(VPN)について、ぼちぼち語っていこうと思う。
VPNとは“仮想プライベートネットワーク”と訳されるとおり、自分のローカルネットワークをインターネット上に“仮想的に構築”することが可能なインフラストラクチャの形態である。これだけだとなんだか分からないので、以下に要件を示す。
この機能を利用すると、例えば外出先で(インターネットに接続できる環境があれば)自分のノートパソコンから日頃利用しているイントラネット内のリソースを使用できたり、あるいは保守メンテナンスが行えたりするので、便利だ。
カプセル化はインターネットを透過的に利用するための技術だし、暗号化は悪意あるトラフィック盗聴や改変から通信を守るための技術である。
VPNは本来高度な技術なので、運用にはそれなりの資材や知識が必要だった。しかし現在では、Windowsの標準機能として利用することも可能なのだ。ただしどのWindowsでも可能なわけではないし、VPNの形態もいくつか存在する。
VPNを行うにはその他、通信機器や専用ソフトウェアが必要だ。これは以下の通りである。
通常は上記機器類は専用品のため、とても高価で一般には手に入れにくい。だがWindows 2000などは標準でルーティング機能、VPNサーバやクライアント機能をもっており、安価にVPN環境を構築、管理することができる。セキュリティもきちんとした知識と運用力があれば、そんなに問題は起こらないと思われる。
WindowsではVPNサーバを構築するにはNT 4.0 Server/2000 Server/2000 Professionalが必要だ。ただしWindows 2000 Professionalについては、端末同士のVPN接続を1回線しか確立できないなどの制限事項があるので注意が必要だ。クライアントに関してはWindows 95より後のものであれば、接続は可能だ。ここではSOHO環境を想定し、安価さと安全性を兼ねたWindows 2000 Server+Windows 2000 Professinalで実際にシステムを作ってみることにする。
VPNを使うためには専用のプロトコルを用いる。Windows 2000/XPではPoint to Point Tunneling Protocol(PPTP)とLayer 2 Tunneling Protocol(L2TP)がサポートされているが、このプロトコルはそのしくみが異なる。差異を比べながら簡単に解説する。
VPNには主に2つの機能、(1)カプセル化、(2)データの暗号化、があって初めて実現される機能だが、PPTPとL2TPではそのしくみは異なる。
PPTPのパケット構造は基本的に以下のようになっている。
このとき、暗号化を行う範囲はPPPペイロードに対してのみ有効になるので、パケットを解析されるとローカル宛先アドレスなどは解読される可能性がある。(しかし通常ローカルアドレスはインターネット間のルータを通過できないので、攻撃対象として問題にはならないだろう。)
と、上記に書いたがこれは訂正するべきであろう。もし、IPパケットの経路を詐称したりして、不正なパケットの通過を許してしまった場合、ローカルアドレスが攻撃者に読みとられていると重大な被害を受ける可能性があるからである。そういう意味では、内部情報はなるべく暗号化されてしかるべきである。ただし、FTPなどのプロトコルではアプリケーションレベルでデータをやりとりするものもあり、この場合はPPPダイアフラム内にデータが置かれるので、この場合は暗号化が有効となる。
一方、L2TPは以下の方法でパケットを生成する。
L2TPではUDPメッセージ全体が暗号化されており、攻撃者がつけいる部分は最初から少ないものになっている。
ちなみに上記のようにパケットをカプセル化することで、IP上ある配送先に通信を確立した状態で別の配送先と通信するしくみを"トンネリング"と呼ぶ。実際はこれ(データの転送)に先立ち、外部接続(グローバルアドレス上のVPNサーバとクライアント)と内部接続(ローカルアドレス上のVPNサーバとローカルアドレスをVPNサーバに割り当てられたクライアント)において接続を確立するやりとりが存在する。
接続時の認証方法であるが、これもL2TPの方が強固な内容となっている。PPTPは単純にユーザアカウントによる認証方法のみのサポートだが、L2TPではユーザ認証に加えてコンピュータ認証および共有鍵による認証形式をサポートしている。
コンピュータ認証とはサーバから認証配布されたセキュリティ証明書を利用した認証方法であり、共通鍵とはサーバとクライアント双方に共通の文字列を設定し、これから作成した鍵を認証に用いる形式である。
コンピュータ認証は、X509認証を利用した強固なものであり、一般的に推奨できる(マイクロソフトも推奨)にたいして、共有鍵方式は符丁となる"文字列"を元に双方で鍵を生成するため、この文字列の管理において(漏洩した場合、簡単に無効化される)やや遜色があるとされている。
PPTPの暗号プロトコルにはMPPE(Micorsoft Point-to-Point Encryption)という暗号強度56 or 128 bitのプロトコルが利用される。これに対してL2TPではIPSecに実装されたDES(Data Encryption Standard)という56 bitなプロトコルが用いられる。しかしDESでは暗号強度に問題があるため、改良された3DESを用いるのが一般的である。これは168 bitの暗号強度によって高い暗号レベルを持っている。
Windows 2000ではGold(素の)バージョンでは56 bit MPPEまたはDESだが、高度暗号化パックを導入するかサービスパック2以降を導入すると128 bit MPPEおよび3DESをサポートするようになる。
PPTPではTCP 1723がポートとして割り当てられている。またGREを利用しているので、そのプロトコル番号47を利用する。L2TPでは、IKEとしてUDP 500と、UDP 1701が割り当てられている。ただし、L2TPでは、UDPパケットは暗号化されているためVPNサーバに到達前にファイアウォールを通過する場合、IPSec ESPのプロトコル番号50を通過させるようにする。
VPNの構成方法には以下の2通りが存在する。ネットワーク構成によって選択する。
VPNサーバはルータ機能を完全に備えているので、ネットワーク・フロントラインまたはDMZ(非武装地帯)のどちらにでも配置が可能だ。そのため、事前の設計が必要なケースが普通である。
なおWindows RRASはルータとして完全な機能がありパケットフィルタリングファイアウォールになることは可能なので、ファイアウォールがない場合もゲートウェイサーバとして、そこそこのセキュリティを保つことが可能である。
次回は、実際の設定方法を記載する予定です。なるべく早くあげるつもりです...。
Modified on 2003/01/21