Simple Configuration Samples of Racoon

Shoichi Sakane, KAME Project
$Id: index-jp.html,v 1.1 2003/01/29 14:49:15 sakane Exp $
英語版

概要

本稿では、KAMEスタックにおいて IPsecの Security Association(IPsec-SA)を 自動で確立するために必要な設定に関して述べる。 IPsec-SAを自動で確立するためには、沢山の項目を設定しなければならない。 そのため全てを理解するには IPsecに関する多くの知識が必要になる。 本稿では、使用環境を限定することにより、設定項目を最小限にとどめ、 全体像を説明することに重点をおく。 読者には、IPsecの知識がある程度必要とされるが、熟知している必要はない。

はじめに

IPsecを使うためには通信する相手と Security Association(IPsec-SA)を 確立しなければならない。 IPsec-SAを確立する方法は2種類ある。 1つは手動で確立する方法である。 もう1つは自動で確立する方法である。 KAMEでは、後者を実現するために racoonを用意している。
IPsec-SAを確立するためには、いくつかのパラメータ(鍵情報)を 確立したい相手と交換しなければならない。 racoonは IKEを使ってこのパラメータを交換する。
IKEは IPsec-SAを使わずに自分で SAを確立する。 そのためにIKEは2つのフェーズに分けられる。 1つはIKE自身の通信を守るSA(IKE-SA)を確立するフェーズ。 もう1つはIPsec-SAを確立するフェーズである。 以降では、それぞれ Phase 1, Phase 2と呼ぶ。
IKEでは、Phase 1, Phase 2に必要な鍵情報を交換するが、 それぞれのフェーズで、始動者が複数の提案(Proposal)をして応答者がそれを選択する。 このため racoonを使うには、多くの情報を設定しなければならない。
ここでは KAME-snap20000501以降のキットに含まれる racoonを対象として、 簡単な例を元に設定方法を説明する。 複雑な設定方法は、ここでは述べない。

ここでは KAME-snap20000501以降のキットに含まれる racoonを対象として、 簡単な例を元に設定方法を説明する。 複雑な設定方法は、ここでは述べない。 KAME-snap20000501以降のキットに含まれる racoonを対象とする。 20000501以前のものには該当しない。


基本メカニズム

kernelは IPsecを使うために 2つのデータベースを管理している。 1つは、パケットに IPsecを適用するかどうかを判断するため、 また、どの IPsec-SAを適用するかを記述したSecurity Policy Database(SPD)。 もう1つは、IPsec-SAの鍵情報を定義した Security Association Database(SAD)である。

下図は kernelがパケットに IPsecを適用するまでの流れをを示したものである。

	 setkey                racoon  <-------(IKE)-------> somebody
	   |                    ^  |      (5)
	   |                    |  |(6)
	   |(1)           +-----+  +---+
	   |           (4)|            |
	   v              |            v
	+-----+  (2)      |    (3)  +-----+
	| SPD |<----- kernel ------>| SAD |
	+-----+         |           +-----+
                        |(7)
                        v

(1)自動で IPsec-SAを設定するために、管理者は setkeyを使って、 どのパケットに IPsecを適用するかを SPDに登録する。
(2)kernelは SPDを検索してパケットに IPsecを適用するかどうかを判断する。
(3)IPsecを適用すると分かったら、SADを検索して鍵情報を取得する。
(4)鍵情報がなかった場合、racoonへ IPsec-SAの確立要求をする。
(5)racoonは IPsec-SAを確立すべき相手とIKEを使ってパラメータを交換する。
(6)racoonは交換した鍵情報を SADに登録する。
(7)Kernel can send a packet applyed IPsec.

上記の様に、管理者は setkeyを使ってSPDを設定する作業とracoonの設定が必要になる。 また、IPsec-SAを確立しようとする相手にも racoonまたは、これに相当するものがなければならない。


racoonの起動方法

racoonを起動するにはルート権限が必要である。 これはIKEのためにUDPの500番を使うからである。 またログファイルとして /var/log/racoon.logを使用するからである。
racoonの起動オプションは少ないが、その中でもさらに代表的なものだけを説明する。
-f configfile
Specify alternate configuration file.
/usr/local/v6/etc/racoon.conf as default.
-l logfile
Specify alternate log file.
/var/log/racoon.log as default.
-d dlevel
Set debugging level of hexadecimal.
As below, racoon outputs many information onto standard output and log file.
	# racoon -d 0xffffffff
