FreeS/WANによるIPSecの導入と運用[後編]
LinuxでIPSecを使おう

前編でIPSecスタックであるFreeS/WANのインストール方法を紹介した。後編では、FreeS/WANの設定を行って実際に暗号化通信ができるようにしてみよう。また、通信内容が暗号化されているかどうかを確認する方法も紹介する。

宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2002/3/5

事前共有鍵を利用した暗号化通信の設定

 必要なファイルがそろったところで、暗号化通信のための設定を行いましょう。ここでは、暗号化通信に必要な最低限の設定を挙げて、動作確認を行います。

動作確認用ネットワーク環境

図1 このネットワーク構成を例に話を進める

 本稿では、2台のLinuxマシン間で暗号化通信を行う環境を例に解説します。ホスト名やIPアドレスなどのネットワーク構成を図1に示します。

 エンドツーエンドの暗号化通信のため、ひたすらシンプルな環境となっています。以下ではこの環境を前提に説明します。

暗号化通信ポリシーの決定

 設定に当たって、暗号化通信のポリシーを決定する必要があります。しかし、FreeS/WANの場合は、IKEによる通信時の暗号化方式などがすでにPLUTOに実装されていて選択できません。ここでは、以下に簡単なポリシーを挙げておきます。

  • エンドツーエンドで暗号化通信を行う
  • SAについてはIKEによる自動設定
  • IPSec通信時にパケットを暗号化する方式は3DES
  • Pre-shared Key(事前共有鍵)を利用する

/etc/ipsec.confの設定

 暗号化通信を行う各ホストで/etc/ipsec.confを書き換え、自ホスト、相手ホスト、IKEの動作やIPSec通信の設定を行います。実際の設定を以下に示します。

# /etc/ipsec.conf - FreeS/WAN IPSEC configuration file

config setup
        interfaces="ipsec0=eth0"
        klipsdebug=none
        plutodebug=none
        plutoload=%search
        plutostart=%search

# defaults for subsequent connection descriptions
conn %default
        type=transport
        right=10.1.87.157
        authby=secret
        pfs=no

conn sample
        left=10.1.87.182
        auto=start
リスト2 tripmachineの/etc/ipsec.conf(事前共有鍵利用時)

config setup
        interfaces="ipsec0=eth0"
        klipsdebug=none
        plutodebug=none
        plutoload=%search
        plutostart=%search

# defaults for subsequent connection descriptions
conn %default
        type=transport
        right=10.1.87.182
        authby=secret
        pfs=no

conn sample
        left=10.1.87.157
        auto=start
リスト3 bomberの/etc/ipsec.conf(事前共有鍵利用時)

/etc/ipsec.secretsの設定

 /etc/ipsec.secretsを編集して、IKEデーモンがネゴシエーション時に使う鍵を設定します。実際の設定を以下に示します。

: PSK   "FreeS/WAN Connection"

 なお、このファイルは内容に事前共有鍵(Pre-shared Key)を含むので、管理者以外は読めないようにパーミッションを設定してください。

暗号化通信のモニタリング

 暗号化通信を行う準備ができました。tcpdumpを使って、通信が実際に暗号化されているかどうか確認しましょう。

 パケットキャプチャ用のマシンで、tcpdumpを以下のようなコマンドラインで実行します。これを実行することで、tripmachineとbomber間の通信のみをキャプチャできます。

# tcpdump -x host tripmachine and bomber

 その後、両ホストでIPSecによる通信を有効にします。具体的には、以下のコマンドラインをbomberとtripmachineでそれぞれ実行します。

# /usr/local/sbin/ipsec setup stop
# /usr/local/sbin/ipsec setup start

 この状態で、何でもよいのでTCP/IPによる通信を行います。以下は、tripmachineからbomberにtelnetしている様子です。

[kmiya@tripmachine /tmp]$ telnet bomber
Trying 10.1.87.182...
Connected to bomber.xxxx.co.jp.
Escape character is '^]'.
login: kmiya
Password:
Last login: Mon Feb 18 11:30:40 from tripmachine
[kmiya@bomber ~]%

 上記の通信をtcpdumpでパケットダンプすると、以下のようになります。

# tcpdump -x host tripmachine and bomber
11:53:32.669044 tripmachine.500 > bomber.500: udp 176 (DF)
                         4500 00cc 0000 4000 4011 76cc 0a01 579d
                         0a01 57b6 01f4 01f4 00b8 3454 0b1d b7b0
                         8a83 682c 0000 0000 0000 0000 0110 0200
                         0000 0000 0000
11:53:32.669525 bomber.500 > tripmachine.500: udp 80 (DF)
                         4500 006c 0000 4000 4011 772c 0a01 57b6
                         0a01 579d 01f4 01f4 0058 13e2 0b1d b7b0
                         8a83 682c 7bb3 f2ea 3fed adf1 0110 0200
                         0000 0000 0000
(中略)
11:53:35.352499 bomber > tripmachine: ip-proto-50 76 (DF)
                         4500 0060 0000 4000 4032 7717 0a01 57b6
                         0a01 579d 2ea1 94a8 0000 0001 db34 7902
                         e5dd 5a03 809b 32dc 5d46 9d6e dfda 5725
                         7183 8bac 4c8c
