Linux以外のIPSecスタックとの相互接続[前編]
LinuxでIPSecを使おう

宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/4/20

RSA鍵ペアによるFreeS/WAN同士の接続(補足)

 以前の記事では、FreeS/WAN同士での事前共有鍵とRSA鍵ペア()を使った接続を説明しましたが、RSA鍵ペアを使った接続にはこれよりもやや簡単な方法があります。

注:RSA鍵ペアを使用した場合、事前共有鍵のように秘密鍵を外部にさらす必要がなくなるので、セキュリティ上は事前共有鍵よりも望ましい状態に保たれます。

 ここでは、図2のような構成を例に説明します。

図2 FreeS/WAN同士の接続例

 なお、RSA鍵ペアの作成から通信設定までの作業はすべてroot権限で行うため、作業には十分注意してください。

RSA鍵ペアの作成

 まず、RSA鍵ペアを作成します。以下のコマンドラインで作成できます。

# /usr/local/sbin/ipsec newhostkey > /etc/ipsec.secrets
# chmod og-rwx /etc/ipsec.secrets

 出力結果の例をリスト5に示しますが、出力結果はそのまま秘密鍵の格納ファイルとして使用可能です。

: RSA   {
        # RSA 2048 bits   swan1   Thu Apr 11 05:22:30 2002
        # for signatures only, UNSAFE FOR ENCRYPTION
        #pubkey=0sAQOJGu/RmFXVhEatfp67BYoQuU1c9tjEx0Fqy7cCh871P3uF
985JjETfGclIJEzzDifpDMsIUP7bRLt9Yn3v/QTi20IGGZZXOPvVkGBRt1FPL5N6L1
Y8Zjvb98ZRj1r6jXcF+GwzPP0MkOOBM7ao8Bhx2C25oJNpIOd6gyA4LXFEqbPHKL3/
TDYNdeLBgEUGBPKgHqnl6WOorjsV/rLXpNZtvQJLSL7wDtsXE0mEzOgv79HOuyHmWV
qfma5z2xOCX+tMuRqpxUrRSMo8yFxhYfPxhROXPwLhBuCT5E0DjQTeqfi7DdLiqo7m
/+tNLk4bIwzTiLnko4XxjxACwV4XdRxL
        #IN KEY 0x4200 4 1 AQOJGu/RmFXVhEatfp67BYoQuU1c9tjEx0Fqy7c
Ch871P3uF985JjETfGclIJEzzDifpDMsIUP7bRLt9Yn3v/QTi20IGGZZXOPvVkGBRt
(中略)
o4XxjxACwV4XdRxL
        # (0x4200 = auth-only host-level, 4 = IPSec, 1 = RSA)
        Modulus: 0x891aefd19855d58446ad7e9ebb058a10b94d5cf6d8c4c74
16acbb70287cef53f7b85f7ce498c44df19c948244cf30e27e90ccb0850fedb44b
(中略)
0cd388b9e4a385f18f1002c15e17751c4b
        PublicExponent: 0x03
        # everything after this point is secret
        PrivateExponent: 0x16d9d2a2eeb8f8eb611cea6fc9d641ad74378f7
e7976213591cc9e806bf7d38a949653f7b6ecb6252ef6e15b6228825bfc2ccc816
(中略)
18baba1f2562e05a2c49640e08795a6b3af532fcc3
        Prime1: 0xca95ed55ead36a76fa840ff94a389ac9490462770498b015
(中略)
ae2ddaf675ac6880d72af647ab9e07afef73406231fd203bc0d5df8e3f920f1aaa
        }
# do not change the indenting of that "}"
リスト5 RSA鍵ペア作成の出力例

 FreeS/WANによるIPSecの導入と運用(後編)では、ipsec rsasigkeyコマンドを紹介しましたが、出力されたデータに対する編集を行う必要があるため、今回解説する方法よりも多少面倒です()。

注:ipsec rsasigkeyコマンドには鍵長を任意に決定できるなどの長所があるので、ある程度慣れたらこちらを使うことをお勧めします。

公開鍵の取り出し

 出力された結果から、公開鍵を取り出します。リスト5の「#pubkey=」で始まる行が公開鍵の内容になります。取り出した結果をリスト6に示します。

        #pubkey=0sAQOJGu/RmFXVhEatfp67BYoQuU1c9tjEx0Fqy7cCh871P3uF