以下のように起動すると非常に多くの情報が標準出力に表示される。
	# racoon -d 0xffffffff

簡単な設定例

以下は、もっとも簡単な racoonの設定例の一つである。
	# cat case1.conf
	path pre_shared_key "/usr/local/v6/etc/psk.txt" ;
	identifier user_fqdn "sakane@kame.net" ;
	identifier fqdn "mine.kame.net" ;

	remote anonymous
	{
		exchange_mode aggressive ;
		identifier user_fqdn ;
		lifetime time 24 hour ;
		lifetime byte 100 MB ;
		proposal {
			encryption_algorithm 3des;
			hash_algorithm sha1;
			authentication_method pre_shared_key ;
			dh_group 2 ;
		}
	}

	sainfo anonymous
	{
		pfs_group 1;
		lifetime time 12 hour ;
		lifetime byte 50 MB ;
		encryption_algorithm 3des, rc5, cast128, blowfish, des ;
		authentication_algorithm hmac_sha1, hmac_md5 ;
		compression_algorithm deflate ;
	}
この設定例について、上から順番に説明する。

remote directive

sainfo directive

上記の設定は、Pre-shared Keyを事前に設定してさえいれば、 Phase 1, Phase 2ともに相手を選ばない設定になっている。 それぞれ相手を限定することもできるが、その設定方法はここでは述べない。


SPDの設定例

Case 1

Security protocol is ESP. Encapsulation mode is Transport.
	   Host-A                        Host-B
	  fec0::1 ---------------------- fec0::2

Configuration at Host-A:
	# setkey -c <<EOF
	spdadd fec0::1 fec0::2 any -P out ipsec
		esp/transport//require ;
	spdadd fec0::2 fec0::1 any -P in ipsec
		esp/transport//require ;
	EOF
Note that IP address and direction. First IP address means source of IP header. Next IP address means destination of IP header. out means a packet goes out. in means a packet comes in.

At Host-B:

	# setkey -c <<EOF
	spdadd fec0::2 fec0::1 any -P out ipsec
		esp/transport//require ;
	spdadd fec0::1 fec0::2 any -P in ipsec
		esp/transport//require ;
	EOF

Case 2

ESP Transport mode applyed first and AH Transport mode next.
It means that kernel makes a packet to be [IP|AH|ESP|ULP].
	   Host-A                        Host-B
	  fec0::1 ---------------------- fec0::2
Configuration at Host-A:
	# setkey -c <<EOF
	spdadd fec0::1 fec0::2 any -P out ipsec
		esp/transport//require
		ah/transport//require ;
	spdadd fec0::2 fec0::1 any -P in ipsec
		esp/transport//require
		ah/transport//require ;
	EOF
Note that the ordering of security protocol. In outgoing case defined out, it specifies the sequence of security protocol which kernel apply to the packet. In incoming case defined in, it specifies the sequence of security protocol to be applyed to the packet. The above case means that ESP transport mode is first, and the next is AH transport mode.

At Host-B:

	# setkey -c <<EOF
	spdadd fec0::2 fec0::1 any -P out ipsec
		esp/transport//require
		ah/transport//require ;
	spdadd fec0::1 fec0::2 any -P in ipsec
		esp/transport//require
		ah/transport//require ;
	EOF
Note IP addresses as case 1.

Case 3

ESP Tunnel for VPN.
			       ======= ESP =======
			       |                 |
	   Network-A       Gateway-A         Gateway-B        Network-B
	  10.0.1.0/24 ---- 172.16.0.1 ------ 172.16.0.2 ---- 10.0.2.0/24

Configuration at Gateway-A:
	# setkey -c <<EOF
	spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec
		esp/tunnel/172.16.0.1-172.16.0.2/require ;
	spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec
		esp/tunnel/172.16.0.2-172.16.0.1/require ;
Tunnel end points must be defined.

and at Gateway-B:

	# setkey -c <<EOF
	spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec
		esp/tunnel/172.16.0.2-172.16.0.1/require ;
	spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec
		esp/tunnel/172.16.0.1-172.16.0.2/require ;

まとめ

本稿では、racoonの簡単な設定例と3つの代表的な環境をあげて、 それぞれについて IPsec-SAを自動で確立するための設定を述べた。 また、IPsec-SAを自動で確立するための基本メカニズムも説明した。 racoonの細かい設定には、より多くのパラメータが必要になる。 しかし、本稿では全体像を把握することに重点をおいた。 今後、詳細な設定について説明をする。