11:53:35.352813 tripmachine > bomber: ip-proto-50 68 (DF)
                         4500 0058 cee3 4000 4032 a83b 0a01 579d
                         0a01 57b6 867e a86a 0000 0002 214a bb51
                         1586 b4bc 43da da0e 156e 1f46 d27f 6d3d
                         6cff 41a2 f5a1

 IKEによるネゴシエーションがUDP/500番経由で行われ、その後にIPSec通信が行われているのが分かります()。パケットダンプ中で「ip-proto-50」と表示されているのは、ESP通信がIPプロトコル50番で行われていることを意味します。

注:IPSec対応パッチを当てていないため、こういう表示になっています。KAMEなどに含まれているIPSec対応のtcpdumpを使用した場合は、SPIなどの情報も併せて表示されます。

暗号化通信の内容のモニタリング

図2 インターフェイスと取得できるデータの関係

 IPSecによる暗号化が施された通信は、どのような通信が行われているか不明なはずですが、FreeS/WANは「ipsec*」というインターフェイスをlistenすることにより、暗号化前の平文通信をモニタすることが可能です。インターフェイスと取得できるデータの関係を図2に示します。

 tcpdumpは、-iオプションを付加することでモニタするインターフェイスを指定できます。これを使って、以下のtelnetの様子をモニタしてみましょう。


[kmiya@tripmachine kmiya]$ telnet bomber
Trying 10.1.87.182...
Connected to bomber.xxxx.co.jp.
Escape character is '^]'.
login: kmiya
Password:
Last login: Mon Feb 18 11:56:55 from 10.1.87.156
[kmiya@bomber ~]%

 eth0上の暗号化通信の様子をモニタすると以下のようになります。

[root@bomber kmiya]# tcpdump host tripmachine and bomber
tcpdump: listening on eth0
12:04:08.030537 tripmachine > bomber: ip-proto-50 76 (DF)
12:04:08.030914 bomber > tripmachine: ip-proto-50 76 (DF)
12:04:08.031211 tripmachine > bomber: ip-proto-50 68 (DF)
12:04:08.031849 tripmachine > bomber: ip-proto-50 92 (DF)
12:04:08.032044 bomber > tripmachine: ip-proto-50 68 (DF)
12:04:08.042241 bomber > tripmachine: ip-proto-50 76 (DF)
12:04:08.042485 tripmachine > bomber: ip-proto-50 68 (DF)
12:04:08.042680 tripmachine > bomber: ip-proto-50 68 (DF)
12:04:08.044679 bomber > tripmachine: ip-proto-50 84 (DF)
12:04:08.077464 tripmachine > bomber: ip-proto-50 68 (DF)
12:04:08.077863 bomber > tripmachine: ip-proto-50 84 (DF)

 -iオプションでipsec0を指定した場合にモニタできる、暗号化前の平文通信は以下のようになります。

[root@bomber kmiya]# tcpdump -i ipsec0
tcpdump: listening on ipsec0
12:04:08.030537 tripmachine.32785 > bomber.telnet: S 3244564824:3244564824(0) win 32440 <mss 16220,sackOK,timestamp 289965[|tcp]> (DF)
12:04:08.030810 bomber.telnet > tripmachine.32785: S 3226584159:3226584159(0) ack 3244564825 win 32416 <mss 16220,sackOK,timestamp 32160689[|tcp]> (DF)
12:04:08.031211 tripmachine.32785 > bomber.telnet: . ack 1 win 32440 <nop,nop,timestamp 289965 32160689> (DF)
12:04:08.031849 tripmachine.32785 > bomber.telnet: P 1:25(24) ack 1 win 32440 <nop,nop,timestamp 289965 32160689>(DF)
12:04:08.031966 bomber.telnet > tripmachine.32785: . ack 25 win 32416 <nop,nop,timestamp 32160689 289965> (DF)
12:04:08.042125 bomber.telnet > tripmachine.32785: P 1:13(12) ack 25 win 32416 <nop,nop,timestamp 32160690 289965> (DF)
12:04:08.042485 tripmachine.32785 > bomber.telnet: . ack 13 win 32440 <nop,nop,timestamp 289966 32160690> (DF)
12:04:08.042680 tripmachine.32785 > bomber.telnet: P 25:28(3) ack 13 win 32440 <nop,nop,timestamp 289966 32160690> (DF)
12:04:08.044596 bomber.telnet > tripmachine.32785: P 13:28(15) ack 25 win 32416 <nop,nop,timestamp 32160690 289966> (DF)
12:04:08.077464 tripmachine.32785 > bomber.telnet: . ack 28 win 32440 <nop,nop,timestamp 289970 32160690> (DF)
12:04:08.077784 bomber.telnet > tripmachine.32785: P 28:46(18) ack 28 win 32416 <nop,nop,timestamp 32160693 289966> (DF)

前編へ
1/2

Index
FreeS/WANによるIPSecの導入と運用[後編]
− LinuxでIPSecを使おう −
Page 1
事前共有鍵を利用した暗号化通信の設定
 動作確認用ネットワーク環境
 暗号化通信ポリシーの決定
 /etc/ipsec.confの設定
 /etc/ipsec.secretsの設定
 暗号化通信のモニタリング
 暗号化通信の内容のモニタリング
  Page 2
RSA鍵ペアを利用した暗号化通信の設定
 暗号化通信ポリシー
 RSA鍵ペアの作成
 /etc/ipsec.confの設定
 /etc/ipsec.secretsの設定
 暗号化通信の様子
今回のまとめ
 参照サイト

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 記事ランキング

本日 月間