xfwp を使用するためには、起動時に xfwp の位置がわかるように設定されて
おり、ローカルの環境で動作している X プロキシマネージャが必要である。
[注意: ローカルの環境で複数の xfwp を動かすことができる。詳しくは後述
のロードバランシングについての説明を参照すること。] xfindproxy ユーティ
リティを使って(これはリクエストをプロキシマネージャ経由で中継する)、ユー
ザは xfwp に特定の X サーバに対するクライアントの監視ポートを割り当て
ることができる。これは、内部的にはそのサーバに対する将来の接続リクエス
トに関連づけられる。プロキシマネージャは、このクライアント待ちのポート
番号を xfindproxy 経由で返す。その後、xfwp のホスト名とポート番号はバ
ンド外のツールによって(つまりウェブブラウザ経由で)リモートの X クライ
アントに渡される。これにより、目的の X サーバではなく xfwp に接続する
ことができる。
X クライアントの接続リクエストが xfwp の待ちポートのひとつに届いたとき、
xfwp はこの待ちポートに対応する X サーバに接続して認証チェックを行う。
この認証チェックはサーバおよび、リクエストしてくるクライアントに対して
xfwp が持っている設定可能なアクセス制御リストについて行われる。
チェックに失敗した場合や、リクエストを受けたサーバが
X セキュリティ機能拡張に対応していない場合には、クライアント接続は失敗
する。
そうでない場合には接続は認められ、それ以降のクライアントとサーバ間の通
信は xfwp によって中継される。
この中継はクライアントが接続を閉じるか、クライアント接続のアクティブで
ない状態が指定されたタイムアウト期限を超えるまで行われる。
システムサイクルへの負担を最小限にするため、xfwp は接続上で通信を待つ
間はブロックするように設計されている。
設定ファイルなし、つまりサイトポリシーを定義せずに xfwp が実行されてい る場合で、xhost + が実行されてホストベースの認証チェックが無効になって いる X サーバを使って xfwp が動作している場合には、クライアントが xfwp 経由でこの X サーバに接続しようとすると、X サーバはその接続を拒否する。 xfwp がサイトポリシーを定義していない場合は、クライアントが xfwp 経由 で X サーバに接続するためにはホストベースの認証が有効でなければならない。
xfwp を動作させるためには、IP パケットフィルタリングルータの規則から、 ポート 6000-6xxx に対するアクセス制限を取り除かなければならない。[注意: xfwp は 6001 から始まる範囲のポートだけを割り当てる。したがって、全て の内部ネットワーク上のホストに対するポート 6000 番へのアクセスは禁止し たままでよい。] これは、内部ネットワークののファイアウォールを X クラ イアントによる無差別アクセスに対してオープンにするということではない。 xfwp は、IP パケットフィルタリングルータそのものと同様の、完全に設定可 能な規則ベースのアクセス制御システムをサポートしている。 xfwp は実際には、完全に設定可能かつX の通信専用で適用される、ルータと は別のレベルのパケットフィルタリング制御を追加する。詳しくは、 「設定ファイル」のセクションを参照すること。
それぞれの接続タイプはデフォルト数の割り当てスロットとデフォルトの タイムアウト値を持っている。 PM 接続と X サーバ接続に対する割り当てスロットの数はコマンド行オプション で設定できる。 接続タイムアウトもコマンド行オプションで設定できる。 タイムアウト値とは、データが流れないままでオープンした接続状態が許され る時間である。接続上にデータが流れると、 接続を閉じるまでの時間は自動的にリセットされる。4つの接続タイプにおけ プロセスの接続スロット全体のデフォルトの配分と、それぞれの接続タイプに 対するデフォルトのタイムアウト値の選択は、xfwp の利用モデルが含んでい る多くの仮定に基づいて決まる。
PM 接続のデフォルト値は 10 であり、PM 接続のデフォルトの持続時間は、 それぞれの接続について最後にデータが流れてから 3,600 秒(1時間)である。 起動時には、xfwp は任意の非予約ポート(xfwp のコマンド行で指定しな ければ、デフォルト値の 4444 が使われる)において PM 接続リクエストを待 つ。PM は通常、xfindproxy を使って PM の呼び出しが行われたときしか xfwp に接続しない。 以降は、両者のメッセージ交換が終わった後でも、デフォルトの接続有効期間 の間は PM は xfwp に接続したままである。場合によっては、これが原因で PM 接続スロットが枯渇してしまうこともある。 システム管理者は、多くの PM から1つの xfwp に接続が行われることを予想 した場合には、-pdt コマンド行オプションを用い、アクティブでない接 続がオープン状態であることが許される範囲で望ましい有効期間を反映させた タイムアウト値を指定して xfwp を起動すべきである。
xfwp クライアントリスナは、xfindproxy を呼び出して設定することができる。 最後のデータが流れた時点から86,400秒(24時間) の有効期間の間は、X クラ イアントの接続リクエストを待ち続ける。この期間を過ぎると、リスナは自動 的にクローズされ、その fd は後で割り当てられるために回収される。 クライアントの待ちポートが利用可能であることを保証するような別のタイム アウト値をどうやって選べばよいかという問題に対しては、システム管理者は (xfindproxy を使って)リスナが割り当てられた時間とクライアントが実際に xfwp への接続を試みる時間との間に予想されるずれを考慮しなければならな い。また、最初のクライアントデータ接続が閉じた後にクライアントのリスナ が再利用される見込みも考慮しなければならない。
それぞれのクライアント接続には、最後にデータが流れてから 604,800 秒 (7* 24 時間)の存続時間がデフォルトで割り当てられる。 この期間が過ぎると、接続は自動的にクローズされ、その fd は将来の 割り当てのために回収される。 実際には、サーバ接続はリモートの X クライアントからの接続リクエストが fwp のクライアント待ちポートのいずれかに届くまでは確立されないので、 クライアントデータのタイムアウトはクライアント-xfwp および xfwp-サーバ の両方の接続に対して適用される。xfwp を通じて多くのクライアントデータ 接続が生じることが予想される場合、システム管理者はデフォルトのタイムア ウト値を変更することを考えるべきである。
設定ファイルのある行が '#' で始まる場合や空行の場合は、その行は 無視されて評価ルーチンは次の行へと進む。
設定ファイルでは、全く独立の2つの認証チェックがサポートされている。1つ は xfwp 自身が実行するものであり、もう1つは xfwp の目的のサーバへの問 い合わせの結果である。前者においては、設定ファイルでは IP パケットフィ ルタリングルータに似た記法やセマンティックが使われている。これは以下の 形式の、0個以上の「始点アドレス-終点アドレス」の規則からなる。
{permit | deny} <src> <src mask> [<dest> <dest mask> [<operator> <service>]]
後者の認証チェックの場合には、設定ファイルは次の形式のサイトのポリシー 規則を0個以上含む:
{require | disallow} sitepolicy <site_policy>
規則マッチングのアルゴリズムは以下である:
許可と拒否の規則でサービスや操作が指定されていない場合、その規則は 全てのサービスに適用される。設定ファイルが指定されており、その中に 有効な許可か拒否の規則がひとつでも含まれる場合は、許可が明示的に与えら れていないホストは接続を拒否されるようになる。
サイトのポリシー設定のチェックは、入ってくる接続リクエストに対する別の (そして X サーバだけの)認証で構成される。require(満たさなければならな い)の規則と disallow(接続禁止)の規則を任意の数だけ指定することができる が、全ての規則は同じタイプでなければならない。つまり、1つのファイルに ``require'' と ``disallow'' のキーワードをどちらも記述するとはできない。 このチェックのためのアルゴリズムは以下である:
xfwp がサイトのポリシーのチェックを行うのは、始点アドレス-終点アドレス のチェックで接続を認められた場合だけである。
# サーバがこれらのポリシーの1つをサポートしている場合に限り、接続が許可 # されるが、それでも適用可能な規則にマッチしていなければならない # require sitepolicy policy1 require sitepolicy policy2 # # 8.7.6.5 が送ってきた pm 接続を拒否する。[注意: pm サービスを明示的に # 許可している場合、以下に示すように destination フィールドがなければ # ならない。] # deny 8.7.6.5 0.0.0.0 0.0.0.0 255.255.255.255 eq pm # # xfindproxy の X サーバがどこにでも接続できるように許可する [注意: fp # サービスを明示的に許可している場合、以下に示すように source フィール # ドがなければならない。] # permit 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255 eq fp # # IP ドメイン 192.0.0.0 から送られた全ての接続タイプだけを許可する # permit 192.0.0.0 0.255.255.255
最初にマッチした規則が適用されるので、始点アドレス-終点アドレスの規則 は正しい順で記述しなければならない点に注意すること。解析器の文法チェッ クに加え、システム管理者が実際にマッチする規則を調べる際の補助を行うた めの特別なコマンド行オプション(-verify)が用意されている。
xfwp は待ちポートを割り当てる前にサーバのサイトポリシーとセキュリティ 機能拡張を確認すべきである。