FreeS/WANによるIPSecの導入と運用[前編]
− LinuxでIPSecを使おう −
宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2002/2/26
FreeS/WANのコンパイルとインストール
カーネルがコンパイルできることが大前提なので、カーネルソースの展開→コンパイルが一通りできなければなりません。カーネルコンパイルについては、カーネル2.4.0導入活用術で解説されているので、本稿では詳細は省きます。
なお、インストールまでの作業はrootでないと実施できませんので、作業には十分な注意が必要です。
今回は、2.4系カーネルの最新版(2002年2月15日時点)である2.4.17を使って、FreeS/WANを利用できるようにしてみます。手順が特定のディストリビューションに依存しないように、カーネルソースはオリジナルのものを使用します。また、カーネルソースが/usr/src下に展開されている環境を想定します。
■FreeS/WANのアーカイブの入手
FreeS/WANのオフィシャルWebサイト(http://www.freeswan.org/)を読み、案内に従ってダウンロードします。配布されているアーカイブは、リリース版とスナップショットの2種類がありますが、特に理由がなければリリース版をダウンロードすればよいでしょう。2002年2月15日の時点の最新リリース版は1.95です。
■FreeS/WANのアーカイブの展開
# gzip -dc freeswan-1.95.tar.gz | (cd
/usr/src;tar xvf -) |
というように、/usr/src下にFreeS/WANのアーカイブを展開します。この時点で、/usr/src下に、少なくとも「linux」と「freeswan-1.95」という2つのディレクトリができていることを確認してください。
■カーネルパッチの適用
/usr/src/freeswan-1.95に移動し、以下のコマンドを実行します。
この結果、Linuxのカーネルソースに対して必要なカーネルパッチが適用されます。実行結果はout.kpatchというファイルに格納されるので、必要に応じて確認してください。
■設定およびコンパイル
一度もカーネルコンパイル(もしくはコンパイル設定)をしたことがない場合は、/usr/src/linuxに移動して、
を実行し、設定を保存して終了します。というのも、FreeS/WANはmake menuconfig実行時にカーネルの設定ファイル(/usr/src/linux/.config)の有無をチェックしているからです。
たまに何の設定項目も表示されないことがありますが、そのときも設定内容の保存だけはしてください。これを怠ると、make menugo実行時に以下のようなエラーが出力されます。
# make menugo
*** cannot find "/usr/src/linux/.config"!!
*** perhaps kernel has never been configured?
*** please do that first; the results are necessary.
make: *** [precheck] Error 1 |
次に、/usr/src/freeswan-1.95に移動して、
もしくは
を実行します。
前者はテキストコンソール、後者はXによる設定画面を用いた設定を行います。普通のカーネルコンフィグレーションの画面に見えますが、「Main
Menu」から「Networking Options」を選択すると、設定項目の一番下の部分にIPSec関係の設定項目が増えているのが分かります(画面1)。
|
画面1 IPSec関係の設定画面(画像をクリックすると拡大表示します) |
IPSec関係の項目は、全部選択しておいて構いません(注)。
注:デフォルトではすべて選択された状態になっています。 |
なお、IPSec通信をする/しないにかかわらず、必要な設定(SCSIドライバの選択など)は、この時点で行ってください。その後、メニューを<Exit>して、画面2の状態になったら設定を保存(<Yes>を選択して[Enter]キー)します。すると、その直後(設定メニュー終了後)からFreeS/WANおよびカーネルのコンパイルが始まります。このため、手作業で.configに設定を追加している人は注意が必要です。
|
画面2 メニュー終了直前の選択肢 |
結果はout.kbuildというファイルに格納されるので、必要に応じて確認してください。コンパイルの終了時点で、/usr/local/sbinにipsecというスクリプトが作成されるほか、/usr/local/lib/ipsecというディレクトリに以下のコマンドがインストールされます。また、/usr/local/manにmanコマンドで参照可能なリファレンスもインストールされます。
_confread _realsetup barf manual showdefaults whack
_include _secretcensor eroute pluto showhostkey
_keycensor _startklips ipsec ranbits spi
_plutoload _updown klipsdebug rsasigkey spigrp
_plutorun auto look setup@ tncfg |
筆者はReiserFSを利用しているのですが、ReiserFS関係など、いくつかの設定は.configを編集して追加しています。トップレベルメニューの中の「Code
maturity level options」を有効にすればメニューで設定できるものもありますが、ほとんど習慣のようなものです。しかし、FreeS/WANのコンパイルを行うと.configを編集するタイミングが取れません(設定メニューを終了すると即座にコンパイルに移行してしまう)。
そこで、非常にアドホックですが、コンパイルが始まった瞬間にそれを[Ctrl]−[Z]で一時停止して、.configファイルを操作しています。本来ならばMakefileを見て、make
menugoで実行される内容を1つ1つ実行するべきなのかもしれませんが……。かなり強引な設定方法ですが、このようにして作成したカーネルでも問題なく動いています。 |
■カーネルのインストール
ここまでで、コマンド類はインストールされた状態になっていますが、カーネルはまだインストールされていません。以下のいずれかの手段を用いて、コンパイルしたカーネルでブートするようにします。
bzImageをカーネルとしてブートするように設定
/etc/lilo.confに、/usr/src/linux/arch/i386/boot/bzImageをカーネルイメージとしたエントリを追加します。例えば、
image=/usr/src/linux/arch/i386/boot/bzImage
label=ipsec
root=/dev/hde1
read-only |
のような感じでエントリを追加します。
追加後に/sbin/liloを実行するのを忘れないでください。
make kinstallを実行する
FreeS/WANのディレクトリ(例では/usr/src/freeswan-1.91)にて、以下のコマンドを実行します。結果はout.kinstallというファイルに格納されるので、必要に応じて確認してください。
make kinstallを実行すると、カーネルソースを格納しているディレクトリ(例では/usr/src/linux)に移動して、make
install、make modules_installを実行します。
コンパイルしたカーネルに自信があるのならばよいですが、ない場合はの方法でエントリを追加するか、でインストールしたカーネル以外のカーネルでもブートできるエントリを作成しておいた方がいいでしょう(注)。
注:ブートできないと、最悪の場合レスキューディスクなどのお世話になることになります。 |
■リブートと確認
として、Linuxマシンをリブートします。
リブート時に、
klips_info:ipsec_init: KLIPS startup,
FreeS/WAN IPSec version: 1.95 |
のようなメッセージが出ていれば、KLIPSのインストールは成功していることになります。また、必要最低限のファイルは存在しているので、
277 ? S 0:00 /bin/sh /usr/local/lib/ipsec/_plutorun --debug none --uniqueids --dump --load %search --start %search --wait --pre --post -
278 ? S 0:00 logger -p daemon.error -t ipsec__plutorun
279 ? S 0:00 /bin/sh /usr/local/lib/ipsec/_plutorun --debug none --uniqueids --dump --load %search --start %search --wait --pre --post -
280 ? S 0:00 /bin/sh /usr/local/lib/ipsec/_plutoload --load %search --start %search --wait --post
281 ? S 0:00 /usr/local/lib/ipsec/pluto --nofork --debug-none |
のようなプロセスが走行していたり、
# /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:C0:4F:7A:79:EF
inet addr:10.1.87.157 Bcast:10.1.87.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11667 errors:0 dropped:0 overruns:0 frame:0
TX packets:6115 errors:0 dropped:0 overruns:0 carrier:0
collisions:1 txqueuelen:100
Interrupt:11 Base address:0xd880
ipsec0 Link encap:Ethernet HWaddr 00:C0:4F:7A:79:EF
inet addr:10.1.87.157 Mask:255.255.255.0
UP RUNNING NOARP MTU:16260 Metric:1
RX packets:748 errors:0 dropped:0 overruns:0 frame:0
TX packets:1250 errors:0 dropped:7 overruns:0 carrier:0
collisions:0 txqueuelen:10
ipsec1 Link encap:IPIP Tunnel HWaddr
NOARP MTU:0 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
(中略)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 |
のようなネットワークインターフェイスが存在します。ここまで確認すれば、カーネルのインストールは行えていると思っていいでしょう。
これでIPSec対応カーネルはできましたが、まだ暗号化通信の設定はできていません。設定は、/etc/ipsec.confおよび/etc/ipsec.secretsというファイルで行います。この時点では、FreeS/WANの配布パッケージに入っているサンプル設定がコピーされているだけです。
■ほかのマシンへの展開
空きディスク領域などの関係でセルフコンパイルできないマシンの場合は、ほかのマシンで作成したカーネルやコマンド類をコピーすることでIPSecに対応させることが可能です。つまり、カーネル、/usr/local/lib/ipsec配下全部および/usr/local/sbin/ipsecスクリプトをそっくりコピーするのです。
例えば、筆者の場合はリスト1のようなファイルが格納されたアーカイブを用意し、それをほかのマシンに展開しています。
$ gzip -dc ipsecsys.tar.gz | tar tvf -
-rw-r--r-- root/root 1193498 2002-02-14 17:36:57 boot/vmlinuz-2.4.17
-rw-r--r-- root/root 523582 2002-02-14 17:36:57 boot/System.map-2.4.17
drwxr-xr-x root/root 0 2002-02-14 17:47:00 usr/local/lib/ipsec/
-rwxr-xr-x root/root 222811 2002-02-14 17:31:37 usr/local/lib/ipsec/spi
-rwxr-xr-x root/root 197606 2002-02-14 17:31:37 usr/local/lib/ipsec/eroute
-rwxr-xr-x root/root 175674 2002-02-14 17:31:37 usr/local/lib/ipsec/spigrp
-rwxr-xr-x root/root 57208 2002-02-14 17:31:37 usr/local/lib/ipsec/tncfg
-rwxr-xr-x root/root 142891 2002-02-14 17:31:37 usr/local/lib/ipsec/klipsdebug
-rwxr-xr-x root/root 741187 2002-02-14 17:31:37 usr/local/lib/ipsec/pluto
-rwxr-xr-x root/root 122593 2002-02-14 17:31:37 usr/local/lib/ipsec/whack
-rwxr-xr-x root/root 2829 2002-02-14 17:31:37 usr/local/lib/ipsec/ipsec
-rwxr-xr-x root/root 6436 2002-02-14 17:31:37 usr/local/lib/ipsec/barf
-rwxr-xr-x root/root 16172 2002-02-14 17:31:37 usr/local/lib/ipsec/manual
-rwxr-xr-x root/root 10839 2002-02-14 17:31:37 usr/local/lib/ipsec/auto
-rwxr-xr-x root/root 2437 2002-02-14 17:31:37 usr/local/lib/ipsec/look
-rwxr-xr-x root/root 1041 2002-02-14 17:31:37 usr/local/lib/ipsec/showdefaults
-rwxr-xr-x root/root 3484 2002-02-14 17:31:37 usr/local/lib/ipsec/showhostkey
-rwxr-xr-x root/root 2163 2002-02-14 17:31:37 usr/local/lib/ipsec/_include
-rwxr-xr-x root/root 11064 2002-02-14 17:31:37 usr/local/lib/ipsec/_confread
-rwxr-xr-x root/root 1383 2002-02-14 17:31:37 usr/local/lib/ipsec/_keycensor
-rwxr-xr-x root/root 1904 2002-02-14 17:31:37 usr/local/lib/ipsec/_secretcensor
-rwxr-xr-x root/root 5262 2002-02-14 17:31:37 usr/local/lib/ipsec/_updown
-rwxr-xr-x root/root 7272 2002-02-14 17:31:37 usr/local/lib/ipsec/_realsetup
-rwxr-xr-x root/root 6076 2002-02-14 17:31:37 usr/local/lib/ipsec/_startklips
-rwxr-xr-x root/root 3622 2002-02-14 17:31:37 usr/local/lib/ipsec/_plutorun
-rwxr-xr-x root/root 3495 2002-02-14 17:31:37 usr/local/lib/ipsec/_plutoload
-rwxr-xr-x root/root 43605 2002-02-14 17:31:37 usr/local/lib/ipsec/ranbits
-rwxr-xr-x root/root 69458 2002-02-14 17:31:37 usr/local/lib/ipsec/rsasigkey
lrwxrwxrwx root/root 0 2002-02-14 17:31:38 usr/local/lib/ipsec/setup ->/etc/rc.d/init.d/ipsec
-rwxr-xr-x root/root 741187 2002-02-14 17:00:34 usr/local/lib/ipsec/pluto.old
-rwxr-xr-x root/root 122593 2002-02-14 17:00:34 usr/local/lib/ipsec/whack.old
-rwxr-xr-x root/root 2829 2002-02-14 17:00:34 usr/local/lib/ipsec/ipsec.old
-rwxr-xr-x root/root 10839 2002-02-14 17:00:34 usr/local/lib/ipsec/auto.old
-rwxr-xr-x root/root 6436 2002-02-14 17:00:34 usr/local/lib/ipsec/barf.old
-rwxr-xr-x root/root 2437 2002-02-14 17:00:34 usr/local/lib/ipsec/look.old
-rwxr-xr-x root/root 16172 2002-02-14 17:00:34 usr/local/lib/ipsec/manual.old
-rwxr-xr-x root/root 1227 2002-02-14 17:31:37 usr/local/lib/ipsec/newhostkey
-rwxr-xr-x root/root 1041 2002-02-14 17:00:34 usr/local/lib/ipsec/showdefaults.old
-rwxr-xr-x root/root 3484 2002-02-14 17:00:34 usr/local/lib/ipsec/showhostkey.old
-rwxr-xr-x root/root 2163 2002-02-14 17:00:34 usr/local/lib/ipsec/_include.old
-rwxr-xr-x root/root 11064 2002-02-14 17:00:34 usr/local/lib/ipsec/_confread.old
-rwxr-xr-x root/root 1383 2002-02-14 17:00:34 usr/local/lib/ipsec/_keycensor.old
-rwxr-xr-x root/root 1904 2002-02-14 17:00:34 usr/local/lib/ipsec/_secretcensor.old
-rwxr-xr-x root/root 5262 2002-02-14 17:00:34 usr/local/lib/ipsec/_updown.old
-rwxr-xr-x root/root 7272 2002-02-14 17:00:34 usr/local/lib/ipsec/_realsetup.old
-rwxr-xr-x root/root 6076 2002-02-14 17:00:34 usr/local/lib/ipsec/_startklips.old
-rwxr-xr-x root/root 3622 2002-02-14 17:00:34 usr/local/lib/ipsec/_plutorun.old
-rwxr-xr-x root/root 3495 2002-02-14 17:00:34 usr/local/lib/ipsec/_plutoload.old
-rwxr-xr-x root/root 43605 2002-02-14 17:00:34 usr/local/lib/ipsec/ranbits.old
-rwxr-xr-x root/root 69458 2002-02-14 17:00:34 usr/local/lib/ipsec/rsasigkey.old
-rwxr-xr-x root/root 1227 2002-02-14 17:00:34 usr/local/lib/ipsec/newhostkey.old
-rwxr-xr-x root/root 11064 2002-01-10 18:20:38 usr/local/lib/ipsec/_confread.orig
-rwxr-xr-x root/root 114127 2002-02-14 17:31:37 usr/local/lib/ipsec/pf_key
-rwxr-xr-x root/root 16671 2002-02-14 17:31:37 usr/local/lib/ipsec/send-pr
-rwxr-xr-x root/root 37276 2002-02-14 17:31:37 usr/local/lib/ipsec/_copyright
-rw-r--r-- root/root 1950 2002-02-14 17:31:37 usr/local/lib/ipsec/ipsec_pr.template
-rwxr-xr-x root/root 16671 2002-02-14 17:00:34 usr/local/lib/ipsec/send-pr.old
-rwxr-xr-x root/root 37276 2002-02-14 17:00:34 usr/local/lib/ipsec/_copyright.old
-rwxr-xr-x root/root 516720 2002-01-10 18:57:52 usr/local/lib/ipsec/fswcert.old
-rwxr-xr-x root/root 2829 2002-02-14 17:31:37 usr/local/sbin/ipsec |
リスト1 |
後編は3月5日公開予定 |
後編では、今回作成したFreeS/WAN環境をどのように使用するのかについてお話します。 |
|
2/2
|
|
Index |
FreeS/WANによるIPSecの導入と運用[前編]
− LinuxでIPSecを使おう − |
|
|
Page
1
FreeS/WANの概要
FreeS/WANの構成 |
|
Page 2
FreeS/WANのコンパイルとインストール
FreeS/WANのアーカイブの入手
FreeS/WANのアーカイブの展開
カーネルパッチの適用
設定およびコンパイル
カーネルのインストール
リブートと確認
ほかのマシンへの展開 |
|
Linux Squareフォーラム セキュリティ関連記事 |