翻訳者: 鈴木 雄(すずき ひろし)<setter at i-red dot info>
翻訳開始日:2001/8/23(v7.5) (1997/11-v4.3)
最終更新日:2007/5/20 (v9.6.0)
翻訳者コメント:
翻訳の正確さなどは、一切保証しません (できません(^^;;;)。
ですから、この文書をお読みになる方は、*必ず*原文
(http://www.delegate.org/delegate/)
を併用して下さい。
誤訳などのご指摘は大歓迎ですm(__)m
Permission to use this material for evaluation, copy this material for your own use, and distribute the copies via publically accessible on-line media, 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 佐藤 豊
<ysato AT etl DOT go DOT jp>
<y DOT sato AT delegate DOT org>
著作権 (c) 1994-2000 電子技術総合研究所 (ETL), AIST, MITI
著作権 (c) 2001-2007 独立行政法人 産業技術総合研究所 (AIST)
AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165, H18PRO-443
CFI CU-SeeMe DGAuth DNS FTP Gopher HostList HTTP ICP IMAP LDAP NNTP POP ProtoList SMTP SockMux Socks SSI.shtml SSL TCPrelay Telnet UDPrelay Whois X
目次
--------- --------- --------- --------- --------- --------- --------- --------- 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 プログラムとして利用できます。 さらに、外部プログラムによるフィルタリングで、 HTTP ヘッダ削除 /生成を含むいくつかの くり返し使用される機能は、DeleGate に組み込まれています。
ログファイルと、キャッシュファイルを含む、 全ての DeleGate のローカルファイル は、 単一のルートディレクトリ (DGROOT) に置かれ、 デフォルトで、DeleGate (プロセス) 所有者のプライベートファイルとなります。 しかし、それらは、異なったユーザ間で共有でき、 それぞれのファイルのパス名、所有者、アクセス権限をカスタマイズできます。 ログファイル名は、 エージングのため、日付値でパラメータ化でき、 また、キャッシュファイル名は、分散キャッシュディスクのため、 ハッシュ値でパラメータ化できます。
DeleGateは、たくさんのオプションで制御されますが、 -Pport オプションと、 SERVER=protocol パラメータだけは、 ほとんどの場合、動作させる上で必須となります。 -P オプションは、DeleGate がどのポートで クライアントからの要求を受けるかを指定します。 SERVER パラメータは、 DeleGateが、どのプロトコルでクライアントと通信するか、 また、任意で、どのサーバに通信を中継するかを指定できます。
オプションは、"+=URL" の記述により、ローカル/リモートリソースから読込めます。 通常、"+=/path/of/parameters" のように、 ローカルファイルを使用します。 (パラメータ置換を見てください) (DGCONF も見てください)
-P option -- DeleGateの入り口ポート番号 == -Pport[,port]* port == [host:]portNum[/udp][/admin] portNum == number[-number]
入り口ポートは、デフォルトで、SERVER=protocol パラメータにより、 UDP ベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay) が指定された場合を除き、TCP ポートが作成されます。 また、-Pport/udp のように "/udp" が後置される場合、 SERVER で指定したプロトコルとは無関係なものとなります。
このオプションは、以下の場合を除き、*必ず* 指定しなければなりません。 DeleGate が、inetd(8) から、起動される場合や、 ほとんどの、-Ffunction オプションを利用する場合、 または、SERVER="tunnel1" により、トンネルサーバ として動作している場合には、無視されます。
-f option -- フォアグラウンドで実行
-r option -- 再起動
-v option -- ログレベルを制御 == -v[vdtsau]
-D option -- サブコンポーネント無効化 == -D[t]
-S option -- SIGCHLD シグナルを監視します
-T option -- システムコールトレース == -T[xsdt]*
-F option -- 特殊機能 == -Ffunction
-- option -- コマンドライン引数を隠す
parameter == name=value
conditional parameter == (condition)parameter
-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 と同様のサーバ設定の表記法
|
* | HOSTLIST | name:hostlist | 名前付 HostList を定義する
|
* | CMAP | map-spec | 現在の接続に関するマッピングテーブル
|
DYLIB | patternList | ダイナミックライブラリのファイル名パターン | |
LIBPATH | dir:dir:... | ライブラリファイルのサーチパス | |
LDPATH | dir;dir;... | DYLIB の検索パス | |
DATAPATH | dir:dir:... | データファイルの検索パス | |
DGPATH | dir:dir:... | 置換リソースの検索パス | |
DGCONF | dir/file | 設定パラメータのファイル | |
DGOPTS | option;option;... | コマンドラインオプションリスト | |
PORT | portList | -P オプションと同様の入り口ポートの確保
|
ルーティング
-- | ---------- | ------------------ | ---------------------------------- |
* | FORWARD | proxy-_-proto:dst:src | src から dist で、proto の場合、proxyに転送します |
* | ROUTE | proxy-_-dst:src | src から dist の場合、proxy に転送します |
* | 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 | 許可するプロトコル/サーバ/クライアント |
* | REJECT | proto:dst:src | 拒否するプロトコル/サーバ/クライアント |
REMITTABLE | ProtoList | サーバに送信するプロトコル | |
* | REACHABLE | dstHostList | 設定したサーバホストのみ到達可能です |
* | RELIABLE | srcHostList | 指定したクライアントホストのみ受け入れます |
* | RELAY | proxy|delegate|no | プロキシモードを制限します |
* | AUTH | what:aproto:users | リモート管理のための権限与えるユーザ |
* | AUTHORIZER | serv:proto:dst:src | 認証サーバ |
* | MYAUTH | user:pass: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 | 日本語テキストのキャラクタ変換 |
* | CHARMAP | [jis|ucs]:a-z/A-Z | テキストデータ内のキャラクタにキャラクタを割り当てる |
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 | エクスパイアログファイル | |
COUNTER | CounterOptions | アクセスカウンタ | |
WORKDIR | dirPath | DeleGate がコアダンプする場所 (-_-; | |
ACTDIR | dirPath | 一時ファイルの場所 | |
TMPDIR | dirPath | 表にでない一時ファイルの場所 | |
PIDFILE | fileName | DeleGate の PID ファイル |
ホスト名解決
-- | ---------- | ------------------ | ---------------------------------- |
* | HOSTS | host/addr,... | プライベート ホスト/アドレス マップ |
RESOLV | file,nis,dns,sys | レゾルバの使用順序 | |
RES_WAIT | src:host | レゾルバの準備ができるまで待つ | |
RES_CONF | URL | resolv.conf の場所 | |
RES_NS | host[:port] | 使用する DNS サーバ | |
RES_AF | 46 | 64 | 4 | 6 | 検索するアドレスファミリ (IPv4/v6) | |
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 サーバとしての設定 |
* | SOCKSTAP | proto[:[dst][:src]] | SOCKS 越しのプロトコルを解釈する |
SERVER parameter* == SERVER=protocol[://host[:portNum]][:-:MountOptions] portNum == [+|-]number -- default: SERVER=delegate
例) 対象サーバを限定しない Telnet-DeleGate の SERVER パラメータ
対象サーバ(host) を指定しない場合、 それは、アプリケーションレベルのプロトコルに依存した方法で、 実行時に、クライアントにより、何らかの形で与えられます。
サーバでのプロトコルは、クライアントでのプロトコルと同様であることが、 暗黙で要求されます。 HTTP のようないくつかのプロトコルは対象サーバとのプロトコルを指定する固有の方法を 持っています。 他の場合、例えば、MOUNT="/news/* nntp://server/*" のように、MOUNT パラメータ で明示しなければなりません。
SERVER=protocol://host:portNum は、対象サーバの URL を指定します。 ":portNum" 部分は、番号が、プロトコル標準ポート番号の場合、通常、 URL 中で省略できます。 DeleGate によって認識されるプロトコルと標準ポート番号の一覧は、 "http://delegate/-/builtin/mssgs/config.dhtml" で見られます。 portNum に "-" または "+" が前置される場合、 入り口ポート番号に指定したオフセットを加えたポート番号 を割り当てます。 また、"-"(portNum なし)の場合、同じポート番号を使用します。
例) 複数ポートを単一の他のホストに転送する
注記:この、特定のサーバにバインドした DeleGate は、 任意サーバに対するプロキシとしての動作を停止していません。 必要なら PERMIT, REACHABLE, RELAY パラメータを使用し、 プロキシ機能を制限しなければなりません。
SERVER パラメータが ":-:MountOptions" を伴う場合、 MountOptions に指定された条件を評価した結果が真の場合、 動的に SERVER パラメータを選択します。 特殊な場合として、 ":-:via=HostList" は、 ":-:HostList" のように省略できます。
例) クライアントに適切な NNTP サーバを選択する。
例) {NNTP,SMTP,POP}-DeleGate を単一サーバで実行
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 でスーパーユーザのみ -- 制限: Windows 上でのサービスのユーザの設定
例)クライアントのユーザ名と一致したユーザIDで動作する
Windows で、OWNER=user を指定してサービスとして起動した時、 DeleGate サービスが作られるときのユーザをセットします。 OWNER="" のように空のユーザが指定された場合、ユーザ名は、 USERNAME 環境変数から取得されます。 パスワードは、PASS=pass パラメータ、環境変数で指定するか、コンソールで問い合わせられます。
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
例)
HOSTLIST parameter* == HOSTLIST=listName:HostList
例)
CMAP parameter* == CMAP=resultStr:mapName:connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
TLSCONF parameter* == TLSCONF=tlsConf[,tlsConf]* tlsConf == what:value -- default: TLSCONF=scache:do,xcache:do
STLS parameter* == STLS=stlsSpecs[,sslwayCom][:connMap] stlsSpecs == [-]stlsSpec[/ssl][,stlsSpecs] stlsSpec == fsv | fcl | mitm | imimSec sslwayCom == {sslway [-Vrfy] [-CApath dir] ...} connMap == ProtoList:dstHostList:srcHostList -- default: none -- 制限: HTTP, FTP, SMTP, POP, IMAP, SOCKS に対して有効 -- 必須: SSLway
"fcl" を指定した場合、クライアントは STARTTLS ネゴシエーション無しで SSL を開始できます。このようなクライアントサイドからの暗黙の SSL ネゴシエーションは、 クライアントサイドから接続時の、SSLハンドシェイクパケットを、 セッション開始時に imimSec によって指定された、 一定時間覗くことで検出されます。デフォルト値は、"im0.25"(250m秒)です。 "-im" は、この暗黙の SSL ネゴシエーションを無効にします。
デフォルト以外の SSLway コマンドパスまたは、オプションを使う必要がある場合、 たとえば STLS="fcl,sslway -Vrfy -cert mycert.pem" のように、 stlsSpecs の後ろに SSLway コマンドを指定できます。
例)
DGCONF parameter == DGCONF=dir/file -- default: DGCONF='${EXECDIR}/${EXECNAME}.conf'
DYLIB parameter == DYLIB=libfilePattern[,libfilePattern]* -- default: DYLIB='dglib*.so,lib*.so,dglib*.dylib,lib*.dylib'
例)
LDPATH parameter == LDPATH=dirPath[;dirPath]* -- default: LDPATH='${LIBDIR};${EXECDIR};/usr/lib;/lib'
LIBPATH parameter == LIBPATH=dirPath[:dirPath]* -- default: LIBPATH=LIBPATH='.:${STARTDIR}:${LIBDIR}:${EXECDIR}:${ETCDIR}'
DATAPATH parameter == DATAPATH=dirPath[:dirPath]* -- default: DATAPATH='.:${DGROOT}:${STARTDIR}
DGPATH parameter == DGPATH=dirPath[:dirPath]* -- default: DGPATH='+:.:${HOME}/delegate:${ETCDIR}'
DGSIGN parameter == DGSIGN=signatureSpec -- default: DGSIGN="V.R.P/Y.M.D"
DGOPTS parameter == DGOPTS=opt[;opt]* -- default: none
SOCKOPT parameter == SOCKOPT=[no]name[:value] -- default: reuse
PORT parameter == PORT=port[,port]* port == [host:]portNum[/udp] portNum == number[-number] -- default: none
FORWARD parameter* == FORWARD=gatewayURL[-_-connMap] gatewayURL == gwproto://gwhost[:gwport] connMap == protoList:dstHostList:srcHostList -- default: none
特別な、gwproto で、FORWARD は、 MASTER, PROXY, SOCKS、および SSLTUNNEL の一般化表記として次のように動作します。
複数の FORWARD パラメータが指定された場合、設定された順序で試されます。 対象サーバに対し複数のルートが利用可能な場合で、 FORWARD と、他のパラメータ(MASTER, PROXY, SOCKS, SSLTUNNEL) の混合とともに指定された場合、 FORWARD により指定されたルートは、CONNECT で、 "proxy" または、"master" により指定された優先順位で試行されます。
例) 認証つきの SSL トンネル経由で到達できる HTTPS サーバへの HTTP クライアント用ゲートウェイ
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 -- 制限: HTTP, FTP, Telnet に適用可能
例)
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|proxy|master|https|vsap|direct|socks|udp connMap == ProtoList[:dstHostList[:srcHostList]] -- default: CONNECT="c,i,m,h,v,s,d:*:*:*"
connType:
cache | -- CACHE を検索 (接続しない) |
icp | -- ICP サーバに指示された PROXY 経由 |
proxy | -- PROXY サーバ経由 |
master | -- PROXY または MASTER-DeleGate サーバ経由 |
https | -- SSLTUNNEL (HTTP 上の SSL トンネル) 経由 |
vsap | -- VSAP サーバ経由 |
direct | -- 目的サーバへ直接接続 |
socks | -- SOCKS サーバ経由 |
udp | -- UDP による |
none | -- 接続しない |
それぞれの接続タイプは、それぞれ {c,i,m,d,v,s,u} のように、
頭文字で省略できます。
ProtoList と dstHostList が指定された場合、
リストに含まれるプロトコルとホストにのみ制御が適用されます。
例) 外部ネットワークに接続せず、ホスト上のキャッシュデータを使う場合、
CONNECT="cache:*:!./@"のように指定します。
注記) 現実装では、"cache" が connSeq に含まれる場合、 常に最初に試されます。
-Pport と CONNECT=udp の組合わせは、TCP クライアントから UDP サーバへ中継します。 また、-Pport/udp と udp ではない CONNECT の組合わせは、 UDP クライアントから TCP サーバへ中継します。SRCIF parameter* == SRCIF=host[:[port][:connMap]] connMap == ProtoList:dstHostList:srcHostList -- default: SRCIF="*:*:*:*:*"
このパラメータで、それぞれのサーバへ接続する際の ソースアドレス(ネットワークインターフェースの)を指定します。 これは、DeleGate ホストが複数のネットワークインターフェースを持つ場合に役立ちます。 それは、SOCKS-DeleDate または、FTP-DeleGate により受け付けられる クライアント接続で使用するポートの指定にも使えます。
ほとんどの場合、特殊パターン "*" を host または、port に指定した場合、 IP アドレス、またはポート番号をワイルドカード指定します。 いくつかの場合、特殊パターン "*" は、 FTP データ接続 (PORT や PASV による) 用ポート、または、 SOCKS (BIND と UDP-ASSOCIATE) 用ポートのような、 プロトコルによって指定された必要なアドレスや、ポート番号に使われます。 ワイルドカードを IP アドレスと、ポート番号で明示的に指定するには、 それぞれ、host に "0.0.0.0" を、port に "0" を指定します。
例)
要求に応じて割り当てられ、相手に通知された "ftp-data" 接続用のポート ( PORT により クライアントからサーバ、PASV によりサーバからクライアントに向けられた) は、"ftp-data-port" または、"ftp-data-pasv" により、それぞれを個別に制御できます。 PORT のためにサーバからクライアント、または、PASV のためのクライアントからサーバへ 確立されるデータ接続用のソースポートは、"ftp-data-src" によって制御できます。
TUNNEL parameter == TUNNEL=tunnelType:script tunnelType == tty7 -- default: none
現状、tunnelType は、"tty7" でなければならず、それは、 DeleGate 間の伝送が 7ビットストリームで行われることを意味します。 タイプが "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 のみ許可します
ProtoList (dstHostList) 中の特殊パターン "*" は、 全ての許可されたプロトコル(サーバ) (REMITTABLE (REACHABLE) パラメータによって明示することもできます) を意味します。 これらパラメータは、可能となっている許可範囲を制限します。 プロトコル(サーバ)は、REMITTABLE (REACHABLE) パラメータによって、 明示的または暗黙の指定で許可されていない場合、使えません。 同様に、1複数の RELIABLE パラメータが明示的に与えられた場合、 これらは、PERMIT のsrcHostList 中にあるクライアントの許可範囲を制限します。
dstHostList で指定したホストは、"host:portNumList" のように ポート番号をつけることで、更に制限できます。 例) PERMIT="telnet:{*:23}:*" は、任意のホストに対する telnet を 標準ポート番号(23)でのみ許可することを意味します。
ProtoList 中のプロトコル名は、 "protocolName/portNumList/methodList" のようにポート番号と手段を使って変更でき、 プロトコルにおけるアクセス可能なポートと手段を制限できます。 例) 一連の PERMIT パラメータ PERMIT="ftp//readonly:Servers:Clients" PERMIT="ftp:*:*" は、 Servers に対する Client からのアップロードを禁止し、 他のサーバ・クライアントの組み合わせで、アップロードを許可することを意味します。
複数の DeleGate サーバが、MASTER や PROXY によって連結されている場合、 元クライアントの識別情報は、 最初(連結の入り口)の DeleGate サーバによって取得され、 上流 DeleGate サーバへ RIDENT パラメータを使用して転送でき、 また、PERMIT パラメータを使って検査されます。
REJECT parameter* == REJECT=connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
例) メールクライアントが、メールサーバ上のメッセージを削除できないようにします。
REMITTABLE parameter == REMITTABLE=ProtoList -- default: REMITTABLE="*" - generalist 用 -- default: REMITTABLE="." - specialist 用
プロトコル名の後ろに "/portNumList" がある場合、PortList に 指定されたポートのみが許可されます。 PortList には "/methodList" を付けることができ、 プロトコルで使える手段を制限できます。 現在、手段として、"readonly" のみが使えます。 例)REMITTABLE="ftp//readonly" は、 FTP サーバへのアップロードを禁止する、 "読み込み専用" FTP-DeleGate を生成します。
プロトコル固有のデフォルト:
例外:
最初の指定が、"+" の場合、それはデフォルトで許可されたプロトコルのリストを意味します。
例) SERVER=http で、REMITTABLE="+,-https/80,-wais,file" の場合、
REMITTABLE="http,https/443,gopher,ftp,file" を意味します。
注記:ここでの "https" は、SSLtunnel 上の 非 https プロトコルを検出して拒否します。
SSLtunnel 上で 任意のプロトコルを中継する場合、
REMITTABLE="+,ssltunnel" のように、
"https" の代わりに "ssltunnel" を指定します。
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 | vhost | no | nojava | noapplet connMap == ProtoList:dstHostList:srcHostList -- default: RELAY="delegate,vhost,nojava:*:*:.localnet" RELAY="proxy:*:*:*"
RELAY="no" は、中継を行わない、元 HTTP サーバとして動作することを意味します。 (元 HTTP サーバは、プロキシ用の書式 (要求される URL は、絶対フォーマットで、フル書式や、"/-_-" 書式ではありません) ではない通常の書式での要求を受け付ける、通常のサーバです。)
"transparent-proxy (透過プロキシ)" と呼ばれる機能は、"RELAY=vhost" で有効にできます。 RELAY="vhost" は、任意の仮想ホストにも中継する、元 HTTP サーバに使用できます。 このオプションは、明示された MOUNT を指定せずに、 要求ヘッダ中の "Host:" フィールドで指し示された 任意の対象サーバに、 HTTP 要求を転送可能にします。 この自動転送は、要求された URL が MOUNT されていない場合のみ実行されますが、 ほとんどの DeleGate は ルート URL ("/*") 用の MOUNT パラメータが指定された 元サーバとして動作しているため、それほど使われそうにありません。
例)
デフォルト:
AUTH parameter* == AUTH=what:authProto:who -- default: none
HTTP-DeleGate の場合、(要求メッセージ中の) Authorization ヘッダ
にある Username:Password で、
"私は誰”かを宣言します。ここでの Username は、
User@Host にもできます。
User, Host, Password のセットを得た後、
DeleGate は、
Host の(FTP)サーバに、
User と Password でログインを試みます。
成功した場合、
クライアントは User@Host で
認証されます。
現在、以下のカテゴリでの、 認証/権限付与がサポートされます。
-- 任意プロトコルの DeleGate の場合 --
-- FTP サーバ と FTP/HTTP ゲートウェイの場合 --
-- プロキシと 元 HTTP サーバの場合 --
ident | -- 識別プロトコル [default] |
pauth | -- Proxy-Authorization フィールド "user@host:password" を使用 |
auth | -- Authorization フィールド "user@host:password" を使用 |
FTP サーバベースの認証を使用する場合、 要求される認証情報としてのユーザ名は、 "user@host.domain" のような、E-mail アドレスです。 なお、これは通常、AUTH="anonftp" と AUTH="proxy" 両方で使えます。
AUTHORIZER parameter* == AUTHORIZER=authServList[@realmValue][:connMap] authServList == authServ[,authServ]* | & | * authServ == authHost[/portNum][(reprUser)] authHost == hostName | hostAddr realmValue == word | {words separated with space} connMap == ProtoList:dstHostList:srcHostList -- default: none -- 制限: Telnet, FTP, NNTP, SMTP, IMAP, Socks, SockMux および、HTTP に、適用可能
注記: auth-server により認証されたクライアントは、そのクライアントホストが、 他のアクセス制御 (RELIABLE と PERMIT) を通過しない場合、許可されません。 認証された全クライアントを、そのホストを無視して許可したい場合、 RELIABLE="-a/*" のように指定します。 この用途で、RELIABLE="*" も動作しますが、DeleGate と設定変更で使うのは危険です。
connMap に追加するとき、認証サーバは、 対象プロトコル、サーバホスト、クライアントホストの組合わせで、条件付で選択できます。 authServList は、認証サーバ名、または、認証サーバのホスト名リストです。 authServList の後ろに、"@realmValue" が付く場合、 その値は、HTTP-DeleGate における、保護空間の領域指定に使えます。 それは、それぞれの MOUNT ポイントに対して、マウントオプション "realm=realmValue" で上書き可能です。
現在、リモート認証/権限付与サーバのプロトコルは、 FTP プロトコルの USER/PASS コマンドです。 このように、DeleGate の認証/権限付与サーバには、 任意の実在の FTP サーバを使用できます。 他の方法として、DeleGate 自らが持つ 認証/権限付与のためのリストは、 -Fauth 機能により管理できます。
次のように、組み込み auth-server を authServ として使用します:
例)
例)
コマンドによる認証の結果は、その出力文字列か、終了コードで表されます。 コマンドはその標準出力に結果を FTP プロトコルでのステータス応答形式で表し、 成功時 "230"、失敗時 "530" です。 他の場合、プロセスの終了コードが使われ、0 が成功、0 以外が失敗です。
例) ユーザ名を引数で渡し、パスワードを環境変数で渡す。
[myauth コマンドの内容]
#!/bin/sh
if [ "$1" = "user1" -a "$MYPASS" = "pass1" ]; then
echo "230 SUCCESS"
else
echo "530 FAILURE"
fi
認証されたユーザに権限を与えない必要があるときのみ、 authServList として、以下の特別な名前が便利でしょう。
例)
MYAUTH parameter* == MYAUTH=username:password[:connMap] -- default: none -- 制限: Socks, VSAP, SMTP, および HTTP のみに適用可能
クライアントから送られた、ユーザ名+パスワードの組は、 MYAUTH="%U:%P" でサーバに転送できます。 (HTTP および、FTP でのみ使えます)
注記: プロキシとの認証では、MYAUTH の代わりに認証情報を含むゲートウェイ URL を FORWARD とともに使用することが強く推奨されます。 例) SOCKS=host:port と MYAUTH=user:pass は、 FORWARD=socks://user:pass@host:port と、表現できます。
例)
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] |
service | -- | delegated プロセス単位の最大サービス数 [無制限] |
standby | -- | スタンバイプロセスの最大数 [16] |
conpch | -- | クライアントホスト単位の最大同時接続数 [無制限] |
ftpcc | -- | サーバからホストに対する FTP 接続キャッシュの最大数 [16] |
nntpcc | -- | サーバからホストに対する NNTP 接続キャッシュの最大数[16] |
http-cka | -- | (HTTPCONF=max-cka で置き換えられました) |
http-ckapch | -- | (HTTPCONF=max-ckapch で置き換えられました) |
udprelay | -- | 並列 UDPrelay クライアントの最大数[256] |
winmtu | -- | Win32 における send() 単位の最大値[1024] |
TIMEOUT parameter* == TIMEOUT=what:seconds,... -- default: TIMEOUT=dns:10,acc:10,con:10,lin:30,...
shutout | -- | 致命的エラーでセットされた、シャットアウトを解除する [1800] |
dns | -- | DNS 参照 [10] |
dnsinv | -- | DNS 逆引き参照 [6] |
acc | -- | クライアントの受入れ (FTP データ接続含む) [10] |
con | -- | サーバへの接続 [10] |
lin | -- | 出力のための LINGER [30] |
dgnonce | -- | AUTHORIZER=-dgauth 用 ("nonce" の寿命) [60] |
ident | -- | Ident サーバへの接続 [1] |
rident | -- | RIDENT=client 情報の受取り [1.0] |
io | -- | 一般入出力 (データ転送ではない) [600] |
silence | -- | クライアント・サーバどちらからもデータ送信無し [0] (tcprelay のみに適用) |
hello | -- | MASTER との HELLO ネゴシエーション [30] |
login | -- | プロキシへのログイン (Telnet, FTP, SOCKS) [60] |
daemon | -- | delegated [無制限] |
restart | -- | 指定した期間毎に再起動 [無制限] |
standby | -- | 次のクライアントのため delegated が待機する時間 [30] |
takeover | -- | クライアント切断後ダウンロード内容をキャッシュに書込むまで [5]
(ダウンロードを開始した、クライアントの切断後) |
ftpcc | -- | FTP 接続キャッシュのキープアライブ [120] |
nntpcc | -- | NNTP 接続キャッシュのキープアライブ [300] |
http-cka | -- | (HTTPCONF=tout-cka に置き換えられました) |
cfistat | -- | -s,filter からの 状態情報用 [1.0] |
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*"
vURL が "*" で終わる場合、 部分的に一致したパスも書換えられます。 rURL が "*" で終わる場合、 部分的に一致したパスの残り部分は、そのまま rURL の後にコピーされます。
例) HTTP-DeleGate での MOUNT
vURL か rURL に "=" を指定した場合、 マウントは、リクエスト中の vURL を書換えない、 または、 応答中の rURL を書換えるのと同じです。
対象サーバのポート番号 (rURL において) には、 "-" か "+" が前置きでき、 これは、SERVER パラメータに設定した入り口ポート番号に対して、 動的に決定したオフセットを与えます。
rURL が "file:path" で path が相対の場合、 データファイルは、DGROOT ディレクトリ、 または DATAPATH に設定された ディレクトリ内で検索されます。 rURL が "vurl:rURL" のように前置きされるなら、 vURL から rURL への書き換えられた URL(要求メッセージ中の) は、他の MOUNT で再度書き換えられます。 この再帰的な MOUNT は、rURL to vURL への応答データ内の URL には、 適用されないので、応答中の URL が逆書き換えされることが、さらに期待されるような、 HTTP では期待の動作はしません。
例) 再帰的な MOUNT
省略形
設定を簡単で再利用可能にするために、 URL の特別な省略形を MOUNT パラメータで使用できます。 protocol-name://host-name:port-number/url-path からなる rURL 中の protocol-name, host-name, port-number に "=" を指定した場合、 それは、DeleGate 自身をあらわします (すなわち vURL 中のそれ)。 URL が "//" で始まる場合、更なる省略形で、 "///path" は "=://=:=/path" を意味し (プロトコル,ホスト,ポートが同じ)、 また、 "//serv..." は "=://serv..." を意味します (同じプロトコル)。
省略された host-name と、port-number は、 存在する場合、仮想ホスト(HTTP の Host: フィールドで与えられた)の、 または、クライアントとの実インタフェースのそれに置き換えられます。 実インタフェースを明示的に指定する場合、"-P" を "http://-P/path" のように、"host-name:port-number" 部分に使用します。
例) MOUNT パラメータ中の rURL の省略形
マッチングと書換えの複合
vURL と、rURL のパターンの後に "*%" がつく場合、 scanf(3) と似た書式で指定した複合マッチングのためのパターンを表します。 それぞれの書式指定は、"%" に続く指定("%c", "%[a-z]" など)からなります。 拡張書式 "%S" は、隣接したキャラクタにより決定される変数を意味します。 すなわち "%Sx" は "%[^x]x" を意味します: 例) "%S." は "%[^.]." および "%S/" は "%[^/]/" rURL 中の "%(N)" は、 vURL 中の N 番目の 要素の複製を意味します。 vURL パターンが "$" キャラクタで終わる場合、 URL 文字列末端と完全に一致する必要があります。
例) 複合マッチングと書き換え
MountOptions == option[,option]*
条件: 最初のオプショングループは、MOUNT をソースと対象 (クライアントとサーバ) により条件的に行います。 MOUNT パラメータに、 1つ以上の条件を含む MountOption を指定した場合、 全ての条件が真にならない限り、MOUNT は無視されます。
これら HostList は、host:port のリストでなければならず、 ここでの :port 部分は、特に気にしない場合省略できます。 host 部は、"*" で置換えでき、 その場合ネットワークインターフェースの違いを気にしません。
例)
制御系: オプションの2番目のグループは、局所的な MOUNT ポイントに 対する DeleGate の動作を制御します。
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 に変換 |
特別な convList URICONV="+" は、デフォルトの URICONV の設定 (この場合、現実装では attrList はありません) を読みこむことを意味します。 attrList は、属性名リストで、それぞれは、1つの要素名を前置きできます。 特別な属性名 "+" は、属性のデフォルトセットを意味します。 "-" が前置きされた属性は、指定済みの属性セットから除かれます。
他の特別な convList URICONV="where:any" は、 書換える URL の検索対象を HTML タグだけではなく、 XML, JavaScript,CSS (Cascading Style Sheets) および、 SWF (Shockwave Flush) にも行いますします。
例)
BASEURL parameter == BASEURL=URL -- default: none
元/ゲートウェイ HTTP-DeleGate が要求ヘッダ内の "Host:vhost1" を受け取った場合、 "vhost1" を DeleGate のベース URL とするため、 BASEURL="http://vhost0" パラメータは無視されます。 BASEURL によって、"Host:" ヘッダを上書きしたい場合、 BASEURL="http://-vhost0" の様に "-" をホスト名の前につけます。
例)
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 パラメータを使用することで、もっと、簡単に実現できますが、 最近のバージョンでは、デフォルトで、無効になっています。
COUNTER parameter* == COUNTER=listOfCounterControl counterControl == do | total | acc | ssi | ref | err | ro | no | mntpV -- default: COUNTER=no -- 制限: HTTP, SMTP, FTP, DNS に適用可能
do -- "total,acc,ssi,ref,err" を含む全カウンタを有効にする total -- このサーバの総ヒット数カウンタを有効にする acc -- 各 URL 毎のそれぞれのアクセスカウンタを有効にする ssi -- SSI ( .shtml 内の PAGE_COUNT ) のみ、カウンタを有効にする err -- エラーカウンタを有効にする (SMTP用) ref -- HTTP "Referer:" での リファラカウンタを有効にする ro -- 読込専用でカウンタを有効にする no -- カウンタを無効にする [初期値] mntpV -- 各 URL の代わりに MOUNT ポイント ( vURL ) のカウンタを使うCOUNTER="do" で有効にした場合、各対象 URL に対する全要求、 全リファラ、全エラーのアクセスカウンタが加算されます。 COUNTER="total" で有効にした場合、全要求に対するアクセスカウンタが 加算されます。 "acc" で有効にした場合、各対象 URL に対する全要求に 対するアクセスカウンタが加算されます。 "ssi" で有効にした場合、SSI PAGE_COUNT 参照を 含む SHTML ページの URL のカウンタがページアクセス時に加算されます。 "ref" で有効にした場合、HTTP "Referer:" フィールド内の URL の リファラカウンタが加算されます。
それぞれのアクセスカウンタは、"ADMDIR/counts/access/URL#count" にあるファイルに保存されます。それぞれのカウンタファイルは、 ASCII 10進数形式でのアクセス数で構成された行で始まり、 手動で、初期化/編集できます。 行には、3つの数を含めることができ、1つ目はアクセス数の総合計で、 2つ目は、同一クライアントからの複数回アクセスを除くアクセス数で、 3つ目は、最後の10クライアントからの複数回アクセスを除いたアクセス数です。 それぞれのカウントは、%T, %U, %V それぞれ、後述の書式文字列に置き換えられます。
カウンタは、PAGE_COUNT または、COUNTER 値として、 SSI を使うことで指定した書式で表示できます。 タグ内に "url" を指定しない場合、タグを含む SHTML ファイルの URL を意味します。 カウンタ値は、下記の "fmt=..." 属性であたえられた書式文字列で 印刷可能キャラクタ文字列に変換にします。 書式の初期値は、"%T" です。
書式指定子:
%T -- 総アクセス数 %U -- 単一クライアントからの繰り返しアクセスを除いた数 %V -- 最後の 10 クライアントからの繰り返しアクセスを除いた数 %N -- ネットワーク数 [ 0 - 1023 ] %M -- ネットワークマップ %L -- 最後の 10 クライアントの一覧 %mT %mU %mX -- 1日の数 %mHT %mHU %mHX -- 1時間の数 %tC -- 最初のアクセス時間 (カウンタ生成) %tT %tU %tV -- それぞれのカウントが更新された時間指定子 %N は、クライアント群のネットワーク数に置き換えられ、 それぞれのネットワークは、10 ビットのネットマスク (0xFFC00000 または 255.192.0.0/10) を伴います。 これは、全 IP4 アドレス空間を 1024 ネットワークに分割することを意味します。 したがって、%N は、部分単位の範囲で、アドレス空間上に存在する ネットワーク上のクライアントの分布を表します。 %M は、クライアントの分布を可視マップで表示します。
例)
<!--#echo var=PAGE_COUNT --> <!--#echo var=COUNTER --> <!--#echo var=COUNTER fmt="%T hits since %tC" --> <!--#echo var=COUNTER url="URL" --> <!--#echo var=COUNTER fmt="%U/%T hits" --> <!--#echo var=COUNTER url="URL" fmt="%U/%T hits" -->総合計は、TOTAL_HITS タグまたは "sel=total" を伴う COUNTER タグで表示されます。 URL のリファラカウンタは、HTTP 要求の "Referer:" ヘッダに URL がある場合加算されます。 それぞれのリファラカウンタは、 "ADMDIR/counts/referer/URL#count-ref" に保存されます。 リファラカウンタは、PAGE_COUNT タグ内の "sel=ref" 属性 で表示できます。
例)
<!--#echo var=TOTAL_HITS --> <!--#echo var=COUNTER sel=total --> <!--#echo var=COUNTER url="URL" fmt="%U/%T refs" sel=ref -->
各 URL に対するカウンタを全て有効にするのは、不経済で/か不要かもしれません。 代表として MOUNT ポイントのカウンタを使用するか、 サーバーの総合計アクセスカウンタだけを使用うことで、 カウンタを削減できます。 以下の例では、全ての URL のカウンタがデフォルトで (COUNTER=do で) 有効です。 /srv1/ 以下の URL のカウンタは、/srv1/ のカウンタで表され、 さらに、サーバの 総合計と、SSI カウンタは、/mine/ 以下の URL でだけ有効になります。 例で示されるように、COUNTER は、 デフォルト値を COUNTER パラメータから引き継ぐように、 MountOptionとして指定することができます。
例)
COUNTER=do MOUNT="/srv1/* http://srv1/* COUNTER=mntpV" MOUNT="/mine/* file:dirpath/* COUNTER=no,total,ssi"
CACHE parameter* == CACHE=cacheControl[,cacheControl]*[:connMap] cacheControl == do | no | ro connMap == ProtoList[:[dstHostList][:srcHostList]] -- 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=1h
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[:[tosv][:connMap]] outputCode == charCode charCode == iso-2022-jp | euc-jp | shift_jis | utf-8 | us-ascii | JIS | EUC | SJIS | UTF8 | ASCII | guess connMap == [ProtoList][:[dstHostList][:[srcHostList]]] -- 制限: HTTP, FTP, SMTP, POP, NNTP, Telnet, Tcprelay に適用 -- default: none
疑似コード名 "guess" は変換は行わないということですが、 メッセージ中の "Content-Type" ヘッダに追加される "charset" 属性が 欠けている場合には、メッセージボディからそれを推測します。 これは、EUC-JP のような非アスキーコードが、ビューアによりヨーロピアンとして 推測されてしまうような、メッセージが日本語にローカライズされていない ビューアプログラム(例えば、ウェブブラウザ)のときに便利です。
"tosv" が指定されているなら、変換は要求メッセージ(または、サーバへ向けたメッセージ) に適用されます。 変換は、その要求 URL 内に "%XX" でエンコードされたHTTP要求メッセージや、 POST メッセージ (Content-Type: application/x-www-form-urlencoded でエンコードされているとき) 内の日本語テキストの断片にも適用されます。 変換が適用される Content-Type の値一式は HTTPCONF=post-ccx-type で指定できます。
変換対象のアプリケーション(プロトコル)は、connMapで指定した、 指定のプロトコル一式、サーバ/クライアントだけに制限できます。 connMap 内での ProtoList, dstHostList, srcHostList の初期値は "*" で、全てのプロトコルやホストと一致します。
例) クライアントへ応答を UTF8 で送り、HTTP サーバへの要求を Shift_JIS で送る
FTP プロトコルでの変換は、デフォルトでデータ接続上を ASCII 形式で転送されるデータのみに適用されます。 これは、FTPCONF="ccx:any" を伴うことで、バイナリデータやコントロール接続上のデータにも適用されます。
このパラメータをインターネットメール/ニュースプロトコル (SMTP, POP, NNTP) で 有効にする場合、 キャラクタ変換を有効 (デフォルトで有効) にするために MIMECONV パラメータも指定する必要があります。
HTTP クライアントは、要求メッセージ中の "Accept-Language" フィールドで選択して (各クライアント(WWWブラウザ)で指定できるかもしれません)送信することで、 この指定を無視できます。 例) クライアントの要求で "Accept-Language: (charcode=EUC)" が送られた場合、 応答テキストは、DeleGate の CHARCODE 指定を無視して、 EUC に変換されます。 "Accept-Language: (charcode=THRU)" が指定された場合、 管理者がこの DeleGate に指定した全ての変換は 無効になります。
CHARMAP parameter* == CHARMAP=mapType:charMap[,charMap]*[:tosv] mapType == ascii | ucs | jis | ucsjis | jisucs charMap == inCharCode1[-inCharCode2]/outCharCode2[-[outCharCode2]] charCode == hexa-decimal code | single ASCII character -- default: none
割り当てられる文字は、16進表現の値 (2桁以上で表される) または、
1桁の文字そのものです。
さまざまなエンコード方法 (ISO-2022-JP, EUC-JP, Shift_JIS) によりエンコードされた
JIS X 0208 文字セット内の文字は、"2121" のような、
最上位ビット(8080)がない JIS コードで表現されます。
JIS X 0212 文字セット内の文字は、"1222F" のような "1" を前置きした
その JIS コード値で表現されます。
inCharCode2 と outCharCode2 を指定した場合、
範囲内のそれぞれの文字に一致する文字に割り当てられます。
-outCharCode2 が与えられない場合、範囲内の全ての入力文字は、
outCharCode1 に割り当てられます。
mapType は、以下のいずれかです:
例) 小文字と大文字を逆転
例) "rot13" 符号化
例) JIS X 0208 内の全ての日本語文字を "下駄マーク" に置き換える
例) JIS X 0212 内の全ての日本語文字を "下駄マーク" に置き換える
例) 知らない文字を "下駄マーク" の代わりに "白い四角" で表現する。
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") |
"deent" と "enent"は、HTML とプレーンテキスト間での特別なキャラクタ
(例:"<" から/へ "<" などが、マルチバイトキャラクタセット(ISO-2022-JP など)のテキスト中に現れた場合)
のエンコード・デコードを制御します。
"deent" が指定された場合、
エンコードされた実シンボルがマルチバイトテキスト中
に現れた場合デコードします。
これは、マルチバイトキャラクタを気にしないエンコーダで
無差別にエンコードされたキャラクタが含まれるテキストを
修復するときに便利です。
"enent" が指定された場合、実シンボルがマルチバイトキャラクタセット以外の
テキスト中に現れた場合、エンコードします。
これは、WWW クライアントによってアクセス
される NNTP-DeleGate の場合便利です。
空リストが指定された場合、全ての変換を停止します。
MIMECONV parameter == MIMECONV=mimeConv[,mimeConv] mimeConv == thru | charcode | nospenc -- default: none -- CHARCODE パラメータが与えられた場合 MIMECONV=""
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 filterCommand == [-s,][-p,][-w,]command -- 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: Unix: '/' CHROOT が設定されるか '${HOME}/delegate', '/var/spool/delegate-${OWNER}', '/tmp/delegate-${OWNER}' の場合 Windows: '/Program Files/DeleGate'
SHARE parameter == SHARE=dirPatternList -- default: empty
例)
UMASK parameter == UMASK=mask -- default: 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 互換です。
SYSLOG parameter* == SYSLOG=[syslogOpts,][syslogServ] syslogOpts == syslogOpt[,syslogOpts] syslogOpt == -vt | -vs | -vS | -vH | -fname -- default: none
複数の SYSLOG パラメータで、syslogServ で指定した それぞれの複数の異なる対象にログデータを送信する設定ができます。 syslogServ は、syslog サーバか、ローカルファイルの URL です。 syslogServ のデフォルトは、ローカルのロガー (ログは、標準 "syslog()" 関数経由で送られます) です。 それぞれの対象に対し、ログ書式と詳細さは、以下の syslogOpt を前置して指定できます:
-vt | -- LOGFILE を簡素化 |
-vs | -- LOGFILE 無し |
-vS | -- PROTOLOG 無し |
-vH | -- syslog ヘッダを省略 |
-fname | -- ファシリティ名 "daemon" の代わりに name を使う |
例)
SYSLOG= | -- ローカルの syslog へ |
SYSLOG=syslog://host | -- 遠隔の syslog サーバへ |
SYSLOG=syslog://host:port | -- 非標準ポート |
SYSLOG=/dev/tty | -- コンソールへ |
SYSLOG=file:path | -- ローカルファイルへ |
SYSLOG=-vH,file:path | -- syslog ヘッダを省略 |
SYSLOG=-fdaemon | -- "daemon" ファシリティとして (デフォルト) |
SYSLOG=-flocal1 | -- "local1" ファシリティとして |
遠隔 syslog サーバへの syslog UDP パケットの送信元ポート (とアドレス) は、例えば、
SRCIF=":8514:syslog"
(または SRCIF="xx.xx.xx.xx:8514:syslog"
のように指定できます。
各アプリケーションプロトコルのサーバとクライアントを基準とした syslog サーバの
切替えは、(まだ) サポートされていません。
エージングのための LogFilename と dirPath の置換え
例) 1ヶ月で循環する毎日のログ
例) 日付による階層ディレクトリを持つログ
最新のログファイルは、 LOGFILE 指定の "[date+format]" 部を省略した名前で作成された、 違うファイル名 (ハードリンクされた) を指しています。 例)上記例の LOGFILE 指定で、 ログファイルは "log/aged/00/12/31/80.http" のようになり、 最新のログは、他の名前 "log/80.http" となります。
他のエージングパターン "[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='${DGROOT}/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 == resType[:[resParam][:[queryHostList][:clientHostList]]] resType == 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 サーバ(のリスト) |
例) 問い合わせられた ホスト/アドレスによって DNS サーバを選択する
例) 問い合わせる(クライアント) DNS ホストによってレゾルバを選択する
デフォルトで、複数の IP アドレスを持つホストに接続する場合、 それぞれのレゾルバで設定された順序に従い、それぞれのアドレスが試されます。 特別なパラメータ HOSTS="*/*/RR"は、"Round Robin" の指定を追加でき、 それら IP アドレスは、 ラウンドロビンの順序で試されます。
RES_WAIT parameter == RES_WAIT=seconds:hostname -- default: RES_WAIT="10:WWW.DeleGate.ORG"
RES_CONF parameter == RES_CONF=URL -- default: RES_CONF="file:/etc/resolv.conf" or from registry (on Windows)
RES_NS parameter == RES_NS=nsList nsList == dnsServ[,nsList] dnsServ == dnsServer[//socksV5Host] | END. -- default: depend on RES_CONF
デフォルトで、"resolv.conf" に 列挙されている nameサーバ は、使用する DNS サーバの一覧に追加されます。 特別な dnsServ名 ".END" は、それら name サーバの追加機能を停止します。 例) RES_NS="192.168.1.1,.END" は、192.168.1.1 のみを使用し、 "resolv.conf" を無視することを意味します。
RES_AF parameter == RES_AF=afOrder afOrder == 46 | 64 | 4 | 6 -- default: 46
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 == [!][-iType]hostSpec[,HostList] iType == {h|a|c|*}/[iType] hostSpec == [{userList}@]hostSpec[/netMask] userList == userNamePattern[,userNamePattern]* hostSpec == hostNamePattern | hostAddrPattern userNamePattern == [*]uname[*] hostNamePattern == [*]hname[*] hostAddrPattern == IPaddressPattern | IPrange netMask == IPaddress | maskLength
例) 不明ホストや、不明ユーザからのアクセスを抑制する
例)
例)
period の完全な書式はこのようになります: [wW]HH[MM][-HH[MM]]. 週内の時間制限は、"wW" で表現され、ここでの W は、 "0"(日曜日)から、"6"(土曜日)の範囲です。 利便性のため、日曜日は、"7" でも表現できます。
例)
例)
"+=file" のようなオプションは、オプションのリストが列挙された、 "file" の名前を持つリソースに置換えられ、 "name=+=file" のようなオプションは、 "name=value" リストに置換えられ、 この "value" は、"file" 内に列挙されます。 同様に、"name=xxx:+=file" のようなオプションは、 リスト "name=xxx:value" によって置換えられます。
リソース置換 は、暗号化形式で指定できます。 暗号化されたデータは、書式文字列 "+=enc:ext::XXXX:" として直接表現でき、 XXXX 部は、暗号化されたデータを含みます。 この データ書式は、DeleGate の "-Fenc" オプションで作られます。 ファイル名が ".cdh" 付きの "+=conf.cdh" のようになっているとき、 "Credhy" によって非暗号化され、非暗号化で使用されるパスフェーズは、 "config" ユーザのパスワードとして指定されます。
置換は、再帰的に実行できます。 この場合、相対リソース名は、 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つの例は、互いに同じ意味を持ちます。
PERMIT=a:b:c PERMIT=a:b:d PERMIT=a:e:f PERMIT=x:y:z ...
置換リソースは、DeleGateが SIGHUP を受けるか、 CRON パラメータの "-restart" 動作により、 再起動したときに再読込されます。
他の置換 "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 | CFIscriptName | tcprelay://host:port
フィルタ(サーキットレベル情報において)は 次のように CMAP パラメータを使うことで、 条件付で利かせることができます:
FTOXX と、FFROMXX フィルタで、 CFI スクリプトは、 データタイプによって、それぞれのデータに適したフィルタを選択して利かせることができます。 FTOCL=filterCommand のような、 直接的使用の代わりに、 FTOCL=filter.cfi を指定でき、 ここでの filter.cfi は、CFI スクリプト形式のファイルです。 また、CFI スクリプトは、FTOCL=URL のように HTTP や FTP 経由で、 リモートホストから読込むこともできます。 CFI スクリプトのファイル名、または、スクリプト中で参照されるフィルタコマンドが、 相対パス名で指定される場合、 それらは LIBPATH 内で検索されます。
CFI script == "!#cfi" NL filterUnit [ "--" NL filterUnit ]* filterUnit == filterRule [ filterRule ]* filterRule == matchingRule | rewriteRule | filterSpec matchingRule == matchingName ":" ruleBody matchingName == MIMEheader | X-header | CGIENV MIMEheader == "Content-Type" | "User-Agent" | ... X-header == "X-Status-Ver" | "X-Status-Code" | "X-Request-Method" | "X-Request-Ver"| "X-Request-URL" | ... CGIENV == "REQUEST_METHOD" | "SERVER_PROTOCOL" | "SERVER_NAME" | "PATH_INFO" | "PATH_TRANSLATED" | "HTTP_USER_AGENT" | ... rewriteRule == Action "/" MIMEheader : ruleBody Action == "Output" | "Remove" filterSpec == filterType ":" ruleBody filterType == "Body-Filter" | "CGI" | "Header-Filter" | "MIME-Filter" | "Message-Filter" ruleBody == string NL [ SP string NL ]*
入力書式:
CFI スクリプトへの入力データは、アプリケーションプロトコル
(HTTP, SMTP, POP, NNTP) の要求/応答ステータス行に先行される、
MIME 書式でのアプリケーションプロトコルメッセージです。
ひとつの MIME メッセージは、空行で分離されたヘッダとボディからなります。
CFIinputMessage == statusLine MIMEheader NL MIMEbody例) 簡単な HTTP 応答メッセージ
HTTP/1.0 200 OK ... 応答ステータス行 Content-Type: text/html ... ヘッダ Content-Length: 20 ... ヘッダ ... ヘッダ/ボディ 分離行 メッセージボディ ... ボディ
マッチングルール:
matchingRule は、
入力ヘッダと ruleName:ruleBody を突合わせることを表します。
これは、入力メッセージが ruleBody と一致するフィールドボディを
ともなう ruleName ヘッダを持つときに一致します。
1つ以上のルールが一致した場合、
真になり、filterUnit が採用されます。
filterUnit 内に突き合わせルールが存在しない場合、
filterUnit は、無条件に採用されます。
現在、限られた MIME ヘッダセット (要求・応答メッセージ中の) のみが
突き合わせに使用できます。
オリジナルヘッダ中に含まれないいくつかの
拡張ヘッダ情報で突き合わせることもできます。
(例: 応答メッセージ中の状態コードを意味する "X-Status-Code")
CGI
環境変数とのマッチング。
例) マッチングルール
書換えルール:
"Action/" が前置された rewriteRule がある
ruleName:ruleBody は、
関連する ruleName フィールドのための ruleBody データを
使ういくつかの単純な書換えを指定します。
"Output/ruleName:ruleBody" は、
ヘッダに ruleName:ruleBody フィールドを追加 (または置換)
するということです。
"Remove/ruleName:ruleBody" は、
名前が ruleName で ruleBody と一致するボディを持つ、
ヘッダフィールドを削除することを表します。
フィルタ指定:
filterSpec は、入力データに効かせるフィルタを指定します。
入力メッセージ全体または一部はフィルタプログラムの標準入力へ渡され、
標準出力からのメッセージが元の入力メッセージの代わりに、
対象(クライアントや、サーバ)に転送されます。
Body-Filter: MIMEbody 用フィルタ CGI: MIMEbody 用フィルタ Header-Filter: MIMEheader 用フィルタ MIME-Filter: MIMEheader + MIMEbody 用フィルタ Message-Filter: statusLine + MIMEheader + MIMEbody 用フィルタ全ての種類のフィルタには、CGI 環境変数が渡されます。 加えて、CFI を起源とする環境変数も渡されます( "SERVER_HOST" (対象サーバ名), "REQUEST_URL" (要求 URL))。
"Body-Filter" や "CGI" のフィルタのために, 転送メッセージ中の "Content-Length" ヘッダは、フィルタ後のボディ部分のサイズを示すように 調整されます。 "CGI" フィルタの出力は、CGI 出力 のステータスヘッダに先行されていなければなりません。
"Header-Filter" フィルタの場合、 メッセージのヘッダ部はフィルタに渡されます。 HTTP メッセージ (Request-Line または、Status-Line) 中の start-line は、 "Request-Line:" または、"Status-Line:" を 前置きされたヘッダフィールドとして、渡されます。
"MIME-Filter" のフィルタでは、ヘッダとボディからなる MIME メッセージ全体が、 フィルタとやりとりされます。
"Message-Filter" のフィルタでは、 アプリケーションプロトコルのメッセージ全体がフィルタとやりとりされ、 それぞれのメッセージは、アプリケーションプロトコルの要求/応答ステータスを 表す 1行を最初に持つ MIME メッセージで構成されます。
例) HTTP 応答メッセージの書換え
例) 利用可能なヘッダと環境変数を表示する
URL 書換えによるプロキシ動作
元々、この書換え機構は、Gopher プロキシと、 HTTP プロトコルを拡張するために実装され、 後に、汎用 MOUNT 機構に拡張されました。 現在、ほとんどの "-_-" をともなう宛名書換えと同じ効果は、 次のように、"-_-" と任意文字列の置換え可能にする MOUNT パラメータに 受け継がれています。
HTML 中に DeleGate のスイッチングテーブルを書くことができます。 もし、異なるネットワークプロバイダなどに接続した、2つの DeleGate ホストがあり、 ブラウザの設定を変更せず、 "http://delegate/-_-" を前置きした長ったらしいURLを入力せずに、 それらの一つを明示的に選択したい場合。 次のように、HTML 中にテーブルを書込み、DeleGate を選択できます:
このテーブルは、クライアントが DeleGate を使う使わないにかかわらず動作します。 なぜなら、DeleGate は、 上記表現による応答メッセージ中の URL 書換えを行いません (上記のように、すでに URL が書換えられています)。
-_- 印以降の右側には、任意で、 次のように、"/Modifier/" 書式を差込めます:
共通の表記
TCPrelay
例) 同様の役割をする、TCP 上の2つのプロキシ
UDPrelay
例) 同様の役割をする、UDP 上の 2つのプロキシ
例) UDP/TCP 間のゲートウェイ
上記のような一対のゲートウェイは、TCP 接続上で UDP パケットを伝送できますが、 このような中継(トンネリング)は、単一の TCP 接続で SockMux を使用することで、さらに能率的に実現できます。
DGAuth サーバ
例) DGAuth-DeleGate サーバとそのクライアント
例) DGAuth-DeleGate サーバと同じホスト上のクライアント
DGAuth サーバは、各プロトコル用のダイジェスト計算に使用する構成要素一式を受信し、 以下のようにダイジェストを返します。
要求: HTTP user nonce realm method uri APOP user nonce [realm] (現状使いません) 応答: 200 digest 501 syntax error 502 unknown user
PAM server
例) PAM-DeleGate サーバとそのクライアント
例) PAM-DeleGate サーバとそのクライアントの SSL 上での通信
注記:ほとんどの PAM 認証は Unix 上のスーパーユーザ特権 (OWNER="root" オプションを伴う) で実行することが必要です。 しかし、DGROOT/subin/ に、 外部プログラム "dgpam" をインストールすることで、 スーパーユーザ特権をともなう DeleGate を走らせることを回避できます。
実験 PAM/HTTP サーバ の初期ポート番号は、8686 です。 他のポートは、 AUTHRIZER=-pam//host..port で指定できます。例) AUTHORIZER="-pam//hostX..8765/passwd"
PAM/HTTP プロトコルは、以下のような HTTP 互換の 要求/応答メッセージ書式を使用します。
要求: GET /-/pam/service/auth HTTP/1.0 Authorization: Basic BASE64of(User:Pass) 応答 (次のうちのひとつ): HTTP/1.0 200 OK, authorized HTTP/1.0 401 Not authorized HTTP/1.0 403 Forbidden to use the PAM server要求 URL の基点 "/-/pam/" は、PAMCONF="baseurl:/basePath/" で、 任意のパスに置き換えることができます。 要求 URL 全体は、PAMCONF="url:/path" で置き換えられます。 現仕様では、応答メッセージ中の内容は注意されませんが、 将来、いくつかの認証関連情報または、 能力情報は伝達できるようになります。
次の書式により、あなたは、PAM-DeleGate に代えて、CGI 等を伴う HTTPサーバ などを使用し、PAM サーバを開発できます。
SOCKMUX parameter* == host:port:option[,option]* option == acc | con | ssl -- default: none -- status: tentative
host:port は SockMux の持続的接続を確立する 対象のポートを指定します。 接続は、"con" オプションを持つ DeleGate から、 "acc" オプションを持つ DeleGate へ確立されます。
オプション:
例) SockMux 越えで SOCKS プロキシを連鎖する
例) SockMux 越えで SOCKS プロキシを連鎖する(サーバ側から接続する)
例) SockMux 越えで HTTP プロキシを連鎖する
例) SockMux 越えで連鎖した SOCKS プロキシ経由の HTTP
SOXCONF parameter* == confSpec[,confSpec]* -- default: none
SockMux サーバ
常駐接続は、レセプタ側では、"-Phost:port" パラメータ、コネクタ側では、 "SERVER=sockmux://host:port" によって生成されます。 外部のリモートへの転送を行うため、接続を受理するポートは、 PORT="listOfPorts パラメータで指定します。 リモートから内部サーバへの接続は、接尾文字列 ",-in" を、SERVER="telnet://host:23,-in" のようにつけて指定します。
1つの内部への接続は、指定したプロトコルのプロキシである DeleGate で処理できます。 プロトコル名が、SERVER="telnet,-in" または "-in" が 接尾された "-in(option list)" のような 指定をした場合のみ、DeleGate は接続処理を呼び出します。 オプションリスト は、起動された DeleGate に コマンドラインオプションリストとして渡されます。 例)SERVER="telnet://host,-in(+=config.cnf)" は、 ``delegated SERVER=telnet://host +=config.cnf'' のような コマンドラインオプションで、DeleGate を起動します。
例) 双方向 SockMux-DeleGate
例) 単方向 SockMux-DeleGate
例)単方向 を proxy-Telent-DeleGate へ
SockMux をソケット間のデータ中継に使用する場合、 アプリケーションプロトコルを解釈せずに SockMux 上を中継します。 このような中継は、SERVER パラメータの代わりに、 DEST パラメータを使用することで、以下のように、簡単な表記で表現できます:
例) SockMux 経由の tcprelay
Example: SockMux/TCP 経由で UDP を中継する
これらは、他の方法として、名前付パイプのような単一の FIFO デバイスを使用し 2つの SockMux-DeleGate 間の常駐接続を作ります。 それは、SERVER=sockmux:commtype@fifoName のように指定し、 この、commtype は、"commin", "commout", "comm" の内一つで、 それぞれ、単方向入力,単方向出力,双方向入出力を表します。
例)ホスト上の FIFO デバイスを使用する。
例)2ホスト間の通信ポートを使用する (未テスト)
常駐接続は DeleGate により起動された外部プログラムにより生成できます。 プログラムの処理は、 ファイルディスクリプタ番号 0 および、1 で DeleGate とのソケット でやり取りされます;
例) 外部コマンドを使用して接続を開始する。
リモートから内部への接続するための対象サーバは、 受け付けたリモートポートによって選択できます。 SERVER パラメータに、 ":-:-Pxxxx" を後置することで、PORT=xxxx によりリモートホスト上で 受け付けられた接続にのみ有効になります。
例)複数のポートを転送する
注記)FTP データ接続の転送は、(まだ)サポートされません。
Socks サーバ
例) Socks-DeleGate
Socks-DeleGate サーバ経由で内向けの TCP 接続を許可する場合、 そのために使用されるネットワークインターフェースは、DeleGate が自動的に選択します (DST.ADDR または、SOCKS クライアントから BIND コマンドのパラメータとして送られた、DSTIP を基準として)。 SRCIF を指定した場合、擬似プロトコル名 "tcpbind" と共に、 ネットワークインターフェース(およびポート番号)を指定できます。 パラメータの完全な書式は、 SRCIF= "[host]:[port]:tcpbind[:dstHostList[:srcHostList]]" となります。 通常、host フィールドには、選択するネットワークインターフェースのみを、 SRCIF="150.29.202.120::tcpbind" のように指定します。
SOCKSTAP parameter* == ProtoList[:[dstHostList][:[srcHostList][:params]]] -- default: none
例) HTTP と FTP でキャッシュを行う Socks-DeleGate
例) 上流プロキシとともに、HTTP のキャッシュを行う Socks-DeleGate
See http://www.delegate.org/delegate/sockstap/> for more details.
HTTP プロキシ/サーバ
この DeleGate を内部ホスト上のクライアントから使う場合、 HTTP, HTTPS (Security), FTP, Gopher, Wais などの プロキシに "firewall:8080" を指定します。
例) 多段 HTTP プロキシ DeleGate
内部ホストからの要求のみ受け付ける generalist DeleGate を firewall 上で走らせ、firewall ホスト上の generalist を使用する、 specialist を内部で、走らせる。 generalistは、上流 DeleGate として、 任意プロトコルの複数の DeleGate で共有できます。
例) 元 HTTP サーバ 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) |
%s | -- HTTPCONF=session によるセッション ID |
%As | -- ダイジェスト認証中のセッション ID |
%{field} | -- 要求メッセージ中の任意のフィールド |
"%s" により出されるセッション識別子は、 AUTHORIZER=-dgauth オプションによって生成された "%As" の間、 HTTPCONF=session:cookie によって生成されています。 セッション識別子の書式:
例) "031114-173045.1234.5+6+7.9" は、PID=1234 のプロセスによって、 November 14 の 17:30:45 に開始されたセッション中での クライアントからの 9回目の要求であることを意味します。 セッションの開始は、LOGFILE にこのように記録されます。
注記: reqnum 部分は、並列、または、パイプライン 要求がセッション所有者であるクライアントによって生成された場合、 ユニークではありません。 注記: "%As" 用の reqnum 部は、それぞれの要求で加算されないかもしれません。 なぜなら、セッション識別子のコンテナ (この場合、ダイジェスト認証の "opaque" パラメータ) が、それぞれの要求で更新されないかもしれないからです。
HTTPCONF parameter == what:conf
例)
例)
例)
クライアントに保存される Set-Cookie 応答内の指定した属性を暗号化し、後で、 復号し、Cookie 発行元だけに Cookie 要求を転送します。 Cookie 内の属性は、"attribute@host" または "attribute@.domain" で指定します。 前者では、host で生成された cookie は暗号化され、 host にだけ、エコー(返され)されます。 後者では、domain 内のホストで生成された cookie を、 domain 内のホストにエコー(返せ)せます。 cryptKey 内の特殊文字列 "%a" は、 クライアントの IP アドレスに置き換えられます。 これは、その IP アドレスを持つホスト上のクライアントからのみ 暗号化 Cookie を使えるようにします。
例)
例)
例)
例)
例)
例)
例)
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 用のマウントオプション
制御:
例) 仮想ホスティング,複数の HTTP サーバとして動作する
MOUNT="/* http://wwwA/* vhost=-dom1.com"
MOUNT="/* http://wwwB/* vhost=-dom2.org"
MOUNT="/* file:data/wwwC/* vhost=-dom3.net"
MOUNT="/* file:data/www/*"
MOUNT="http:* = method=POST,asproxy,useproxy"
MOUNT="http:* = withquery,asproxy,useproxy"
HTTP-DeleGate 用 AUTH パラメータ
例)
%u | -- Ident プロトコルで得られたユーザ名 |
%h | -- ソケットから得られたクライアントのホスト名 |
%i | -- クライアントに向けたネットワークインタフェースのホスト名 |
%I | -- %i と同様ですが、HTTP で "Host:" が与えられた場合その値を使用します。 |
%a | -- クライアントのホストアドレス |
%n | -- クライアントのネットワークアドレス |
%H | -- DeleGate のホスト名 |
%M | -- DeleGate の ADMIN |
%A | -- "CMAP=string:authgen:mapSpec" によって生成される文字列 |
%U | -- クライアントの [Proxy-]Authorization: username:password の username 部 |
%P | -- クライアントの [Proxy-]Authorization: username:password の password 部 |
例)
例)
%F | -- From フィールドの E-mail アドレス |
%L | -- From: local@domain フィールドの local 部 |
%D | -- From: local@domain フィールドの domain 部 |
%U | -- Authorization: username:password の username 部 |
%P | -- Authorization: username: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] |
FTP プロキシ/サーバ
さらに、完全な書式 user:pass@host[:port] でも、次のように、 URL の一般的なサーバ指定において、USER と CWD の両方が使えます。
複数のネットワークインタフェースを持つホスト、または、ファイアーウォールに隠されたホスト上で、 データ接続用の IP アドレスやポート番号は、SRCIF によって、制御できます。
例) プロキシ FTP-DeleGate
この 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 プロキシ
例) フィルタ/マージ/エイリアスを行う FTP MOUNT
この DeleGateは、"/pub2/*" は、ftp://serv2/pub/* のそれと置換えられた部分以外、 serv1 の全ての内容を中継します。
例) FTP -> LPR (Line Printer Daemon Protocol) ゲートウェイ
LPR/FTP-DeleGate は、FTP クライアントがリモートプリンタにアクセスできるようにします; ファイルの印刷は、FTP のファイルアップロードによって行われ、 プリンタの状態は、FTP ディレクトリ一覧で見られます。 MountOption "readonly" は、状態の参照を禁止します。
例) 元 FTP-DeleGate
"RELAY=no" は、DeleGate が プロキシ FTP サーバとして動作するのを禁止します。
このような 元 FTP-DeleGate へのファイルの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT="/xxx/* /yyy/* rw" のように、MOUNT ポイントに対し、
マウントオプションとして、"rw" (read/write) を指定する必要があります。
指定ディレクトリ内の全コンテンツを単一の tar 形式のファイルで取り込むため、
"RETR directory.tar" コマンドが使えます。
この機能を有効にするには、REMITTABLE="+,tar" のように、
REMITTABLE 設定に、"tar" を追加します。
FTPCONF parameter* == FTPCONF=ftpControl[:{sv|cl}] ftpControl == nopasv | noport | noxdc | rawxdc -- default: none
上で列挙された ftpControl で、"nopasv:sv" のように ":sv" または ":cl" がつづく場合、 例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに 適用されます。
FTPCONF can be applied on a specific condition by specifying it
FTPCONF で、
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" (ローカルファイル), "H" (キャッシュヒット), "N" (キャッシュミス) のどれかです。.
例)
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 互換サーバ
POP プロキシ
例) プロキシ POP-DeleGate
external% telnet firewall pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username@servername
...
username と、servername 間の区切り文字には、
"@" の代わりに、"%" や "#" を次のように使えます。
username%servername または、
username#servername
例) POP マウント
MOUNT="//* ="
... サーバがユーザによって指定された場合、書換えません
MOUNT="* pop://defaultHost/*"
... デフォルト POP サーバを指定します
MOUNT="user1 pop://host1/*"
... "user1" のサーバを "host1" にします
MOUNT="//pop2/* pop://host2/*"
... 実ホスト名 "host2" を隠し、user@pop2 を user@host2 にマップします
MOUNT="//*%S/%S pop://server/*%(1)@%(0)"
... user@host を そのまま pop://server/user@host に転送します
対象 POP サーバが APOP 認証を受付けられることを示した場合、 (タイムスタンプを伴う挨拶メッセージによって) DeleGate は、最初に APOP ログインを試み、失敗した場合、USER+PASS を再試行します。 しかし、サーバがその挨拶にもかかわらず APOP を受け付けない場合、 次のように、"noapop" マウントオプションで、APOP による試行を禁止できます。
例) NNTP サーバから POP クライアントへの変換
クライアントは、ユーザ名としてニュースグループ名を送信する必要があります。
例) POP サーバから HTTP クライアントへの変換
この 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 も受けいれられます。
例) プロキシ SMTP-DeleGate
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]
SMTPGATE 設定ファイルは、命令行の集まりによってなるファイルで、 それぞれは、インターネットメッセージのメッセージヘッダのように見えます。 それぞれの行で、シャープキャラクタ (#) に続く注釈は無視されます。 命令は、3つのグループに分類されます; CONTROL , ACCEPT , OUTPUT
SMTP-DeleGateが、recipient@mailhost, のようなアドレスをともなう受信者にバインドするメッセージを受信したとき、 以下の順序の2つのディレクトリで、recipient の設定ファイルを検索します。
recipient の設定が見つからない場合、 以下のディレクトリ内のデフォルト設定 (存在する場合) を使用します。
他の場合、組み込みのデフォルト設定が使用されます。 デフォルトは、"/-/builtin/config/smtpgate/@default/conf" にあり、 MOUNT オプションでカスタマイズできます。 デフォルトの内容は、次のようになっており、受信者のメールエクスチェンジャを経由して、 受信者のアドレスに入力メッセージを配送します。
各 recipient のディレクトリには、以下のファイルがあります。
例)
NNTP プロキシ/サーバ
例) フィルタ
ニュースグループ名が"group.*"のパターンを持つ場合のみ中継する。 nntpServerに対するグループリストは "nntp://nntpServer/group1.,group2.,..." のように指定できます。
例)複数の NNTP サーバを認証付 (AUTHINFO を使用) でマージ
例) 選択したグループをマウント
例) POP サーバから NNTP クライアントへ
例) NNTP サーバから HTTP クライアントへ
例)元 NNTP-DeleGate
NNTP-DeleGate の SERVER パラメータ中の対象サーバに "-.-" を指定すると、 DeleGate を 元 NNTPサーバ として使うことを意味し、それの持つスプールに検索/投稿できます。 この新たなニュースグループ名 newsGroup を作るには、空ファイルを作ります。
投稿された記事の最初の行が、"From user date" のような Unix-From を持つか、 "Unix-From: user date" ヘッダを持つ場合、記事の記事番号は、 "X-Seqno" (または、"X-Sequence") ヘッダが存在する場合、固有のものにセットされ、 また、スプールファイルの作成日付は、Unix-form の date にセットされます。
NNTP の記事を匿名化する
メールアドレスをスパム用に検索させないようにするため、 NNTP プロトコル上で伝送されたメールアドレスを、 次のように、"rewaddr" マウントオプションで匿名化できます。
NNTP の MountOption
NNTPCONF parameter* == what:conf -- default: NNTPCONF=upact:600/300/120
LDAP プロキシ
この DeleGate をクライアントの LDAP サーバとして指定し、ルートディレクトリ名 (例えば、検索用 baseObject 名)の後に "@host.of.ldap-server" を付加します。
% ldapsearch -x -h localhost -p 389 -b o=netcenter@memberdir.netscape.com
この LDAP-DeleGate に送られる、"o=xxx..." で名前付けされたベースディレクトリに対する 検索要求は、LDAP サーバ "ldap://aaa.domain" に転送されます。
Whois プロキシ
X プロキシ
例)単一サーバホスト上の2つのディスプレイに中継
例)2つのサーバホストに中継
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 プロキシ
予約名
AF_LOCAL ソケット
この例で、MOUNT は、forbidden メッセージと、 代替データ ("/tmp" 内のローカルファイル) のみ置換えます。 通常、組み込みデータグループは、ワイルドカード(*) 記号で置換えでき、 また、代替データは、HTTP や FTP 経由でアクセス可能なリモートホスト上に配置できます。 例) 全ての、"src/builtin/" のコピーを "http://yourwww/delegate/builtin/" に入れ、 このように MOUNT する:
リモートデータの読込みは、MOUNT された組み込みデータがキャッシュされ、 一般のデータとして再利用されるので、キャッシュが有効な限りオーバヘッドの影響を受けません。
アタッカー防御
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、 存在するアドレス上にターゲットバッファが存在していることを期待しており、 スタックアドレスをランダ厶化することは、アタック成功の糸口を減少するのに効果的です。 そして、アタックの失敗は致命的エラーを発生させ、DeleGate により捕捉されます。
疑わしいクライアントホストは、関連ファイル (ADMDIR/shutout/ 内) を削除するか、 TIMEOUT=shutout (デフォルト30分) のファイル有効期限が切れるまで、シャットアウトされます。 安全のためには、TIMEOUT="shutout:0" (無限) が望ましく、 アタッカーに2度とチャンスを与えないようにしましょう。 しかし、致命的エラーは、DeleGate のいつものバグで発生するほうが高く、 既定値を扱いにくくしています...
とにかく、以下のオプションを理解し、アクセス制御 設定はもちろんのこと、 このような攻撃も防ぐよう、意識を高く持ってください。
起動時、元の環境変数とスタック領域上のコマンドライン引数はヒープ領域に移動、消去され、 アタッカーの侵入コードに利用されないようになっています。 同時に、ランダムな長さの値 (MAXIMA=randenv の最大値) を持つ RANDENV ダミー環境変数が、 環境変数のランダムなアドレスに挿入され、フィルタプログラムや、 CGI プログラムのような子プロセスに継承されます。
設定の暗号化
Passphrase は、次の例のように、SSL ライブラリによるプライベート鍵 (証明書と一緒に1つのファイルに含まれるかも知れません) の非暗号解除に使用されます:
別のパスフェーズは、"+=cong.cdh" で指定された、 暗号化された設定パラメータを得るためのものです。 これらデータを非暗号化するパスフェーズは、次のように、 特別なドメインに存在する特別なユーザ "config" のパスワードとして与えます。
サフィックス ".cdh" は、"Credhy" アルゴリズムで暗号化された情報であることを意味します。 ファイルは、次のように -Fcredhy で、暗号化/暗号化解除できます:
暗号化された設定ファイルは、次のように使用できます:
設定ファイルがリモートサーバから読み込まれる場合、暗号化が強く推奨されます。
例でも見られるように、パスフェーズを保持する特別なユーザ名は、特別なドメイン
"-dgauth@admin" [DGAuth] に存在します。
DGAuth でのパスワード保管場所は、パスフェーズ、または、MasterKey.
で、暗号化されています。
それは、次のように指定できます:
. DeleGate が必要とする MasterKey が、CRYPT パラメータで指定されない場合、 対話形式で聞かれます。 DeleGate が、"-r" または、SIGHUP で再起動した、または、終了後短時間で再起動した、 または、ホストマシンが再起動された場合、MasterKey は自動的に保存され、 対話無しに再利用されます。
紳士的再起動
また、SIGHUP での再起動は、AUTH=admin パラメータを使い、 "http://delegate/-/admin/" にて、リモート HTTP クライアントでも実行できます。
再起動は、DeleGate の設定変更した後に行います。再起動時にパラメータを再読込するためには、 +=parameters 表記 (パラメータ置換) を指定する必要があります。 他のオプション (パラメータ) は、コマンドライン引数で指定し、 これは、再起動した DeleGate プロセスに継承されます。
再起動する他の目的は、 ごみやリーク (ヒープメモリ や ファイルディスクリプタ) をお掃除するためです。 この目的の場合、DeleGate は TIMEOUT=restart または、CRON パラメータの -restart 動作で、それぞれ予定した時間に周期的に再起動できます。
-Ffunction より前、および、"--" オプション以降のコマンドラインオプションは、 DeleGate のオプションとして、 ( delegated dgopt ... dgopt -Ffunc fopt ... fopt -- dgopt ... dgopt ) function よりも、優先されます。 例外として、name=value 書式のパラメータオプションが、 fopt の位置に現れた場合、DeleGate のパラメータとして認識されます。
例) 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>
フィードバック
リリース 9.6.0 最終更新: 2007年5月20日 --------- --------- --------- --------- --------- --------- --------- ---------