
      
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フォーラム セキュリティ関連記事 |