EN JA
SETKEY(8)
SETKEY(8) FreeBSD System Manager's Manual SETKEY(8)

名称

setkey手動で IPsec の SA/SP データベースを操作する

書式

setkey [ -v] -c

setkey [ -v] -f filename

setkey [ -aPlv] -D

setkey [ -Pv] -F

setkey [ -h] -x

解説

setkey ユーティリティは、カーネル内のセキュリティアソシエーションデータベース (SAD) エントリとセキュリティポリシデータベース (SPD) エントリを、追加・更新・内容列挙・削除します。

setkey ユーティリティは、一連の操作を標準入力から受け取るか ( -c 付で起動された場合)、 filename という名前のファイルから受け取ります ( -f filename 付で起動された場合)。

-D
SAD エントリをダンプします。 -P 付の場合、SPD エントリをダンプします。
-F
SAD エントリを捨てます。 -P 付の場合、SPD を捨てます。
-a
setkey は、通常、 -D では、死んだ SAD エントリを表示しません。 -a 付の場合、死んだ SAD エントリも表示します。死んだ SAD エントリとは、期限切れではあるものの、 SPD エントリから参照されているためにシステム中に残っているものを指します。
-h
-x モードにおいて、16 進数ダンプを追加します。
-l
-D において、短い出力で無限ループします。
-v
冗長になります。プログラムは、 PF_KEY ソケット上で交換したメッセージをダンプします。これには、他プロセスからカーネルに送られたメッセージを含みます。
-x
無限ループし、 PF_KEY ソケットへ送られる全メッセージをダンプします。 -xx は、各タイムスタンプのフォーマットをやめます。 -xx は、各タイムスタンプを書式化しないようにします。

設定構文

