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 ;
}
この設定例について、上から順番に説明する。
- path pre_shared_keyはPhase 1の認証に使うPre-shared Keyを設定しているファイルを示す。
認証方式として Pre-shared Keyを使わない場合は設定する必要はない。
このファイルのフォーマットは hosts(4)と同様に行の先頭に識別子を書いて、
空白文字で区切り、鍵を記述する。
この識別子と鍵のペアを複数書く時は改行する。
例えば、識別子として sakane@kame.net、鍵を hogehoge とすると、
sakane@kame.net hogehoge
となる。今の所、鍵には空白を含める事ができない。
- identifier user_fqdnと identifier fqdnは、Phase 1の認証に使う識別子を設定する。
識別子はIPアドレス、ユーザFQDN、FQDNが使える。
ユーザFQDNとFQDNの区別は特にない。
double quotationで囲む。
また、厳密なチェックをしてないので、ただの文字列でも使える。
remote directive
- remoteは Phase 1の設定をする。
anonymousは全ての相手にマッチする。
相手を限定する場合は、IPアドレスを書くがここでは述べない。
- exchange_modeは Phase 1での通信のモードを設定する。
aggressiveは、aggressive modeで通信することを意味する。
他に main, baseが使える。
これは、それぞれ main mode, base modeで通信することを意味する。
ここに設定したモード以外で相手が通信しようとすると拒否する。
3つのモードを受け付けることは可能だが、その設定方法はここでは述べない。
- remoteの中の identiferは、自分の識別子に何を使うかを指定する。
ここで指定した情報が相手に送信され、認証情報の一つとして使われる。
上記の場合、user_fqdnなので identifier user_fqdnに設定された
sakane@kame.netが採用される。
- lifetime timeと lifetime byteは、
それぞれ時間とバイト数による IPsec-SAの有効期間を設定する。
有効期間の単位としては sec, min, hourが使える。
有効バイト数の単位としては B, KB, MB, TBが使えるが、1024B以上でなければならない。
- proposalは Phase 1で使う proposalを設定する。
複数の proposalを記述することができるが、その設定方法はここでは述べない。
- encryption_algorithmは暗号アルゴリズムを設定する。
暗号アルゴリズムとしては DES, 3DES, RC5, IDEA, CAST, BLOWFISHが使える。
それぞれ des, 3des, rc5, idea, cast, blowfishとして設定する。
- hash_algorithmはハッシュアルゴリズムを設定する。
ハッシュアルゴリズムとしては MD5, SHA1が使える。
それぞれ md5, sha1として設定する。
- authentication_methodは認証方式を設定する。
上記の場合は Pre-shared Keyの使用を意味する。
他に RSA Signatureも使えるが、その設定方法はここでは述べない。
- dh_groupは DH交換のグループを設定する。
グループとして、1, 2, 5が使える。
それぞれ 1, 2, 5として設定する。
sainfo directive
- sainfoは Phase 2の設定をする。
anonymousは全ての相手にマッチする。
相手を限定することもできるが、その設定方法はここでは述べない。
- pfs_groupは Phase 2で使用するDH交換のグループを設定する。
グループとして、1, 2, 5が使える。
それぞれ 1, 2, 5として設定する。
- lifetime timeと lifetime byteは、
それぞれ時間とバイト数による IPsec-SAの有効期間を設定する。
有効期間の単位としては sec, min, hourが使える。
有効バイト数の単位としては B, KB, MB, TBが使えるが、1024B以上でなければならない。
- encryption_algorithmはESPで使用する暗号アルゴリズムの候補を設定する。
暗号アルゴリズムとしては DES, 3DES, RC5, CAST, BLOWFISH, NULLが使える。
それぞれ des, 3des, rc5, idea, cast, blowfish, null_encとして設定する。
- authentication_algorithmはESPまたはAHで使用する認証アルゴリズムの候補を設定する。
認証アルゴリズムとしては HMAC-SHA1, HMAC-MD5, Keyed-MD5が使える。
それぞれ hmac_sha1, hmac_md5, kpdkとして設定する。
- compression_algorithmは圧縮アルゴリズムの候補を設定する。
圧縮アルゴリズムとしては DEFLATEのみが使える。
deflate と指定する。
上記の設定は、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の細かい設定には、より多くのパラメータが必要になる。
しかし、本稿では全体像を把握することに重点をおいた。
今後、詳細な設定について説明をする。