翻訳者:
翻訳開始日:2001/4/27(v7.3)
最終更新日:2001/7/11(v7.3.5)
―――履歴:2001/5/23("Hirotaka Matsuoka" (hiromo@aa.wakwak.com) さんご指摘による修正/SSLTUNNEL)
翻訳者コメント:
"翻訳のドラフト"です。
翻訳の正確さなどは、一切保証しません(できません(^^;)。
必ず、原文(http://www.delegate.org/)を併用して下さい。
誤訳などに関する、ご指摘は、謹んでお受けいたしますm(__)m
----------------------------- 以下本文 ------------------------------
Permission to use, copy, and distribute (via publically accessible on-line media) this material for any purpose and without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. AIST makes no representations about the accuracy or suitability of this material for any purpose. it is provided "as is", without any express or implied warranties.
上記部分(著作権と使用許諾に関する記述)は、
そのままつける必要があるので、訳さないでおきます。(訳者)
参考のための訳:
著作権 (c) 1994-2000 Yutaka Sato <ysato@etl.go.jp> <ysato@delegate.org>
著作権 (c) 1994-2000 Electrotechnical Laboratry (ETL), AIST, MITI
著作権 (c) 2001 National Institute of Advanced Industrial Science and Technology (AIST)
本マテリアルの、いかなる目的に対する、無料の、 使用・複製・配布(誰もがアクセスできるオンラインメディア経由)の認可は、 上記の著作権通知、および、この認可通知が、全ての複製中で、 閲覧可能なことを条件として、認めます。 AISTは、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。 それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。
--------- --------- --------- --------- --------- --------- --------- --------- DELEGATED(8) メンテナンス コマンド DELEGATED(8)
名称
DeleGateは、アプリケーションレベルプロキシとして動作し、 クライアント・サーバ間で中継するプロトコル(制御シーケンスと、データ構造)を解釈し、 認知されたプロトコルに対し、さまざまな付加価値を実現します。また、 DeleGateは、サーキットレベルプロキシのように動作し、 TCP や UDP 上で、 クライアント・サーバ間の任意プロトコル通信を、正確に伝達します。
DeleGateは、アクセス制御 を強制でき、 プロトコル免除/到達サーバ/受容クライアントを制限します。 DeleGateは、禁止アクセスの繰返しに対し、 ペナルティとしてディレイを加えたり、 アタックの疑いに対し、自動的にレポートを管理者に送信し、 また、サービスをシャットダウンし、防御します。 任意のプロトコルと、 プロトコルによるログインに対する、 普通のサーキットレベルで基本的なロギングは、 いくつかのプロトコルに対して、 いくつかの一般的なフォーマットがサポートされます。
DeleGateは、一種のアプリケーションレベルルータ の役割をし、 上流プロキシや、Socksサーバによって選択される、 目的サーバに向ける直接/間接ルートを制御します。 サーバに向けた利用可能なルートのひとつは、 アプリケーションプロトコル、 目的ホスト、ソースクライアント、の順序で試され、選択されます。
アプリケーションレベルプロキシの場合、 DeleGateは、さまざまなアプリケーションプロトコルを解釈しつつリレーし、 リレーデータ(それぞれのアプリケーションプロトコルの構造による)の キャッシング や、 変換 など、さまざまな付加価値のあるサービスを提供します。 アプリケーションプロトコルの通訳の基本は、 DeleGateを、プロトコルゲートウェイ として使い、 クライアントサイドプロトコル・サーバサイドプロトコル間を翻訳します。
サーキットレベルプロキシの場合、DeleGateサーバは、 TCPやUDP上の指定したアプリケーションプロトコルの指定したサーバへの通信を、 または、Socksプロトコルを基本とした任意のサーバへ向け、正しく伝送します。
アプリケーションレベルプロキシの場合、 DeleGateは、 他サーバのリソースの仮想ビューをエイリアス/マージや、 実サーバの実名を隠す(リソースやサービスを同一に見立てたURL)ことで、提供します。 それは、NFSファイルマウントの一般化されたメカニズムに似ていますが、 異なったもので、データの内容を書きかえることで実現しています。 言いかえれば、これは、クライアントへ/からの仮想名を、 サーバの実名にマッピング(書換え)しています。 ここでの名前は、 サーバ・クライアント間での要求/応答メッセージ中の、 プロトコルに依存したデータストラクチャに埋め込まれます。 この機能を、マウント と呼び、 例えば、リソース http://hostiN/ を http://hostx/iN/ として、 クライアントに見せたい場合に使います。 MOUNTでも、DeleGateのカスタマイズ ビルトインアイコンとメッセージを利用できます。
クライアント・DeleGate間および、 DeleGate・サーバ間の通信は、 CFI (Common Filter Interface)と呼ばれるシンプルな仕組みを利用し、DeleGateに関連づけされた、ユーザ定義 フィルタ プログラムによって、 フィルタ/変換できます。標準入力からデータを受け取り、標準出力に書き出す既存プログラムは、 変更無しで、CFIプログラムとして利用できます。
全てのDeleGateのローカルファイル は、 ログファイルと、キャッシュファイルを含み、 それらは、単一のルートディレクトリ (DGROOT) に、 デフォルトで、DeleGateのオーナ所有のプライベートファイルとなります。 しかし、それらは、異なったユーザ間で共有でき、 パス名、オーナ、アクセスパーミッションをそれぞれのファイルでカスタマイズできます。 ログファイル名は、 エージングのため、日付値で、パラメータ化でき、 また、キャッシュファイル名は、分散キャッシュディスクのため、 ハッシュ値で、パラメータ化できます。
DeleGateは、たくさんのオプションで制御されますが、 -Pport オプションと、 SERVER=protocol パラメータは、 大抵の場合、動作させる上で、必須となります。 -P オプションは、DeleGateが、どのポートで、 クライアントからの要求を受けるかを指定します。 SERVER パラメータは、 DeleGateが、どのプロトコルで、クライアントと通信するかと、 どのサーバに通信を中継するかを、任意で指定します。
オプションは、"+=URL"の記述により、ローカル/リモートリソースから読込めます。 通常、"+=/path/of/parameters" のように、 ローカルファイルを使用します。 ( パラメータ置換 参照)
-P option -- DeleGateの入り口ポート番号 == -Pport[,port]* port == [host:]portNum[/udp] portNum == number[-number]
入り口ポートは、デフォルトで、SERVER=protocol パラメータにより、 UDPベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay) が指定された場合を除き、TCPポートが作成されます。 また、-Pport/udp のように"/udp"ポストフィックスを伴う場合、 SERVER で、指定したプロトコルとは無関係なものとなります。
このオプションは、以下のケースを除き、指定する必要があります。 DeleGateが、inetd(8) から、呼び出される場合や、 -Ffunction オプションを利用する大抵の場合、 または、SERVER="tunnel1" により、トンネルサーバ として動作している場合には、無視されます。
-f option -- フォアグラウンドで実行
-v option -- ログレベルを制御 == -v[vdts]
-S option -- SIGCHLD シグナルを監視します
-T option -- システムコールトレース == -T[xsdt]*
-F option -- 拡張機能 == -Ffunction
-- option -- コマンドライン引数を隠す
parameter == name=value
-e option == -ename=value
下記リストにおいて、パラメータに'*'マークがあるものは、 nameX=value1 nameX=value2 nameX=value3 ... nameX=valueNのように、コマンドライン上で繰り返すことができます。 同じ名前のパラメータが、環境変数とコマンドラインで指定されている場合は、 コマンドラインが環境変数に先立ちます。 他の、繰返しできない名前が繰返された場合、最後に与えられた値が取得されます。 '+'マークのついているものは、"+=parameter"スクリプトで与えることはできません。
名称 | 値の書式 | 機能
| |
-- | ---------- | ------------------ | ----------------------------------
|
SERVER | proto://host:port | クライアントサイドプロトコルとデフォルトサーバ
| |
ADMIN | user@host.domain | このDeleGateの管理者E-Mailアドレス
| |
+ | OWNER | user[/group] | このDeleGateに与えるアクセス権を持つユーザ
|
* | CRON | crontab-spec | cron コンパチブルスケジューラの機能
|
* | INETD | inetd-conf | inetd ライクサーバの構成の表記法
|
* | CMAP | map-spec | 現在の接続に関するマッピングテーブル
|
LIBPATH | dir:dir:... | ライブラリファイルのサーチパス | |
DGPATH | dir:dir:... | 入替えリソースのサーチパス | |
DGOPTS | option;option;... | コマンドラインオプションリスト | |
PORT | portList | -Pオプションのような入り口ポートの予約
|
-- | ---------- | ------------------ | ---------------------------------- |
* | ROUTE | gateway-_-dst:src | srcからdistの場合、gatewayに転送します |
* | MASTER | host:port | 上流 DeleGate経由で接続します |
MASTERP | [host:port] | この DeleGate のプライベート MASTER を呼出します | |
* | PROXY | host:port | 上流プロキシ経由で接続します |
* | SOCKS | host[:port] | socksサーバ経由で接続します |
SSLTUNNEL | host:port | HTTPSにSSLトンネル経由で接続します | |
VSAP | host:port | リモートホスト経由で、受信/接続します | |
* | CONNECT | ca,ma,di,so,... | 接続タイプの試行順序 |
* | SRCIF | host[:port] | サーバ接続時のソースアドレス |
TUNNEL | type:scriptPath | シリアルライン上のトンネル経由で接続 | |
RPORT | {tcp|udp}[:host] | MASTER-DeleGateからの戻りポート |
-- | ---------- | ---------------- | ------------------------------------ |
* | PERMIT | proto:dst:src | 許可するプロトコル/サーバ/クライアント |
REMITTABLE | ProtoList | サーバに対して、容認するプロトコル | |
* | REACHABLE | dstHostList | 設定したサーバホストのみ到達可能です |
* | RELIABLE | srcHostList | 指定したクライアントホストのみ受け入れます |
* | RELAY | proxy|delegate|no | プロキシモードを制限します |
* | AUTH | what:aproto:users | リモート管理のための権限をもつユーザ |
* | AUTHORIZER | serv:proto:dst:src | 認証サーバ |
RIDENT | client|server | 上流DeleGateへの転送ソケットアドレス |
-- | ---------- | ------------------ | ---------------------------------- |
* | MAXIMA | what:number | 同時セッション数などの最大値 |
* | TIMEOUT | what:seconds | 接続などの、タイムアウト値 |
* | DELAY | what:seconds | ペナルティ用のディレイ値 |
-- | ---------- | ------------------ | ---------------------------------- |
CACHE | do|no|ro | キャッシュ有無の制御 | |
* | EXPIRE | days|hours|secs | キャッシュの期限 |
CACHEFILE | fileNameSpec | キャッシュデータの保存場所 | |
* | ICP | icpClientConfig | ICPクライアント型の構成 |
-- | ---------- | ------------------ | ---------------------------------- |
* | MOUNT | "vURL rURL opt" | 仮想URLから/へ、実URLのマップ |
* | URICONV | convList:attrList | MOUNTとともに、URI書換えを制御 |
BASEURL | URL | このサーバのベース(仮想)URL | |
DELEGATE | host:port | BASEURLの簡易型 |
-- | ---------- | ------------------ | ------------------------------------- |
* | CHARCODE | JIS|EUC|SJIS|UTF8 | 日本語テキストのキャラクタ変換 |
HTMLCONV | deent|enent|pre | HTML・プレーンテキスト間のエンコード/デコード | |
MIMECONV | thru|charcode | MIMEエンコーダ/デコーダを制御 |
-- | ---------- | ------------------ | ---------------------------------- |
FCL | filterCommand | DeleGate <-> クライアントのフィルタ | |
FTOCL | filterCommand | DeleGate -> クライアントのフィルタ | |
FFROMCL | filterCommand | クライアント -> DeleGateのフィルタ | |
FSV | filterCommand | サーバ <-> DeleGateのフィルタ | |
FTOSV | filterCommand | DeleGate -> サーバのフィルタ | |
FFROMSV | filterCommand | サーバ -> DeleGateのフィルタ | |
FMD | filterCommand | MASTER <-> このDeleGateのフィルタ | |
FTOMD | filterCommand | このDeleGate -> MASTERのフィルタ | |
FFROMMD | filterCommand | MASTER -> このDeleGateのフィルタ | |
XCOM | filterCommand | サーバとしてコマンドを実行する | |
XFIL | filterCommand | サーバとしてフィルタを実行する |
-- | ---------- | ------------------ | ---------------------------------- |
+ | CHROOT | dirPath | 起動時にファイルシステムのルートを変更 |
+ | DGROOT | dirPath | 全DeleGateファイルのルートディレクトリ |
*+ | SHARE | dirPatternList | ユーザ間で共有するファイル |
+ | UMASK | mask | umask のオクタル値 |
VARDIR | dirPath | ログとキャッシュのデフォルトベース | |
CACHEDIR | dirPath | キャッシュファイルの場所 | |
ETCDIR | dirPath | 持続的管理ファイルの場所 | |
LOGDIR | dirPath | DeleGateログの場所 | |
LOGFILE | LogFilename | DeleGateログファイル | |
PROTOLOG | LogFilename | httpd / wu-ftp コンパチブルログファイル | |
ERRORLOG | LogFilename | DeleGateエラーログファイル | |
TRACELOG | LogFilename | シグナルトレース(-T)書出しファイル | |
EXPIRELOG | LogFilename | エクスパイアログファイル | |
WORKDIR | dirPath | DeleGateがコアダンプする場所 (-_-; | |
ACTDIR | dirPath | テンポラリファイルの場所 | |
TMPDIR | dirPath | 不可視テンポラリファイルの場所 | |
PIDFILE | fileName | DeleGateのPIDファイル |
-- | ---------- | ------------------ | ---------------------------------- |
* | HOSTS | host/addr,... | プライベート ホスト/アドレス マップ |
RESOLV | file,nis,dns,sys | レゾルバの使用順序 | |
RES_CONF | URL | resolv.conf の場所 | |
RES_NS | host[:port] | 使用するDNS サーバ | |
RES_RR | HostList | IPアドレスラウンドロビン有効 | |
RES_VRFY | "" | 逆引きの2重チェック有効 | |
RES_DEBUG | number | 名前解決のデバッグレベル |
-- | ---------- | ------------------ | ---------------------------------- |
* | HTTPCONF | what:conf | HTTP 詳細設定 |
FILETYPE | suffix:fileType | ファイル名からデータタイプなどへのマッピング | |
CGIENV | nam,name,... | CGIの渡す環境変数 | |
* | ICPCONF | icpServerConfig | ICPサーバとして構成 |
* | FTPCONF | what[:conf] | FTP 詳細設定 |
* | NNTPCONF | what:conf | NNTP 詳細設定 |
SMTPCONF | what:conf | SMTP 詳細設定 | |
SMTPGATE | dirPath | SMTP -> SMTP/NNTP ゲートウェイ設定 | |
* | DNSCONF | what:conf | DNSサーバとして構成 |
SERVER parameter* == SERVER=protocol[://host[:portNum]][:-:MountOptions] portNum == [+|-]number -- default: none (generalist動作)
例) 拘束を受けない、Telnet-DeleGate SERVER パラメータ
対象サーバ(host)を指定しない場合、それは、プロトコルに依存した方法で、クライアントにより、実行時に、どうにか取得します。
SERVER=protocol://host:portNum は、対象サーバのURLを指定します。 ":portNum" の部分は、通常、URL中の番号が、プロトコルにおいて、スタンダードなポート番号の場合省略可能です。 DeleGateによって、認知される、プロトコルリストと、標準ポート番号は、 "http://delegate/-/builtin/mssgs/config.dhtml"で、入手できます。 portNum が "-" または "+"でプリフィックスされる場合、入り口ポート番号に指定したオフセットを加え、マップします。また、"-"(portNumなし)の場合、同じポート番号を使用します。
例) 複数ポートを他の単一サーバに転送する
SERVER パラメータが ":-:MountOptions" を伴う場合、 MountOptionsに指定された条件を評価した結果が真の場合、動的にSERVERパラメータを選択します。特殊なケースとして、 ":-:via=HostList"は、":-:HostList"で、省略できます。
例) クライアントに適切なNNTPサーバを選択する。
ADMIN parameter == ADMIN=user@host.domain -- default: コンパイル時に指定のもの
- このDeleGateの管理者名を、クライアントに(エラー)メッセージ中で表示する(HTTPなど)。 |
- クライアントに対する開始メッセージやヘルプメッセージ中で、管理者名として表示する(FTP, NNTP, Telnet)。 |
- 匿名アクセスFTPサーバへ、デフォルトユーザ名として送信する(PASSコマンド中)。 |
- リモートSMTPサーバへのアクセスで、AUTH=anonftp:smtp-vrfy 認証 行う際の送信者名として送信する(FROMコマンド中)。 |
- 致命的なシグナルが発生したときにレポートメッセージを送信するアドレス。 |
OWNER parameter* == OWNER=user[/group][:srcHostList] -- default: OWNER="nobody/nogroup" -- 制約: ほとんどのUnixでスーパーユーザのみ
例) クライアントのユーザ名と一致したユーザIDで動作する
CRON parameter* == CRON="crontab-spec" crontab-spec == minute hour day month dayOfWeek action -- default: none
-suspend N | -- N 秒間停止する |
-restart | -- DeleGate再起動 |
-exit | -- DeleGate終了 |
-expire N | -- "-atime +Nd"で、$CACHEDIR のエクスパイアを実行 |
-system command | -- シェルコマンドのような、コマンドを実行する |
/dir/command args | -- "-system /dir/command args" と同じ |
- args | -- "/dir/delegated args"と同じ |
-Ffunc args | -- "/dir/delegated -Ffunc args"と同じ |
例)
INETD parameter* == INETD="inetd-conf" inetd-conf == port sockType proto waitStat uid execPath argList port == [host:]portNum sockType == stream|dgram proto == tcp|udp waitStat == nowait ("wait" は、まだサポートされていません。) -- default: none
例)
CMAP parameter* == CMAP=resultStr:mapName:connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
LIBPATH parameter == LIBPATH=dirPath[:dirPath]* -- default: LIBPATH=LIBPATH='.:${STARTDIR}:${LIBDIR}:${EXECDIR}'
DGPATH parameter == DGPATH=dirPath[:dirPath]* -- default: DGPATH='+:.:${HOME}/delegate'
DGOPTS parameter == DGOPTS=opt[,opt]* -- default: none
PORT parameter == PORT=port[,port]* port == [host:]portNum[/udp] portNum == number[-number] -- default: none
ROUTE parameter* == ROUTE=proto://host:port/-_-dstHostList:srcHostList -- default: none
stHostList 中のホスト指定は、フォワードするプロトコルを"proto://"プリフィックスで、制限することができます。例) ROUTE="http://host:port/-_-{ftp://*}:*"は、FTPサーバへのアクセス全ては、"http://host:port/"のHTTP-プロキシへフォワードされることを意味します。
dstHostList中のホスト指定は、ポート番号で、さらに制限できます。例)ROUTE="http://host:port/-_-{*:21}:*"は、ポート番号21(FTPサービス)でのみアクセスでき、プロキシへ転送されます。
MASTER parameter* == MASTER=host:port[/masterControl][:dstHostList] -- default: none
オプション "/masterControl" :
MASTERP parameter == MASTERP=[host:port] -- default: none
RPORT parameter == RPORT={tcp|udp}[:host] -- default: none
PROXY parameter* == PROXY=host:port[:dstHostList] -- default: none
例)
SOCKS parameter* == SOCKS=host[:[port][/socksOpt][:dstHostList[:srcHostList]]] socksOpt == -4 | -r -- default: none
例)
SSLTUNNEL parameter == SSLTUNNEL=host:port -- default: none
VSAP parameter == VSAP=host:port -- default: none
例)
CONNECT parameter* == CONNECT=connSeq[:connMap] connSeq == connType[,connType]* connType == cache|icp|master|https|vsap|direct|socks|udp connMap == ProtoList[:dstHostList[:srcHostList]] -- default: CONNECT="c,i,m,h,d,v,s:*:*"
cache | -- CACHE を検索 (接続なし) |
icp | -- ICPサーバをヒントとしたPROXY経由 |
proxy | -- PROXY サーバ経由 |
master | -- PROXY または MASTER-DeleGate サーバ経由 |
https | -- SSLTUNNEL (SSL tunnel on HTTP)経由 |
vsap | -- VSAP サーバ経由 |
direct | -- 目的サーバへ直接接続 |
socks | -- SOCKS サーバ経由 |
udp | -- UDPによる |
注記: 現実装では、"cache" が、connSeq 中に含まれる場合、まず最初に試行されます。
SRCIF parameter* == SRCIF=host[:[port][:connMap]] -- default: SRCIF="*:*:*:*:*"
TUNNEL parameter == TUNNEL=tunnelType:script tunnelType == tty7 -- default: none
現状、tunnelType は、"tty7"でなければならず、それは、DeleGate間の伝送が、7bitストリームで行われることを意味します。タイプが"tty7"の場合、トンネルを確立するには、SHIO-スクリプトファイルに指定を書きこみます。パッケージに含まれる、 "src/sample.shio"を参照して下さい。スクリプトファイル名は、絶対パスまたは、相対パス(LIBPATH 中で検索できるファイル名)のどちらかで指定する必要があります。上流のトンネル用DeleGateは、SERVER="tunnel1"を伴なって呼出さなければなりません。
例) ログインダイアログなしで、トンネルを形成する。
PERMIT parameter* == PERMIT=connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
複数のPERMITパラメータが与えられる場合、アクセスは、少なくとも1つのPERMITで指定された許可により、許可されます。PERMITパラメータがない場合、アクセス許可は、REMITTABLE,REACHABLE,RELIABLEパラメータによって明示されるか、SERVERパラメータによる暗黙の指定によって、制御されます。
例) 無制限許可をローカルネット上のホストに与え、同時に、その他は、http://www のみとします
dstHostList 中で指定したホストは、"host:portNumList"のようにポート番号をつけることで、更に制限できます。例)PERMIT="telnet:{*:23}:*"は、ホストに対するテルネットを標準ポート番号(23)でのみ許可することを意味します。
ProtoList 中のプロトコル名は、"protocolName/portNumList/methodList"のようにポート番号と、手段を使って修飾でき、プロトコルにおける、アクセス可能なポートと、手段を制限できます。例)一連のPERMITパラメータ PERMIT="ftp//readonly:Servers:Clients" PERMIT="ftp:*:*" は、Serversに対するClientからのアップロードを禁止し、他のサーバ・クライアントの組み合わせで、アップロードを許可することを意味します。
複数のDeleGateサーバが、MASTERやPROXYによって連結されている場合、元クライアントの識別情報は、最初(連結の入り口)のDeleGateサーバによって取得され、上流DeleGateサーバへRIDENT パラメータを使用し、また、PERMITパラメータにより調査し、転送されます。
REMITTABLE parameter == REMITTABLE=ProtoList -- default: REMITTABLE="*" for generalist -- default: REMITTABLE="." for specialist
プロトコル名の後ろに"/portNumList"がある場合、PortList中に列挙されたポートのみが許可されます。PortList は "/methodList"を付けることができ、プロトコル上で可能な手段を制限できます。現在、手段として、 "readonly"のみがサポートされます。例)REMITTABLE="ftp//readonly" は、FTPサーバへのアップロードを禁止する、"read only" FTP-DeleGateを生成します。
プロトコルに関するデフォルトの設定:
REACHABLE parameter* == REACHABLE=dstHostList -- default: REACHABLE="*" (全てのホストに到達可能)
RELIABLE parameter* == RELIABLE=srcHostList -- default: RELIABLE=".localnet"
これは、RELIABLE=Hosts1 RELIABLE=Hosts2 のような、 複数のRELIABLEパラメータを、単一の RELIABLE="Hosts1,Hosts2" へ、単純に、結合したものへ解釈しますが、 Hosts1 または、Hosts2 が、 否定 または、 合成演算子に含まれる場合、 "Hosts1 または Hosts2" を意味するものではありません。 もし、この文章の意味が理解できない場合は、かわりに、複数のPERMITパラメータを使用することを、 推奨します。
RELAY parameter* == RELAY=relayTypeList[:connMap] relayTypeList == relayType[,relayType]* relayType == proxy | delegate | no | nojava | noapplet connMap == ProtoList:dstHostList:srcHostList -- default: RELAY="delegate,nojava:*:*:.localnet" RELAY="proxy:*:*:*"
他の relayType と連結した "nojava" は、<APPLET>, <EMBED> および、<OBJECT> タグ を、relayType によって、 使用不能にします(<killed-TagName> に置き換えられます)。 "noapplet" をともなう場合、<APPLET> タグのみが使用不能になります。 RERAY パラメータにより、relayType "delegate" を使用可能にした場合、 上記、デフォルトである "nojava" の使用を強く推奨します。
例)
RELAY=no ... プロキシとして動作しない (元サーバのみ)
RELAY=proxy ... CERN準拠モードのみ
RELAY=delegate ... DeleGateモードのみ (/-_-URL)
RELAY=proxy,delegate ... CERN と DeleGate モードの両方
RELAY=proxy,noapplet ... プロキシによってリレーされる <APPLET> タグを抑制する
デフォルト:
AUTH parameter* == AUTH=what:authProto:who -- default: none
HTTP-DeleGateの場合、(要求メッセージ中の)認証ヘッダにあるUsername:Password で、"私は誰”かを宣言します。ここでのUsernameは、User@Hostとも、できます。User, Host, Password,のセットを得た後、DeleGateは、Host 中の(FTP)サーバに、 User と Password でログインを試みます。成功した場合、クライアントは、User@Host で、認証されます。
現在、以下のカテゴリでの、認証/認可がサポートされます。
-- 何らかのプロトコルのDeleGateの場合 --
ident | -- 識別プロトコル [default] |
pauth | -- Proxy-Authorization フィールド "user@host:password"を使用 |
auth | -- Authorization フィールド "user@host:password"を使用 |
AUTHORIZER parameter == AUTHORIZER=authServList[:connMap] authServList == authServ[,authServ]* | & | * authServ == authHost[/portNum] authHost == hostName | hostAddr connMap == ProtoList:dstHostList:srcHostList -- default: none -- 制限: Telnet/FTP/NNTP および、HTTP に、適用可能
認証されたユーザに権限が不要な場合のみ、authServList として、以下の特別な名前が有効です。
RIDENT parameter == RIDENT=ridentType[,ridentType]* ridentType == client|server -- default: none
例)
MAXIMA parameter == MAXIMA=what:number,... -- default: MAXIMA=listen:20,ftpcc:2,...
randstack | -- | セキュリティ用スタックベースのランダマイズレンジ [32] |
randenv | -- | 環境変数ベースのランダマイズレンジ [1024] |
randfd | -- | クライアントソケットファイルディスクリプタのランダマイズレンジ [32] |
listen | -- | 入り口 ポートキューの最大サイズ [20] |
delegated | -- | 一度に実行できるDeleGateプロセス数の最大値 [64] |
ftpcc | -- | サーバからホストに対する、FTP接続キャッシュの最大数 [16] |
nntpcc | -- | サーバからホストに対する、NNTP接続キャッシュの最大数[16] |
service | -- | delegatedプロセス単位の最大サービス数 [無制限] |
standby | -- | スタンバイプロセスの最大数 [16] |
http-cka | -- | キープアライブ中接続の最大数 [10] (*1) |
http-ckapch | -- | キープアライブ中接続のクライアントホスト単位の同時最大数 [4] |
conpch | -- | クライアントホスト単位の最大同時接続数 [無制限] |
TIMEOUT parameter* == TIMEOUT=what:seconds,... -- default: TIMEOUT=dns:60,acc:30,con:30,lin:30,...
shutout | -- | 致命的エラーでセットされた、シャットアウトを解除する [1800] |
dns | -- | DNS ルックアップ [60] |
acc | -- | クライアントの受入れ (FTP データ接続含む) [30] |
con | -- | サーバへの接続 [30] |
lin | -- | 出力のためのLINGER [30] |
ident | -- | Ident サーバへの接続 [10] |
io | -- | 一般入出力 (データ転送ではない) [600] |
hello | -- | MASTERとのHELLOネゴシエーション [30] |
login | -- | プロキシログイン (Telnet,FTP) [60] |
ftpcc | -- | FTP接続キャッシュのキープアライブ [900] |
nntpcc | -- | NNTP接続キャッシュのキープアライブ [300] |
daemon | -- | delegated [無制限] |
restart | -- | 指定した期間毎に再起動 [無制限] |
standby | -- | 次のクライアントのため、delegatedが待機する時間 [30] |
http-cka | -- | クライアントと接続を保持する時間 [5](*1) |
takeover | -- | 切断後、ダウンロード内容をキャッシュに書込むまで [0](*2) |
DELAY parameter* == DELAY=what:seconds -- default: DELAY=reject:60,unknown:60,...
reject | -- | 自分もしくは、マウントしたサーバからの連続的、拒否(Reject)応答 [60] |
unknown | -- | 自分もしくは、マウントしたサーバからの連続的、不明(Unknown)応答 [60] |
reject_p | -- | 元サーバからの、連続的、拒否(Reject)応答 [0] |
unknown_p | -- | 元サーバからの、連続的、不明(Unknown)応答[0] |
MOUNT parameter* == MOUNT="vURL rURL [MountOptions]" -- default: MOUNT="/* SERVER_URL*"
例) HTTP-DeleGateのMOUNT
vURL か rURL に"="を指定した場合、マウントは、リクエスト中のvURLを書換えない、
または、応答中のrURLを書換えるのと同じことを意味します。
対象サーバのポート番号は、"-"か"+"でプリフィックスでき、これは、SERVER
パラメータにおける入り口ポート番号に対し、動的に決定したオフセットを与えます。
省略
設定を簡単かつ再使用するために、URLも特別な省略形を MOUNT パラメータで使用できます。
protocol-name://host-name:port-number/url-path
からなる rURL 中の
protocol-name, host-name
, port-number に "=" を指定した場合、
それは、DeleGate 自身をあらわします。(例:vURL中のそれ)
URLが "//" で始まる場合、更なる省略を意味します。
"///path" は "=://=:=/path" を意味し
(プロトコル,ホスト,ポートが同じ)、
また、
"//serv..." は "=://serv..." を意味します
(同じプロトコル)。
例) MOUNT パラメータ中の rURL の省略
マッチングと書き換えの複合
vURL と、rURL のパターンの後に "*%" がつく場合、
scanf(3) のそれと似た書式で指定した複合マッチングのためのパターンを表します。
それぞれの書式指定は、"%" に続く指定("%c","%[a-z]" など)からなります。
拡張書式 "%S" は、隣接したキャラクタにより決定される変数を意味します。
例えば、"%Sx" は "%[^x]x" を意味します。
例)"%S." は "%[^.]." および "%S/" は "%[^/]/"
rURL 中の "%(N)" は、vURL 中のN番目の
要素の複製を意味します。
vURL パターンが "$" キャラクタで終わる場合、
URL 文字全体に対する完全なマッチングを要求します。
例) 複合マッチングと書き換え
// DeleGate のパラメータ: SERVER=http -Pdhost:9080 ...
// 要求された URL: http://dhost:9080/x/
MOUNT="/x/* =://=:=/y/*" -> http://dhost:9080/y/
MOUNT="/x/* ///y/*" -> (上記の省略)
MOUNT="/x/* =://serv/y/*" -> http://serv:80/y/
MOUNT="/x/* //serv/y/*" -> (上記の省略)
MOUNT="/x/* //serv:=/y/*" -> http://serv:9080/y/
MOUNT="/x/* //=:9088/y/*" -> http://dhost:9088/y/
MOUNT="/x/* https://=/y/*" -> https://dhost:443/y/
// 要求された URL: http://dhost/x/abc/def
MOUNT="/x/*%S/%S ///y/*%S.%S" -> http://dhost/y/abc.def
MOUNT="/x/*%S/%S ///y/*%(1)/%(0)" -> http://dhost/y/def/abc
MOUNT="/x/*%1[a-z]%S http://w/*%S/%S" -> http://w/a/bc/def
MountOptions == option[,option]*
条件:最初のオプショングループはソースと対象(クライアント・サーバ)によって、条件的にMOUNTします。MOUNTパラメータが、1つ以上の条件を含むMountOptionを持つ場合、全ての条件が真にならない場合、MOUNTは、無視されます。
これらHostList は、host:portのリストでなければならず、この、 :port 部分は、特に気にしない場合、省略できます。host 部は、"*"で、置換えられ、その場合、異なったネットワークインターフェースを気にしません。
例)
URICONV parameter* == URICONV={convSpec|defElem|defAttr} convSpec == convList:attrList defElem == defelem:+,elemnameList defAttr == defattr:+,attrnameList -- default: URICONV=dump で見れます。
mount | -- | MOUNTにより書換え |
normal | -- | URLパス中に"../"を含むMOUNTされたURLを正常化する |
partial | -- | 可能な場合、(MOUNTされた)URLを部分URLで表現する。 |
full | -- | 全てのURLをフルURLに変換 |
例)
BASEURL parameter == BASEURL=URL -- default: none
例)
DELEGATE parameter == DELEGATE=gwHost:Port[:ProtoList] -- default: DELEGATE=currentHost:currentPort
元々、このパラメータは、gateway-_-URLをともなうURL(または、ポインタ)や、
proto://gwHost:Port/-_-URL
(このgwHost:Port部は、DeleGateによって生成され、埋め込まれたものです)表記によって書換えられた、CERN
HTTPタイプではないプロキシ(gopherプロキシ含む)のための、プロキシモードを制御するために取り入れられました。
このパラメータは、gwHost:Port
部の表現をカスタマイズするために取り入れられました。これは、このDeleGateの入り口ポートを表し、クライアントから、解決可能かつ、到達可能でなければなりません。
もっとも一般的な作り方は、gwHostのデフォルト値は、このDeleGateホストの現ネットワークインターフェースで、現クライアントは、これを経由し、このDeleGateに到達させ、また、生のIPアドレスで、表現します。これにより、クライアントがDeleGateのホスト名解決法を知らなくても、DeleGateに到達可能になります。
例外的に、入り口ポートが、"-Phost:port”のようにネットワークインターフェースを明示して指定された場合、DELEGATEのデフォルト値は、
host:port にセットされます。
オプションのProtoList
を指定することで、このプロキシでのプロトコルに制限をかけることができます。応答メッセージ中のURL(ポインタ)は、"proto://gwHost:Port/-_-"をプリフィックスして、書換えられます。そのため、ProtoList中にプロトコルが含まれる場合、要求は再びこのDeleGate(gwHost:Port
の)に向けられます。
DELEGATE="-:0:-all"のように、存在しない入り口ポートと、空のProtoListを指定することで、プロキシモードを使用不能にできます。RELAYパラメータを使用することで、もっと、簡単に実現できます。これは、最近のバージョンでは、デフォルトで、使用不能になっています。
CACHE parameter* == CACHE=cacheControl[,cacheControl]* cacheControl == do | no | ro -- default: none -- 制限: HTTP, FTP, NNTP, Gopher に適用されます。
do -- CACHEDIR がない場合、作成します。(キャッシュを使用可能にする) no -- キャッシュ禁止 ro -- キャッシュを読込のみにするキャッシュはデフォルトで使用可能です。キャッシュは、CACHEDIRディレクトリが存在しないか、DeleGateが、読込できない、書込みできない、または、CACHE="no"が指定されている、または、"cache"が、CONNECTに含まれない場合、使用不可となります。
EXPIRE parameter* == EXPIRE=validity[/custody][:connMap] connMap == ProtoList:dstHostList:srcHostList validity == period custody == period period == Num[d|h|m|s] -- default: EXPIRE=1d
CACHEFILE parameter == CACHEFILE=fileNameSpec -- default: CACHEFILE='$[server:%P/%L/%p]'
%P | -- | scheme | プロトコル名部 |
%L | -- | host.d2.d1:port | ログイン(またはサイト)部 |
%H | -- | host.d2.d1 | ホスト名 |
%T | -- | port | ポート番号 |
%h | -- | d1/d2/host | 階層ホスト名ディレクトリ |
%d | -- | d1/d2 | 階層ドメイン名ディレクトリ |
%1 | -- | d1 | 最上位ドメイン |
%2 | -- | d2 | 第2ドメイン |
%p | -- | path | URL-パス部 |
%Q | -- | host.d2.d1.d0 | FQDN なホスト名を使用 (%Q%L または %Q%H 同様) |
他のフォーマットパターンは、"$[hash:format]" で、このハッシュは、format
により生成された文字列を、"00"から"1f"の範囲の16進の値になります。
これは、全てのサーバを含む、1つの巨大なディレクトリを32の小さなディレクトリ
(分散した物理ディスク)に分割します。
例)
ICP parameter* == ICP=icpServerList[:icpServerSpec[:connMap]] icpServerList == icpServer[,icpServer]* icpServer == icpHost[/icpType/proxyPort/icpPort] icpServerSpec == icpOptions:proxyPort:icpPort connMap == ProtoList:dstHostList:srcHostList -- default: none-- 制限: {HTTP,FTP}-DeleGate に対し適用
s | -- ICP サーバは、"sibling"(兄弟) [default] |
p | -- ICP サーバは、"parent"(親) |
l | -- ICP サーバは、応答しない"listener"(リスナ) |
n | -- ICP サーバは、ナビゲーションプロキシ |
o | -- HIT_OBJ 応答が必要 |
H | -- 対象サーバは、HTTP プロキシ [default] |
D | -- 対象サーバは、MASTER-DeleGate. |
O | -- 対象サーバは、元サーバ |
timeout/N | -- ICPクライアントとしての応答待ち時間(秒)[2.0] |
parent | -- icpServers のデフォルトタイプが"parent"の印 |
listener | -- icpServers のデフォルトタイプが"listener"の印 |
hitobj | -- デフォルトで 全icpServers にHIT_OBJ を許可 |
Origin | -- 対象サーバは、元サーバ |
DeleGate | -- 対象サーバは、DeleGate |
ICP="host0"
ICP="host0//8080/3130"
ICP="host0::8080:3130"
ICP="host1:timeout/1.0:::http,ftp:!*.my.domain:*.my.domain"
ICP="host1,host2/O/80/13130:timeout/2.0:8080:3130"
CHARCODE parameter == CHARCODE=[inputCode/]outputCode outputCode == charCode charCode == JIS|EUC|SJIS|UTF8 -- default: none
このパラメータをインターネットメール/ニュースプロトコル(SMTP, POP, NNTP)で有効にする場合、キャラクタ変換を有効(デフォルトで有効)にするようにMIMECONV パラメータも指定する必要があります。
HTTPクライアントは、要求メッセージ中の "Accept-Language"フィールドで、選択して(それぞれのクライアント(WWWブラウザ)で、指定できるかもしれません)送信することで、この指定を無視できます。例)クライアントの要求で"Accept-Language: (charcode=EUC)"が送られた場合、応答テキストは、DeleGateのCHARCODE指定を無視して、EUCに変換されます。 "Accept-Language: (charcode=THRU)"が指定された場合、管理者がこのDeleGateに指定した全ての変換は、無効になります。
HTMLCONV parameter == HTMLCONV=convList convList == conv[,conv]* conv == deent|enent|fullurl -- default: HTMLCONV=deent
deent | -- | decode entity symbol |
enent | -- | encode entity symbol |
fullurl | -- | convert all of URLs to full URLs (equals to URICONV="full:+,-HREF/BASE") |
"enent"が指定された場合、実シンボルが、マルチバイトキャラクタセット以外のテキスト中に洗え割れた場合、エンコードします。これは、WWWクライアントによってアクセスされるNNTP-DeleGateの場合、便利です。空リストが指定された場合、全ての変換は停止します。
MIMECONV parameter == MIMECONV=mimeConv[,mimeConv] mimeConv == thru | charcode -- default: none -- MIMECONV="" CHARCODE パラメータが与えられた場合
FCL parameter == FCL=filterCommand FTOCL parameter == FTOCL=filterCommand FFROMCL parameter == FFROMCL=filterCommand FSV parameter == FSV=filterCommand FTOSV parameter == FTOSV=filterCommand FFROMSV parameter == FFROMSV=filterCommand FMD parameter == FMD=filterCommand FTOMD parameter == FTOMD=filterCommand FFROMMD parameter == FFROMMD=filterCommand -- default: none
フィルタは、サーキットレベル情報では、CMAP で、アプリケーションレベル情報では、CFI script を使うことで、条件付で利かせることができます。
ビルトインフィルタ: filterCommand が"-"でプリフィックスされる場合、DeleGateのビルトインフィルタです。
XCOM parameter == XCOM=filterCommand XFIL parameter == XFIL=filterCommand -- default: none
WindowsNTとOS/2上では、XCOMで実行されたコマンドには、クライアントに接続したソケットを受継いだハンドル値を持つ、環境変数 "SOCKHANDLE_CLIENT"が、提供されます。
CHROOT parameter == CHROOT=dirPath -- default: none -- 制限: 大抵のUnixで、super-user のみ
DGROOT parameter == DGROOT=dirPath -- default: on Unix: '${HOME}/delegate' or '/var/spool/delegate-${OWNER}' or '/tmp/delegate-${OWNER}' on Windows: '/Program Files/DeleGate'
SHARE parameter == SHARE=dirPatternList -- default: empty
例)
UMASK parameter == UMASK=mask -- default: the value of umask(2)
VARDIR parameter == VARDIR=dirPath -- default: VARDIR='${DGROOT?&:/var/spool/delegate}'
CACHEDIR parameter == CACHEDIR=dirPath -- default: CACHEDIR='${VARDIR}/cache'
ETCDIR parameter == ETCDIR=dirPath -- default: ETCDIR='${VARDIR}/etc'
LOGDIR parameter == LOGDIR=dirPath -- default: LOGDIR='${VARDIR}/log'
LOGFILE parameter == LOGFILE=[LogFilename] PROTOLOG parameter == PROTOLOG=[LogFilename][:logFormat] ERRORLOG parameter == ERRORLOG=LogFilename TRACELOG parameter == TRACELOG=LogFilename -- default: LOGFILE='${LOGDIR}/${PORT}' -- default: PROTOLOG='${LOGDIR}/${PORT}.${PROTO}' -- default: ERRORLOG='${LOGDIR}/errors.log' -- default: TRACELOG='${LOGDIR}/ptrace.log'
パターン ${PROTO} と ${PORT} は、それぞれ、このDeleGateのプロトコル名と、ポート番号に置換えられます。これらファイルとディレクトリは、可能な場合、DeleGateにより自動生成されます。LOGFILE="" や、PROTOLOG=""のように、空ファイル名を指定することで、ログを停止できます。
HTTP用のPROTOLOG書式は、コモンログファイル書式とコンパチブルで、カスタマイズ可能です。FTP用のPROTOLOG書式は、xferlog コンパチブルです。
エージングのためのLogFilenameとdirPathの置換え
他のエージングパターン"[start+format]"は、同様に評価され、"date+"を除いた、DeleGateが開始しした時間(SIGHUPまたは、TIMEOUT=restartによる再起動)に置換えられます。
EXPIRELOG parameter == EXPIRELOG=LogFilename -- default: EXPIRELOG='${LOGDIR}/expire.log'
WORKDIR parameter == WORKDIR=dirPath -- default: WORKDIR='${VARDIR}/work/${PORT}'
ACTDIR parameter == ACTDIR=dirPath TMPDIR parameter == TMPDIR=dirPath PIDFILE parameter == PIDFILE=fileName -- default: ACTDIR='${ACTDIR}/act' -- default: TMPDIR=system dependent -- default: PIDFILE='${ACTDIR}/pid/${PORT}'
HOSTS parameter* == HOSTS=nameList[/addrList] nameList == name | {name[,name]*} addrList == addr | {addr[,addr]*} -- default: HOSTS=localhost/127.0.0.1
RESOLV parameter == RESOLV=[resolver[,resolver]*] resolver == cache | file | nis | dns | sys -- default: RESOLV=cache,file,nis,dns,sys
cache | -- 以下のレゾルバによる結果のキャッシュ |
file | -- ローカルの hosts(5) ファイル(一般的に /etc/hosts に配置) |
nis | -- NIS または YP(4) サービスのホストマップ |
dns | -- DNS サービス |
sys | -- gethostbyname() と gethostbyaddr() を使用する。(大抵、ホストのシステム標準レゾルバをコール) |
cache:/path | -- キャッシュディレクトリパス名 [$TMPDIR/resolvy] |
file:/path | -- パスワードファイルパス名 [/etc/hosts] |
nis:nisDomain | -- NIS ドメイン名 [default domain] |
dns:dnsHost | -- DNS サーバとデフォルトドメイン |
RES_CONF parameter == RES_CONF=URL -- default: RES_CONF="file:/etc/resolv.conf" or from registry (on Windows)
RES_NS parameter == RES_NS=dnsServer[//socksV5Host] -- default: RES_CONF による
RES_RR parameter == RES_RR=HostList -- default: RES_RR="*"
RES_VRFY parameter == RES_VRFY="" -- default: none
RES_DEBUG parameter == RES_VRFY=number -- default: none
ProtoList == [!]protoSpec[,ProtoList] protoSpec == protocolName[/[portNumList][/methodList]]
HostList == [!]hostSpec[,HostList] hostSpec == [{userList}@]hostSpec[/netMask] userList == userNamePattern[,userNamePattern]* hostSpec == hostNamePattern|hostAddrPattern userNamePattern == [*]uname[*] hostNamePattern == [*]hname[*] hostAddrPattern == IPaddressPattern|IPrange netMask == IPaddress|maskLength
例)CMAP を使って、条件付でフィルタリングする。
例)
period の完全な書式はこのようになります: [wW]HH[MM][-HH[MM]]. 週内の時間制限は、"wW" で表現され、ここでの W は、 "0"(日曜日)から、"6"(土曜日)の範囲です。 利便性のため、日曜日は、"7" でも表現できます。
例)
置換は、繰返し実行できます。この場合、相対リソース名は、DGPATH または LIBPATH内で検索されます。デフォルトで、DGPATH='+:.:${HOME}/delegate'の"+"は、"caller"(呼出したユーザ)リソースの場所を表します。例)"+=file2"が、呼出者ファイル"/usr/etc/file1"から参照される場合、"file2"は、"/usr/etc/file2"として、検索されます。リソース名は、"+={http://host/file1}"や、"+={http://host/file}"のようにURLで、指定できます。
paramRef == +=[URL][?label,[label]*] paramList == line line ... paramListPart == CASE label paramList ESAC置換リソースは、オプション(または、パラメータ)のリストで、それぞれの行が一つのオプション(または、パラメータ)を表します。それぞれの行で、シャープ(#)に続く文字列は、コメントとして、無視されます。空白文字キャラクタ(SPACE, TAB, LF, CR)が、各行の最初または終わりにある場合無視されます。シングルクォート(')および、ダブルクォートは、取り除かれます。バックスラッシュ(\)に続く文字は、そのままの文字として扱われます。
例) 以下の5つの例は、他と同じ意味を持ちます。
他の置換 "name=-=URL" は、URLのないようをローカルファイルシステム上(ACTDIR内)の一時ファイルに読込み、パラメータを"name=/path/of/temporary-file"に書換えます。これは、"-eCONFIGDATA=-=http://server/configData"のように、リモートリソースをCGIまたは、CFIプログラム経由にしたい場合、有効です。この場合、これらプログラムは、環境変数 CONFIGDATA("http://server/configData"の内容を含む一時ファイル名を値に持つ)で与えられます。
CFI と CFI スクリプト
filterName="filterSpec" CMAP="filterSpec":filterName:connMap filterName == FCL | FTOCL | FFROMCL | FSV | FTOSV | FFROMSV | FMD | FTOMD | FFROMMD filterSpec == filterCommand | CFIscriptNamefilterName は、FXX, FTOXX,FFROMXX のような名前で、XX はCL (クライアント), SV (サーバ), MD (MASTER-DeleGate)の内の一つです。FXX のフィルタコマンドは、クライアントに対して、ファイルディスクリプタ0がバインドされ、DeleGateに対しては、ファイルディスクリプタ1がバインドされます。FTOXX と FFROMXX のフィルタコマンドは、標準入力から入力を受け、 XX に対してバインドされた標準出力へ、出力を投げます。
FTOXX と、 FFROMXX フィルタで、 CFIスクリプトは、データタイプによって、それぞれのデータに、適したフィルタを選択して利かせることができます。FTOCL=filterCommand のような、直接使用の変わりに、TOCL=filter.cfi を指定でき、ここでのfilter.cfiは、CFIスクリプトフォーマットのファイルです。また、CFIスクリプトは、FTOCL=URL のようにHTTPやFTP経由で、リモートホストから、読込むこともできます。CFIスクリプトのファイル名、または、スクリプト中で参照されるフィルタコマンドが、相対パス名で、指定される場合、それらは、LIBPATH 内を検索されます。
CFIスクリプトは、テキストデータで、"#!cfi" マジックストリングで、始まり、それぞれ"--"によって区切られた、1つ以上のフィルタ設計書を含みます。
CFI script == "!#cfi" NL filterUnit [ "--" NL filterUnit ]* filterUnit == filterRule [ filterRule ]* filterRule == [ Action "/" ] ruleName ":" ruleBody Action == "Output" | "Remove" ruleName == "Filter" | "CGI" | "Header-Filter" | MIMEhdr MIMEhdr == "Content-Type" | "User-Agent" | ... X-hdr == "X-Status-Ver" | "X-Status-Code" | "X-Request-Method" | "X-Request-Ver"| "X-Request-URL" | ... ruleBody == string NL [ SP string NL ]*Action(動作)を指定しない場合、入力ヘッダにruleName:ruleBody を突合わせることを表します。入力メッセージが、ruleBodyとマッチするフィールドボディをともなう ruleName ヘッダを持つ場合、マッチします。 1つ以上のルールがマッチした場合、真になり、filterUnit が採用されます。 filterUnit 内にマッチするルールが存在しない場合、 filterUnit は、無条件に採用されます。 現在、限られたMIMEヘッダセット(要求・応答メッセージ中の)のみがマッチングに使用できます。 オリジナルヘッダ中に含まれないいくつかの拡張ヘッダ情報でマッチすることもできます。 (例:応答メッセージ中のステータスコードを意味する、"X-Status-Code")
ヘッダruleName が"Filter"または、"CGI" または、"Header-Filter" の場合、例外的に、 それらは、動作(または、フィルタ)を指定し、入力データに利かせます。 "Filter" または、"CGI"フィルタの場合、入力メッセージのボディ部は、 フィルタプログラムの標準入力にパスされ、標準出力から出力されます。 また、出力データは、元の入力メッセージの変わりに、対象(クライアントや、サーバ)に転送されます。 転送メッセージ中の"Content-Length"は、ボディ部のサイズを示す値に調整され、転送されます。 "Header-Filter" フィルタの場合、メッセージのヘッダ部は、フィルタに授受されます。 HTTPメッセージ(Request-Line または、Status-Line)中のstart-lineは、 "Request-Line:" または、"Status-Line:" をプリフィックスされたヘッダフィールドとして、 渡されます。
ruleName:ruleBody に対して、"Action/" をプリフィックスした場合、 いくつかの簡単な書換えは、ruleBody データを使用し、関連する、ruleName に対して行われます。"Output/ruleName:ruleBody"は、 ruleName:ruleBody フィールドを、ヘッダに付け加え(または置換え)る事を表します。"Remove/ruleName:ruleBody"は、ruleBody にマッチするボディと、ruleName 名をともなうヘッダフィールドを削除することを意味します。
例) HTTP 応答メッセージの書換え
[content of test.cfi]
#!cfi
Content-Type: text/html
Filter: sed's/string1/string2/'
--
Content-Type: image/gif
Output/Content-Type: image/jpeg
Filter: gif2jpeg
URL書換えによるプロキシ動作
-_- マーク以降の右側には、オプションで、以下のように、"/Modifier/"書式を差込めます:
共通の表記
TCPrelay
例) 同様の役割をする、TCP上の2つのプロキシ
UDPrelay
例) 同様の役割をする、UDP上の2つのプロキシ
Socks サーバ
例) Socks-DeleGate
HTTP プロキシ/サーバ
このDeleGateを内部ホスト上のクライアントから使う場合、HTTP, HTTPS (Security), FTP, Gopher, Waisのプロキシに "firewall:8080"を指定します。
内部ホストからの要求のみ受け付けるgeneralist DeleGateをfirewall 上で走らせ、firewallホスト上のgeneralistを使用する、specialistを内部で、走らせる。generalistは、上流DeleGateとして、任意プロトコルの複数のDeleGateから、共有できます。
例) DeleGateをCGIプログラムとして使う
HTTP 伝送ログ書式
%C | -- CERN-HTTPDのコモンログファイル書式 |
%c | -- ミリ秒解像度を持った日付を除き、%C と同じ |
%D | -- DeleGateによる拡張 (connTime+relayTime:status) |
%X | == '%C "%r" "%u"' Referer と User-Agent付きのコモンログファイル書式 |
%r | -- 要求メッセージ中のReferer フィールド |
%u | -- 要求メッセージ中のUser-Agent フィールド |
%S | -- サーバへのCONNECT ステータス (c,m,p,d,s,v) |
HTTPCONF parameter == what:conf -- default: welcome.dgp,welcome.shtml,welcome.html,...
例)
FILETYPE parameter == suffix:gopherType:altText:iconName:contentType -- default: FILETYPE=".txt:0:TXT:text:text/plain" FILETYPE=...
CGIENV parameter == CGIENV=name[,name]* -- default: CGIENV="*"
Http-DeleGate の MountOptions
MOUNT="http:* = method=POST,asproxy,useproxy"
MOUNT="http:* = withquery,asproxy,useproxy"
例)
%u | -- Identプロトコルで得られたユーザ名 |
%h | -- ソケットから得られたクライアントのホスト名 |
%i | -- クライアントに向けたネットワークインタフェースのホスト名 |
%a | -- クライアントのホストアドレス |
%n | -- クライアントのネットワークアドレス |
%H | -- DeleGateのホスト名 |
%M | -- DeleGateのADMIN |
%A | -- "CMAP=string:authgen:mapSpec"によって生成される文字列 |
%U | -- クライアントの [Proxy-]Authorization: userame:password の username 部 |
%P | -- クライアントの [Proxy-]Authorization: userame:password の password 部 |
例)
%F | -- FromフィールドのE-mailアドレス |
%L | -- From: local@domain フィールドのlocal部 |
%D | -- From: local@domain フィードのdomain部 |
%U | -- Authorization: userame:password のusername部 |
%P | -- Authorization: userame:password のpassword部 |
%Q | -- Forwarded: フィールドの"for clientFQDN"部分 |
firewall% delegated AUTH="fromgen:%u@%h" ...
internal% delegated AUTH="log:%D/%h:%L/%u:%U"
...
ユーザによるDeleGateの構成
例) ニュースサーバNを、http://delegate/news/servN/にMOUNTする
(この機能は、FTPのような他のプロトコルに適用するべきです...)
SHTMLファイルでのサーバサイドの実装(SSI)
SSI タグ
META タグ
ICP プロキシ/サーバ
例) ICP とHTTP DeleGateの組は CACHEDIRを共有。
ICPCONF parameter* == ICPCONF={icpMaxima|icpConf} icpMaxima == para:N|hitage:N|hitobjage:N|hitobjsize:N|timeout:N icpConf == icpOptions:ProtoList:dstHostList:srcHostList -- default: ICPCONF=para:2,hitage:1d,...
para:N | -- 並列ICP-DeleGateサーバ数 [2] |
hitage:N | -- HITとして通知する、キャッシュデータの有効期限 [1d] |
hitobjage:N | -- HIT_OBJ似よって送信される、キャッシュデータの有効期限 [1h] |
hitobjsize:N | -- HIT_OBJによる、キャッシュデータの最大容量 [1024](bytes) |
timeout:N | -- 応答待ちタイムアウトのデフォルト値 [2.0](seconds) |
debug:N | -- デバッグ用ログレベル [0] |
FTPCONF parameter* == FTPCONF=ftpControl[:{sv|cl}] ftpControl == nopasv | noxdc | rawxdc -- default: none
ftpControl に "nopasv:sv" のように ":sv" または ":cl" がつづく場合、 例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに 適用されます。
FTP プロキシ/サーバ
このFTPプロキシを経由して、任意のFTPサーバ (ファイアウォールの外側にあっても良い)に接続できます。
internal% ftp ftp> open firewall 8021 220- firewall PROXY-FTP server (DeleGate/6.1.0) ready. 220- @ @ 220- ( - ) { DeleGate/6.1.0 (February 3, 2000) } ... 220- -- 220- You can connect to a SERVER by `user' command: 220- ftp> user username@SERVER 220- or by `cd' command (after logged in as an anonymous user): 220- ftp> cd //SERVER 220- Cache is enabled by default and can be disabled by `cd .' (toggle) 220- This (proxy) service is maintained by 'admin@your.domain' 220 Name (yourhost:yourname): ftp@ftp1 331-- USER for ftp@ftp1. 220- ftp1 FTP server ready. 331- Guest login ok, send your complete e-mail address as password. 331-- @ @ 331 \( - )/ -- { connected to `ftp' } Password: me@my.domain 230 Guest login ok, access restrictions apply. ftp> cd //ftp2 250-- CWD for ftp@ftp2 220- ftp2 FTP server ready. 230- Guest login ok, access restrictions apply. 250-- @ @ 250 \( - )/ -- { connected to `ftp2' } ftp>注記:大抵のftpクライアントは、以下のように、コマンドラインで、FTPのポート番号を指定可能です。
例) FTP to LPR (Line Printer Daemon Protocol) ゲートウェイ
LPR/FTP-DeleGateは、FTPクライアントがリモートプリンタにアクセスできるようにします;
ファイルの印刷は、FTPのファイルアップロードによって行われ、
プリンタステータスは、FTPディレクトリリストで見ることができます。
MountOption "readonly"は、ステータス閲覧を禁止します。
元FTP-DeleGateこのケースでの、ファイルへの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT="/xxx/* /yyy/* rw"のように、MOUNTポイントに対し、
マウントオプションとして、"rw" (read/write)を指定する必要があります。
全コンテンツはの取込動作は、指定ディレクトリ内に行われ、
"RETR directory.tar" コマンドによって、
tarフォーマットの単一ファイルとして返されます。
この機能を有効にするには、REMITTABLE="+,tar"のように、
REMITTABLE リストに、"tar" を追加します。
FTP 伝送ログ書式
transferTime は、秒で表される、トータル伝送時間です。 transferType "a" (アスキー) または、"b" (バイナリ)のどちらかです。 specialActionFlag は、現実装では、常に "_" (none) です。 direction は、"o" (outgoing) または、"i" (incoming)のどちらかです。 accessMode は、"a" (anonymous)または、 "r" (real user)のどちらかです。 userName は、e-mail アドレス(accessMode "a") または、存在するユーザ名(accessMode "r")のどちらかです。 serviceName 現実装では、常に"ftp"です。 authenticationMethod は、"0" (none) または、 "1" (RFC1413 Authentication)のどちらかです。 authenticatedUserID は、 authenticationMethod によって得られたユーザID、または "*"(認証なし)のどちらかです。 DeleGateStatus は、"L" (local file), "H" (cache hit), "N" (cache miss)のどれかです。.
例)
Telnet プロキシ/サーバ
例) プロキシ Telnet-DeleGate
このTelnetプロキシ経由で、任意のTelnetサーバに接続できます。
internal% telnet firewall 8023... -- @ @ firewall PROXY-telnet server DeleGate/6.1.0 -- ( - ) { Hit '?' or enter `help' for help. } ... -- -- -- This (proxy) service is maintained by 'admin@your.domain' >> Host name: exthost -- Connected to exthost. SunOS UNIX (exthost) login:例) 元 Telnet-like server
POP プロキシ
external% telnet firewall pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username@servername
...
USER username%servername is also available.
MOUNT="//* =" ... サーバがユーザによって指定された場合、書換えしない
MOUNT="*
pop://defaultHost/*" ... デフォルト POP サーバを指定
MOUNT="user1
pop://host1/*" ... "user1"のサーバを "host1"にする
MOUNT="//pop2/*
pop://host2/*" ... 実ホスト名 "host2"を隠す
クライアントは、ユーザ名として、ニュースグループ名を送信することが要求されます。
このDeleGateは、POPサーバ(デフォルトでmailHost にある)のメールボックスを、HTTPクライアントに提供します。クライアントが、"http://firewall/mail/"にアクセスするには、HTTPの認証情報として、mailHost にあるPOPサーバのUsernameとPasswordを入力するように要求されます。Usernameが、"user@mailHost2"の場合、mailHost ではなく、mailHost2 が対象POPサーバとしてアクセスされます。Hostサーバユーザのそれぞれのメールボックスは、 "http://firewall/mail/+pop.User.Host"になり、URL中にUserとHostを直接指定できます。
IMAP プロキシ
external% telnet firewall imap
* OK external Proxy-IMAP server DeleGate/6.1.15
C001 LOGIN username@servername
...
LOGIN username%servername も受けいれられます。
SMTPCONF parameter == SMTPCONF=what:conf -- default: SMTPCONF=bgdatasize:64K
SMTPGATE parameter == SMTPGATE=dirPath -- default: SMTPGATE='${ETCDIR}/smtpgate'
例) SMTP から SMTP へ、転送
delegate.org# delegated -P25 SERVER=smtp
[the contents of SMTPGATE/users/feedback/conf]
例)
NNTP プロキシ/サーバ
例) フィルタ
ニュースグループ名が"group.*"のパターンを持つ場合のみ中継する。nntpServerに対するグループリストは "nntp://nntpServer/group1.,group2.,..."のように指定できます。
例)複数のNNTPサーバを認証付(AUTHINFOを使用)でマージ
例) 選択したグループをマウント
例) POP サーバから NNTPクライアントへ
例) NNTP サーバから HTTP クライアントへ
例)元 NNTP-DeleGate
NNTP-DeleGateのSERVERパラメータ中の対象サーバに"-.-"を指定すると、DeleGateを元NNTPサーバとして使うことを意味し、それの持つスプールに検索/投稿できます。の新たなニュースグループ名 newsGroup を作るには、空ファイルを作ります。
NNTPCONF parameter* == what:conf -- default: NNTPCONF=upact:600/300/120
LDAP プロキシ
このDeleGateをクライアントのLDAPサーバとして指定し、ルートディレクトリ名(例えば、サーチ用、baseObject名)の後に"@host.of.ldap-server"を付加します。
Whois プロキシ
X プロキシ
Gopher プロキシ
internal% gopher firewall 8070
internal% gopher -p -_-gopher://gopher.tc.umn.edu
firewall 8070
SSL プロキシ
例) SSLサーバ・非SSLクライアント間を中継
DNS (Domain Name System) プロキシ/サーバ
例) {NIS,FILE,DNS}/DNS ゲートウェイ
hostname のための MX レコード は、与えられた場合、 -MX.hostname ( 以下の例のように)または、 hostname のための A レコードが使用されます。 複数の MX レコード間の優先順位は、現実装では表現できません。
例)HostB の MX として、HostA の hosts テーブルを使用する。
DNSCONF parameter* == what:value
para:N | -- 並列サーバプロセス数 [2] |
domain:FQDN | -- [DeleGateホストのドメイン名] |
origin:FQDH | -- [DeleGateホストのホスト名] |
admin:Email | -- 管理者のメールアドレス [ADMIN] |
mx:FQDH | -- [存在する場合、-MX.host のプライマリホスト名、または、自身による host 問い合わせ] |
serial:N | -- シリアルナンバ [最終変更時の %Y%m%d%h ] |
refresh:period | -- リフレッシュ間隔 [6h] |
retry:period | -- リトライ間隔 [10m] |
expire:period | -- 有効期限 [14d] |
minttl:period | -- 最小 ttl [6h] |
CU-SeeMe プロキシ
予約名
アタッカー防御
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、存在するアドレス上にターゲットバッファが存在していることを期待しており、スタックアドレスをランダマイズすることは、アタック成功の糸口を減少するのに効果的です。そして、アタックの失敗は、致命的エラーを発生させ、DeleGateにより、捕獲されます。
疑わしいクライアントホストは、関連ファイル(ADMDIR/shutout/ 内)を削除するか、 TIMEOUT=shutout(デフォルト30分)でファイルの有効期限が切れるまで、シャットアウトされます。 安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。 しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御設定はもちろんのこと、このような攻撃を防ぐよう意識を高く持ってください。
紳士的再起動
再起動は、DeleGateの設定変更した後に行います。再起動時にパラメータを再読込するためには、 +=parameters 表記(パラメータ置換)を与える必要があります。他のオプション(パラメータ)は、コマンドライン引数で与え、これは、リスタートしたDeleGateプロセスに継承されます。
他の再起動目的は、ごみや、リーク(ヒープメモリや、ファイルディスクリプタ)を、お掃除します。この目的の場合、DeleGateは TIMEOUT=restart または、CRONパラメータの -restart 動作で、それぞれ予定した時間に、周期的に再起動できます。
例) レゾルバとしてDeleGate を使う
${DGROOT}/etc | -- 主に設定のための持続性ファイル |
${DGROOT}/lib | -- ライブラリファイルとスクリプト |
${DGROOT}/adm | -- 管理に関係する重要なログ |
${DGROOT}/log | -- 増加するログファイル |
${DGROOT}/work | -- コアダンプ用 |
${DGROOT}/cache | -- キャッシュデータ用 |
${DGROOT}/act | -- 現在アクティブなDeleGateの制御情報 |
${DGROOT}/tmp | -- シャットダウン時に削除される揮発性ファイル |
詳細は、DGROOT パラメータと、 ローカルファイル使用法 の記述を参照して下さい。
著者
@ @ ( - ) _< >_Yutaka Sato <y DOT sato AT delegate DOT org>
リリース 7.3.5 最終更新: 2001年7月4日 --------- --------- --------- --------- --------- --------- --------- ---------