コマンド行に -c または -f を付けると、 setkey は、次の設定構文を受けつけます。ハッシュ記号 (‘ #’) で始まる行は、コメント行として扱われます。
add [ -46n] src dst protocol spi [ extensions] algorithm ... ;
単一の SAD エントリを追加します。 add の失敗にはいくつか理由があり、鍵の長さが指定したアルゴリズムに合致しない場合が含まれます。
get [ -46n] src dst protocol spi ;
単一の SAD エントリを表示します。
delete [ -46n] src dst protocol spi ;
単一の SAD エントリを削除します。
deleteall [ -46n] src dst protocol ;
指定に適合するすべての SAD エントリを削除します。
flush [ protocol] ;
オプションに適合する全 SAD エントリをクリアします。コマンドラインに -F を指定すると、同じ効果が得られます。
dump [ protocol] ;
オプションに適合する全 SAD エントリをダンプします。コマンドラインに -D を指定すると、同じ効果が得られます。
spdadd [ -46n] src_range dst_range upperspec policy ;
単一の SPD エントリを追加します。
spddelete [ -46n] src_range dst_range upperspec -P direction ;
単一の SPD エントリを削除します。
spdflush ;
全 SPD エントリをクリアします。コマンドラインに -FP を指定すると、同じ効果が得られます。
spddump ;
全 SPD エントリをダンプします。コマンドラインに -DP を指定すると、同じ効果が得られます。

メタ引数は、下記の通りです:

src
dst
セキュアコミュニケーションの始点/終点を IPv4/v6 アドレスで指定します。 setkey ユーティリティは、FQDN を数値アドレスに解決可能です。 FQDN が複数のアドレスに解決された場合、 setkey は、すべての組み合わせを試みて、複数の SAD/SPD エントリをカーネルにインストールします。 -4, -6, -n は、FQDN の解決を制限します。 -4-6 は、それぞれ、結果が IPv4/v6 アドレスのみになるよう制限します。 -n は、FQDN の解決を防止し、アドレスが数値アドレスであることを要求します。

protocol
protocol は、次のいずれか 1 つです:
esp
rfc2406 を基にした暗号ペイロード
esp-old
rfc1827 を基にした暗号ペイロード
ah
rfc2402 を基にした認証ヘッダ
ah-old
rfc1826 を基にした認証ヘッダ
ipcomp
IPComp
tcp
rfc2385 を基にした TCP-MD5

spi
SAD および SPD 用の、セキュリティパラメータインデックス (SPI)。 spi は、10 進数または‘ 0x’付きの 16 進数で指定する必要があります。範囲 0 から 255 の SPI 値は、将来の使用のために IANA が予約しており、使用できません。 TCP-MD5 関係は、0x1000 を使わないとなりませんので、現時点では、ホストごとの粒度しかありません。

extensions
次に示す引数を受け付けます:
-m mode
使用するセキュリティプロトコルモードを指定します。 mode は、次のいずれか 1 つです: transport, tunnel, any。デフォルト値は、 any です。
-r size
繰り返し攻撃を防ぐためのウィンドウサイズをバイト数で指定します。 size は、32 ビットワードの 10 進数で指定する必要があります。 size が 0 または指定されなかった場合、繰り返しのチェックは行われません。
-u id
SAD 中のポリシエントリの識別子を指定します。 policy を参照してください。
-f pad_option
ESP パディングの内容を指定します。 pad_option は、次のいずれか 1 つです:
zero-pad
パディングは、すべて 0。
random-pad
一連の乱数値を設定。
seq-pad
1 から開始して増加する一連の数を設定。
-f nocyclic-seq
周期的な順序番号を許可しません。
-lh time
-ls time
SA のハード有効期間/ソフト有効期間を指定します。

algorithm
-E ealgo key
ESP 用に暗号化アルゴリズム ealgo を指定します。
-E ealgo key -A aalgo key
ESP 用に暗号化アルゴリズム ealgo とペイロード認証アルゴリズム aalgo を指定します。
-A aalgo key
AH 用に認証アルゴリズムを指定します。
-C calgo [ -R]
IPComp 用に圧縮アルゴリズムを指定します。 -R が指定されると、 spi フィールド上の値が、ワイヤ上にそのまま IPComp CPI (compression parameter index) フィールドとして使用されます。 -R が指定されないと、カーネルは、ワイヤ上に良く知られた CPI を使用し、 spi フィールドは、カーネル内部使用のためのインデックスとしてのみ使用されます。

key は、ダブルクォートで括られた文字列か、一続きの‘ 0x’付き 16 進数で指定する必要があります。

ealgo, aalgo, calgo が取り得る値は、別の節で規定します。

src_range
dst_range
セキュアコミュニケーションの選択であり、 IPv4/v6 アドレスまたは IPv4/v6 アドレス範囲で指定します。 TCP/UDP ポート指定を付加することも可能です。次の形式を受け付けます:

address 
address/prefixlen 
address[port] 
address/prefixlen[port]

prefixlenport は、10 進数で指定する必要があります。 port の周りの角括弧は、実際に必要で、マニュアルページのメタ文字ではありません。 FQDN の解決に関しては、 srcdst に対して適用されるルールがここでも適用されます。

upperspec
使用される上位層プロトコル。利用者は、 icmp6, ip4 または any と同様に、 upperspec として、 /etc/protocols の単語の 1 つを使用することができます。単語 any は、“任意のプロトコル”を意味します。また、プロトコル番号は、 upperspec を指定するために使用されます。また、ICMPv6 に関連するタイプとコードは、 upperspec として指定されます。タイプは、最初に指定され、コンマが続いて、次に、関連するコードが指定されます。仕様は、 icmp6 の後に置かれなければなりません。カーネルは、ワイルドカードを 0 と見なしますが、ワイルドカードと 0 の ICMPv6 タイプを区別することができません。次の例は、IPSec が着信 Neighbor Solicitation (近隣要請) に対して必要でないポリシを示します:

spdadd ::/0 ::/0 icmp6 135,0 -P in none;

注: upperspec は、現時点では、実装されていない転送ノードで、特別の再構築を必要とするので、この時点での転送の場合に動作しません。 /etc/protocols には、多くのプロトコルがありますが、TCP 以外のプロトコル、UDP と ICMP は、 IPsec と共に使用することは、適切ではありません。

policy
policy は、次の 3 つの形式の 1 つで表されます:

-P direction discard
-P direction none
-P direction ipsec protocol/mode/src-dst/level [ ...]

ポリシの指示は、次の 1 つで指定されなければなりません: out, in, discard, none または ipsec です。 discard 指示は、供給されたインデックスにマッチするパケットが捨てられることを意味し、一方 none は、IPsec 操作がパケットで行われないことを意味し、 ipsec は、IPsec 操作がパケットで行われることを意味します。 protocol/mode/src-dst/level 文は、パケットを処理するための規則を与えます。 protocol は、 ah, esp または ipcomp として指定されます。 mode は、 transport または tunnel のいずれかです。 modetunnel であるなら、利用者は、アドレスの間にダッシュ‘-’を付けて、 srcdst として SA のエンドポイントアドレスを指定しなければなりません。これは、使用する SA を指定するために用いられます。 modetransport の場合、 srcdst は、両方省略可能です。 level は、次の 1 つです: default, use, require または unique。 SA がすべてのレベルで利用可能でないなら、カーネルは、鍵交換デーモンから SA を要求します。 default の値は、システム全体のデフォルトプロトコルを使用するようにカーネルに伝えます、例えば、カーネルがパケットを処理するとき、 esp_trans_deflev sysctl 変数からのものです。 use の値は、それが利用可能であるなら、カーネルが SA を使用することを意味し、そうでなければ、カーネルは、通常のようにパケットを通過します。 require の値は、カーネルがポリシにマッチするマッチされたパケットを送信するときは、いつも、SA が必要とされることを意味します。 unique レベルは、 require と同じですが、さらに、ポリシは、ユニークな外向きの SA とバインドできます。例えば、利用者がポリシレベル unique, を指定するなら、 racoon(8) は、ポリシのために SA を設定します。そのポリシのために手動のキュー入力によって SA を設定するなら、次の例のように、コロン‘ :’によって区切られた unique の後のポリシ識別子として 10 進数を置くことができます: unique:number。 SA に、このポリシをバインドするために、 number は、手動の SA 設定の extensions -u 対応する、1 と 32767 の間でなければなりません。

SA バンドルを使用したいとき、利用者は、複数の規則を定義することができます。例えば、IP ヘッダに、AH ヘッダ、ESP ヘッダ、上位層のプロトコルヘッダが続くなら、規則は、次のようになるでしょう:

esp/transport//require ah/transport//require;

ルールの順序は、非常に重要です。

discard”と“ none”は、 ipsec_set_policy(3) に記述されている構文には、存在しないことに注意してください。構文には、小さな、しかし、重要な違いがあります。詳細については、 ipsec_set_policy(3) を参照してください。

アルゴリズム

次の一覧は、サポートされているアルゴリズムを示しています。 protocolalgorithm は、ほぼ完全に直交しています。 protocol パラメータの -A aalgoaalgo として、認証アルゴリズムの次のリストを使用することができます:

アルゴリズム 鍵長 (ビット) コメント 
hmac-md5 128  ah: rfc2403 
  128  ah-old: rfc2085 
hmac-sha1 160  ah: rfc2404 
  160  ah-old: 128bit ICV (文書無し) 
keyed-md5 128  ah: 96bit ICV (文書無し) 
  128  ah-old: rfc1828 
keyed-sha1 160  ah: 96bit ICV (文書無し) 
  160  ah-old: 128bit ICV (文書無し) 
null  0 〜 2048 デバッグ用 
hmac-sha2-256 256  ah: 96bit ICV 
    (draft-ietf-ipsec-ciph-sha-256-00) 
  256  ah-old: 128bit ICV (文書無し) 
hmac-sha2-384 384  ah: 96bit ICV (文書無し) 
  384  ah-old: 128bit ICV (文書無し) 
hmac-sha2-512 512  ah: 96bit ICV (文書無し) 
  512  ah-old: 128bit ICV (文書無し) 
hmac-ripemd160 160  ah: 96bit ICV (RFC2857) 
    ah-old: 128bit ICV (文書無し) 
aes-xcbc-mac 128  ah: 96bit ICV (RFC3566) 
  128  ah-old: 128bit ICV (文書無し) 
tcp-md5  8 〜 640 tcp: rfc2385

次に示すのは、 protocol パラメータの -E ealgoealgo として使用可能な暗号化アルゴリズムの一覧です:

アルゴリズム 鍵長 (ビット) コメント 
des-cbc  64  esp-old: rfc1829, esp: rfc2405 
3des-cbc 192  rfc2451 
null  0 〜 2048 rfc2410 
blowfish-cbc 40 〜 448 rfc2451 
cast128-cbc 40 〜 128 rfc2451 
des-deriv 64  ipsec-ciph-des-derived-01 
3des-deriv 192  文書無し 
rijndael-cbc 128/192/256 rfc3602 
aes-ctr  160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03 
camllia-cbc 128/192/256 rfc4312

aes-ctr 鍵の最初の 128/192/256 ビットは、AES 鍵として使用され、残りの 32 ビットは、nonce として使用されることに注意してください。

次に示すのは、 protocol パラメータの -C calgocalgo として使用可能な圧縮アルゴリズムの一覧です:

アルゴリズム コメント 
deflate  rfc2394

終了ステータス

The setkey utility exits 0 on success, and >0 if an error occurs.

使用例

des-cbc 暗号化アルゴリズムを使用して、2 つの IPv6 アドレスの間の ESP SA を追加します。

add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457 
 -E des-cbc 0x3ffe05014819ffff ; 

指定された 2 つの FQDN のホストの間の認証 SA を追加します:

add -6 myhost.example.com yourhost.example.com ah 123456 
 -A hmac-sha1 "AH SA configuration!" ; 

指定された 2 つの数値のホストの間の ESP と AH の両方を使用します:

add 10.0.11.41 10.0.11.33 esp 0x10001 
 -E des-cbc 0x3ffe05014819ffff 
 -A hmac-md5 "authentication!!" ; 

上記の最初の例に関連している SA 情報を取得します。

get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ; 

データベースからすべてのエントリをフラッシュします:

flush ; 

データベースから ESP エントリをダンプします:

dump esp ; 

トンネルモードの ESP を使用する 2 つのネットワークの間のセキュリティポリシを追加します:

spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any 
 -P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ; 

指定された 2 つの数値ホストの間の TCP MD5 を使用します:

add 10.1.10.34 10.1.10.36 tcp 0x1000 -A tcp-md5 "TCP-MD5 BGP secret" ; 

関連項目

ipsec_set_policy(3), racoon(8), sysctl(8) Changed manual key configuration for IPsec, http://www.kame.net/newsletter/19991007/, October 1999.

歴史

setkey ユーティリティは、WIDE Hydrangea IPv6 プロトコルスタックキットではじめて登場しました。本ユーティリティは、1998 年 6 月に、完全に再デザインされました。

バグ

setkey ユーティリティは、構文エラーをよりよく報告し、扱えるべきです。

IPsec ゲートウェイ設定では、 TCP/UDP ポート番号付きの src_rangedst_range は、動作しません。これは、ゲートウェイがパケットを再組み立てしないからです (上位層ヘッダの検査は、できません)。

May 13, 2006 FreeBSD