985JjETfGclIJEzzDifpDMsIUP7bRLt9Yn3v/QTi20IGGZZXOPvVkGBRt1FPL5N6L1
Y8Zjvb98ZRj1r6jXcF+GwzPP0MkOOBM7ao8Bhx2C25oJNpIOd6gyA4LXFEqbPHKL3/
TDYNdeLBgEUGBPKgHqnl6WOorjsV/rLXpNZtvQJLSL7wDtsXE0mEzOgv79HOuyHmWV
qfma5z2xOCX+tMuRqpxUrRSMo8yFxhYfPxhROXPwLhBuCT5E0DjQTeqfi7DdLiqo7m
/+tNLk4bIwzTiLnko4XxjxACwV4XdRxL
リスト6 リスト5から取り出した公開鍵

通信設定

 /etc/ipsec.confの設定を行います。今回の場合、自身の設定を「right」で始まるパラメータに、通信相手の設定を「left」で始まるパラメータに格納しています。それぞれのホストで公開鍵を取り出し、自分自身の公開鍵を「leftrsakey=」、通信相手の公開鍵を「rightrsakey=」に置き換えてipsec.confに記述します。/etc/ipsec.confの例をリスト7に示します。

        # basic configuration
config setup
        interfaces=%defaultroute
        klipsdebug=none
        plutodebug=none
        plutoload=%search
        plutostart=%search

# defaults for subsequent connection descriptions
# (mostly to fix internal defaults which, in retrospect, were badly
 chosen)
conn %default
        type=transport
        authby=rsasig
        right=192.168.1.2
        rightrsasigkey=0sAQNczd+O00PYd+v9aBGKKZCvWHyqX9dDU1y++38vX
VaGfYHAiqGyw2bqGwV4HywLlVTwTJ/B8hM83BUaOoWsMKyuKLrlz3haqYSmeRLJewG
(中略)
HvtqEd6JlXjLg5GWTD0EIjWau0JJ3E7Y0WHdq89
        pfs=no

# connection description for (experimental!) opportunistic
 encryption
# (requires KEY record in your DNS reverse map; see
 doc/opportunism.howto)

# sample VPN connection
conn swan
        left=192.168.1.5
        leftrsasigkey=0sAQOJGu/RmFXVhEatfp67BYoQuU1c9tjEx0Fqy7cCh8
71P3uF985JjETfGclIJEzzDifpDMsIUP7bRLt9Yn3v/QTi20IGGZZXOPvVkGBRt1FP
(中略)
Liqo7m/+tNLk4bIwzTiLnko4XxjxACwV4XdRxL
        auto=start
リスト7 /etc/ipsec.confの例

 リスト7図2のwebdav1というマシンの設定内容ですが、swan1というマシンにそれを適用する際は、right*とleft*の内容をswan1に合うように書き換えればOKです。今回の場合、「conn %default」と書かれた行に続くのが自分自身の設定であり、「conn swan」と書かれている部分が通信相手の設定になります。

 なお、/etc/ipsec.secretsについては「RSA鍵ペアの作成」でコマンドを実行した時点でできあがっているので触らない方がよいでしょう。

後編の予告

 前編ではUNIX系のOSを扱いましたが、やはり若干敷居が高いかと思います。また、実際の利用シーンにおいては、UNIX系以外のOSが動いているマシンとの接続も必要になることでしょう。後編では、Windows系のOSとの間でIPSec通信を行う方法を紹介します。前編では検証が間に合わなかったことがいくつかありますので、それらについても紹介できれば、と思います(編注)。

編注:Windowsとの接続方法を解説する後編の前に、KAMEとFreeS/WANをX.509証明書を使って接続する方法を解説した中編を挿入させていただきました。

2/2

Index
Linux以外のIPSecスタックとの相互接続[前編]
− LinuxでIPSecを使おう −
  Page 1
本番はこれから
IPSecスタックの種類
KAMEとFreeS/WANの相互接続
 KAMEの事前準備
 事前共有鍵(Pre-Shared Key)を用いた場合
 暗号化通信の開始
 実際の通信の様子
  Page 2
RSA鍵ペアによるFreeS/WAN同士の接続
 RSA鍵ペアの作成
 公開鍵の取り出し
 通信設定
後編の予告

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をサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間