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に移動し、以下のコマンドを実行します。

# make patches

 この結果、Linuxのカーネルソースに対して必要なカーネルパッチが適用されます。実行結果はout.kpatchというファイルに格納されるので、必要に応じて確認してください。

設定およびコンパイル

 一度もカーネルコンパイル(もしくはコンパイル設定)をしたことがない場合は、/usr/src/linuxに移動して、

# make menuconfig

を実行し、設定を保存して終了します。というのも、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に移動して、

# make menugo

もしくは

# make xgo

を実行します。

 前者はテキストコンソール、後者は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

 make kinstallを実行すると、カーネルソースを格納しているディレクトリ(例では/usr/src/linux)に移動して、make install、make modules_installを実行します。

 コンパイルしたカーネルに自信があるのならばよいですが、ない場合はの方法でエントリを追加するか、でインストールしたカーネル以外のカーネルでもブートできるエントリを作成しておいた方がいいでしょう()。

注:ブートできないと、最悪の場合レスキューディスクなどのお世話になることになります。

リブートと確認

# /sbin/shutdown -r now

として、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全記事インデックス


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

本日 月間