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]
prefixlen と port は、10 進数で指定する必要があります。 port の周りの角括弧は、実際に必要で、マニュアルページのメタ文字ではありません。 FQDN の解決に関しては、 src と dst に対して適用されるルールがここでも適用されます。
- 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
のいずれかです。 mode がtunnel
であるなら、利用者は、アドレスの間にダッシュ‘-’を付けて、 src と dst として SA のエンドポイントアドレスを指定しなければなりません。これは、使用する SA を指定するために用いられます。 mode がtransport
の場合、 src と dst は、両方省略可能です。 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) を参照してください。 -
-P
direction
アルゴリズム
次の一覧は、サポートされているアルゴリズムを示しています。 protocol と algorithm は、ほぼ完全に直交しています。 protocol パラメータの -A aalgo の aalgo として、認証アルゴリズムの次のリストを使用することができます:
アルゴリズム 鍵長 (ビット) コメント 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 ealgo で ealgo として使用可能な暗号化アルゴリズムの一覧です:
アルゴリズム 鍵長 (ビット) コメント 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 calgo で calgo として使用可能な圧縮アルゴリズムの一覧です:
アルゴリズム コメント 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_range と dst_range は、動作しません。これは、ゲートウェイがパケットを再組み立てしないからです (上位層ヘッダの検査は、できません)。
May 13, 2006 | FreeBSD |