DeleGate version 6.1 リファレンスマニュアル の日本語訳
翻訳者:
Hiroshi Suzuki @ Columbia Information System, inc.
翻訳開始日:2000/2/25
最終更新日:2000/12/5
2000/12/5 追加修正(DeleGate/6.1.21)
2000/11/1 追加修正(DeleGate/6.1.20)
2000/10/17 追加修正(DeleGate/6.1.19)
2000/9/7 追加修正(DeleGate/6.1.18)
2000/7/17 追加修正(DeleGate/6.1.17)
2000/6/29 追加修正(DeleGate/6.1.16)
2000/6/21 追加修正(DeleGate/6.1.15)
2000/6/5 追加修正(DeleGate/6.1.12)
2000/4/30 追加修正(DeleGate/6.1.9)
2000/4/19 追加修正(DeleGate/6.1.8)
2000/4/13 追加修正(DeleGate/6.1.7)
2000/4/11 追加修正(DeleGate/6.1.6)
2000/3/28 追加修正(DeleGate/6.1.4)
2000/3/23 修正
2000/3/22 追加修正
2000/3/15 追加修正
2000/3/10 HTML の整理
2000/3/9 修正
翻訳者コメント:
"翻訳のドラフト"です。
翻訳の正確さなどは、一切保証しません(できません(^^;)。
必ず、原文(http://www.delegate.org/)を併用して下さい。
誤訳などに関する、ご指摘は、謹んでお受けいたしますm(__)m
----------------------------- 以下本文 ------------------------------
DeleGate version 6.1 リファレンスマニュアル
Copyright (c) 1994-2000 Yutaka Sato
<ysato@etl.go.jp>
<ysato@delegate.org>
Copyright (c) 1994-2000 Electrotechnical Laboratry (ETL), AIST, MITI
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.
ETL 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
本マテリアルの、いかなる目的に対する、無料の、
使用・複製・配布(誰もがアクセスできるオンラインメディア経由)の認可は、
上記の著作権通知、および、この認可通知が、全ての複製中で、
閲覧可能なことを条件として、認めます。
ETLは、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。
それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。
このドキュメントは、DeleGate/6.1.Xをベースにして書かれています。
DeleGate/5.X以前のバージョンより、バグも少なく、セキュリティも向上し、
6.1から、すでに充分安定な、DeleGate/6.Xを使用することを強く推奨します。
このドキュメント(原文の英語マニュアルに関してのみ)に関するコメントは、
mailto:feedback@delegate.org
まで、お願いします。
なお、それらの内容は、
http://www.delegate.org/feedback/
で、共有します。
DeleGate ホームページ
http://www.delegate.org/
で、最新の状態をご覧ください。
さらに、初心者の方々は、
http://www.delegate.org/delegate/tutorial/
にて、ショートチュートリアルをお読みになることを推奨します。
INDEX
--------- --------- --------- --------- --------- --------- --------- ---------
DELEGATED(8) メンテナンス コマンド DELEGATED(8)
名称
概要
説明
DeleGateは、TCP/IPや、UDP/IP上
のさまざまなアプリケーションプロトコル(
HTTP,
FTP,
Telnet,
NNTP,
SMTP,
POP,
IMAP,
LPR,
LDAP,
ICP,
DNS,
SSL,
Socks
他)を中継する、多機能プロキシです。
DeleGateは、直接接続が、できない/不便/能率的でない、
サーバ・クライアント間の通信を中継します。
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]
このオプションは、DeleGateが、
クライアントからの要求を受ける、入り口ポート番号を指定します。
一般的な例、"-P8080" は、ホストマシンの所有する、
どのネットワークインターフェースでも、8080番のTCPポートで、
要求を受けることを意味します。
ホストが、複数のインターフェースや複数のIPアドレスを割り当てた、
ひとつの物理インターフェースを持つ場合、
例) "-Plocalhost:8080" のように、書式 -Phost:portNum で、それらの内ひとつを選択できます。
DeleGateサーバは、-Pport,port,... により、
複数のポートや、(有限の)複数ネットワークインターフェースで、受けることができます。
入り口ポートは、デフォルトで、SERVER=protocol パラメータにより、
UDPベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay)
が指定された場合を除き、TCPポートが作成されます。
また、-Pport/udp のように"/udp"ポストフィックスを伴う場合、
SERVER で、指定したプロトコルとは無関係なものとなります。
このオプションは、以下のケースを除き、指定する必要があります。
DeleGateが、inetd(8) から、呼び出される場合や、
-Ffunction オプションを利用する大抵の場合、
または、SERVER="tunnel1" により、トンネルサーバ
として動作している場合には、無視されます。
-f option -- フォアグラウンドで実行
指定した場合、DeleGateは、現在のttyと接続を保ちながら、
フォアグラウンドで動作します。tty からの SIGINT により、
終了し、現在のディレクトリ
(ワークディレクトリ から移動せず)にとどまります。
-v option -- ログレベルを制御
== -v[vdts]
指定した場合、DeleGateは、-f のように
、フォアグラウンド動作で、制御 tty 上にログを表示し、
LOGFILEおよび PROTOLOGには、書きこみません。
-v より詳細なログは、
-vvオプションを使用することで得られます。
同様に、ログファイルに書きこむログの詳細さは、
-vd/-vt/-vs オプションで、制御できます。
-vd は、デバッグ情報を含む詳細なログを作成し、
-vt は、簡潔となり、
-vs は、ログを停止し、静かにします。このオプションは、LOGFILE="" と同様です。
-S option -- SIGCHLD シグナルを監視します
指定した場合、DeleGate のゾンビプロセスは、
SIGCHILD シグナルを監視して、直ちにお掃除されます。
このオプションは、今後のリリースでは、デフォルトとなるかも知れません。
-T option -- システムコールトレース
== -T[xsdt]*
指定した場合、DeleGateプロセス内で発生したシグナルは、
"ptrace(2)"を使用して、親 DeleGate で監視され、TRACELOG に記録されます。
-Tx を指定した場合、DeleGateプロセスは、
"execve(2)"システムコールが実行されようとしたとき、
トラップを発生させ、終了します。
これは、セキュリティ強化のため、有効な、侵入者の手段ともなる、予期しない execve() を防ぎます。
この、 -T オプションは、子プロセスにおいて、イベントが発生した場合、
直ちに、-S オプションを自動的に有効にしますが、"-Ts"のように、"s"を加えることで、無効にできます。
"-Txd" のように、"d"フラグを追加した場合、詳細なログを作成し、
"-Txt" のように、"t"フラグを追加した場合、ログは、簡潔になります。
-F option -- 拡張機能
== -Ffunction
指定した場合、DeleGateは、DeleGateサーバというよりも、
function に指定したプログラムとして動作します。
例:"delegated -Fkill -Pport"は、port
で動作しているDeleGateを終了することを意味します。
-Fcgi を伴うとき、DeleGateは、HTTPサーバから呼び出された、cgi プログラムとして、機能します。
利用可能な機能 は、
-Fhelp でみることができます。
-- option -- コマンドライン引数を隠す
指定した場合、"--" より前のコマンドライン引数は、大抵のUnixシステムにおいて、
ps(1) コマンド(pstat(2)システムコールを伴う)で見えるようになります。
使わない場合、引数は、デフォルトで隠されます。
parameter == name=value
他のオプションは、パラメータ と呼び
name=value形式で、指定します。
パラメータは、コマンドライン引数としては、
もちろん、環境変数として与えることもできます。
"-"プリフィックスをもつ上記でリストされたコマンドラインオプションは、
例:DGOPTS="-P8080;-v"のように、パラメータとして与えることもできます。
-e option == -ename=value
これは、name=value と同様ですが、
ここでの、name=value
ペアは、環境変数として、フィルタプログラムや、
CGIプログラムのような子プロセスに受け継がれます。
用語
- delegated
- DeleGateサーバプロセス/DeleGateプログラムの標準ファイル名。
最後に"d"を含む場合、(Unixの慣習として)"daemon"
か、サーバです。
- specialist
- クライアントサイドプロトコルを指定して話すように設定
(SERVER=protoを指定)されたDeleGate。
- generalist
- MASTER-DeleGateとも呼ばれ、任意のクライアントサイドプロトコルを、
ランタイムに決定(SERVER=proto なし)して話します。
このときのクライアントは、このDeleGateを、
上流プロキシ(MASTERパラメータで指定された)
のDeleGateとして使用する、DeleGateです。
- bound DeleGate
- 対象サーバを固定で指定したDeleGate
(SERVER=proto://host を指定)。
- unbound DeleGate
- 対象サーバを固定していないDeleGate
(SERVER=proto://host なし)。
- P-DeleGate (ex. HTTP-DeleGate)
- プロトコル P でクライアントと通信するDeleGate。
- Q/P-DeleGate (ex. FTP/HTTP-DeleGate)
- クライアントとプロトコル P で、
サーバとプロトコル Q で通信するDeleGate。
- P proxy (ex. HTTP proxy)
- プロトコル P でクライアントと通信するプロキシ。
- ProtoList
- プロトコルリスト。
- HostList
- ホスト/ネットワークリスト。
- dstHostList
- 対象(サーバ)のHostList。
- srcHostList
- ソース(クライアント)のHostList。
- item(N) (ex. gethostbyname(2))
- Unixオンラインマニュアルの、
セクション N にある、item に関する記述を参照。
パラメータ
下記リストにおいて、パラメータに'*'マークがあるものは、
nameX=value1 nameX=value2 nameX=value3 ...
nameX=valueNのように、コマンドライン上で繰り返すことができます。
同じ名前のパラメータが、環境変数とコマンドラインで指定されている場合は、
コマンドラインが環境変数に先立ちます。
他の、繰返しできない名前が繰返された場合、最後に与えられた値が取得されます。
'+'マークのついているものは、"+=parameter"スクリプトで与えることはできません。
一般
このカテゴリにあるパラメータは、
DeleGateで共通の属性、独立した使用目的や、
ターゲットアプリケーションプロトコルを制御するために用います。
| 名称
| 値の書式
| 機能
|
--
| ----------
| ------------------
| ----------------------------------
|
| 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オプションのような入り口ポートの予約
|
ルーティング
これらパラメータは、対象サーバに向けての間接ルート上にある、
上流プロキシや、Socksサーバの利用を制御します。
対象サーバが、DeleGateホストからIPレベルで直接的に達することができる場合、
このパラメータは、必要ではありません。
他の場合、これらパラメータ
(ICP と MOUNT)
は、アプリケーションプロトコルをベースとした、
ルーティングとともに、いくつかの機能をします。
--
| ----------
| ------------------
| ----------------------------------
|
*
| 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,...
| 接続タイプの試行順序
|
| TUNNEL
| type:scriptPath
| シリアルライン上のトンネル経由で接続
|
| RPORT
| {tcp|udp}[:host]
| MASTER-DeleGateからの戻りポート
|
アクセス制御
これらパラメータは、誰(クライアント)が、何(サーバ)に、
どのよう(プロトコル)にアクセスできるかを、制御します。
デフォルトのアクセス制御における基本ポリシーは、
DeleGateホストのローカルネットワーク上にあるクライアントからは、
どのサーバにもアクセスを許可するよう、デザインされています。
注記)
REMITTABLEのデフォルト値は、
SERVERによって決まり、
このDeleGateへのIP-レベルでの接続は、
-Phost:port オプションによって制御できます。
これらパラメータは、最大限の注意を払って設定する必要があります。
なぜなら、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への転送ソケットアドレス |
リソース使用制限
これらパラメータは、利用可能なリソースが過酷な状態になった場合に有効です;DeleGateホストが重負荷の場合、ネットワーク帯域が狭い場合、サーバレスポンスが遅い場合。
-- |
---------- |
------------------ |
---------------------------------- |
* |
MAXIMA |
what:number | 同時セッション数などの最大値 |
* |
TIMEOUT |
what:seconds |
接続などの、タイムアウト値 |
* |
DELAY |
what:seconds |
ペナルティ用のディレイ値 |
]
キャッシュ制御
キャッシュの実行/停止と、キャッシュデータの有効期限を指定します。キャッシュのルーティング関連での利用方法は、
CONNECTでも制御できます。古くなったキャッシュファイルの削除は、
CRONを使用し、定期的に実行できます。
-- |
---------- |
------------------ |
---------------------------------- |
|
CACHE |
do|no|ro |
キャッシュ有無の制御 |
* |
EXPIRE |
days|hours|secs |
キャッシュの期限 |
|
CACHEFILE |
fileNameSpec |
キャッシュデータの保存場所 |
* |
ICP |
icpClientConfig |
ICPクライアント型の構成 |
マウント
複数サーバのマージ、異なったプロトコル間の翻訳、内部サーバを外部に見せるなど、他サーバの仮想ビューを、URLマッピングや、リソース名のフィルタリング・エイリアシングを用い、実現します。MOUNTもまた、カスタマイズ または、別のビルトインアイコンとメッセージを使用できます。
-- |
---------- |
------------------ |
---------------------------------- |
* |
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 |
サーバとしてフィルタを実行する |
ローカルファイル使用法
全てのローカルファイルは、デフォルトで、DGROOT下に統合されます。必要ない場合、これらパラメータを変更/設定する必要はありません。
-- |
---------- |
------------------ |
---------------------------------- |
+ |
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ファイル |
ホスト名解決
DNS/NIS/ローカルファイルによる、IPアドレス・ホスト名間の解決。
-- |
---------- |
------------------ |
---------------------------------- |
* |
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動作)
SERVER=protocol で、クライアントとの通信で使用するプロトコル(デフォルトでサーバとの通信プロトコル)を指定します。
例) 拘束を受けない、Telnet-DeleGate SERVER パラメータ
SERVERパラメータがない場合、DeleGateは、generalist(または、MASTER-DeleGate)で起動し、これは、他のDeleGateに対する、上流DeleGateとして、動作します。注記:generalistは、デフォルトで、任意プロトコルが許可されていますので、アクセス制御において充分に考慮しないと、危険です(REMITTABLE参照)。generalistは、DeleGateオリジナルプロトコルおよび、HTTP、Whoisプロキシを含む、複数のプロトコルを自動検出します。
対象サーバ(host)を指定しない場合、それは、プロトコルに依存した方法で、クライアントにより、実行時に、どうにか取得します。
"http"と、"socks"を含むいくつかのプロトコルは、固有かつ、自動的な、プロキシ動作法を持ちます。"ftp"や"pop"のような、いくつかのプロトコルは、サーバにログインするためのサブプロトコルを生来持ちあわせており、ユーザ名ログイン情報は、対象サーバの情報、user@host のようにエンコードされます。"whois"や、"gopher"を含むいくつかのプロトコルでは、最初のメッセージは、クライアント側から送られ(一般的に、クエリーメッセージ)、このメッセージは、対象サーバに関する情報を含むように、拡張されています(仕様変更不要)。"telnet"のような、他のプロトコルは、クライアントプログラム上のユーザと、対話し、プロキシは、ログインダイアログを拡張することによって実現できます。
サーバプロトコルは、クライアントプロトコルと同様、暗黙で拡張されます。HTTPのようなプロトコルは対象サーバのプロトコルを指定する固有の方法を持っています。他の場合、例)MOUNT="/news/*
nntp://server/*" のように、MOUNTパラメータで明示する必要があります。
SERVER=protocol://host:portNum は、対象サーバのURLを指定します。
":portNum" の部分は、通常、URL中の番号が、プロトコルにおいて、スタンダードなポート番号の場合省略可能です。
DeleGateによって、認知される、プロトコルリストと、標準ポート番号は、
"http://delegate/-/builtin/mssgs/config.dhtml"で、入手できます。
portNum が "-" または "+"でプリフィックスされる場合、入り口ポート番号に指定したオフセットを加え、マップします。また、"-"(portNumなし)の場合、同じポート番号を使用します。
例) 複数ポートを他の単一サーバに転送する
-P21,23,25,80 SERVER=tcprelay://host:-/
注記:この、指定したサーバにバインドしたDeleGateは任意サーバに対するプロキシとしての動作を停止していません。必要な、PERMIT,
REACHABLE, RELAYパラメータを使用することで、プロキシ動作能力を制限して下さい。
SERVER パラメータが ":-:MountOptions" を伴う場合、
MountOptionsに指定された条件を評価した結果が真の場合、動的にSERVERパラメータを選択します。特殊なケースとして、
":-:via=HostList"は、":-:HostList"で、省略できます。
例) クライアントに適切なNNTPサーバを選択する。
SERVER="nntp://newsserver1:-:from={*.dom1}"
SERVER="nntp://newsserver2:-:from={*.dom2}"
例) {NNTP,SMTP,POP}-DeleGate を単一サーバで実行
-P119,110,25
SERVER="nntp://nntpserver:-:{*:119}"
SERVER="smtp://smtpserver:-:{*:25}"
SERVER="pop://popserver:-:{*:110}"
ADMIN parameter == ADMIN=user@host.domain
-- default: コンパイル時に指定のもの
このパラメータは、特に、DeleGateの動作するホストが、直接的にインターネットと接している場合、正しく与える必要があります。このE-Mailアドレスは下記の場合に使用します:
- このDeleGateの管理者名を、クライアントに(エラー)メッセージ中で表示する(HTTPなど)。 |
- クライアントに対する開始メッセージやヘルプメッセージ中で、管理者名として表示する(FTP, NNTP, Telnet)。 |
- 匿名アクセスFTPサーバへ、デフォルトユーザ名として送信する(PASSコマンド中)。 |
- リモートSMTPサーバへのアクセスで、AUTH=anonftp:smtp-vrfy 認証 行う際の送信者名として送信する(FROMコマンド中)。 |
- 致命的なシグナルが発生したときにレポートメッセージを送信するアドレス。 |
OWNER parameter* == OWNER=user[/group][:srcHostList]
-- default: OWNER="nobody/nogroup"
-- 制約: ほとんどのUnixでスーパーユーザのみ
CRON parameter* == CRON="crontab-spec"
crontab-spec == minute hour day month dayOfWeek action
-- default: none
Unixシステムでの、cron(8)サーバにおける、標準crontab(5)とコンパチブルな、crontab-specフォーマットで指定した時間にアクションを起こします。アクションが"/"でプリフィックスされる場合、外部アクションとして、system(3)関数を使用して、実行されます。アクションが、"-"でプリフィックスされる場合、DeleGateのビルトイン内部アクションす。
-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"と同じ |
例)
CRON="0 0 * * * -restart"
CRON="0 3 * * * -expire 3" (下記と同じ)
CRON="0 3 * * * -Fexpire /path/of/cache -rm -atime +3 -sum"
CRON="0 3 * * * /path/of/delegated -Fexpire /path/of/cache -rm -atime +3 -sum"
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
指定したポートに要求がきた場合、指定した構成で、新たなDeleGateプロセスを呼出します。inetd-conf の設定書式は、Unixシステムにおける標準inetd.conf(5)ライクです。
各フィールドのデフォルト値は、"-"で表現します。sockType,proto,waitStat
のデフォルト値は、それぞれ、"stream","tcp","nowait"です。 uid フィールドは、呼出されたプロセス中のOWNER パラメータが使用されます。uid
の値に"-"を指定した場合、DeleGateを、OWNERパラメータなしで呼出すことを意味します。execPath が
"-"の場合、argList とともに、DeleGateの子プロセスが開始することを意味します。親DeleGateプロセスの構成は、子DeleGateに継承されます。
例)このように親DeleGateが呼出された場合:
delegated ADMIN=foo EXPIRE=1 INETD=conf1 INETD=conf2
この、ADMINとEXPIREパラメータはconf1 と
conf2で表現されるDeleGateに継承されます。
例)
INETD="8080 stream tcp nowait nobody - SERVER=http"
INETD="8080 - - - nobody - SERVER=http" (上と同じ)
INETD="8119 - - - - - SERVER=nntp://nntpserver/"
INETD="8888 - - - - /bin/date date" (以下と同じ)
INETD="8888 - - - - - SERVER=exec XCOM="/bin/date date"'
INETD="8888 dgram udp - - /bin/date date"
INETD="localhost:8888 - - - - - /bin/sh sh"
INETD=+=/path/of/inetd.conf (構成をファイルから読みこむ)
CMAP parameter* == CMAP=resultStr:mapName:connMap
connMap == ProtoList:dstHostList:srcHostList
-- default: none
現接続において、いくつかのパラメータを条件付にする共通パラメータ。現接続において対象と、ソースがconnMap と一致する場合、このマップは、mapName を使用するために、resultStr 文字列の提供を有効にします。このパラメータは、一般的に、条件付
フィルタを利かせる場合に使用します。
ホスト名/アドレスだけでなく、対象サーバのポート番号も dstHostList におけるマッチングで使用可能です。
LIBPATH parameter == LIBPATH=dirPath[:dirPath]*
-- default: LIBPATH=LIBPATH='.:${STARTDIR}:${LIBDIR}:${EXECDIR}'
LIBPATHが相対パスで指定された場合、ライブラリファイル/追加パラメータファイル/CFIスクリプトとフィルタプログラムは、指定された順序で、複数のディレクトリ内を検索します。デフォルトで、LIBPATHの順序リストは、下記のディレクトリです。
WORKDIR (.) -- ワークディレクトリ
STARTDIR -- DeleGateが呼出されたディレクトリ
LIBDIR -- デフォルトの ${DGROOT}/lib
EXECDIR -- DeleGateの実行可能ファイルがあるディレクトリ
DGPATH parameter == DGPATH=dirPath[:dirPath]*
-- default: DGPATH='+:.:${HOME}/delegate'
パラメータファイルのサーチパス。特殊なディレクトリ名"+"は、"caller"リソース(パラメータファイルからパラメータファイルを参照する)の場所を表します。
DGOPTS parameter == DGOPTS=opt[,opt]*
-- default: none
コマンドラインオプションのリスト。これは、-Pや、-vのようにname=value フォーマットではないオプションを環境変数で与える場合、有効です
PORT parameter == PORT=port[,port]*
port == [host:]portNum[/udp]
portNum == number[-number]
-- default: none
ROUTE parameter* == ROUTE=proto://host:port/-_-dstHostList:srcHostList
-- default: none
srcHostList中のホストから、dstHostListリストにあるリソースへの要求を、proto
プロトコルのhost:port サーバに、転送する。
ROUTEは、MASTER と PROXYの一般化された表記法です。 MASTER="host:port:dstHostList" は、ROUTE="delegate://host:port/-_-dstHostList:*"の省略形です。 SERVER=proto を伴う PROXY="host:port:dstHostList" は、
ROUTE="proto://host:port/-_-dstHostList:*"と同じです。
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
このパラメータは、このDeleGateが、要求を転送する、上流のgeneralist DeleGate(MASTER-DeleGate)を指定します。DeleGateは、要求を指定されたMASTER-DeleGateへ、条件付で、転送します。
MASTERへの転送は、":dstHostList"をポストフィックスすることにより、フィルタできます;dstHostList にリストされている対象サーバへ向けた要求のみMASTER-DeleGateに転送されます。複数のMASTERが与えられる場合、順序通りに、MASTERへの接続が成功するまで、試行されます。
オプション "/masterControl" :
cache -- MASTERにおいてキャッシュにヒットした場合のみMASTERを使用
teleport -- MASTERに対して、持続的なTeleport 接続を確立する
MASTERP parameter == MASTERP=[host:port]
-- default: none
このDeleGateのプライベートMASTER-DeleGateを呼出す。HTTP-DeleGateが他のプロトコルへのゲートウェイとして動作する場合、FTPとNNTPの接続キャッシュを行うため、MASTER-DeleGateを必要とします。MASTERがリモートホスト上で動作している場合、MASTERPをMASTERとともに指定すると、ローカルホスト上で、データキャッシュを強行します。
RPORT parameter == RPORT={tcp|udp}[:host]
-- default: none
このパラメータは、MASTERパラメータとともに使う必要があります。指定した場合、このDeleGateに対する、MASTER-DeleGateからの接続(データ転送応答)は、DeleGateからMASTER-Delegateへの接続(データ転送要求)とは独立して、確立されます。指定した、接続応答タイプは、MASTERから、指定したホスト上のDeleGateに向けて作られます。
PROXY parameter* == PROXY=host:port[:dstHostList]
-- default: none
DeleGateが要求を転送しなければならない、上流プロキシ(specialist DeleGateまたは、標準プロキシ)を指定します。HTTP,FTP,Telnetのspecialist
DeleGateのみ、このパラメータで指定できます。
例)
SERVER=ftp PROXY=proxyhost:proxyport
SOCKS parameter* == SOCKS=host[:[port][/-4][:dstHostList[:srcHostList]]]
-- default: none
host上の使用するSocksサーバを指定します。サーバは、SocksV5プロトコルを理解することが要求されます。サーバがV4しかサポートできない場合、上記2番目のように、":/-4"を指定します。デフォルトでは、Socks経由で接続を確立するのは、全てを試行した後になりますが、CONNECTパラメータで、順序を制御できます。
例)
SOCKS="sockshost:1080:!.localnet,!*.my.domain"
// SOCKSパラメータの dstHostList の値のデフォルトは、"!.localnet"です。
SSLTUNNEL parameter == SSLTUNNEL=host:port
-- default: none
host:portで、任意プロトコルの目的サーバに対し、サーキットレベルプロキシとして、HTTPプロキシを標準SSLトンネル機能(HTTP上でCONNECTメソッドを伴う)とともに、動作させるために使用します。
VSAP parameter == VSAP=host:port
-- default: none
クライアントを受け付けるため、または、クライアントに接続するために使用する、VSAPサーバを指定します。VSAPは、リモートソケットマッピングサーバで、リモートホスト経由で接続するのと同様に、サーバにリモートホスト経由でTCP接続を受け付ける手段を提供します。
例)
// VSAP server
firewall% delegated -P8000 SERVER=vsap PORT=8080-8090
// 外部クライアントに対して、内部サーバがVSAP経由で受け付けられるようにする
internal% delegated -P8080@firewall:8000 ...
// 内部クライアントに対し、プロキシのように働く、VSAP経由の接続
internal% delegated -P8080 CONNECT="{vsap/firewall:8000}" ...
// VSAPサーバ経由で、受付け、接続する
internal% delegated -P8080 VSAP=firewall:8000 ...
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:*:*"
このパラメータは、以下のように、いくつかの接続方法を使用し、対象サーバに接続するための、試行順序を制御します:
connType:
cache | -- CACHE を検索 (接続なし) |
icp | -- ICPサーバをヒントとしたPROXY経由 |
proxy | -- PROXY サーバ経由 |
master | -- PROXY または MASTER-DeleGate サーバ経由 |
https | -- SSLTUNNEL (SSL tunnel on HTTP)経由 |
vsap | -- VSAP サーバ経由 |
direct | -- 目的サーバへ直接接続 |
socks | -- SOCKS サーバ経由 |
udp | -- UDPによる |
それぞれの接続タイプは、それぞれ {c,i,m,d,v,s,u} のように、最初の文字で省略できます。
ProtoList と dstHostList が与えられる場合、リストに含まれるプロトコルとホストにのみ制御が適用されます。例)外部ネットワークに接続せず、ホスト上のキャッシュデータを使う場合、CONNECT="cache:*:!./@"のように指定します。
注記:
現実装では、"cache"が、connSeq 中に含まれる場合、まず最初に試行されます。また、CONNECTでは、PROXYの使用法を制御できません
-Pport と CONNECT=udpの組合わせは、TCPクライアントからUDPサーバへ中継します。また、-Pport/udp と udpではない
CONNECTの組合わせは、UDPクライアントからTCPサーバへ中継します。
TUNNEL parameter == TUNNEL=tunnelType:script
tunnelType == tty7
-- default: none
指定した場合、上流DeleGateとの通信は、コマンドの標準入出力経由で、トンネルされます。トンネルは、数種の経路を形成できます(例えば、素のシリアルライン)それは、経路上での双方向通信を提供します。DeleGateの経路はリモートホスト上のinetdから呼出すこともできます。
現状、tunnelType は、"tty7"でなければならず、それは、DeleGate間の伝送が、7bitストリームで行われることを意味します。タイプが"tty7"の場合、トンネルを確立するには、SHIO-スクリプトファイルに指定を書きこみます。パッケージに含まれる、
"src/sample.shio"を参照して下さい。スクリプトファイル名は、絶対パスまたは、相対パス(LIBPATH 中で検索できるファイル名)のどちらかで指定する必要があります。上流のトンネル用DeleGateは、SERVER="tunnel1"を伴なって呼出さなければなりません。
例) ログインダイアログなしで、トンネルを形成する。
TUNNEL=tty7:tunnel.shio
[content of tunnel.shio]
o rsh host delegated SERVER=tunnel1\n
i READY\r\n
=
例) ログインダイアログありで、トンネルを形成する。
TUNNEL=tty7:tunnel.shio
[content of tunnel.shio]
o telnet localnews\n
i login:
o username\n
i Password:
o password\n
i %
o delegated SERVER=tunnel1 \n
i READY\r\n
=
PERMIT parameter* == PERMIT=connMap
connMap == ProtoList:dstHostList:srcHostList
-- default: none
PERMITパラメータは、このDeleGateが許可するアクセス方法を指定します。アクセスは、srcHostList
に含まれるクライアントホストから、dstHostList に含まれるサーバホストに対して、ProtoList
に含まれるプロトコルで、行われた場合に許可されます。
複数の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}:*"は、ホストに対するテルネットを標準ポート番号(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
ProtoList 中にリストされたプロトコルのみが、このDeleDateによって、許可されます。
generalist(SERVERパラメータを伴なわないDeleGate) は、デフォルトで、全てのプロトコルを許可します。specialist は、SERVERパラメータ("."で表現可能)により指定されたプロトコルが、デフォルトで許可されます。
プロトコル名の後ろに"/portNumList"がある場合、PortList中に列挙されたポートのみが許可されます。PortList は "/methodList"を付けることができ、プロトコル上で可能な手段を制限できます。現在、手段として、
"readonly"のみがサポートされます。例)REMITTABLE="ftp//readonly" は、FTPサーバへのアップロードを禁止する、"read only" FTP-DeleGateを生成します。
プロトコルに関するデフォルトの設定:
- generalist-DeleGate
- REMITTABLE="*" -- 全てのプロトコルを許可します。
- HTTP-DeleGate
- REMITTABLE="http,https/{443,563},gopher,ftp,wais" -- HTTPプロキシがリレーを期待する共通のプロトコル
- Telnet-DeleGate
- REMITTABLE="telnet/23" -- 標準テルネットポート(23)に向けたもののみに、アクセスを制限する。この制限はREMITTABLE="telnet"のように指定することで、無効にできます
-
例外:
現在の対象サーバが、 MOUNT="Path1
Proto://Server/Path2"のように、MOUNTパラメータによって固定されている場合、REMITTABLEによる制限を無視して、Proto
プロトコルは、対象プロトコルのServerによって、自動的に許可されます。
リストの最初が、"+"の場合、デフォルトで許可されたプロトコルのリストを意味します。
例)
REMITTABLE="+,-https/563,-wais,file" と SERVER=http
の場合、REMITTABLE="http,https/443,gopher,ftp,file" を意味します。
REACHABLE parameter* == REACHABLE=dstHostList
-- default: REACHABLE="*" (全てのホストに到達可能)
dstHostList に列挙されたホスト(またはネットワーク)上のサーバへ要求の転送のみ、DeleGateで受入れます。
複数の REACHABLEパラメータを使用した場合、その意味を確実なものにしなければなりません。
RELIABLE parameter* == RELIABLE=srcHostList
-- default: RELIABLE=".localnet"
srcHostList に列挙されたホスト(ネットワーク)上のクライアントから送られた要求のみ、DeleGateで受入れます。デフォルトで、DeleGateホストのローカルネット上のホストからのアクセスのみ許可されます。
これは、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:*:*:*"
このパラメータは、DeleGateがどのように、HTTPプロキシサーバとして動作するかを、制御します。
HTTP DeleGateは、2つの方法(プロキシモード)で、動作します:
1つは、リクエスト中 ("proxy" relayType) の全URLを受け付ける、
標準(CERN準拠)HTTPプロキシ、
もう一つは、応答中のURLを書換え、要求中の
/-_-URL を受け付ける、
DeleGateオリジナルのプロキシ。
":connMap"をともなう、詳細な書式で可能なプロキシモードは、
サーバプロトコル,サーバホスト,クライアントホストの組み合わせによって分類できます。
他の 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> タグを抑制する
デフォルト:
"proxy" と "delegate" モードの両方は、".localnet"上のユーザを許可し、
"proxy"モードのみの場合、他のユーザを許可します。
AUTH parameter* == AUTH=what:authProto:who
-- default: none
who(誰)にwhat(何)を許可する。authProto 中に指定したプロトコルを使用して、ユーザを証明する。クライアントホストが、プロトコルをサポートする場合、認証プロトコルをベースとして、"クライアントユーザは誰"か、を確認します。他の方法では、FTPサーバは、認証サーバを使用します。
HTTP-DeleGateの場合、(要求メッセージ中の)認証ヘッダにあるUsername:Password
で、"私は誰”かを宣言します。ここでのUsernameは、User@Hostとも、できます。User,
Host, Password,のセットを得た後、DeleGateは、Host 中の(FTP)サーバに、
User と Password でログインを試みます。成功した場合、クライアントは、User@Host で、認証されます。
現在、以下のカテゴリでの、認証/認可がサポートされます。
-- 何らかのプロトコルのDeleGateの場合 --
AUTH="admin:*:user@host"
- user@hostとして認証されたユーザを許可し、このDeleGateを、"http://delegateHost:Port/-/admin/"において、サーバ再起動とログ制御も含めたHTTPクライアントからのリモート制御を実行できるようにします。任意プロトコルのDeleGate(SERVER=tcprelayを除いた、無頓着なSERVER=protocol)を、この方法で制御できます。
現実装では、2番目のフィールドは、"*"でなければなりません。
-- FTPサーバ と FTP/HTTP ゲートウェイの場合 --
- AUTH="anonftp:*:passWord"
- 指定した場合、DeleGateは、クライアントユーザのE-mailアドレス(ユーザによって宣言された)を、匿名パスワードとして、目的FTPサーバに、転送します。このAUTHをともなわない場合、HTTP-DeleGateは、デフォルトで、ADMINのE-Mailアドレスを送信します。
E-mailアドレス書式は、user@host
でなければならず、他の場合(host部分がない)、FTPログインは、DeleGateにより拒否されます。HTTP-DeleGateは、認証時のUsername部として、彼/彼女のE-Mailアドレスを宣言するため、匿名ユーザに問い合わせます。passWord
に"*"を指定した場合、認証時に、どんなパスワードも受付けます。
FTP-DeleGateの場合、passWord
とマッチするためにPASSコマンドを使用して、パスワードを得ます。
現実装では、2番目のフィールドは"*"でなければなりません。
- AUTH="anonftp:smtp-vrfy:*"
- 指定した場合、DeleGate匿名ユーザによって与えられる、E-mailアドレスの正当性を確認(SMTPプロトコルを使用)します。HTTP-DeleGateの場合、認証でのUsername部として、E-mailアドレスが必須です。FTP-DeleGateの場合、匿名ユーザのパスワードとして与えることが必須です。この、AUTHをともなう場合、無効なE-mailアドレスは、拒否できます。アドレスが有効で、"user@host"のような書式の場合、自動的に、FQDNな書式である、"user@host.domain"のように拡張されます。
3番目のフィールドが"-"の場合(すなわち、AUTH="anonftp:smtp-vrfy:-@*")
"host.domain"上のメールサーバに対する接続のみがチェックされます。
-- プロキシと 元HTTP サーバの場合 --
- AUTH=proxy:{ident|auth|pauth}
- HTTPプロキシサーバとしてのDeleGateにおける、識別/認証プロトコルを指定します。このパラメータは、ユーザのアクセス制御がPERMITか、RELIABLEに指定してある場合のみ、チェックされます。
ident | -- 識別プロトコル [default] |
pauth | -- Proxy-Authorization フィールド "user@host:password"を使用 |
auth | -- Authorization フィールド "user@host:password"を使用 |
例)
AUTH=proxy:auth PERMIT="*:*:{*,!?}@*"
// 彼/彼女が識別できる間、全てのホストの全てのユーザが、許可。
注記:
クライアントがプロキシ認証をサポートしていない場合、認証に、"proxy:auth"を使用することが強制されます。このような場合、クライアントは、認証要求のあるリソースにアクセスできません。
FTPサーバベースの認証を使用する場合、要求される認証情報としてのユーザ名は、"user@host.domain"のような、E-mailアドレスです。なお、これは、通常、AUTH="anonftp"
と AUTH="proxy"のために使用します。
AUTHORIZER parameter == AUTHORIZER=authServList[:connMap]
authServList == authServ[,authServ]* | & | *
authServ == authHost[/portNum]
authHost == hostName | hostAddr
connMap == ProtoList:dstHostList:srcHostList
-- default: none
-- 制限: Telnet/FTP/NNTPに、適用可能
RIDENT parameter == RIDENT=ridentType[,ridentType]*
ridentType == client|server
-- default: none
RIDENT="server"が指定された場合、クライアントソケットに関する識別情報は、getsockname(2) と getpeername(2)によって取得され、PROXYまたは、RIDENT="client"により情報を受信できるMASTER-DeleGateに転送されます。また、アクセス制御にも使用されます。RIDENT="client"をともなうDeleGateサーバは、RIDENT="server"をともなうDeleGateと、RIDENTをサポートしない他のプロキシサーバの両方から受信可能です。一連のカスケードされたDeleGateサーバの中間にあるDeleGateは、RIDENT="client,server"が必須です。
例)
host1# delegated -P8080 RIDENT=server MASTER=host2:8080
host2# delegated -P8080 RIDENT=client
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プロセス単位の最大サービス数 [無制限] |
mailsplit |
-- |
メールサイズの最大値 [50000] |
standby |
-- |
スタンバイプロセスの最大数 [16] |
http-cka |
-- |
キープアライブ中接続の最大数 [10] (*1) |
http-ckapch |
-- |
キープアライブ中接続のクライアントホスト単位の同時最大数 [4] |
conpch |
-- |
クライアントホスト単位の最大同時接続数
[無制限] |
(*1)それぞれのクライアントからの最初の接続では、"http-cka"の値は10倍となります。
TIMEOUT parameter* == TIMEOUT=what:seconds,...
-- default: TIMEOUT=dns:60,acc:30,con:30,lin:30,...
what(何)に対するタイムアウト期間(デフォルトでは、秒)を指定します。
shutout |
-- |
致命的エラーでセットされた、シャットアウトを解除する [900] |
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) |
タイムアウト値
"0"は、"タイムアウトしない"(無制限)を意味します。期間の単位は、デフォルトで、秒ですが、1d(日)、1h(時)、1m(分)のように変更できます。(*1):タイムアウトは、それぞれのクライアントから最初に接続される場合、10倍長くなります。(*2):ダウンロードを開始した、クライアントの切断後。
DELAY parameter* == DELAY=what:seconds
-- default: DELAY=reject:60,unknown:60,...
what(何)を行った後のディレイを指定します。
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のマップを行い、クライアントからの要求メッセージ中のURLとvURLを付き合わせ、rURLに書換えた後、サーバに転送します。また、サーバからの応答メッセージ中のURLが、rURLとマッチする場合、vURLに書換えられ、クライアントに転送されます。それぞれのプロトコルにおけるMOUNTによる、書換えは以下のようになっています:
- HTTP -- URL、または、ヘッダか、HTMLボディ(タグ)にある場合
- FTP -- コマンド中のファイル名と、ステータス応答
- NNTP -- コマンド中のニュースグループ名、ステータス応答、ユーザデータ(ヘッダ)
- POP -- USER,PASS,APOP コマンド中のユーザとホスト名
- IMAP -- LOGIN コマンド中のユーザとホスト名
- SMTP -- RCPT コマンド中のメールアドレス
vURLが"*"で終わる場合、部分的にマッチしたパスが書換えられます。rURLが"*"で終わる場合、部分的にマッチしたパスの、残り部分は、rURLの後にコピーされます。
例) HTTP-DeleGateのMOUNT
MOUNT="/abc/* http://host/*"
// "/abc/def" から/へ "http://host/def"書換える
このパターンマッチングは、MOUNT="/abc/[a-z]* http://host/*"のように、"[setOfCharacters]"表記を"*"にプリフィックスすることにより、制限できます。これは、"[setOfCharacters]"に列挙されたキャラクタで始まる、任意の文字列にマッチします。
vURL か rURL に"="を指定した場合、 マウントは、リクエスト中のvURLを書換えない、または、応答中のrURLを書換えるのと同じことを意味します。
対象サーバのポート番号は、"-"か"+"でプリフィックスでき、これは、SERVER
パラメータにおける入り口ポート番号に対し、動的に決定したオフセットを与えます。
MountOptions == option[,option]*
MountOptionsは、オプションのリストで、条件付MOUNTや、特定の機能MOUNTしたURLのみに利かせます。それらのいくつかは、さまざまなプロトコルに対する一般化で、他のものは、プロトコル
( HTTP, NNTP ) に特化します。
条件:最初のオプショングループはソースと対象(クライアント・サーバ)によって、条件的にMOUNTします。MOUNTパラメータが、1つ以上の条件を含むMountOptionを持つ場合、全ての条件が真にならない場合、MOUNTは、無視されます。
- from={HostList} -- クライアントから
- クライアントがHostListに含まれる場合、真。
- via={HostList} -- ホスト経由
- 経路中で1つ以上の、HostListに含まれるホストを経由した場合、真。
- path={HostList} -- ホストを通ってきた
- HostList中に含まれる全てのホストを経由してきた場合、真。
- host={HostList} -- ホストとクライアントを結ぶインターフェース
- クライアントが、HostList中の指定された、ネットワークインターフェース経由でDeleGateと接続した場合、真。
DeleGateが、元サーバとして動作し、要求メッセージ中の仮想ホスト名が、"Host: host"として見えている場合、仮想ホスト名は、実ホスト名より前に検査されます。複数の仮想名が、同じIPアドレスに関連付けされている場合、"host=-hostname"のように"-"を仮想ホスト名にプリフィックスする事で、仮想名を区別します。
- dstproto={ProtoList} -- 指定したプロトコルのサーバ
- 多少サーバのプロトコルがProtoList中の含まれる場合、真。
- dst={HostList} -- サーバに向けて
- 対象ホストがHostList中にに含まれる場合、真。このオプションは、MOUNTの右側に"="が使用されている場合に有効です。method={methodList} --
- 現リクエストのアクセス方法が、methodList中に含まれる場合、真。
これらHostList は、host:portのリストでなければならず、この、 :port 部分は、特に気にしない場合、省略できます。host 部は、"*"で、置換えられ、その場合、異なったネットワークインターフェースを気にしません。
例)
// クライアントがどのインターフェースからきたかによって、MOUNTを切りかえる
MOUNT="* URL1 host=this-host" MOUNT="* URL2 host=localhost"
// クライアントがどのポートからきたかによって、MOUNTを切りかえる
-P70,80 MOUNT="* URL1 host=*:70" MOUNT="* URL2 host=*:80"
制御:
オプションの第2グループは、DeleGateのローカルMOUNTポイントに対する動作を制御します。
- ro -- 読込みのみ許可
- NNTP(POSTコマンドを無効化)と、元FTP(デフォルト)にあてはまります。
- rw -- 読み書き両方を許可
- 元FTP-DeleGateのローカルファイルへの書込み許可。
- cache=no -- キャッシュを無効化
- このMOUNTポイントのサーバに対して、キャッシュを全て無効にする。
- expire=period -- キャッシュの有効期間
- MOUNTポイントに関する満期(EXPIREパラメータに優先する)。
- ftocl=filterCommand -- 外部フィルタを利かせる
- MOUNTポイントにフィルタを利かせる(FTOCLパラメータに優先する)。
- charcode=charCode -- コード変換
- このMOUNTポイントに対してのコード変換を指定します(CHARCODEパラメータに優先する)。
- proxy=host:port -- 上流プロキシサーバ
- master=host:port -- 上流 MASTER-DeleGate
- MASTER や PROXY パラメータで指定されたものに代えて、MOUNTポイントに対して使用する上流プロキシサーバ。
- indirect -- 間接MOUNT
- 例) ここで、MOUNT="URL1/* URL2/* indirect" が与えられた場合、"URL1/name1/path" が要求され、"URL2/name1/indirect.cfi" が "Base: URL3"を含むとき、"URL3/path" がアクセスされます。 これは、MOUNT="URL1/name/* URL3/*"によって生成されます。
URICONV parameter* == URICONV={convSpec|defElem|defAttr}
convSpec == convList:attrList
defElem == defelem:+,elemnameList
defAttr == defattr:+,attrnameList
-- default: URICONV=dump で見れます。
HTMLドキュメント中タグのどれに、どのようなURI書換えを利かせるか指定します。convList は、以下の項目リストです。
mount |
-- |
MOUNTにより書換え |
normal |
-- |
URLパス中に"../"を含むMOUNTされたURLを正常化する |
partial |
-- |
可能な場合、(MOUNTされた)URLを部分URLで表現する。 |
full |
-- |
全てのURLをフルURLに変換 |
特別なconvList
URICONV="+"は、デフォルトのURICONVの構成(この場合、現実装で、attrListはありません)を読みこむことを意味します。attrList
は、属性名リストで、それぞれは、1つの要素名をポストフィックスできます。特別な属性名"+"は、属性のデフォルトセットを意味します。"-"で、プリフィックスされた属性は、計画された属性セットから、除かれます。
例)
URICONV=mount,normal,partial:+ -- Ver.6以降、デフォルト。
URICONV=full:+,-HREF/BASE -- HREF/BASE 以外ずべて書き換える。
URICONV=dump -- 現在の URICONV 設定を見る。
URICONV=+ URICONV=mount:-SRC/IMG URICONV=full:SRC/IMG
BASEURL parameter == BASEURL=URL
-- default: none
DeleGateにより生成される、絶対URLに埋め込まれる、このサーバのベース(仮想)URL:例)NNTP/HTTPゲートウェイDeleGateによって生成されるHTMLページのアイコンURL。
例)
MOUNT='/* nntp://newsserver/*" BASEURL="http://wwwserver/news"
// これは、このHTTP-DeleGateのルートが"/news"にマッピングされた、HTTP サーバ "http://wwwserver"
に有効です。
DELEGATE parameter == DELEGATE=gwHost:Port[:ProtoList]
-- default: DELEGATE=currentHost:currentPort
このパラメータは、大部分が、BASEURL、RELAY、URICONVパラメータに取って代わられると思います。
元々、このパラメータは、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
EXPIREは、キャッシュデータの有効期限を、日,時,分,秒単位で、指定します。有効期限は、DeleGateによりキャッシュデータが削除されることを意味するわけではありません;DeleGateは、指定された期限より古いキャッシュデータを、単に、無視するだけです。
CACHEFILE parameter == CACHEFILE=fileNameSpec
-- default: CACHEFILE='$[server:%P/%L/%p]'
CACHEFILEは、キャッシュファイル名をどのように構成するかを指定します。名前は、主に、サーバホストと、要求URLの情報により得られます。これらの情報は、
"$[server:format]"形式で指定され、ここでの、format
は、以下のように、連続したシンボルからなり、それぞれ、URL
scheme://host.d2.d1:port/path
の一部を参照します。
%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"から"ff"の範囲の16進の値になります。これは、全てのサーバを含む、1つの巨大なディレクトリを255の小さなディレクトリ(分散した物理ディスク)に分割します。
例)
CACHEFILE='$[server:%P]/$[hash:%H]/$[server:%L/%p]'
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 に対し適用
CHARCODE parameter == CHARCODE=[inputCode/]outputCode
outputCode == charCode
charCode == JIS|EUC|SJIS|UTF8
-- default: none
指定した場合、DeleGateは、テキストタイプの応答メッセージ中にあるJISコードを、指定されたキャラクタコードに変換します。パラメータ値の完全な指定書式は、
inputCode/output-code です。CHARCODE=JIS は、CHARCODE=JP/JIS
の省略形で、ここでのJPは、日本語テキストのエンコード {JIS,EUC,SJIS,UTF8} を意味します。
このパラメータをインターネットメール/ニュースプロトコル(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
HTTP応答メッセージ中のHTMLテキストに対する変換制御フラグのリストを指定します。
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
-- default: none
-- MIMECONV="" CHARCODE パラメータが与えられた場合
NNTP/POP/SMTP DeleGateで、MIMEエンコード/デコードを制御します。MIMECONV=thruは、全てのMIMEエンコード/デコードを停止し、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
DeleGate・クライアント間や、DeleGate・サーバで、通信されるデータに利かせるfilter コマンドを指定します。filterCommand が相対パスで指定された場合、 LIBPATH 内を検索します。
フィルタは、サーキットレベル情報では、CMAP で、アプリケーションレベル情報では、CFI script を使うことで、条件付で利かせることができます。
ビルトインフィルタ: filterCommand が"-"でプリフィックスされる場合、DeleGateのビルトインフィルタです。
- teeFilter == -tee[teeOpt]*[SPACE filePath] ... tee(1)
コマンドライクフィルタ
- catFilter == -cat[teeOpt] ... cat(1) コマンドライクフィルタ
- teeOpt == -h | -n | -t | -v | -l
- -h -- ヘッダ部のみ出力
-n -- 出力ライン数
-t -- 出力ラインに対するタイムスタンプ
-v -- 不可視キャラクタを表示
-l -- stderrに代わり、LOGFILEに出力
- codeconvFilter == -charCode ... CHARCODEと同様のキャラクタコード変換
- charCode == jis | sjis | euc | utf8
例)
FTOCL=-tee-h-n FTOSV=-tee
XCOM parameter == XCOM=filterCommand
XFIL parameter == XFIL=filterCommand
-- default: none
CHROOT parameter == CHROOT=dirPath
-- default: none
-- 制限: 大抵のUnixで、super-user のみ
ファイルシステムのルートを、開始時に、chroot(2)システムコールを使用し、DirPathに変更します。
DGROOT parameter == DGROOT=dirPath
-- default: on Unix: '${HOME}/delegate' or '/var/spool/delegate-${OWNER}' or '/tmp/delegate-${OWNER}' on Windows: '/Program Files/DeleGate'
全てのサブディレクトリ (LOGDIR, ADMDIR, CACHEDIR, WORKDIR, ETCDIR, ACTDIR, TMPDIR)は、デフォルトで、DGROOT 以下に配置されます。
実行開始時(Unix上で)、DeleGateは、利用可能なDGROOT(OWNERによって読み書き両方ができる)を検索します。候補となるディレクトリが存在しない場合、DeleGate自身が、ディレクトリを作成しようとします。DGROOTの指定が明示された場合、それが最初に試行されます。失敗するか、DGROOTが与えられない場合、デフォルトの候補順序によって利用可能なディレクトリが見つかるまで、試行されます。
SHARE parameter == SHARE=dirPatternList
-- default: empty
指定した場合、与えられたパターンにマッチした名前を持つ作成されたディレクトリやファイルは、それぞれ、アクセスモードが、0777(rwxrwxrwx)、または、0666(rw-rw-rw-)
となり、任意のユーザ間で、共有可能になります。非絶対形式でパターンを指定した場合、DGROOTに対する相対とみなされます。デフォルトで、ディレクトリやファイルのアクセスモードは、UMASK(通常、022)で変更された、0755(rwxr-xr-x)
か、 0666(rw-rw-rw-)で作成されます。
例)
// 全てを共有する
SHARE=""
// DGROOT下のキャッシュとログを共有
SHARE="cache/*,log/*"
// 古いバージョンで、ディレクトリを共有
SHARE='${CACHEDIR}/*' CACHEDIR='/var/spool/delegate-anybody'
SHARE='${VARDIR}/*' VARDIR='/var/spool/delegate'
UMASK parameter == UMASK=mask
-- default: the value of umask(2)
umask(2)システムコールで使用する、ファイル作成モードマスクをセット。
VARDIR parameter == VARDIR=dirPath
-- default: VARDIR='${DGROOT?&:/var/spool/delegate}'
このパラメータは、DeleGate/6.xで、DGROOTが標準になった後、古いものとなりました。ACTDIRとTMPDIRを除き、DGROOTと同様に、サブディレクトリのデフォルトのベースを指定します。
CACHEDIR parameter == CACHEDIR=dirPath
-- default: CACHEDIR='${VARDIR}/cache'
キャッシュを有効にするには、CACHEDIRが存在しなければならず、また、DeleGateが読み書きの両方ができなければなりません。これは、CACHE="do"により、必要なアクセス権で、自動的に作成されます。
ETCDIR parameter == ETCDIR=dirPath
-- default: ETCDIR='${VARDIR}/etc'
DeleGate管理/設定用、持続性ファイルのディレクトリ。元 SMTP-DeleGate(SMTPGATE) と、元 NNTP-DeleGate (NNTP) 用設定ファイルは、ここに配置します。
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'
LogFilenames
が相対パスで指定された場合、それらは、${LOGDIR}内に配置されます。これら名前が"./"で始まる場合、それらは、${WORKDIR}内に配置されます。
パターン ${PROTO} と ${PORT}
は、それぞれ、このDeleGateのプロトコル名と、ポート番号に置換えられます。これらファイルとディレクトリは、可能な場合、DeleGateにより自動生成されます。LOGFILE=""
や、PROTOLOG=""のように、空ファイル名を指定することで、ログを停止できます。
HTTP用のPROTOLOG書式は、コモンログファイル書式とコンパチブルで、カスタマイズ可能です。FTP用のPROTOLOG書式は、xferlog コンパチブルです。
エージングのためのLogFilenameとdirPathの置換え
パターン"[date+format]"がファイル名に含まれる場合、format 文字列は、現時刻とstrftime(3)準拠の関数で評価され、評価値で置換えられます。これは、指定されたログディレクトリ(またはファイル)指定した時限で細分化でき、これにより、エージングされます。典型的な時限は、以下の書式で表します。
%Y -- 年 (like 2000)
%y -- 世紀を除く年 [00-99]
%m -- 月番号 [01-12]
%d -- 1ヶ月中の日 [01-31]
%W -- 1年の週番号 [00-53]
%w -- 1週間の日番 [0-6, Sunday=0]
%H -- 時間 [00-23]
例) 1ヶ月で循環する毎日のログ
LOGFILE='${PORT}[date+.%d]'
例) 日付による階層ディレクトリを持つログ
LOGDIR='log[date+/aged/%y/%m/%d]'
最近のログファイルは、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'
CRONでの"-Fexpire"機能または、"-expire"動作による、期限切れ動作(削除)のログファイル。
WORKDIR parameter == WORKDIR=dirPath
-- default: WORKDIR='${VARDIR}/work/${PORT}'
WORKDIRがアクセスできない場合、または、-vvオプションが与えられ、WORKDIRを明示しない場合、現ディレクトリ(DeleGateを呼出した者の)が、WORKDIRとして、使用されます。
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}'
現在アクティブなサーバに関する情報は、ACTDIRに配置されます。これらは一時ファイルは、DeleGateサーバ呼び出しで作成され、終了で、削除されます。
HOSTS parameter* == HOSTS=nameList[/addrList]
nameList == name | {name[,name]*}
addrList == addr | {addr[,addr]*}
-- default: HOSTS=localhost/127.0.0.1
ドメイン名/IPアドレス ペアのリストは、DNS(または、NIS または、 /etc/hosts
テーブル)データを無効にします。これは、繰返し参照されるホストや、別名の解決を高速化したり、レゾルバの知らないホストに対して、代理を行わせることができます。
複数の名前やアドレスは、書式 {name1,name2,...}/{addr1,addr2,...}で、指定できます。addr部のない、{name1,name2,...}のみが与えられた場合、name1,name2,...は、一つのホストとして評価されます。
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()
を使用する。(大抵、ホストのシステム標準レゾルバをコール) |
RESOLV=""のように、空値を指定した場合、HOSTSパラメータに列挙されたホストのみ、解決できます(これは、安全を考慮し、hostsテーブルを隠さなければならない場合有効です。)それぞれのレゾルバは、オプションの引数とともに、以下のように指定できます:
cache:/path |
-- キャッシュディレクトリパス名 [$TMPDIR/resolvy] |
file:/path |
-- パスワードファイルパス名 [/etc/hosts] |
nis:nisDomain |
-- NIS ドメイン名 [default domain] |
dns:dnsHost |
-- DNS
サーバとデフォルトドメイン |
デフォルトで、複数のIPアドレスを持つホストに接続する場合、それぞれのレゾルバで設定された順序に従い、それぞれのアドレスが試されます。特別なパラメータ
HOSTS="*/*/RR"は、 "Round Robin"の指定を追加でき、それらIPアドレスは、ラウンドロビンの順序で試されます。
RES_CONF parameter == RES_CONF=URL
-- default: RES_CONF="file:/etc/resolv.conf" or from registry (on Windows)
"resolv.conf"ファイルの場所を指定。ファイルは、DeleGateオリジナルのレゾルバ Resolvy により翻訳されます。Resolvyは、含まれる、"nameserver", "domain", "ndots", "search", "sortlist"を認識します。
RES_NS parameter == RES_NS=dnsServer[//socksV5Host]
-- default: RES_CONF による
使用するDNSサーバを指定します:dnsServer
は、DNSサーバのホスト名か、ホスト名のIPアドレスで、オプションで、ポート番号が標準ポート(53)以外の場合、
"host:8053"のように、ポート番号を付けることもできます。"dnsServer//socksV5Host"をともなう場合、防火壁の向こうにあるDNSサーバは、指定したSocks
V5サーバ経由で参照できます。
RES_RR parameter == RES_RR=HostList
-- default: RES_RR="*"
HostListに含まれるホストのための、ラウンドロビンIPアドレスリスト。現在、RES_RR="*" と、
RES_RR=""のみがサポートされます。
RES_VRFY parameter == RES_VRFY=""
-- default: none
"RES_VRFY="をともなう場合、DNSサーバの逆引き結果を確認します。IPaddress1が、Hostname として解決されたとき、および、Hostnameが、Paddress-list
として解決され、IPaddress1 が含まれない場合、確認は失敗し、結果は、無視されます。
RES_DEBUG parameter == RES_VRFY=number
-- default: none
PROTOLIST
ProtoList == [!]protoSpec[,ProtoList]
protoSpec == protocolName[/[portNumList][/methodList]]
ProtoListは、プロトコル名のリストです。予約名"*"は、全てのプロトコルを意味します。"!"や、"-"がプリフィックスされた場合、プロトコルは、プロトコルリストから除外されます。
HOSTLIST
HostList == [!]hostSpec[,HostList]
hostSpec == [{userList}@]hostSpec[/netMask]
userList == userNamePattern[,userNamePattern]*
hostSpec == hostNamePattern|hostAddrPattern
userNamePattern == [*]uname[*]
hostNamePattern == [*]hname[*]
hostAddrPattern == IPaddressPattern|IPrange
netMask == IPaddress|maskLength
HostListは、ホストのリスト(名前、または、アドレス)で、存在するホストが、リストに含まれているか、いないかを付き合わせ、確認するために使用します。それぞれのホスト
(hostSpec)
は、オプションで、ユーザリスト(userList)でプリフィックス、および、オプションで、netMask
を付けることができます。
- ワイルドカード ( * )
- 一つのドメインか、ネットワークに属するホストは、ワイルドカード記号をともなう1つの hostSpec で表現できます。
"*.com"または、 "*.delegate.org" または、
"www.*"のように、ワイルドカードキャラクタ"*"をプリフィックス/ポストフィックスできます。
特殊なケースで、"*.domain"のように、"*." で始まる hostSpec は、
"xx.domain" や "yy.xx.domain のような、普通のホスト名と同様に、"domain" をホスト名として、
マッチします。(DeleGate/6.1.18 から)
ネットワークに相当する、IPアドレス範囲は、192.168.[0-255],
192.168.1.[32-63]のように指定できます。これら範囲は、192.168.0.0/16 と 192.168.1.32/27
のように書くこともできます。IPアドレスの表記で、ワイルドカードキャラクタ"*"は、[0-255]を意味し、"192.168.*"のような場合、
192.168.[0-255] と同じです。
- 否定 ( ! )
- host
に"!"をプリフィックスした場合、そのホストは、リストから除外される事を意味します。リスト中の全ての要素は、最初から最後まで走査されます。このように、一度追加(除外)された名前は、成功リストから、除外(追加)されます。例)HostListは、以下のようになります:
"*.dom,!*.xx.dom,*.yy.xx.dom"
"host.yy.xx.dom"のホストは、最初のhostSpec
にマッチしますが、2番目で除外されます。しかし、再び、3番目で追加されます。HostList中の、最初のhost
が、"!"をともなう場合、全宇宙("*"、全てのホスト)から除外されることを意味し、"!host, ..."は、"*,!host,
..."とみなされます。
- ネットマスク ( host/mask )
- Specifying a netMask, you can check only a part of address,
the network address part typically. The netMask can be specified in
one of following formats;
- netMask の指定で、アドレスの一部を検査できます。通常、ネットワークアドレス部です。netMask
は、以下のうちの一つで、指定できます。
- /24, /28, ... マスクビット長
- /FFFFFF00, /FFFFFFF0, ... 16進表記
- /255.255.255.0, /255.255.240.0, ... ドット表記
- /@A, /@B or /@C ... アドレスクラスマスク
- @A, @B および、@C は、それぞれ、/8,
/16 および、/24 を表します。この表記法は、サブネットのために、ビット数をつけることができます;例) /@B4 は、クラスBネットワークを16のサブネットに分割することを意味します。
- @ ... デフォルトネットマスク
- ホストのIPアドレスクラスによって/@A, /@B, /@C
のいずれかを表現し、マスクする。
- ユーザリスト ( {userList}@host )
- srcHostList(例:クライアントホストに関するHostList)用、{user1,user2,...}@hostのように、ホスト名にプリフィックス可能な、ユーザ名リスト (userList)です。 否定記号"!"は、HostListと同じ意味を持ちます。注記: !user@hostは、{!user}@hostとは、異なります;前記は、user@hostを除外しますが、後者は、{*,!user}@host を意味し、このように、*@host の追加は、user@hostが除外されます。特別なユーザ名"?"は、identdで、識別されていないユーザ名にマッチします。
例) 不明ホストや、不明ユーザからのアクセスを抑制する
- ポートリスト ( host:{portList} )
- 特殊ホスト名
- これらは、特殊なホスト名で、実行時に、実ホスト名に置換えられます。
- "."
- DeleGateが動作しているホスト。
- "-"
- ホストがユニークなIPアドレス(ネットワークインターフェース)を持つ場合、"."と同様ですが、IPアドレスを複数もつ場合、クライアントが、このDeleGateに接続したIPアドレスになります。
- ".o"
- ホストがユニークなIPアドレス(ネットワークインターフェース)を持つ場合、"."と同様ですが、複数のネットワークインターフェースを持つ場合、出ていくネットワークインターフェース。
- ".localnet"
- "localhost,./@,-/@,.o/@"を表す。
- "-C"
- クライアントホストで、クライアントからのアクセスをクライアント(ネットワーク)のみに制限する場合有効です。
- "?"
- 名前や、アドレスがレゾルバ(RESOLVの指定)によって解決できない"unknown hosts"(不明なホスト)にマッチします。
- 名前解決停止 ( -host )
- ホスト名(または、IPアドレス)が "-hostname" ("-192.168.1.1")
のように"-"がプリフィックスされる場合、ホスト名(IPアドレス)に対して、名前解決(逆引き)を試行しません。これにより、名前解決不能なホスト名(IPアドレス)に対する名前解決の試行における無だな時間を省くことができます。
- 時間条件 ( -T.period )
- ホスト名の頭に、"-T."をともなう、擬似ホスト名パターンは、1日のうちの時限を指定するために使用します。
- "-T.period"は、現在時刻が指定したperiod 中にある場合マッチし、ここでのperiod
は、"hour-hour”で表現します。
例)
PERMIT="*:-H.9-16:hostList1"
PERMIT="*:-T.17-8:hostList2"
// hostList1
は、終業時間内に許可
// hostList2 は、終業時間外に許可
- 合成演算子 ( &, |, ! )
- 上記でも説明しましたが、カンマ(,)の意味は、HostListで、"A,B"のような場合、ANDや、ORではありません。AND,
OR, NOTのような演算子は、 リストの特別なメンバによって、提供されます。
- "&"
- "hostList=A,&,B"のように使う、AND演算子で、Aが偽の場合、hostList
は、Bを評価せずに、トータルで偽になります。他の場合、全体で真になるためには、Bが真になる必要があります。
- "|"
- "hostList=A,|,B"のように使う、OR演算子で、Aが真の場合、hostList
は、Bを評価せず、トータルで真になります。他の場合、全体で真になるためには、Bが真になる必要があります。
- "!"
- "A,!,B"のように使う、NOT演算子で、Aの結果は反転され、続いて、Bがある場合、評価されます。
例)
PERMIT="*:*:-T.9-16,&,hostList1"
PERMIT="*:*:-T.17-8,&,hostList2"
//
上記例と同じ意味です。
パラメータ置換
これらは、DeleGateのシンタックスを良く見せるため(もう)の、設定ファイル書式ではありませんが、単純な再帰的置換え機構(階層的および、分散した、パラメータ部を一つのパラメータ(または、オプション)リストに組み立てます)です。
オプションとパラメータは、外部の"substitution
resources"(置換リソース)から、読込むこともできます。"+=file"のようなオプションは、オプションのリストが列挙された、"file"の名前を持つリソースに置換えられ、"name=+=file"のようなオプションは、"name=value"リストに置換えられ、この"value"は、"file"中に列挙されます。同様に、"name=xxx:+=file"のようなオプションは、リスト"name=xxx:value"によって置換えられます。
置換は、繰返し実行できます。この場合、相対リソース名は、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 ...
- +=parameters
- [content of parameters]
-
PERMIT=a:b:c
PERMIT=a:b:d
PERMIT=a:e:f
PERMIT=x:y:z
...
- PERMIT=+=permits
- [content of permits]
-
a:b:c
a:b:d
a:e:f
x:y:z
...
-
PERMIT=a:b:+=abclients PERMIT=+=others
- [content of abclients]
-
c
d
- [content of others]
-
a:e:f
x:y:z
...
- PERMIT=+=permits
- [content of permits]
- PERMIT=a:b:+=?abclients
- PERMIT=+=?others
- CASE abclients
-
c
d
- ESAC
- CASE others
-
a:e:f
x:y:z
...
ESAC
置換リソースは、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 スクリプト
クライアント・DeleGate間、または、DeleGate・サーバ間の通信は、CFI(Common Filter Interface)と呼ばれる簡単な仕組みを用い、DeleGateに関連付けたユーザ定義フィルタプログラムによって、抽出、または、変換できます。すでに存在するフィルタプログラムが、標準入力から受けて、標準出力に出力する場合、CFIプログラムとして、変更なしで使用可能です。CFIの使用法は、以下のようなパラメータで制御されます:
filterName="filterSpec"
CMAP="filterSpec":filterName:connMap
filterName == FCL | FTOCL | FFROMCL |
FSV | FTOSV | FFROMSV |
FMD | FTOMD | FFROMMD
filterSpec == filterCommand | CFIscriptName
filterName
は、FXX, FTOXX,FFROMXX
のような名前で、XX はCL (クライアント), SV (サーバ),
MD (MASTER-DeleGate)の内の一つです。FXX
のフィルタコマンドは、クライアントに対して、ファイルディスクリプタ0がバインドされ、DeleGateに対しては、ファイルディスクリプタ1がバインドされます。FTOXX
と FFROMXX のフィルタコマンドは、標準入力から入力を受け、 XX
に対してバインドされた標準出力へ、出力を投げます。
フィルタ(サーキットレベル情報において)以下のようにCMAPパラメータを使うことで、条件付で利かせることができます:
CMAP=filterSpec:filterName:ProtoList:dstHostList:srcHostList
例)
CMAP="sslway:FSV:telnet:hostA:*"
は、HostA上のテルネットサーバに接続する場合のみ、SSLwayフィルタを利かせることを意味します。
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 応答メッセージの書換え
SERVER=http FTOCL=test.cfi
[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書換えによるプロキシ動作
プロトコルの詳細と使用例
共通の表記
- # delegated ...
- 特権のあるポート番号を使用するため、DeleGateをsuper-userで呼出す事を意味する
- % delegated ...
- super-user以外でDeleGateを呼出すことを意味する
- firewall% delegated ...
- DeleGateが、インターネットに/から到達できる、あなたのサイトに属したホスト上で動作していることを意味する
- internal% delegated ...
- DeleGateが、インターネットから隔離された、あなたの内部ホスト上で動作していることを意味する
- external% ...
- あなたのサイト外のホスト上で、何かすることを意味する
TCPrelay
SERVER=tcprelayパラメータをともなうDeleGateは、伝送内容を把握しないで、クライアント・サーバ間の通信を1つのTCP接続で中継します。このように、TCP上の任意アプリケーションプロトコルは、DeleGateのサポートするプロトコルリスト中に存在しなくても、SERVER=tcprelayによって、中継できます。しかし、この場合、サービスへの付加価値(キャッシュ,マウント,ログ)は、使用できません。クライアントからのリクエストによる、任意サーバへの接続は、できません。主接続以外に動的に他の接続を生成するアプリケーションプロトコル(FTPなど)は、中継できません。プロトコル上、元サーバ上で、他の名前に変わってしまうアプリケーションプロトコル(HTTP中の完全なURL指定など)も中継できません。
例) 同様の役割をする、TCP上の2つのプロキシ
# delegated -P25 SERVER=smtp://mailserver
# delegated -P25
SERVER=tcprelay://mailserver:25
UDPrelay
SERVER=udprelayパラメータをともなうDeleGateは、伝送内容を把握しないで、クライアント・サーバ間の通信をUDPで中継します。これは、TCPのためのtcprelayと同様な、長所/欠点を持ちます。ルーティング情報が変更されるようなアプリケーションプロトコル(CU-SeeMeなど)もまた、udprelayで中継できません。
例) 同様の役割をする、UDP上の2つのプロキシ
# delegated -P53 SERVER=dns://nameserver
# delegated -P53
SERVER=udprelay://nameserver:53
Socks サーバ
Socks-DeleGateは、SocksV4とV5の両方を受け付けます。しかし、SocksV5における、認証の仕組みは、まだサポートしていません。
例) Socks-DeleGate
# delegated -P1080 SERVER=socks
例) 上流Socksサーバ に転送する。
# delegated -P1080 SERVER=socks SOCKS=sockhost
HTTP プロキシ/サーバ
例) 単一HTTPプロキシDeleGate
firewall% delegated -P8080 SERVER=http
このDeleGateを内部ホスト上のクライアントから使う場合、HTTP, HTTPS (Security), FTP, Gopher,
Waisのプロキシに "firewall:8080"を指定します。
例) HTTPプロキシDeleGate(カスケード)
firewall% delegated -P8888 RELIABLE=internal
internal% delegated -P8080 SERVER=http MASTER=firewall:8888
内部ホストからの要求のみ受け付けるgeneralist DeleGateをfirewall
上で走らせ、firewallホスト上のgeneralistを使用する、specialistを内部で、走らせる。generalistは、上流DeleGateとして、任意プロトコルの複数のDeleGateから、共有できます。
例) 元HTTPサーバDeleGate
- host# delegated -P80 SERVER=http \
- MOUNT="/* /path/of/www/*" RELAY=no RELIABLE="*"
".cgi"拡張子をともなう名前のファイルは、CGIスクリプトとみなされます。以下のように、MOUNTで指定したディレクトリ内の任意名のCGIスクリプトを使用できます。:
MOUNT="/xxx/* cgi:/path/of/cgi-bin/*"
例) DeleGateをCGIプログラムとして使う
DeleGateを、HTTPサーバからのCGIプログラムとして使用できます。例)以下のように、HTTPサーバ(A)の"httpd.conf"ファイル中で指定する。
Exec /other/*
/path/of/cgi-delegate
次に、以下のような内容のファイル/path/of/cgi-delegateを書きます:
#!/bin/sh
- delegated -Fcgi
- MOUNT="/-* =" \
MOUNT="/www2/* http://wwwserv2/*" \
MOUNT="/news/* nntp://newsserv/*"
これは、/other/www2/(HTTPサーバ"wwwserv2"の内容)と、/other/news/(NNTPサーバ"newsserv"の内容)を含む、擬似サブツリー"/other/"をサーバ(A)に追加します。
HTTP 伝送ログ書式
HTTPプロトコル用PROTOLOGフォーマットは、PROTOLOG="LogFilename:format"として、LogFilename
の後にポストフィックスした、オプションの指定書式により、変更できます。この場合、デフォルトのファイル名は省略できます。例)PROTOLOG=":%X"の指定は、NCSAライクの拡張コモンログファイル書式を作ります。デフォルトの書式は、PROTOLOG=":%C
%D"です。
%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) |
%Cにおける、クライアント情報部は、ホスト名,Ident,および、ユーザ名が、デフォルトで記録され、AUTH="log:"パラメータで、変更できます。
HTTPCONF parameter == what:conf
-- default: welcome.dgp,welcome.shtml,welcome.html,...
- welcome:listOfWelcomeFiles
-
-- default: welcome.{dgp,shtml,html,cgi},index.{dgp,shtml,html,cgi},-dir.html
インデックスファイルか、"/path/"のように"/"で終わるディレクトリのURLのために使わなければならない、CGIスクリプトのリスト。これは、ファイル名の候補リストです。リストは"-dir.html"で終了することができ、これは、内臓インデックスジェネレータを意味します。リストが空の場合、空データが、インデックスデータの代わりになります。
- search:pathOfSearchScript
- -- default: none
"/path?search"のようなサーチ部をともなうURLに利かせるCGIスクリプトのパス。これは、全てのURLに利かせる全体的な設定です。また、このように、それぞれのMOUNTポイントに対して、ローカルな検索スクリプトを指定できます。
MOUNT="/path2/* /root/of/path2/*
search:srcipt2".
この、ローカルな設定は、全体的なものに優先します。特殊ローカル設定"search:-"で、MOUNTポイントに対する全体的な設定を無視できます。
- methods:listOfAcceptableMethods
- -- default: methods:OPTIONS,GET,HEAD,POST,PUT,...
-- LOGFILE
に書かれたログ(HTTPCONF=methods:"+") を参照して下さい。
許可するHTTP機能を制限/追加する
例)
HTTPCONF=methods:GET,HEAD -- GET と HEADのみ、許可
HTTPCONF=methods:-POST,-PUT -- POST と PUTを不許可
HTTPCONF=methods:+,NEWMETHOD1 -- NEWMETHOD1 を追加許可
- ver:1.0
- HTTP/1.0 クライアント/サーバとして動作
- svver:1.0
- HTTP/1.0 サーバに対して、クライアントとして動作 (HTTP/1.0 で、要求を送信)
- clver:1.0
- クライアントに対して、HTTP/1.0 サーバとして動作
(応答中で、chunked エンコードを使用しない)
- 例)
- HTTPCONF=search:/path/of/searchScript
MOONT="/bin/*
cgi:/path/of/cgi-bin/* search:-"
MOUNT="/* file:/path/of/data/*"
FILETYPE parameter == suffix:gopherType:altText:iconName:contentType
-- default: FILETYPE=".txt:0:TXT:text:text/plain"
FILETYPE=...
ファイル名を、content-typeマッピングに定義
- gopherType:
-
0 - text,
1 - directory,
4 - BinHex,
6 - uuencode,
9 - binary,
g - gif,
I - image,
...
- altText:
- テキストのみディスプレイ内の、アイコンイメージに対して表示するテキストを選択(<IMG ALT="altText" ... >のように、HTMLテキスト中に埋め込まれた、IMGタグ)。
- iconName:
- binary, binhex, compressed, directory, document, ftp, gzip, image,
index, index2, movie, sound, tar, telnet, text, unknown, uu (see http://delegate/-/builtin/icons/) の内1つ。
- contentType:
- text/plain, image/gif, ... (RFC2045参照)
例)
FILETYPE=".txt:0:TXT:text:text/plain"
FILETYPE=".gif:g:GIF:image:image/gif"
CGIENV parameter == CIGENV=name[,name]*
-- default: CGIENV="*"
Http-DeleGate の MountOptions
条件:
- asproxy
- DeleGateが、プロキシサーバとしてコールされた場合(完全なURL書式で要求されたURL)に、真。
- withquery
- 要求されたURLが、 "?query"部を持つ場合、真。
制御:
- moved
- HTTPで、 "302 Moved"応答が返った場合以外、中継しない
- useproxy[=proxyURI]
- "305 Use
Proxy"応答メッセージを生成。proxyURIが省略されるか、"direct"が与えられる場合、応答メッセージは、"Set-Proxy: DIRECT"として、 Set-Proxyフィールドをともなって送信されます。
- 他の場合、URIは、フィールド中に"Set-Proxy: SET; proxyURI=proxyURI"で、セットされます。
- rcode={301|302|305|306|403|404}
- 指定したステータスコードの応答を返す。エラーメッセージをカスタマイズするとき有効です。
- robots={no|ok}
- ロボットによる検索の許可・不許可。NNTPとFTPでは、デフォルトは"no"で、他のプロトコルでは、"ok"です。
- genvhost=host
- サーバに転送される要求メッセージ中の "Host: host"フィールドをセット。
- ftosv=-cc-charCode
- サーバに転送されるHTTPヘッダのキャラクタセットを charCode (jis|sjis|euc|utf8)に変換する。
例)
"useproxy", "method", "dst", "withquery"
オプションは、元々、潜在的に厄介なアクセス(対象サーバのCGIプログラムを呼出すような)を拒否するために取り入れられました。例)POSTメソッドをともなう要求、または、"?"をともなうURLを、拒否する。:
MOUNT="http:* = method=POST,asproxy,useproxy"
MOUNT="http:* = withquery,asproxy,useproxy"
HTTP-DeleGate の AUTH パラメータ
ユーザによるDeleGateの構成
DeleGateを構成する場合、柔軟に、それは、DeleGate管理者だけではなく、ユーザも行えるように、
(WWWリソース(元HTTP-DeleGate上の)提供者)DeleGateは、ユーザが設定した、構成パラメータを、
要求プロセス時毎に読むことをサポートしています。
そのパラメータは、MOUNTされたローカルファイルシステム上の、
"+=parameters"ファイルフォーマットで、
拡張子に".dgp"を持つファイルによって与える必要があります。
それは、-Fcgiと同様に動作し、
新しいプロセスを生成しないでに、効率を上げます。
例)
ニュースサーバNを、http://delegate/news/servN/にMOUNTする
-
(1) 起動時のパラメータによる
MOUNT="/news/servN/* nntp://nntpserverN/*"
-
(2) CGI-DeleGateによる
MOUNT="/news/* cgi:/dirPath/*"
-
[the contents of file:/dirPath/servN/welcome.cgi]
delegated -Fcgi MOUNT="/* nntp://nntpserverN/*"
-
(3) ".dgp" ファイルによる
MOUNT="/news/* file:/dirPath/*"
-
[the contents of file:/dirPath/servN/welcome.dgp]
MOUNT="/* nntp://nntpserverN/*"
(この機能は、FTPのような他のプロトコルに適用するべきです...)
SHTMLファイルでのサーバサイドの実装(SSI)
元HTTP-DeleGateで、接尾辞".shtml"のつくローカルファイルは、
HTMLファイルとは、サーバサイドの実装(SSI)のための特別なタグが含まれるのを除き、
".html"のつくファイルのように扱われ、METAは、クライアントに送信される前に、
HTTP-DeleGateによって、理解され、置換されます。
SSI タグ
- <!--#echo var="varName" -->
-
varNameで指定された値で置換されます。
varName は、以下のような、
"REMOTE_HOST" または、"HTTP_SERVER"
と同様な、任意のCGI互換名です。
- DATE_GMT -- GMT現在時刻
- DATE_LOCAL -- サーバホストのローカルな現在時刻
- LAST_MODIFIED -- .shtmlファイルの最終更新時間
- REFERER -- HTTP_REFERER と同じ
- DOCUMENT_NAME -- SCRIPT_NAME と同じ
- DOCUMENT_URI -- REQUEST_URI と同じ
- * -- name=value ペアの変数すべて
- <!--#include virtual="URL" -->
-
"virtual"属性で指定されたデータに置換されます。
"virtual" は、"proto://server/upath"のような完全なURLまたは、
"/upath" のような部分URLとでき、http://delegate/upathとして、
解釈されます。
"/"で始まらない"upath"のような相対URLは、shtmlファイルの
ベース(カレント)に対する相対として、解釈されます。
- <!--#fsize virtual="URL" -->
- <!--#flastmod virtual="URL" -->
-
それぞれ、指定したデータのサイズまたは、最終更新時間で、置換されます。
- <!--#config timefmt=timeFormat -->
-
"#echo","#flastmod"などによって生成される時間文字列の書式を、
strftime(3)互換の書式で指定します。
(default: timefmt="%a, %d %b %Y %H:%M:%S %z")
META タグ
- <META HTTP-EQUIV=fieldName content="filedBody">
-
HTTP応答メッセージに"fieldName: fieldBody"ヘッダを生成します。
fileBody内の以下のパターンは、前記のものとして、置換されます。
- ${varName} or
<!--#echo var=varName -->
- ${flastmod:URL} or
<!--#flastmod virtual=URL -->
- ${fsize:URL} or
<!--#fsize virtual=URL -->
- ${include:URL} or
<!--#include virtual=URL -->
- 例)
- <META HTTP-EQUIV=Status content="200 OK">
- <META HTTP-EQUIV=Content-Type content="text/html">
- <META HTTP-EQUIV=Pragma content="no-cache">
- <META HTTP-EQUIV=Date content="${DATE_GMT}">
- <META HTTP-EQUIV=Last-Modified content="${flastmod:URL}">
ICP プロキシ/サーバ
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,...
DeleGateをICPサーバ(SERVER=icp)として動作させる場合の、ICP設定
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
- nopasv
- データ接続の PASV コマンドを使用不可とする。
- noxdc
- 制御接続で、データ伝送の XDC モードを使用不可にする。
- rawxdc
- XDC モードにおいて、伝送データをBASE64エンコードしない。
ftpControl に "nopasv:sv" のように ":sv" または ":cl" がつづく場合、
例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに
適用されます。
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のポート番号を指定可能です。
internal% ftp firewall 8021
例) カスケード FTP-プロキシ
firewall# delegated -P21 SERVER=ftp PERMIT="ftp:*:internal"
internal# delegated -P21 SERVER=ftp PROXY=firewall:21
例) フィルタ/マージ/エイリアスをともなう、FTP MOUNT
- firewall# delegated -P21 SERVER=ftp://serv1/ \
- MOUNT="/pub2/* ftp://serv2/pub/*"
このDeleGateは、serv1の全ての内容を中継し、"/pub2/*"は、ftp://serv2/pub/* のそれと置換えられた部分が除外されます。
例) FTP to LPR (Line Printer Daemon Protocol) ゲートウェイ
MOUNT="/* lpr://printer0/qname0/*"
MOUNT="/pr1/*
lpr://printer1/qname1/*"
MOUNT="/pr2/*
lpr://printer2/qname2/*"
LPR/FTP-DeleGateは、FTPクライアントがリモートプリンタにアクセスできるようにします;
ファイルの印刷は、FTPのファイルアップロードによって行われ、
プリンタステータスは、FTPディレクトリリストで見ることができます。
MountOption "readonly"は、ステータス閲覧を禁止します。
例) 元FTP-DeleGate
host# delegated -P21 SERVER=ftp MOUNT="/* /path/of/root/*"
元FTP-DeleGateこのケースでの、ファイルへの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT="/xxx/* /yyy/* rw"のように、MOUNTポイントに対し、
マウントオプションとして、"rw" (read/write)を指定する必要があります。
全コンテンツはの取込動作は、指定ディレクトリ内に行われ、
"RETR directory.tar" コマンドによって、
tarフォーマットの単一ファイルとして返されます。
この機能を有効にするには、REMITTABLE="+,tar"のように、
REMITTABLE リストに、"tar" を追加します。
FTP 伝送ログ書式
FTPプロトコルのPROTOLOG書式は、xferlog(5)と呼ばれる、
"wu-ftp"コンパチブルなものです。xferlogにおける各行は、以下の書式になります。
currentTime transferTime clientHostfileSize
fileNametransferTypespecialActionFlagdirectionaccessModeuserNameserviceNameauthenticationMethodauthenticatedUserIDDeleGateStatus
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)のどれかです。.
例)
- Mon Feb 28 15:32:15 2000 13 proxy.xyz.co.jp
- 182558 /ftp/pub/DeleGate/Manual.htm
a _ o a webmaster@xyz.co.jp ftp 0 * L
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
C:\> delegated -P23 SERVER=exec XFIL=command.com
WORKDIR="/"
// Windows95/98
command.com を使った、簡単なテルネットサーバ。
POP プロキシ
例) プロキシ POP-DeleGate
firewall# delegated -P110 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.
例) POP MOUNT
"pop://user@server"
は、内部的に、"pop://server/user" として表現され、以下のようにMOUNTで制御されます:
MOUNT="//* =" ... サーバがユーザによって指定された場合、書換えしない
MOUNT="*
pop://defaultHost/*" ... デフォルト POP サーバを指定
MOUNT="user1
pop://host1/*" ... "user1"のサーバを "host1"にする
MOUNT="//pop2/*
pop://host2/*" ... 実ホスト名 "host2"を隠す
例) NNTP サーバから POP
クライアントへのゲートウェイ
例) POP サーバから HTTP
クライアントへのゲートウェイ
firewall# delegated -P80 MOUNT="/mail/*
pop://mailHost/*"
この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 プロキシ
SMTP プロキシ/サーバ
- 例) プロキシ SMTP-DeleGate
- // エイリアスとフィルタ
- firewall# delegated -P25 SERVER=smtp://mail-server/
\
- MOUNT="foo@bar smtp://foo2@bar2" \
- MOUNT="* smtp://-"
SMTPCONF parameter == SMTPCONF=what:conf
-- default: SMTPCONF=bgdatasize:64K
- nohelo
-
"HELO" を言わない行儀の悪いクライアントを許可する。
- bgdatasize:N
-
データが N バイトより大きい場合、バックグラウンドでリレーします。
これは、"DATA" コマンドを投げた後に、サーバからの "QUIT" コマンド応答を待たない
クライアントをリレーするための手段です。
注)DeleGate はスプールや、転送機能を持たないので、1つのメールデータのみをバックグラウンドで
リレーできますが、伝送終了前に DeleGate がクラッシュした場合、メールは失われます。
SMTPGATE parameter == SMTPGATE=dirPath
-- default: SMTPGATE='${ETCDIR}/smtpgate'
NNTP プロキシ/サーバ
MOUNTは、NNTP-DeleGateに対して、ニュースグループのフィルタとエイリアス、複数NNTPサーバのマージ応用することもできます。
例)MOUNT="alias-group. nntp://server/group."は、"group.*"へ通過し、また、それらに"alias-group.*"の別名を与えます。簡単なフィルタ指定は、SERVER="nntp://server/group."で、
MOUNT="= nntp://server/group."と同じです。複数のNNTPサーバに対して、複数MOUNTした場合、DeleGateは、複数サーバの複数ニュースグループをマージし、それらが、単一サーバ上に存在するかのようにクライアントにニュースグループを提供します。
例) フィルタ
# delegated -P119 SERVER=nntp://nntpServer/group.
ニュースグループ名が"group.*"のパターンを持つ場合のみ中継する。nntpServerに対するグループリストは
"nntp://nntpServer/group1.,group2.,..."のように指定できます。
例) 複数の NNTP サーバをマージ
- # delegated -P119 SERVER=nntp \
- MOUNT="= nntp://server1/"
MOUNT="= nntp://server2/"
例)複数のNNTPサーバを認証付(AUTHINFOを使用)でマージ
- # delegated -P119 SERVER=nntp \
- MOUNT="= nntp://user1:pass1@server1/"
MOUNT="= nntp://user2:pass2@server2/"
例) 選択したグループをマウント
// グループ group.* をオリジナル名のままでマウント
MOUNT="= nntp://server1/group."
// グループ group.* をエイリアス名 "alias-group.*" でマウント
MOUNT="alias-group. nntp://server1/group."
例) POP サーバから NNTPクライアントへ
// メールスプールをニュースグループ名 "+pop.user.host"としてマウント
# delegated -P119 SERVER=nntp
MOUNT="= pop://user:pass@host/"
例) NNTP サーバから HTTP クライアントへ
# delegated -P80 MOUNT="/news/* nntp://nntpServer/*"
例)元 NNTP-DeleGate
# delegated -P119 SERVER=nntp://-.-/
NNTP-DeleGateのSERVERパラメータ中の対象サーバに"-.-"を指定すると、DeleGateを元NNTPサーバとして使うことを意味し、それの持つスプールに検索/投稿できます。の新たなニュースグループ名
newsGroup を作るには、空ファイルを作ります。
'${ETCDIR}/news/groups/newsGroup'
既存の"/path/of/MH-folder"をnewsGroup
として中継するには、上記のようにファイルを作り、このような内容で埋めます。
0 0 0 0 /path/of/MH-folder
(4つのゼロの後に、MH-folderのパスをつける)
投稿された記事の最初の行が、"From user date"のようなUnix-Fromを持つか、
"Unix-From: user date"ヘッダを持つ場合、記事の記事番号は、"X-Seqno"
(または、"X-Sequence")ヘッダが存在する場合、
固有のものにセットされ、スプールファイルの作成日付は、Unix-formのdateにセットされます。
NNTPのMountOptions
- hide={GroupList}
- クライアントから隠す、ニュースグループ名パターンリスト
例) "hide={alt.*,!alt.comp*}"
- cache=no-article
- ARTICLE キャッシュを停止
- cache=no-list
- LIST キャッシュを停止
- upact:Invoke/Reload/Posted
- LIST(active list)のキャッシュ更新を制御。同じ意味の、NNTPCONF=upact:Invoke/Reload/Posted
は、このMOUNTパラメータの対象サーバのみ、制御が除外されます。
NNTPCONF parameter* == what:conf
-- default: NNTPCONF=upact:600/300/120
- pathhost:Server/PathHost
- 物理Serverホストの論理PathHost 名を定義します。
例)
NNTPCONF="wall.etl.go.jp/delegate.org"
- upact:Invoke/Reload/Posted
- アクティブなリストのキャッシュ更新を制御します。nvoke と Reload
は、キャッシュの有効期限を秒で指定します。DeleGate経由で記事がポストされた後、Posted
に指定した期間内で、クライアントがチェックしたとき(LISTコマンドで)に、キャッシュが更新されます。
- overview.fmt:{FieldList}
- default --
overview.fmt:{Subject,From,Data,Message-ID,References,Bytes,Lines}
DeleGateによって生成される、XOVER応答書式
- xover:Number
- default -- xover:2000
"XOVER range"での最大記事数の制限
- nice:Number
- 指定した場合、nice値をセット
- auth:{srcHostList}
- クライアントがsrcHostListに含まれる場合、NNTPセッションを開始するときに認証(AUTHINFOコマンドを使用)を強制ます。このパラメータは、NNTPサーバが、ユーザのサブセットに対する認証を行うときと、このDeleGateが、NNTPキャッシュを行う場合、セットする必要があります。
- server:host[:port][/grouplist]
- URL nntp://*/... または news:...によるHTTP要求に対する、NNTPサーバをセットする
- nntpcc:Number
- default -- nntpcc:1
"nntpcc:0"指定で、NNTP "connection
cache"を停止します
LDAP プロキシ
Whois プロキシ
例) プロキシ Whois-DeleGate
firewall# delegated -P43 SERVER=whois
internal% whois -h firewall
"whois://whois.nic.ad.jp/help"
X プロキシ
例)単一ホスト上のディスプレイに中継
x-server% xhost firewall
firewall% delegated -P6008 SERVER=X://x-server
internal% xterm -display firewall:8
例)単一サーバホスト上の2つのディスプレイに中継
firewall% delegated -P6002-6003 SERVER=X://x-server:-6002
例)2つのサーバホストに中継
- firewall% delegated -P6011-6012 \
- SERVER=X://x-server1:-:{*:6011} \
SERVER=X://x-server2:-:{*:6012}
Gopher プロキシ
SSL プロキシ
FCL, FSV, CMAP パラメータで、フィルタプログラム
"sslway"を使用し、クライアント側と/かサーバ側の通信をSSLプロトコルでラップできます。このフィルタを使うには、sslwayと、適切なPEMファイル(LIBPATH(通常
DGROOT/lib)内に配置)が必要です。詳細はhttp://www.delegate.org/delegate/ssl/
を参照して下さい。
例) SSLサーバ・非SSLクライアント間を中継
# delegated -P80 SERVER=http FSV=sslway MOUNT="/*
https://server/*"
例) SSLクライアント・非SSLサーバ間を中継
# delegated -P443 SERVER=https FCL=sslway MOUNT="/*
http://server/*"
DNS (Domain Name System) プロキシ/サーバ
DNS-DeleGate サーバは、ホスト名情報をDNS,NIS,ローカルファイルを含めて、
収集し、リレーします。
A, PTR, SOA 及び 単純化された MX のみに制限された、
リソースレコードタイプを提供します。
SOA レコードは、
DNSCONF 設定の情報と共に構成されます。
例) {NIS,FILE,DNS}/DNS ゲートウェイ
- # delegated -P53 SERVER=dns \
- RESOLV=cache,file,nis DNSCONF=domain:my.domain
hostname のための MX レコード は、与えられた場合、
-MX.hostname ( 以下の例のように)または、
hostname のための A レコードが使用されます。
複数の MX レコード間の優先順位は、現実装では表現できません。
例)HostB の MX として、HostA の hosts テーブルを使用する。
10.1.2.3 hostA
10.4.5.6 hostB, -MX.hostA
DNSCONF parameter* == what:value
DNS-DeleGateサーバの構成を指定します
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 プロキシ
例) プロキシ CU-SeeMe-DeleGate
firewall% delegated -P7648 SERVER=cuseeme://Reflector/
INTERNAL# delegated -P7648 SERVER=cuseeme://firewall/
internal%
{firewall または INTERNAL を
リフレクタのproxy-reflectorとして使用}
予約名
特殊名"-"と"-.-"を、URLの"host:port"部に使用したとき、DeleGateのホストとポートを意味します。また、URL
"http://-.-/-/"は、DeleGateの制御ページの入り口として、予約されています。
カスタマイズ
アイコンとメッセージを含む、DeleGateのビルトインデータソースは、ソースコードディレクトリ"src/builtin/*"にあります。それらは、DeleGateの実行ファイルにまとめられ、リソースとして、URL
"http://delegate/-/builtin/*"でDeleGate実行時にアクセスできます。これらデータは、それらのMOUNTを定義することで、DeleGateをコンパイルせずに置換えられます。例)アクセス禁止で返るエラーメッセージは、"http://delegate/-/builtin/mssgs/403-forbidden.dhtml"にあり、それは、このように、MOUNTパラメータで、置換えられます:
MOUNT="/-/builtin/mssgs/403-forbidden.dhtml
/tmp/forbidden.dhtml"
この例で、MOUNTは、forbiddenメッセージと、代用データ("/tmp"内のローカルファイル)のみ置換えます。しかし、大抵の場合、ビルトインデータグループは、ワイルドカード(*)記号で、置換えられ、また、代用データは、HTTPやFTP経由でアクセス可能なリモートホスト上に配置できます。例)全ての、"src/builtin/"のコピーを"http://yourwww/delegate/builtin/"に入れ、このようにMOUNTする:
MOUNT="/-/builtin/*
http://yourwww/delegate/builtin/*"
リモートデータの読込みは、MOUNTされたビルトインデータが、キャッシュされ、一般のデータとして再利用されるキャッシュが有効な限り、オーバヘッドの影響を受けません。
アタッカー防御
SIGSEGV や
SIGBUSのような致命的信号が発生した後、DeleGateは、クライアントホストへのサービスを直ちに停止します。の発生は、致命的エラー発生の原因は、エラー前に、侵入の試みが失敗したサインととらえることもできます。同時に、事象を通知するため、DeleGateは、ADMINパラメータの名前の管理者にレポートメールを送信します。
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、存在するアドレス上にターゲットバッファが存在していることを期待しており、スタックアドレスをランダマイズすることは、アタック成功の糸口を減少するのに効果的です。そして、アタックの失敗は、致命的エラーを発生させ、DeleGateにより、捕獲されます。
疑わしいクライアントホストは、関連ファイル(ADMDIR/shutout/
内)を削除するか、TIMEOUT=shutout(デフォルト15分)でファイルの有効期限が切れるまで、シャットアウトされます。安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御設定はもちろんのこと、このような攻撃を防ぐよう意識を高く持ってください。
- TIMEOUT=shutout:N [15m] ... アタック再試行間隔の最短
- MAXIMA=randstack:N [32] ... スタックアドレスのランダム化
- MAXIMA=randenv:N [1024] ... 環境変数のランダム化
- MAXIMA=randfd:N [32] ... クライアントソケットディスクリプタのランダム化
- CHROOT=dirPath ... アクセス可能なファイル空間を制限
- OWNER=user [nobody] ... DeleGateプロセスの能力を制限
- ADMIN=E-mail-address ... 正しく、SMTP配送できること
- -Tx [off] ... execve() システムコールを停止
起動時、元環境変数と、スタック領域上のコマンドライン引数は、ヒープ領域に移動・消去され、アタッカーの侵入コードに利用されないようになっています。同時に、ランダムな長さの値(MAXIMA=randenvが最大)を持つRANDENV
ダミー環境変数が、環境変数のランダムなアドレスに挿入され、フィルタプログラムや、CGIプログラムのような子プロセスに継承されます。
プラットフォームに関する詳細
- Unix
- Inetdからの呼出し
- "nowait" と
"wait"ステータスをinetd.confで指定可能です。"nowait"ステータスの場合、DeleGateは、1つの要求(セッション)を処理し、終了し、無効にします。"wait"ステータスの場合、DeleGateは、複数の要求を処理します;要求数の最大は、"MAXIMA=service:N"のNによって制限できます。
- Windows
- サービスとして開始
- WindowsNT/2000上で、DeleGateは、デフォルトで、自動的にサービスとして開始(バックグラウンドプロセスとして)します(コマンドプロンプトで、-vや、-fオプションなしで呼出した場合)。-Pxxxx
オプションで、サービスとして動作しているDeleGateを停止かつ/または除去するには、コマンドプロンプトで、"delegated
-Pxxxx"を入力し、DeleGateからの簡単な質問に答えてください。Windows95/98上では、DeleGateは、フォアグラウンドプロセスとしてのみ動作します。
- CYGWIN
- 呼出した管理者所有で見えます。
- OS/2
- インストールには、オプションのループバックデバイス(localhost)が必要です。
紳士的再起動
子プロセスの外向けセッションを中止せず、DeleGateのプロセスIDを変更せず、入力ポートなどのリソースを保持したまま、DeleGateプロセスにSIGHUPシグナルを送信し、優しくDeleGateを再起動します。プラットフォームに属さない方法は、このように、-Fkill 機能を使用することで行えます。
delegated -Fkill-hup -Pport
また、SIGHUPでの再起動は、
AUTH=admin
パラメータを使い、"http://delegate/-/admin/"にて、リモートHTTPクライアントで、実行できます。
再起動は、DeleGateの設定変更した後に行います。再起動時にパラメータを再読込するためには、
+=parameters
表記(パラメータ置換)を与える必要があります。他のオプション(パラメータ)は、コマンドライン引数で与え、これは、リスタートしたDeleGateプロセスに継承されます。
他の再起動目的は、ごみや、リーク(ヒープメモリや、ファイルディスクリプタ)を、お掃除します。この目的の場合、DeleGateは
TIMEOUT=restart
または、CRONパラメータの
-restart 動作で、それぞれ予定した時間に、周期的に再起動できます。
機能オプション
-Ffunction
オプションが与えられる場合、DeleGateは、指定した機能を実行するために動作し、通常は、特定プロトコルのクライアント側の動作をします。長い
"delegated -F"入力をファイル名
"function"をDeleGate実行ファイルに与えることで省略でき、function としてコールできます。
function 名のマッチは、case-insensitive です。
例) レゾルバとしてDeleGate を使う
% delegated -Fresolvy www.delegate.org
% ln -s delegated Resolvy
% Resolvy www.delegate.org
以下は主要機能の一覧です。
- -Fhelp
- 使用可能な機能を表示
- -Fkill[-hup] -Pport
- SIGTERM(SIGHUP)を送り、DeleGateを終了(再起動)
- -Fcgi [DeleGateOptions]
- 任意のHTTPサーバCGIプログラムとして動作
- -Fconnect host port[/udp] [XCOM=clientCommand]
- テルネットクライアントのように、指定したhost:portに接続し、それから/へ標準入出力を中継する
- -Fresolvy {[-MX.]hostname |
IPaddress[-num]}
- nslookup(8)のように、与えられたホスト名や、IPアドレスを解決する。(10.10.10.1-128のようにレンジ指定可)
- -Ffindu [-atime N] [-ls] [-du] [-rm] ... [dir]*
- find(1)のように、ファイルを探し、指定した動作を行う。使用法は "delegated -Ffindu"のようになります。
例)
"du(1)"といっしょに、"find . -ls"を実行
delegated -Ffindu -ls -du
- -Fdget [-h] [-o] [PROXY=host:port] URL
- URL で指定したリソースをダウンロードし、"-o"オプションで、標準出力に出力
"-h" オプションをともなう場合、HTTP応答メッセージのヘッダ部も出力されます。
- -Ficp [-h server] URL
- ICPクライアントとして動作。使用法は、"delegated -Ficp"のようになります。
- -Fsched {"crontabSpec" |
crontabFile | schedSpec}*
- cron(8)のように、指定した動作を指定したタイミングで起こす。
例) 15分ごとに動作
delegated -Fsched "0,15,30,45 * * * *
/bin/date"
schedSpec は、スケジュール設定の正規化表記です。
schedSpec ==
Wday:year:month:mday:Hour:Min:Sec:action
例)15秒ごとに動作
delegated -Fsched "*:*:*:*:*:*:0,15,30,45:/bin/date"
- -Fmd5 [infile]
- 入力データの MD5 ダイジェストを出力
ファイル
参考文献
du(1),
ps(1),
tee(1),
cat(1),
find(1),
chroot(2),
execve(2),
getpeername(2),
getsockname(2),
pstat(2),
ptrace(2),
setgid(2),
setuid(2),
umask(2),
strftime(3),
system(3),
YP(4),
crontab(5),
hosts(5),
inetd.conf(5),
cron(8),
inetd(8),
nslookup(8),
DNS(RFC1034),
FTP(RFC959),
Gopher(RFC1436),
HTML(RFC1866),
HTTP(RFC2068),
ICP(RFC2186),
Ident(RFC1413),
IMAP(RFC2060),
LDAP(RFC1777),
LPR(RFC1179),
MIME(RFC2045),
NNTP(RFC977),
POP(RFC1460),
Socks(RFC1928),
SMTP(RFC821),
Telnet(RFC854),
URI(RFC2396),
URL(RFC1738),
Wais(RFC1625),
X(RFC1013)
著者
@ @
( - )
_< >_
Yutaka Sato <ysato@etl.go.jp>
Electrotechnical Laboratory (AIST,MITI), Tsukuba, Ibaraki 305-8568, Japan
著者覚書:
これは、財産でもある(DeleGateのリファレンスマニュアル)ドキュメントの執筆における最初の成果で、DeleGate/6.1説明書のアップデートに反映させていきます。完成には程遠いものですが、少なくとも、以前の、“Manual.txt”よりは、とても良くできています。“Manual.txt”は、メモの積み重ねであり、開発を開始した6年前から内容の見直しがされておらず、全体的な一貫性が欠けてしまっています。
配布
リリース 6.1.21 最終更新: November 28, 2000
--------- --------- --------- --------- --------- --------- --------- ---------