SETKEY(8)

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

書式
setkey [-dv] -c setkey [-dv] -f filename setkey [-adPlv] -D setkey [-dPv] -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 エントリから参照されているために残っているものを指します。

-d  コマンドパーザ用のデバッグメッセージ表示を有効にし、 カーネルとは対話をしません。 これは通常は使用しません。

-x  無限ループし、 PF_KEY ソケットへ送られる全メッセージをダンプします。 -xx は、各タイムスタンプのフォーマットをやめます。

-h  -x モードにおいて、16 進数ダンプを追加します。

-l  -D において、短い出力で無限ループします。

-v  冗長になります。 プログラムは、 PF_KEY ソケット上で交換したメッセージをダンプします。 これには他プロセスからカーネルに送られたメッセージを含みます。

操作は、次の文法です。 ハッシュマーク ('#') で始まる行は コメント行として扱われることに注意してください。

    add src dst protocol spi [extensions] algorithm...; 単一の SAD エントリを追加します。

    get src dst protocol spi; 単一の SAD エントリを表示します。

    delete src dst protocol spi; 単一の SAD エントリを削除します。

    deleteall src dst protocol; 指定に適合するすべての SAD エントリを削除します。

    flush [protocol]; オプションに適合する全 SAD エントリをクリアします。

    dump [protocol]; オプションに適合する全 SAD エントリをダンプします。

    spdadd src_range dst_range upperspec policy; 単一の SPD エントリを追加します。

    spddelete src_range dst_range upperspec -P direction; 単一の SPD エントリを削除します。

    spdflush; 全 SPD エントリをクリアします。

    spddump; 全 SPD エントリをダンプします。

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

src
dst セキュアコミュニケーションの始点/終点を IPv4/v6 アドレスで指定します。 setkey は引数 src と dst について、ホスト名からアドレスへの問い合わせを行いません。 これらは数値形式で指定する必要があります。

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

spi SAD および SPD 用の、セキュリティパラメータインデックス (SPI)。 範囲 0 から 255 の SPI 値は使用できません。 10 進数または 16 進数 (0x 付) で指定する必要があります。

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
        暗号化アルゴリズムを指定します。
    -A aalgo key
        認証アルゴリズムを指定します。 -A が protocol esp と共に使用されると、暗号ペイロードの ペイロード認証アルゴリズムとして扱われます。
    -C calgo [-R]
        圧縮アルゴリズムを指定します。 -R が ipcomp 行と共に指定されないと、カーネルは良く知られた (well-known) IPComp CPI (圧縮パラメータインデックス) をパケット上の IPComp CPI フィールドで使用し、 spi フィールドは無視されます。 この場合、 spi フィールドはカーネル内部でのみ使用されます。 -R が使用されると、 spi フィールド上の値が、出力パケットの IPComp CPI フィールドに現れます。 この場合、 spi フィールドは 0x10000 未満であることが必要です。

    protocol esp は -E と -A を受け付けます。 protocol esp-old は -E のみを受け付けます。 protocol ah と ah-old は -A のみを受け付けます。 protocol ipcomp は -C のみを受け付けます。

    key は、ダブルクォートで括られた文字列か、 一続きの 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 の周りの角括弧は、実際に必要です。 マニュアルページのメタ文字ではありません。

    setkey は引数 src と dst について、ホスト名からアドレスへの問い合わせを行いません。 これらは数値形式で指定する必要があります。

upperspec
    使用する上位層プロトコル。 upperspec として、 /etc/protocols 中の 1 語を使用可能です。 または、 icmp6, ip4, any を指定可能です。 any は “任意のプロトコル” を意味します。 また、プロトコル番号を使用可能です。

    注: upperspec は、現時点では転送に対して機能しません。 転送ノードにおいて、追加の再構成 (現時点では未実装) が必要となるからです。 /etc/protocols には多数のプロトコルが登録されていますが、 TCP, UDP, ICMP 以外は IPSec と共に使用するには不適切かもしれません。 そのようなプロトコルの使用には、注意してください。

policy
    policy は次のいずれか 1 つです:

        -P
        direction
        discard

        -P
        direction
        none

        -P
        direction
        ipsec
        protocol/mode/src-dst/level

    ポリシの方向を direction で指定する必要があります。 out または in が使用されます。 discard は、インデックスに適合するパケットが捨てられることを意味します。 none は、パケットに対して IPsec 操作が実施されないことを意味します。 ipsec は、パケットに対して IPsec 操作が実施されることを意味します。 ah, esp, ipcomp のいずれかを、 protocol として設定します。 mode は transport または tunnel のいずれかです。 mode が tunnel の場合、 SA の末端アドレスを、 src および dst で、両アドレス間に ‘-’ を付けて指定する必要があります。 これは、使用する SA を指定するために用いられます。 mode が transport の場合、 src と dst は両方省略可能です。 level は次のいずれかです: default, use, require, unique 。 すべてのレベルにおいて SA が利用可能でない場合、 SA 取得要求をカーネルは鍵交換デーモンに送ります。 default は、カーネルがパケットを処理するとき、 指定したプロトコルについて、 システム全体のデフォルトを問い合わせることを意味します。 これは例えば sysctl 変数 esp_trans_deflev を指します。 use は、カーネルが SA を使用可能であれば使用し、 使用不能の場合には通常操作を続けることを意味します。 require は、ポリシに適合するパケットをカーネルが送る時には いつも SA が必要であることを意味します。 unique は require と同じです。 更に、ポリシが一意な外向き SA に結合することを許します。 unique の後にコロン ‘’ で区切った後に 10 進数でポリシ識別子を指定可能であり、次のようにします: unique:number 。 number は 1 から 32767 の範囲にあることが必要です。 これは、 extensions -u に対応します。

    “discard” と “none” は ipsec_set_policy(3) に記述されている構文には存在しないことに注意してください。 両者の構文にはちょっとした違いがあります。 詳細は ipsec_set_policy(3) を参照してください。

アルゴリズム
次の一覧は、サポートされているアルゴリズムを示しています。 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 (文書無し)
    		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 (文書無し)

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

    アルゴリズム	鍵長 (ビット)	コメント
    des-cbc		64		esp-old: rfc1829, esp: rfc2405
    3des-cbc	192		rfc2451
    simple		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	draft-ietf-ipsec-ciph-aes-cbc-00

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

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

使用例

    add	3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
    		-E des-cbc "ESP SA!!" ;
    add	3ffe:501:4819::1 3ffe:501:481d::1 ah 123456
    		-A hmac-sha1 "AH SA configuration!" ;
    add	10.0.11.41 10.0.11.33 esp 0x10001
    		-E des-cbc "ESP with"
    		-A hmac-md5 "authentication!!" ;
    get	3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
    flush ;
    dump esp ;
    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 ;

戻り値
本コマンドは成功時に 0 を、エラー時に 0 以外を返します。

関連項目
ipsec_set_policy(3), racoon(8), sysctl(8)

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