Linux以外のIPSecスタックとの相互接続[中編]
− LinuxでIPSecを使おう −
宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/5/11
X.509形式の証明書を使ったKAMEとの接続
前編では、FreeS/WANとKAMEの接続に事前共有鍵を用いる方法を紹介しましたが、KAME側でX.509証明書を使用してFreeS/WANと接続することも可能です。やり方はいくつかありますが、今回は最も失敗が少ないと思われる方法を紹介します(編注)。なお、今回はPLUTOに対する機能拡張を実施する関係上、FreeS/WANのバージョンは1.96を使用します。
編注:本来は、後編としてWindowsとLinuxの接続方法を解説する予定でしたが、前編とのつながりを考慮して、編集局判断により中編を挿入させていただきました。WindowsとLinuxの接続方法も追って公開させていただきます。 |
本当ならば、最初に紹介したバージョン(1.95)にパッチを当てるなどした方がよいのですが、FreeS/WAN 1.95に対するパッチがうまく当たらないため、今回は1.96にしました。1.95ですでに運用されている方には、あらためておわび申し上げます。
FreeS/WANとfswcertコマンドの準備
■FreeS/WAN拡張パッチの適用
FreeS/WAN拡張パッチをhttp://www.strongsec.com/freeswan/から入手し、展開します(注)。
注:今回の場合は、使用したFreeS/WANのバージョンが若干古いので、http://www.strongsec.com/freeswan/old.htmからFreeS/WAN 1.96用のパッチを入手することになります。 |
ダウンロードしたファイルを展開すると、x509patch-0.9.9-freeswan-1.96というディレクトリと、そのディレクトリ内に以下のファイルが作成されます。このうち、freeswan.diffがFreeS/WANに対するパッチです。
- CHANGES
- README
- ipsec.secrets.template
- freeswan.diff
別途、FreeS/WAN 1.96のアーカイブを展開し、作成されたディレクトリ配下に移動したうえで、
# patch -p1 < freeswan.diff |
などとして、このパッチを適用します。パッチはPLUTOに対するものであり、カーネルデーモンであるKLIPSは変更されません。
これでコンパイルの準備は完了です。コンパイル自体は、FreeS/WANによるIPSecの導入と運用[前編]で紹介した手順で問題なく進められます。
■fswcertコマンドの作成
カーネルのコンパイルとは別に、X.509証明書をFreeS/WANで取り扱える形式にするためのコマンドを作成します。ソースコードは、http://www.strongsec.com/freeswan/で入手可能です。fswcertもやはり、旧バージョンはhttp://www.strongsec.com/freeswan/old.htmにあります。
入手したfswcert-0.6.tar.gzを展開してコンパイルするわけですが、fswcertコマンドを作成するにはあらかじめOpenSSLがインストールされていなければなりません。
X.509証明書の作成
次にX.509証明書の作成です。今回は正規に入手するのではなく、OpenSSLを使用して作成・署名した秘密鍵や証明書を使用します。当然ですが、OpenSSLがインストールされている必要があります。記事の執筆に当たっては、OpenSSL 0.9.5aを使用しました。
OpenSSLそのものについては、
など、いくつかの記事で取り上げられているので、ここでは詳細には触れません。
RSA秘密鍵と証明書の作成
以下のコマンドラインを実行します。なお、opensslコマンドはパスが通っているものとして扱います。
$ openssl req -new -nodes -newkey rsa:1024
-sha1 -keyform PEM -keyout privkey.pem -outform PEM -out request.pem |
いくつか入力を求められる部分があります。私は以下のように入力しています。
Using configuration from /usr/share/ssl/openssl.cnf |
証明書の署名
で作成したrequest.pemから、署名を実施したX.509形式の証明書を作成します。具体的には、request.pemをprivkey.pemで署名し、cert.pemに格納します。実際に使う場合は、きちんとした鍵を使ってください。
$ openssl x509 -req -in request.pem
-signkey privkey.pem -out cert.pem |
これで、RSA秘密鍵「privkey.pem」とX.509形式の証明書「cert.pem」が完成しました。
■KAMEへの証明書のインストール
作成したprivkey.pemとcert.pemをopensslコマンドでさらに別の形式に変換し、KAMEにインストールします。IPsec 2000というカンファレンスにおいて使用された設定例(http://www.hsc.fr/ressources/ipsec/ipsec2000/kame/)の内容を参考にしましたが、そのままでは使えませんでした。
$ openssl rsa -in
privkey.pem -text -out priv.key |
RSA秘密鍵の変換 |
$ openssl x509 -in
cert.pem -text -out cert.key |
X.509証明書の変換 |
X.509証明書の変換は、KAME側とFreeS/WAN側の両方で実施する必要があります。
■FreeS/WANで使用できる形式の鍵ペア作成
公開鍵と秘密鍵の作成
KAME側で作成したのと同様の手順でRSA秘密鍵とX.509形式の証明書を作成しますが、FreeS/WANで使用できる形式の鍵を作成するために、fswcertコマンドを利用します。
# fswcert -k privkey.pem |
RSA秘密鍵privkey.pemから/etc/ipsec.secretsに記述する秘密鍵の生成 |
上記のコマンドで、/etc/ipsec.secretsに記述する形式の鍵が標準出力に書き出されます。
# fswcert -c cert.pem |
X.509形式の証明書から/etc/ipsec.confに記述する公開鍵の作成 |
IDフィールドの作成
FreeS/WANにおけるleftidおよびrightidパラメータの指定を行います。ここに指定する値として、証明書に格納されているSubjectの内容を使います。以下のようなコマンドラインで当該フィールドを取り出すことが可能です。
# openssl x509 -in cert.pem -subject
-noout |
ここでの出力結果をIDとして適用するために、FreeS/WANに対するパッチが必要となります。
設定内容の実際
以下に、FreeS/WANとKAMEに設定する内容を示します。FreeS/WANは/etc/ipsec.confと/etc/ipsec.secrets、KAMEはSPDとracoon.confの内容、そしてracoon.confで指定した秘密鍵および証明書ファイルの内容です。
■FreeS/WAN側の設定
/etc/ipsec.confのポイントは、rightidに「FreeS/WANで使用できる形式の鍵ペア作成」の手順で生成した自分のID、leftidに通信相手(KAME)のIDを記述します。rightrsasigkeyは自分、leftrsasigkeyは通信相手(KAME)のX.509証明書からfswcertを使って生成した公開鍵(「FreeS/WANで使用できる形式の鍵ペア作成」の手順)を記述します。
/etc/ipsec.secretsには、「FreeS/WANで使用できる形式の鍵ペア作成」の手順で、fswcertを使って生成したFreeS/WAN側の秘密鍵を記述します。
■KAME側の設定
- /usr/local/etc/racoon/kame.conf
- /usr/local/etc/racoon/racoon.conf
- /usr/local/etc/cert.3/配下のファイル
cert_spica.key:KAME側の証明書
cert_swan.key:FreeS/WAN側の証明書
priv_spica.key:KAME側の秘密鍵
証明書および秘密鍵のファイルは、「KAMEへの証明書のインストール」の手順で生成したものを用います。
■動作確認
ここまでの設定を有効にして、KAME側からFreeS/WAN側にICMPパケットを送付します(pingコマンドを使用)。最初の数パケットはIKEネゴシエーションなどの関係で落ちていますが、その後のパケットは問題なく送られていることが分かります(画面1)。
画面1 pingが通っているのが分かる |
一応、確認のためにFreeS/WAN側でパケットダンプを取得すると、暗号化されたパケットが送られていることが確認できます(画面2)。
画面2 tcpdumpによる出力。パケットは暗号化されており、その内容を見ることはできない |
今回の検証に当たって
今回のKAMEとFreeS/WANの間の接続検証は、IPsec 2000での相互接続実験の構成を基にしています。しかしながら、IPsec 2000で検証された際の設定をそのまま適用しても通信できませんでした。試行錯誤を繰り返した結果、一番確実につながるであろう方法をここでは紹介しています。
パッチについても、本当ならばIDフィールドの解釈だけではなく証明書を直接扱うことができるはずなのですが、今回はこれまでに説明したRSA鍵を使う方法との差が少なくなると考え、IDフィールドの解釈のみに利用しました。
前編へ |
1/1
|
|
||||
|
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」コマンドです。
|
|