Linux以外のIPSecスタックとの相互接続[前編]
− LinuxでIPSecを使おう −
宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/4/20
本番はこれから
FreeS/WANによるIPSecの導入と運用で、Linux用のIPSecスタックであるFreeS/WANの設定と接続について紹介しました。ただ、「FreeS/WANの間だけで接続ができても……」という方もいると思います。また、IPSec自体が「オープンな規格である」ということもあり、FreeS/WAN以外の実装ともつないでみたいという方もいるでしょう。
今回はFreeS/WANの環境を基に、よく使われる(もしくは使いやすいと思われる)IPSecスタックとの相互接続についてお話しします。実験的要素が多分に強い内容ではありますが、相互接続を念頭に置いて考えている方も多いと思いますので、ここで述べておく意味はあるでしょう。
「以前の記事の内容では物足りない」と思われた方もいると思いますが、実は今回の記事につなぐための前振りだったと思っていただければ幸いです。
IPSecスタックの種類
IPSecと一口にいっても、ハード/ソフトウェア、有償/無償配布、オープンソースなどなど、さまざまな形で実装、配布されています。無償配布あるいはOSに含まれているものをざっと挙げるだけでも、取りあえず、
- KAME
*BSDのためのIPSecスタック
- pipsec
トンネルデバイスが実装されているOSのための、ユーザーランドで動作するIPSecスタック
*BSDなどで使用可能
- PGPNet
PGP Version 6.5に含まれるIPSecスタック
Windows 98などで使用可能
- Windows 2000/XP
すでにIPSecがOSに実装されている
などがあります。VPN-1などの商用製品に接続するためのクライアントもありますが、ライセンスなどで自社製品以外のものとの接続を認めていないケースがあるため、今回取り上げる対象からは外しました。
本稿は前編/後編という構成にさせていただき、前編ではUNIX系OSのIPSecスタック(KAME)、後編ではWindows系OS上のIPSecスタック(主にWindows 2000)との接続を取り上げます。
KAMEとFreeS/WANの相互接続
「KAME」は、KAME ProjectによるIPv6、IPv4/v6 IPSecスタックの名称であり、*BSD系OSをターゲットに開発されています。
最新のFreeBSDにはKAMEのスナップショットが取り込まれており、提供されているカーネルソースでも、オプションの指定を追加して再構成するだけでIPSecによる通信の準備ができてしまいます。ここでは、IPSecによる通信の準備と事前共有鍵を使用した通信の設定について解説します。
■KAMEの事前準備
今回は、FreeS/WANをインストールしたコンピュータの通信相手として、FreeBSD-4.4Rをインストールしたコンピュータを想定します。
●カーネルの再構築
FreeBSDのカーネルは、デフォルトではIPSecが有効になっていません(注)。従って、カーネルの再構成を実施してIPSec機能を有効にしてやる必要があります。
注:IPv6は有効になっていますが……。 |
以下の作業は、すべてスーパーユーザー権限で実行するので操作には注意が必要です。
OPTIONSの設定
FreeBSDのカーネルコンフィグレーションファイルは、/usr/src/sys/i386/conf下に存在します。GENERICカーネルのコンフィグレーションファイルをIPSECという名前のファイルにコピーして、OPTIONS設定に以下に示す行を追加します(注)。
options IPSEC |
注:すでにカーネルの再構成をしたことがある場合は、そのファイルに対して設定を追加するような形になります。 |
カーネルの再構成とインストール
下記の手順を実施することで、新しいカーネルがインストールされます。
# cd /usr/src/sys/i386/conf |
リブート
までの作業が完了したら、
# shutdown -r now |
として、新しいカーネルでブートします。ブートした後、
# sysctl -a | grep ipsec |
を実行して、それらしい行が出力されればカーネルへのIPSecスタックの組み込みは成功です。筆者の環境での例をリスト1に示します。
# sysctl -a | grep ipsec |
リスト1 このような出力(まったく同一とは限らない)が得られれば、組み込み成功 |
●IKEデーモンの作成
カーネルを再構築すれば、一応IPSecによる接続は可能です。しかし、IPSecの使われ方などを考えると、実用上はIKEによる鍵交換が行える必要があります。FreeS/WANにPLUTOがあるように、KAMEで使用するIKEデーモンの実装として「racoon」と呼ばれるプログラムがあります。このデーモンをインストールしましょう。
racoonのmake
portsやpackagesを使うのが楽でしょう。KAMEプロジェクトのFTPサーバからracoonのソースコードを取得してもいいのですが、若干修正を行わないとmakeできません。(注)。
注:本稿では具体的には述べません。 |
racoonのinstall
make installを実行すると、/usr/local/sbin/racoonという実行ファイルと/usr/local/etc/racoonというディレクトリが作成されます。このディレクトリにはracoonの設定ファイルのサンプルが格納されています。
■事前共有鍵(Pre-Shared Key)を用いた場合
図1のような構成(かなりシンプルです)に置かれたホスト間で暗号化通信を実施する例を考えてみましょう。
図1 KAMEとFreeS/WANの接続環境例 |
まず、FreeS/WAN側はかなり制限のきつい実装になっているため、この制限を考慮した接続条件をKAMEにも適用する必要があります。
- エンドツーエンドの暗号化を行う
- IKE間の鍵交換は、ISAKMP/Oakley Group 2を使用
- 暗号化アルゴリズムはDES3
- 事前共有鍵を設定する
これらを考慮したFreeBSD側(KAME)の設定をリスト2a〜2dに、Linux(FreeS/WAN)側の設定ファイルをリスト3a、3bに示します。
path include "/usr/local/etc/racoon" ; |
リスト2a /usr/local/etc/racoon/racoon.conf |
192.168.1.2 testtestkey |
リスト2b /usr/local/etc/racoon/psk.txt(事前共有鍵を格納) |
# ls -l /usr/local/etc/racoon/racoon.conf |
リスト2c racoon.confとpsk.txtのパーミッション設定 |
spdflush; |
リスト2d /usr/local/etc/racoon/kame.conf |
# basic configuration |
リスト3a /etc/ipsec.conf |
192.168.1.2 192.168.1.50 "testtestkey" |
リスト3b /etc/ipsec.secrets |
FreeBSD側では、racoon以外にセキュリティポリシーデータベース(SPD)の設定が必要なので注意してください。racoonの設定はracoon.conf(リスト2a)とpsk.txt(リスト2b)に、SPDの設定内容はkame.conf(リスト2d)にそれぞれ記述してあります。また、psk.txtには読まれてはならない情報が格納されているので、ファイルのパーミッションに注意してください。
■暗号化通信の開始
ここまでの記述で、暗号化通信を行う準備ができました。実際に通信してみましょう。
●FreeBSD側での操作
FreeBSD側では、SPDの設定およびIKEデーモンの起動という2つの操作が必要です。
- SPDの設定
setkeyコマンドを以下のように実行します。
# setkey -f /usr/local/etc/racoon/kame.conf
- racoonの起動
# /usr/local/sbin/racoon
●Linux側での操作
以下のコマンドラインを実行します(編注)。
# /usr/local/sbin/ipsec setup start |
これで暗号化通信を行うことができます。
編注:FreeS/WANによるIPSecの導入と運用[後編]参照。 |
■実際の通信の様子
ここまできたら、後は実際に通信が暗号化されているかどうか、tcpdumpを使って確認するだけです。筆者の環境ではリスト4a、4bのようになります。
[root@webdav1 /etc]# telnet spica |
リスト4a 実際の通信内容(telnetを使用) |
spica# tcpdump host webdav1 and spica |
リスト4b tcpdumpによるパケットダンプの結果 |
ISAKMPポートで鍵交換が行われた後、暗号化通信が始まっているのが分かります。
1/2
|
|
||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム セキュリティ関連記事 |
連載:習うより慣れろ! iptablesテンプレート集(全4回) 初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう |
|
連載:ゼロから始めるLinuxセキュリティ(全11回) 奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見 |
|
特集:WebDAV時代のセキュリティ対策[前編] WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる |
|
特集:FreeS/WANによるIPSecの導入と運用[前編] LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう |
|
特集:Linux以外のIPSecスタックとの相互接続[前編] 別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる |
|
特集:sshでセキュアネットワーク サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|