EN JA
IPSEC_SET_POLICY(3)
IPSEC_SET_POLICY(3) FreeBSD Library Functions Manual IPSEC_SET_POLICY(3)

名称

ipsec_set_policy, ipsec_get_policylen, ipsec_dump_policy人間に解読可能な文字列からの IPsec ポリシ構造体を作成する

ライブラリ

IPsec Policy Control Library (libipsec, -lipsec)

書式

#include < netipsec/ipsec.h>

char *
ipsec_set_policy( char *policy, int len);

int
ipsec_get_policylen( char *buf);

char *
ipsec_dump_policy( char *buf, char *delim);

解説

ipsec_set_policy() 関数は、人間に解読可能なポリシ明細から IPsec ポリシ明細構造体 struct sadb_x_policy および/または struct sadb_x_ipsecrequest を生成します。ポリシ明細は、 policy 引数と len で与えられる文字列の長さで渡された、C 文字列として与えられなければなりません。 ipsec_set_policy() 関数は、適切に形成された IPsec ポリシ明細構造体を含むバッファへのポインタを返します。バッファを動的に割り付けられ、 free(3) ライブラリ関数を使用することによって解放しなければなりません。

ipsec_get_policylen() 関数は、明細構造体を setsockopt(2) システムコールに渡すときに必要となるバッファの長さを返します。

ipsec_dump_policy() 関数は IPsec ポリシ構造体を人間が解読可能な形式に変換します。 buf 引数は IPsec ポリシ構造体 struct sadb_x_policy を指します。 delim は通常、空白文字である、デリミタ (区切り文字) 文字列です。使用者が delimNULL に設定したなら、単一の空白類が仮定されます。 ipsec_dump_policy() 関数は動的に割り付けられた文字列へのポインタを返します。 free(3) ライブラリ呼び出しを使用して、返されたポインタを解放するのは呼び出し側の責任です。

policy は次の方法で与えられます:

direction discard
direction (方向) は in または out でなければなりません。そして、内向き、または、外向きのパケットのいずれかでポリシが適用されるために必要とする方向を指定します。 discard (破棄) ポリシが選択されたとき、それらがポリシと一致するなら、パケットは落とされます。
direction entrust
entrust (委任) は setkey(8) によって制御されるときにカーネルでセキュリティポリシデータベース (SPD) を調べる手段です。
direction bypass
bypass (バイパス) の方向は IPsec 処理が生じるべきでなくて、パケットが明らかに転送されることを示します。 bypass オプションは特権があるソケットだけで利用可能です。
direction ipsec request ...
ipsec の方向は、一致するパケットが IPsec によって処理されることを意味します。 ipsec は、次のような形式の 1 つ以上の request 文字列が続くかもしれません:
protocol / mode / src - dst [ /level]
protocol は、次の 1 つです: Authentication Header, Encapsulating Security プロトコルまたは IP Compression プロトコルが使用されることを示す、 ah, esp または ipcomp です。

mode は、 transport または、 ipsec(4) に説明された両方のモードを意味する tunnel のいずれかです。

srcdst は発信元 (始点) と宛先 (終点) システムの v4 か v6 の IP アドレスを指定します。 src は常に“送信ノード”を意味し、 dst は常に“受信ノード”を意味します。 directionin のとき、 dst は、このローカルのノードであり、 src は、リモートノードかピア (相手側) です。 modetransport (転送) であるなら、 srcdst の両方は省略することができます。

level は次のうちの 1 つに設定されなければなりません: default, use, require または uniquedefault は、カーネルが sysctl(8) 変数の 1 組によって定義されるようなデフォルトのセキュリティポリシを調べるであることを意味します。関連する sysctl(8) 変数は ipsec(4) に説明されています。

use が選択されるとき、関連するセキュリティアソシエーション (SA) は、利用可能であるときに使用することができますが、必要ではありません。 SA が利用可能であるなら、パケットは IPsec によって取り扱われます、すなわち、暗号化され、そして/または、認証されますが、 SA が利用可能でないなら、パケットは明白に転送されます。 use オプションは、暗号化されるか認証されるリンクが非暗号化されるか、または非認証されたようになるところで偶然の誤設定を考慮して推薦されません。 require キーワードは、可能なところで use の代わりに推奨されます。ろで推薦されます。 require キーワードを使用することは、関連している SA が必要であり、カーネルがすべて一致するパケットで IPsec 処理を実行しなければならないことを意味します。

unique キーワードは、 require と同じ効果がありますが、外向きのトラフィックのための SA が、このポリシにだけ使用されるという制限を加えます。利用者は、 setkey(8) を使用して手動のキー入力によって SA を定義するとき、ポリシと SA を関係づけるための識別子を必要とします。このようにして unique キーワードの後に識別子として 10 進数を置きます。 unique: numbernumber は 1 と 32767 の間でなければなりません。

request 文字列が明白に保たれるなら、 levellevel の前のスラッシュは省略することができますが、利用者は、故意でない振る舞いを避けるために明らかにそれらを指定することが奨励されます。 level が省略されるなら、 default として解釈されます。

ここと setkey(8) で許された明細の間には違いがあることに注意してください。 setkey(8) でセキュリティポリシを指定するとき、 entrust と bypass のどちらも使用されません。詳細については setkey(8) を参照してください。

戻り値

ipsec_set_policy() 関数は、成功すればポリシ明細を含む割り付けられたバッファへのポインタを返します。そうでければ、NULL ポインタが返されます。

ipsec_get_policylen() 関数は成功すれば、バッファサイズを示す正の数を返し、エラーの場合は負の数を返します。

ipsec_dump_policy() 関数は成功すれば人間が解読可能なセキュリティポリシを含む動的に割り付けられた領域へのポインタを返し、エラーの場合は NULL を返します。

使用例

すべての内向きのパケットが破棄されるポリシを設定します。

in discard

すべての外向きのパケットは、ESP を使用して IPsec と転送によって処理されるために必要です。

out ipsec esp/transport//require

すべての内向きのパケットは、AH プロトコルを使用して認証されるために必要です。

in ipsec ah/transport//require

終点 10.1.1.2 と 10.1.1.1 通して外向きのパケットをトンネル化します。

out ipsec esp/tunnel/10.1.1.2-10.1.1.1/require

歴史

これらの関数は、WIDE/KAME IPv6 プロトコルスタックキットではじめて登場しました。

KAME プロジェクト (http://www.kame.net/) スタックに基づく IPv6 と IPsec サポートは、最初に FreeBSD 4.0 に統合されました。

February 14, 2006 FreeBSD