DeleGate version 8.1 リファレンスマニュアル の日本語訳
翻訳者: 鈴木 雄(すずき ひろし)setter AT i-red DOT info
翻訳開始日:2001/8/23(v7.5) (1997/11-v4.3)
最終更新日:2002/11/27(v8.1.0)
翻訳者コメント:
"翻訳のドラフト"です。
翻訳の正確さなどは、一切保証しません(できません(^^;)。
必ず、原文(http://www.delegate.org/)を併用して下さい。
誤訳や欠落などに関するご指摘は謹んでお受けいたしますm(__)m
----------------------------- 以下本文 ------------------------------
DeleGate version 8.1 リファレンスマニュアル
Copyright (c) 1994-2000 Yutaka Sato
<ysato AT etl DOT go DOT jp>
<y DOT sato AT delegate DOT org>
Copyright (c) 1994-2000 Electrotechnical Laboratry (ETL), AIST, MITI
Copyright (c) 2001-2002 National Institute of Advanced Industrial Science and Technology (AIST)
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 Yutaka Sato
<ysato AT etl DOT go DOT jp>
<y DOT sato AT delegate DOT org>
著作権 (c) 1994-2000 Electrotechnical Laboratry (ETL), AIST, MITI
著作権 (c) 2001-2002 National Institute of Advanced Industrial Science and Technology (AIST)
本マテリアルの、
・評価のための使用
・自らが使用するための複製
・誰もがアクセス可能なオンラインメディアを経由した複製の無料配布
許可は、
上記の著作権通知、および、この認可通知を、全ての複製中で、
閲覧可能なことを条件として、認めます。
AISTは、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。
それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。
このドキュメントは、DeleGate/8.Xをベースにして書かれています。
このドキュメント(原文の英語マニュアルに関してのみ)に関するコメントは、
mailto:feedback@delegate.org
まで、お願いします。
なお、それらの内容は、
http://www.delegate.org/feedback/
で、共有・公開します。
DeleGate ホームページ
http://www.delegate.org/
で、最新の状態をご覧ください。
さらに、初心者の方々は、
http://www.delegate.org/delegate/tutorial/
にて、ショートチュートリアルをお読みになることを推奨します。
順列目次
目次
--------- --------- --------- --------- --------- --------- --------- ---------
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,... により、
複数のポートや、(有限の)複数ネットワークインターフェースで、受けることができます。
注)SRCIF で、出力側接続のソースアドレスの選択を見てください。
入り口ポートは、デフォルトで、SERVER=protocol パラメータにより、
UDP ベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay)
が指定された場合を除き、TCPポートが作成されます。
また、-Pport/udp のように "/udp" ポストフィックスを伴う場合、
SERVER で指定したプロトコルとは無関係なものとなります。
このオプションは、以下のケースを除き、指定する必要があります。
DeleGateが、inetd(8) から、呼び出される場合や、
-Ffunction オプションを利用する大抵の場合、
または、SERVER="tunnel1" により、トンネルサーバ
として動作している場合には、無視されます。
-f option -- フォアグラウンドで実行
指定した場合、DeleGateは、現在のttyと接続を保ちながら、
フォアグラウンドで動作します。tty からの SIGINT により、
終了し、現在のディレクトリ
(ワークディレクトリ から移動せず)にとどまります。
-Fkill を実行するのと同じ効果があります。
-v option -- ログレベルを制御
== -v[vdtsa]
指定した場合、DeleGateは、-f のように
、フォアグラウンド動作で、制御 tty 上にログを表示し、
LOGFILEおよび PROTOLOGには、書きこみません。
-v より詳細なログは、
-vvオプションを使用することで得られます。
同様に、ログファイルに書きこむログの詳細さは、
-vd/-vt/-vs オプションで、制御できます。
-vd は、デバッグ情報を含む詳細なログを作成し、
-vt は、簡潔となり、
-vs は、ログを停止し、静かにします。このオプションは、LOGFILE="" と同様です。
他のオプション -va は、緊急停止(emergency shutout)
を引き起こす、ABORT が発生した場合のみに出力される、
最も詳細なログレベル(-vd)においても隠されているログを生成します。
-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="delegate" あり)して対話します。
このときのクライアントは、この 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 ライクサーバの構成の表記法
|
*
| HOSTLIST
| name:hostlist
| 名前付 HostList を定義する
|
*
| CMAP
| map-spec
| 現在の接続に関するマッピングテーブル
|
| LIBPATH
| dir:dir:...
| ライブラリファイルのサーチパス
|
| DATAPATH
| dir:dir:...
| データファイルのサーチパス
|
| DGPATH
| dir:dir:...
| 入替えリソースのサーチパス
|
| DGOPTS
| option;option;...
| コマンドラインオプションリスト
|
| PORT
| portList
| -P オプションのような入り口ポートの予約
|
ルーティング
これらパラメータは、対象サーバに向けての間接ルート上にある上流プロキシや、
Socksサーバの利用を制御します。
対象サーバが、DeleGate ホストから IP レベルで直接的に達することができる場合、
このパラメータは、必要ではありません。
他の場合、これらパラメータ (ICP と MOUNT)
は、アプリケーションプロトコルをベースとしたルーティングとともに、いくつかの機能をします。
--
| ----------
| ------------------
| ----------------------------------
|
*
| 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からの戻りポート
|
アクセス制御
これらパラメータは、誰(クライアント)が、何(サーバ)に、
どのよう(プロトコル)にアクセスできるかを、制御します。
デフォルトのアクセス制御における基本ポリシーは、
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 |
認証サーバ |
* |
MYAUTH |
user:pass: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: SERVER=delegate
SERVER=protocol で、クライアントとの通信で使用するプロトコル
(デフォルトでサーバとの通信プロトコル)を指定します。
例) 拘束を受けない、Telnet-DeleGate SERVER パラメータ
SERVER="delegate" が与えられた場合、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 (構成をファイルから読みこむ)
HOSTLIST parameter* == HOSTLIST=listName:HostList
listName で名前を付けた HostList を定義する。
名前付 HostList は、他の HostLists 内で参照できます。
複数の HOSTLIST パラメータが、同じ listName で大義された場合、
最後のひとつが参照されます。
HostList の前に "+," がつく場合、
HOSTLIST="listName:+,newHostList" と同様で、
newHostList は、定義済みリストに追加されます。
定義済み名前付 HostList:
例)
// .localnet を再定義する
HOSTLIST=".localnet:localhost,./32,192.168.*"
// 定義済み、.localnet から localhost を除外する
HOSTLIST=".localnet:+,!localhost"
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の実行可能ファイルがあるディレクトリ
DATAPATH parameter == DATAPATH=dirPath[:dirPath]*
-- default: DATAPATH='.:${DGROOT}:${STARTDIR}
クライアントに提供するデータファイルを含むディレクトリリスト。
このパラメータは、DeleGate が、
MOUNT="/path/* file:dir/*" のように相対パスで指定した
ローカルファイルから応答データを生成するために使用されます。
DGPATH parameter == DGPATH=dirPath[:dirPath]*
-- default: DGPATH='+:.:${HOME}/delegate'
パラメータファイルのサーチパス。
特殊なディレクトリ名"+"は、"caller"リソース(パラメータファイルからパラメータファイルを参照する)の場所を表します。
DGOPTS parameter == DGOPTS=opt[,opt]*
-- default: none
コマンドラインオプションのリスト。これは、-P や、-v のように
name=value フォーマットではないオプションを環境変数で与える場合、有効です
SOCKOPT parameter == SOCKOPT=[no]name[:value]
-- default: reuse
ソケットオプションをセット
- [reuse] | noreuse
- ポート番号の簡易再使用を有効にする。(SO_REUSEADDR)
- share | [noshare]
- ポートの同時使用を有効にする。(SO_REUSEPORT)
- [shut] | noshut
- ソケットを閉じる前に shutdown(socket,SD_SEND) を行なう
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
protoList にあるプロトコルで、
srcHostList にあるクライアントから、
dstHostList にあるサーバへの要求が、
connMap に指定された条件とマッチする要求の場合、
gatewayURL で指定されたプロキシサーバへ向けて、要求を転送します。
connMap が省略された場合、要求は無条件に gatewayURL へ転送されます。
FORWARD は、ROUTE 表記により一般化され、以下の2つの表記は等価となります。
ROUTE=gwproto://gwhost:gwport/-_-dstHostList:srcHostList
FORWARD=gwproto://gwhost:gwport/-_-*:dstHostList:srcProtoList
特別な用途で、gwproto で、FORWARD は、以下のように一般化された表記、
MASTER, PROXY、および SOCKS と同等の動作をします。
- delegate
-
MASTER=gwhost:gwport:dstHostList
FORWARD=delegate://gwhost:gwport/-_-*:dstHostList:*
- http, ftp, telnet
-
PROXY=gwhost:gwport:dstHostList
FORWARD=gwproto://gwhost:gwport/-_-*:dstHostList:*
- socks
-
SOCKS=gwhost:gwport[/socksOpt]:dstHostList:srcHostList
FORWARD=socks://gwhost:gwport[/socksOpt]-_-*:dstHostList:srcHostList
対象サーバに対し複数のルートが利用可能な場合、
FORWARD により指定されたルートは、CONNECT で、
"proxy" または、"master" により指定された優先順位で試行されます。
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][/socksOpt][:dstHostList[:srcHostList]]]
socksOpt == [ -4 | -r ]*
-- default: none
host上の使用するSocksサーバを指定します。サーバは、SocksV5プロトコルを理解することが要求されます。
サーバがV4しかサポートできない場合、"SOCKS=host:port/-4" のように、"-4" オプションを指定します。
"-r" オプションは DeleGate または、Socks サーバの名前解決
(対象ホストの IP アドレス から、そのホスト名へ)を制御します。
SocksV4 サーバの場合、名前解決はデフォルトで DeleGate によって行なわれます。
"-r" オプションは、delegated から サーバへ 解決をします
(これは、サーバが拡張 SocksV4 プロトコルをサポートしている場合、適用可能です)。
SocksV5 サーバの場合、名前解決はデフォルトで delegated から サーバとなり、
"-r" オプションは、解決を DeleGate によりローカルで行なうようにします。
デフォルトでは、Socks経由で接続を確立するのは、全てを試行した後になりますが、
CONNECT パラメータで、順序を制御できます。
dstHostList が省略された場合、初期値は、
"!.localnet" です。
この初期値は、名前付 HostList ".socksdst"
(HOSTLIST=".socksdst:!.localnet" として、定義済み)
を再定義する事で、変更が可能です。
例)
CONNECT=s,d
SOCKS="sockshost:1080:!.localnet,!*.my.domain"
SSLTUNNEL parameter == SSLTUNNEL=host:port
-- default: none
標準 SSLトンネル機構の特徴 (HTTP での CONNECT メソッド)を持つ
host:port で動作している、HTTP プロキシを、
任意プロトコルの目的サーバーに対するサーキットレベルプロキシとして使用します。
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,v,s,d:*:*:*"
-Pport と CONNECT=udp の組合わせは、TCPクライアントからUDPサーバへ中継します。
また、-Pport/udp と udp ではない CONNECTの組合わせは、
UDPクライアントからTCPサーバへ中継します。
SRCIF parameter* == SRCIF=host[:[port][:connMap]]
connMap == ProtoList:dstHostList:srcHostList
-- default: SRCIF="*:*:*:*:*"
このパラメータは、マルチホームホストまたは、
パケットフィルタされたファイアーウォールに隠されたホスト上で動作する
DeleGate において、有用です。
このパラメータで、それぞれのサーバへ接続する際のソースアドレス(ネットワークインターフェースの)
を指定します。
これは、DeleGate ホストが複数のネットワークインターフェースを持つ場合に有効です。
それは、SOCKS-DeleDate または、FTP-DeleGate により受容される
クライアント接続で使用するポートの指定にも利用可能です。
ほとんどの場合、特殊パターン "*" は、host または、portとして、
IP アドレスまたは、ポート番号のワイルドカードを指定します。
いくつかの場合、特殊パターン "*" は、
FTP データ接続 (PORT または、PASVによる) 用ポート、または、
SOCKS (BIND および、UDP-ASSOCIATE)用ポート のように、
指定されたプロトコルによって要望されたアドレスおよび、番号として使用します。
ワイルドカードを IP アドレスと、ポート番号で明示的に指定する場合、
それぞれ、host に、"0.0.0.0" および、port に、"0" を使用します。
例)
SRCIF="*:0:ftp-data"
// FTP データ接続にランダムなポート番号を使用する
SRCIF="*:8020-8120:ftp-data"
// 指定した範囲のポート番号を使用する
SRCIF="150.29.202.120:*:tcpbind"
// SOCKS による受理で、指定アドレスを使用します。
SRCIF="150.29.202.120:*:udpbind"
// SOCKS 上の UDP リレーで、指定アドレスを使用します。
要求に応じて割り当てられ、ピアに通知された "ftp-data" 接続用のポート
( PORT により クライアントからサーバ、PASV によりサーバからクライアントに向けられた)
は、"ftp-data-port" または、"ftp-data-pasv" により それぞれ分離して制御できます。
PORT のためにサーバからクライアント、または、PASV のためのクライアントからサーバへ
確立されるデータ接続用のソースポートは、"ftp-data-src" によって制御できます。
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 hostname\n
i login:
o username\n
i Password:
o password\n
i %
o delegated SERVER=tunnel1 \n
i READY\r
i \n
=
上記に見られる例のような場合、SHIO-スクリプト ファイルの最初の行は、
リモートサーバとの接続を確立するために、"o command\n" のような
シェルコマンドであることが期待されます。
接続を確立するための他の方法として、"c host:port" を先頭行に書きます。
この場合、シェルや、シェルコマンドは呼び出されません。
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" を伴なう 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 | vhost | 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"をともなう、詳細な書式で可能なプロキシモードは、
サーバプロトコル,サーバホスト,クライアントホストの組み合わせによって分類できます。
RELAY="no" は、リレーを行わない、元 HTTP サーバとして動作することを意味します。
元 HTTP サーバは、プロキシ用のフォーマット(要求中のURLが、絶対フォーマットであるが、
フルフォーマットや、"/-_-" フォーマット)ではない、通常フォーマットの要求を受け付ける、通常のサーバ。
RELAY="vhost" は、任意の仮想ホストにリレーする、元 HTTP サーバとして使用できます。
このオプションは、明示された MOUNT を伴わない、要求ヘッダ中の "Host:" フィールドで指し示された
任意の対象サーバに、 HTTP 要求を転送可能にします。
この自動転送は、要求された URL が MOUNT されていない場合のみ実行されますが、
ほとんどの DeleGate は ルート URL ("/*") 用の MOUNT パラメータもつ元サーバとして動作しているため、
それほど、ありそうにありません。
他の 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 に "*" を指定した場合(例えば、 AUTH="annonftp:*:*")、
認証時に、すべてのパスワードを受付けます。
FTP-DeleGate の場合、匿名ユーザには、E-mail アドレスがパスワード(PASS コマンドで)として与えられなければならず、
また、passWord とマッチするためにも、パスワードは使用されます。
現実装では、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, SMTP, Socks および、HTTP に、適用可能
対象プロトコル、サーバホスト、クライアントホストの組合わせで、
認証を行う(権限を与える)サーバを指定します。
authServList は、認証サーバ名、または、認証サーバのホスト名リストです。
現在、リモート確認/認証サーバ のプロトコルは、FTP プロトコルの USER/PASS コマンドです。
このように、DeleGate の確認/認証 サーバには、任意の実在 FTP サーバを使用できます。
他の方法として、DeleGate 自らが持つ 確認/認証 のためのリストは、
-Fauth 機能により使用できます。
認証されたユーザに権限が不要な場合のみ、authServList として、以下の特別な名前が有効です。
"&" -- クライアントホスト (クライアントホスト上のユーザ名が必要)
"*" -- "user@authHost"のように、任意クライアントで指定された、任意のauthHost
例)
// ローカルドメイン以外のクライアントは認証が必要
SERVER=telnet AUTHORIZER="&:::!*.local.domain"
// ユーザがlocalhost で認証された場合、全てのクライアントを許可
SERVER=telnet AUTHORIZER="localhost" RELIABLE="*"
// "-Fauth" によりメンテナンスされる、"-socksusers" における、
DeleGate 自身のリストを使用する。
SERVER=socks AUTHORIZER=-socks.users
MYAUTH parameter* == MYAUTH=username:password[:connMap]
-- default: none
-- 制限: Socks, VSAP, SMTP, および HTTP のみに適用可能
上流 サーバ/プロキシに送る認証情報を指定します。
username または password に含まれる特殊文字は、"%XX" で回避する必要があります。
ここでの、XX は、文字コードの16進表記です(ascii(7)を見てください)。
特殊文字を回避するには:
TAB ("%09"), SPACE ("%20"), '"' ("%22"), '%' ("%25"), ':' ("%3A"),
'{' ("%7B"), and '}' ("%7D").
例)
MYAUTH=userS:passS:socks
MYAUTH=userV:passV:vsap
MYAUTH=userM:passM:smtp:smtpserverM
MYAUTH=userH:passH:http:httpserverH
MYAUTH=userP:passP:http-proxy:httpproxyP
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]
|
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:10,...
what(何)に対するタイムアウト期間(デフォルトでは、秒)を指定します。
タイムアウト値 "0"は、"タイムアウトしない"(無制限)を意味します。
期間の単位は、デフォルトで "秒" ですが、1d(日)、1h(時)、1m(分)のように変更できます。
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*"
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と接続した場合、真。
注記:
このオプションは、 任意のクライアント側プロトコルに適用可能で、
HTTP-DeleGate だけではなく、FTP, POP, NNTP, などのための DeleGate でも、
クライアント側のインターフェース(他と区別できる単一のIPアドレスを持つ場合)を基に、
対象サーバを切り替える事が出来ます。
DeleGateが、元サーバとして動作し、要求メッセージ中の仮想ホスト名が、
"Host: host"として見えている場合、仮想ホスト名は、実ホスト名より前に検査されます。
複数の仮想名が、同じIPアドレスに関連付けされている場合、
"host=-hostname"のように"-"を仮想ホスト名にプリフィックスする事で、仮想名を区別します。
- dst={HostList} -- サーバに対して
-
対象ホストが HostList 中にに含まれる場合、真。
このオプションは、MOUNT の右側に "=" が使用されている場合に有効です。
- direction=Direction -- 要求または、応答
-
MOUNT パラメータ が、以下のうち何れかの 指定された Direction(方向)に適用されている場合、真:
- fo -- 順方向のみ適用 (要求の書換え)
- bo -- 逆方向のみ適用 (応答の書換え)
- bif -- 順方向に適用している場合、逆方向に適用
- -f,conditionList -- 要求書換え時にのみ条件を適用する
-
- -b,conditionList -- 応答書換え時にのみ条件を適用する
-
- -f.condition -- 要求書換え時にのみ単一の条件を適用する
-
- -b.condition -- 応答書換え時にのみ単一の条件を適用する
-
- pri=signedFloatNumber -- この MOUNT パラメータの優先順位
- 大きい優先順位値を持つ MOUNT パラメータが、他の優先順位の低いものより
優先して試されます。 デフォルト優先順位値は、ゼロ です。
- nocase -- URL パス比較において、大文字小文字を無視します。
-
これら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ポイントに対する動作を制御します。
- public -- パブリックアクセスを許可
- この MOUNT ポイントにいかなるアクセス制御(PERMIT などによる)も利かせない。
- rident[=no] -- RIDENT 情報をサーバに転送します。
- RIDENT=server パラメータにかかわらず、RIDENT 情報をマウントされたサーバに転送(転送停止)します。
- 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ポイントに対して使用する上流プロキシサーバ。
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=1h
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"から"1f"の範囲の16進の値になります。
これは、全てのサーバを含む、1つの巨大なディレクトリを32の小さなディレクトリ
(分散した物理ディスク)に分割します。
例)
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 == iso-2022-jp | euc-jp | shift_jis | 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 | -e
- -h -- ヘッダ部のみ出力
-n -- 出力ライン数
-t -- 出力ラインに対するタイムスタンプ
-v -- 不可視キャラクタを表示
-l -- (-tee を伴う) 出力を stderrに代わり、LOGFILEに出力(デフォルト)
-l -- (-tee を伴う) stderrに出力
- 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()
を使用する。(大抵、ホストのシステム標準レゾルバをコール)
|
>/P>
RESOLV が指定されない場合で、DeleGateホストの IP アドレスが、"dns"によって解決可能な場合、
"sys" は、使用禁止となります。
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が、IPaddress-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 )
-
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
のいずれかを表現し、マスクする。
- . ... さらに狭いデフォルトネットマスク
- "@" と同様 ですが、クラスA IP アドレスに適用する際、"/24" を表します。
- ユーザリスト ( {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/." を表す。
これは、HOSTLIST=.localnet:HostList のように、
HOSTLIST で再定義できます。
- ".C" または "-C"
- クライアントホストで、クライアントからのアクセスをクライアント
(ネットワーク)のみに制限する場合有効です。
- "?"
- 名前や、アドレスがレゾルバ(RESOLVの指定)
によって解決できない"unknown hosts"(不明なホスト)にマッチします。
- 名前解決停止 ( -host )
-
ホスト名(または、IPアドレス)が "-hostname" ("-192.168.1.1")
のように"-"がプリフィックスされる場合、ホスト名(IPアドレス)に対して、
名前解決(逆引き)を試行しません。これにより、名前解決不能なホスト名
(IPアドレス)に対する名前解決の試行における無だな時間を省くことができます。
- 時間条件 ( -T.period )
-
ホスト名の頭に、"-T."をともなう、擬似ホスト名パターンは、
1日のうちの時限を指定するために使用します。
-
"-T.period" は、現在時刻が、指定したperiod 中にある場合マッチし、
ここでのperiodは、"hour1-hour2”で表現します。
例)
PERMIT="*:-H.9-16:hostList1"
PERMIT="*:-T.17-8:hostList2"
// hostList1 は、終業時間内に許可
// hostList2 は、終業時間外に許可
period の完全な書式はこのようになります:
[wW]HH[MM][-HH[MM]].
週内の時間制限は、"wW" で表現され、ここでの W は、
"0"(日曜日)から、"6"(土曜日)の範囲です。
利便性のため、日曜日は、"7" でも表現できます。
例)
-T.w5-0 // 金曜日から日曜日
-T.w5-7 // 金曜日から日曜日
-T.w51730-10830 // 金曜日の午後5:30から、月曜日の午前8:30まで
- 合成演算子 ( &, |, ! )
- 上記でも説明しましたが、カンマ(,)の意味は、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 == "Body-Filter" | "CGI" | "Header-Filter" | "Message-Filter" | MIMEhdr | X-hdr
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 が "Body-Filter" または、"CGI" または、"Header-Filter" または、
"Message-Filter" の場合、例外的に、
それらは、動作(または、フィルタ)を指定し、入力データに利かせます。
"Body-Filter" または、"CGI" フィルタの場合、入力メッセージのボディ部は、
フィルタプログラムの標準入力にパスされ、標準出力から出力されます。
また、出力データは、元の入力メッセージの変わりに、対象(クライアントや、サーバ)に転送されます。
転送メッセージ中の "Content-Length" は、ボディ部のサイズを示す値に調整され、転送されます。
"Header-Filter" フィルタの場合、メッセージのヘッダ部は、フィルタに授受されます。
HTTPメッセージ(Request-Line または、Status-Line)中のstart-lineは、
"Request-Line:" または、"Status-Line:" をプリフィックスされたヘッダフィールドとして、
渡されます。
"Message-Filter" のフィルタには、メッセージ全体(ヘッダ・ボディ含めて)が渡され、そして、フィルタから返されます。
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
Body-Filter: sed's/string1/string2/'
--
Content-Type: image/gif
Output/Content-Type: image/jpeg
Body-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 サーバ
HTTP プロキシ/サーバ
例) 単一HTTPプロキシDeleGate
firewall% delegated -P8080 SERVER=http
このDeleGateを内部ホスト上のクライアントから使う場合、
HTTP, HTTPS (Security), FTP, Gopher, Wais のプロキシに "firewall:8080"を指定します。
例) HTTPプロキシDeleGate(カスケード)
firewall% delegated -P8888 SERVER=delegate 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)
|
%{field} | -- 要求メッセージ中の任意のフィールド
|
%Cにおける、クライアント情報部は、ホスト名,Ident,および、ユーザ名が、
デフォルトで記録され、AUTH="log:"パラメータで、変更できます
HTTPCONF parameter == what:conf
- welcome:listOfWelcomeFiles
-
-- default: welcome.dgp,shtml,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 を追加許可
HTTPCONF=methods:* -- 全て許可
- rvers:listOfAcceptableResponseVersions
-
-- default: rvers:HTTP
HTTP サーバの応答メッセージ中にバージョンを追加する。
例)
HTTPCONF=rvers:+,ICY
HTTPCONF=rvers:* -- 全バージョンの応答を許可
- kill-[qr]head: listOfHeaders
- サーバ・クライアントへ送られる要求・応答メッセージ を転送する前に、
listOfHeaders に含まれるヘッダフィールドを削除します。
"kill-qhead" は、サーバへ向けた要求メッセージにのみ適用され、
"kill-rhead" は、クライアントへの応答メッセージにのみ適用されます。
例)
HTTPCONF=kill-qhead:Referer
HTTPCONF=kill-qhead:If-*,Accept-*
HTTPCONF=kill-rhead:Set-Cookie
- add-[qr]head:name:body
- 転送する要求/応答メッセージに、ヘッダ name:body を追加する。
クライアントの識別情報は、 "%format" 表記により、body 文字列に挿入できます。
例)
HTTPCONF="add-qhead:X-Forward-For:%a"
- kill-tag: listOfTags
- サーバからの、text/html 応答中で listOfTags に列挙されたタグが使用されている場合、
それを無効にします。
例)
HTTPCONF=kill-tag:SCRIPT,APPLET
- ver:1.0
- HTTP/1.0 クライアント/サーバとして動作
- svver:1.0
- HTTP/1.0 サーバに対して、クライアントとして動作 (HTTP/1.0 で、要求を送信)
- clver:1.0
- クライアントに対して、HTTP/1.0 サーバとして動作
(応答中で、chunked エンコードを使用しない)
- acc-encoding:encoding [-thrugzip]
- Accept-Encoding ヘッダをサーバに送る。
これは、DeleGate が行う、MOUNT, CHARCODE, CACHE などをともなういくつかの
コンテンツ翻訳作業に適用されます。このような翻訳作業を行うことで、
コンテンツ(応答ボディ)を DeleGate が知らないフォーマットにエンコードしません。
"identitiy" は、サーバ上のコンテンツエンコーディングを無効にすることを指定します。
"-thrugzip" は、Accept-Encoding:gzip をクライアントからサーバへ転送します。
"gzip" プログラムが DeleGate ホスト上で利用可能な状態に無い場合(例 LIBPATH に存在しない)、
"identity" が、かまわずに送られます。
- gen-encoding:encoding [gzip]
- このエンコーディングは、DeleGate から クライアントに送られる内容に適用されます。
現実装では、"gzip" のみが有効です。
"identity" および、他は、エンコーディングを無効にします。
- tout-wait-reqbody:period [30]
- 要求ボディ内の最初のデータを待つ最大値
- tout-in-reqbody:period [15]
- 要求ボディ内の次のデータを待つ最大値
(クライアントサイドでの遅いフィルタプログラムのため、調整できます)
- tout-buff-reqbody:period [5]
- サーバに送る要求メッセージをバッファする最大値
- tout-cka:period [5]
- クライアントの接続を確保する最大値
(タイムアウトは、それぞれのクライアントホストからの最初の接続のため10倍長くなっています)
- max-cka:number [10]
- キープアライブ中の単一ホストからのリレー要求の最大値
(それぞれのクライアントホストからの最初の接続に対しては10倍の値が提供されます)
- max-ckapch:number [4]
- クライアントホスト単位でのキープアライブ中接続の最大数
- max-reqline:length [4k]
- 許容する要求文字長の最大値
- max-reqhead:length [12k]
- 許容する要求ヘッダ長の最大値
- max-gw-reqline:length [512]
- 他のプロトコルの他のサーバに転送する要求文字長の最大値
- max-hops:number [20]
- HTTPプロキシチェーンの最大ホップ数
- tout-resp:period
[TIMEOUT=io]
- サーバからの応答待ち時間の最大値
- urlesc[:escChars] [empty]
- 処理を行なう前に、要求 URL 中のキャラクタセット を "%XX"
表記により、エスケープする。
特殊なケースで、HTTPCONF="urlesc" は、HTTPCONF="urlesc:<>" を意味します。
- proxycontrol[:[on|off]]
-
要求 URL 中 の "?_?" に続くサブストリングを、DeleGate の制御情報として理解します。
DeleGate が URL?_?proxycontrol の要求を受けた場合、
URL 部のみサーバに転送され、また、proxycontrol 部は(可能ならば)DeleGate が使用します。
- cka-cfi
- クライアントキープアライブ(外部フィルタ(FCL,FTOCL)含む)をともなった、接続を確立する。
- xferlog:ftp
- xferlog フォーマットでもFTP/HTTP処理を記録する
- 例)
- 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=...
CGIENV parameter == CGIENV=name[,name]*
-- default: CGIENV="*"
Http-DeleGate の MountOptions
条件:
- vhost={HostList} -- 仮想ホストのマッチングと書換え。
-
要求の書換え時、要求メッセージ中の "Host:" フィールドの値が、HostList に含まれるとき、真となり、
また、応答書換え時には無条件に真となります。
それは、応答に対する、特殊な書換えにより、仮想ホスト をサポートし、
応答メッセージ中の任意の実ホストの完全な URL を仮想ホストのそれに書き換えます。
- qmatch=pattern -- 要求ヘッダのパターンマッチング
-
pattern が 要求ヘッダ中の文字列とマッチした場合、真。
(例. qmatch=*User-Agent:*compatible;%20MS*)
- dstproto={ProtoList} -- 指定したプロトコルのサーバに対して
-
多少サーバのプロトコルがProtoList中の含まれる場合、真。
- method={methodList} -- 要求手段
-
現要求のアクセス方法が、methodList中に含まれる場合、真。
- asproxy
- DeleGateが、プロキシサーバとしてコールされた場合(完全なURL書式で要求されたURL)に、真。
- withquery
- 要求されたURLが、 "?query"部を持つ場合、真。
制御:
- moved[={300|301|302|303}]
- "Location:rURL" で、"302 Moved" 転送応答が返った場合、rURL に中継しない。
- useproxy[=proxyURI]
- "305 Use Proxy" 応答メッセージを生成。proxyURI が省略されるか、"direct" が与えられる場合、
応答メッセージは、"Set-Proxy: DIRECT" として、 Set-Proxy フィールドをともなって送信されます。
他の場合、URIは、フィールド中に "Set-Proxy: SET; proxyURI=proxyURI" で、セットされます。
- forbidden
- forbidden として要求を拒否 ("rcode=403" と同じ意味)
- unknown
- unknown として要求を拒否 ("rcode=404" と同じ意味)
- rcode={300|301|302|303|304|305|306|403|404}
- 指定したステータスコードの応答を返す。エラーメッセージをカスタマイズするとき有効です。
- robots={no|ok}
- ロボットによる検索の許可・不許可。NNTPとFTPでは、デフォルトは"no"で、他のプロトコルでは、"ok"です。
- genvhost=host
- サーバに転送される要求メッセージ中の "Host: host"フィールドをセット。
対象サーバを示す、MOUNT パラメータの
rURL 部分に由来するサーバに、デフォルトの Host フィールドを送る。
たとえば、MOUNT="/* http://hosti:8080/*" は、"Host: hosti:8080" をサーバ(hosti:8080 ポートで動作している)へ転送します。
クライアントからサーバへの要求中の Host フィールドをスルーパスするには、
"genvhost=-thru" を指定します。
- ftosv=-cc-charCode
- サーバに転送されるHTTPヘッダのキャラクタセットを
charCode (jis|sjis|euc|utf8)に変換する。
例)仮想ホスティング,複数の HTTP サーバとして動作する
MOUNT="/* http://wwwA/* vhost=-www.dom1.com"
MOUNT="/* http://wwwB/* vhost=-www.dom2.org"
例)
"useproxy", "method", "dst", "withquery" オプションは、元々、
潜在的に厄介なアクセス(対象サーバのCGIプログラムを呼出すような)を拒否するために取り入れられました。
例)POST メソッドをともなう要求、または、"?" をともなう URL を、拒否する。:
MOUNT="http:* = method=POST,asproxy,useproxy"
MOUNT="http:* = withquery,asproxy,useproxy"
HTTP-DeleGate の AUTH パラメータ
- AUTH=origin:auth
- -- default: AUTH=origin:ident
AUTH=proxyのように、HTTPヘッダ中の"Authorization"フィールド内で使用する値を指定し、
ユーザ証明を行います(この場合、"HTTP元サーバ"としてのDeleGateへのアクセス性を除く)。
例)
AUTH=origin:auth RELIABLE="*@localhost"
この DeleGate の localhost ユーザは、ログイン可能で、認証において、
正しいユーザ名とパスワードのペアが与えられ、アクセスを認証します。
- AUTH=forward[:{by,for,ver,*}]
- このように、HTTP要求ヘッダ内のForwardedフィールドにあるソースホストの識別情報を投げます:
Forwarded: by Me (Version) for Client
現状で、これが指定された場合、AUTH="forward:*:"とみなされ、2番目のフィールドは、無視されます。
これは、ファイアウォール上のDeleGateが、内部HTTPサーバを外部に向けて中継する場合、有効です。
- AUTH=viagen[:hostIdentifier]
- この DeleGate の 認証ホストを指定します。
それは、転送 HTTP メッセージヘッダ中の Via フィールドに以下のように埋め込まれます:
Via: protocol-version hostIdentifier ( comment )
AUTH=viagen を指定しない場合、デフォルトの匿名が、
hostIdentifier に使用されます。
AUTH="viagen" のように空の hostIdentifier を指定した場合、
この DeleGate ホスト名が使用されます。
特別な指定 AUTH="viagen:-" は、Via フィールドの埋め込みを停止します。
'%' を hostIdentifier 内で使用した場合、
以下の authString の書式として翻訳されます。
- AUTH=authgen:basic:authString
- HTTP要求ヘッダ中に、クライアントからのオリジナルAuthorizationフィールドがない場合、
"Authorization:Basic authString" を生成し、サーバに転送します。
authString は、"userName:passWord" でなければなりません。
以下の特別文字列は、クライアントの属性をあらわします。
%u | -- Identプロトコルで得られたユーザ名
|
%h | -- ソケットから得られたクライアントのホスト名
|
%i | -- クライアントに向けたネットワークインタフェースのホスト名
|
%a | -- クライアントのホストアドレス
|
%n | -- クライアントのネットワークアドレス
|
%H | -- DeleGateのホスト名
|
%M | -- DeleGateのADMIN
|
%A | -- "CMAP=string:authgen:mapSpec"によって生成される文字列
|
%U | -- クライアントの [Proxy-]Authorization: userame:password の username 部
|
%P | -- クライアントの [Proxy-]Authorization: userame:password の password 部
|
例)
ファイアウォールが2つのネットワークインタフェースを持ち、
内部/外部ホストが異なるインタフェースからアクセスする場合、それらは、インタフェース名で区別できます。
AUTH="authgen:basic:%i:%h"
他の場合、内部ネットワークは以下のように、CMAP で明示する必要があります。
AUTH="authgen:basic:%A"
CMAP="{internal:passWord}:authgen:*:*:{InternalNetList}"
CMAP="{external:passWord}:authgen:*:*:*"
"passWord/%i"書式でパスワードが生成され、DeleGateは、
このようなパターンのAuthorizationフィールドをともなって入ってくる要求を拒否します。
このように、偽パスワードは、ホスト"%i"上のDeleGateを通過できません。
- AUTH=pauthgen:basic:authString
- AUTH=authgen のように
"Proxy-Authorization: Basic authString"
を生成する。
注記:MYAUTH="user:pass:http-proxy" により廃れました。
例)
クライアントからの要求メッセージ中の消費 Proxy-Authorization を
そのまま上流プロキシに転送する(authString == %U:%P によって)。
AUTH=proxy:pauth AUTH="pauthgen:basic:%U:%P" PROXY=...
- AUTH=fromgen:fromString
- 指定した場合、 オリジナルヘッダが、オリジナルのFromフィールドを持たない場合、"From:
fromString"が、HTTP要求に差込まれます。fromStringが省略された場合、デフォルト値は "%u@%h"になります。
- AUTH=log:remoteHost:identUser:authUser
- HTTPサーバコモンログファイル書式内のクライアント情報部の内容を指定します。
デフォルト値は、AUTH="log:%h:%u:%U"です。
%F | -- FromフィールドのE-mailアドレス
|
%L | -- From: local@domain フィールドのlocal部
|
%D | -- From: local@domain フィードのdomain部
|
%U | -- Authorization: userame:password のusername部
|
%P | -- Authorization: userame:password のpassword部
|
%Q | -- Forwarded: フィールドの"for clientFQDN" 部分
|
例)
ユーザによる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 は、それぞれ、サーバ側、または、クライアント側のみに
適用されます。
- usdelim:{setOfDelimiters}
-
-- default: FTPCONF="usdelim:*%#"
"user@site" において、"@" の場所で使用可能とする区切り文字セット,
例)"ftp://user*server@proxy" または "ftp://anonymous:name*domain@server"
- hideserv
-- サーバの識別を隠す
-
サーバに関する識別情報を含むような、サーバからクライアントへの開始メッセージをリレーしない。
- nounesc
-- サーバへの引数で、エスケープされていない %XX 表記を無効にします。
-
このオプションが指定されない場合、%XX 表記("%2Fhome/" のような)
が含まれる引数が (デフォルトでエスケープされずに) パスに現れます。
FTP プロキシ/サーバ
既存FTPクライアントは、プロキシ機能を持たなくても、
2通りの方法で、DeleGateをFTPプロキシとして使用できます。
- USER user@host
- ログイン時、ユーザ名に続いてFTPサーバホスト名を入力します。
- CWD //host[/path]
- 他の場合、"//"に続き、FTPサーバホスト名をディレクトリのように入力します。
完全な書式
user:pass@host[:port]
もまた、以下のように、
URL中の一般的なサーバ表記において、USERと、CWDが使用可能です。
USER ftp:foo%40bar@server
CWD //ftp:foo%40bar@server/path
マルチホームホスト、または、ファイアーウォールに隠されたホスト上で、
データ接続用の IP アドレスまたは、ポート番号は、SRCIF
によって、制御できます。
例) プロキシ FTP-DeleGate
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/*" RELAY=no
"RELAY=no" は、DeleGate が プロキシ FTP サーバとして動作するのを禁止します。
元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における各行は、以下の要素(1行に)を含みます。
-
currentTime transferTime clientHost
-
fileSize fileName transferType
specialActionFlag direction accessMode
userName serviceName authenticationMethod
authenticatedUserID
DeleGateStatus
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
...
username と、servername 間の区切り文字には、"@" の代わりに、
"%" や、"#" が以下のように利用可能です。
username%servername または、
username#servername
例) 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
- reject:{nohelo,nofrom}
-
"HELO" または "MAIL FROM" を言わないクライアントを拒否する。
- bgdatasize:N
-
データが N バイトより大きい場合、バックグラウンドでリレーします。
これは、"DATA" コマンドを投げた後に、サーバからの "QUIT" コマンド応答を待たない
クライアントをリレーするための手段です。
注)DeleGate はスプールや、転送機能を持たないので、1つのメールデータのみをバックグラウンドで
リレーできますが、伝送終了前に DeleGate がクラッシュした場合、メールは失われます。
- maxrcpt:N
-
受付ける受信者の最大数(RCPT コマンドによる)を制限する。
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
- 全てのキャッシュを停止
- 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 値をセット
- dispensable
- サーバが切断しても、クライアントセッションを継続します。
- auth:{srcHostList}
- クライアントがsrcHostListに含まれる場合、
NNTPセッションを開始するときに認証(AUTHINFOコマンドを使用)を強制ます。
このパラメータは、NNTPサーバが、ユーザのサブセットに対する認証を行うときと、
このDeleGateが、NNTPキャッシュを行う場合、セットする必要があります。
- authcom:{commandList}
- 認証前に必要な 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(デフォルト30分)でファイルの有効期限が切れるまで、シャットアウトされます。
安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。
しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御設定はもちろんのこと、
このような攻撃を防ぐよう意識を高く持ってください。
- TIMEOUT=shutout:N [30m] ... アタック再試行間隔の最短
- 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 です。
-Ffunction より前、および、"--" オプション以降のコマンドラインオプションは、
DeleGate に対してのオプションとして、
機能
( delegated dgopt ... dgopt
-Ffunc fopt ... fopt
-- dgopt ... dgopt )
よりも、優先されます。
例外として、name=value 書式のパラメータオプションは、
fopt の位置に現れた場合、DeleGate のパラメータとして認識されます。
例) レゾルバとして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] [-eencoding] [PROXY=host:port]
[MYAUTH=user:pass] 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 ダイジェストを出力
-Fauth -{a|d|v} username[:password] hostname[:portnumber] [expire]
AUTHORIZER のサーバとして
hostname に対する、定義済み(キャッシュされた)認証情報を、追加,削除、または、表示します。
hostname の前に "-" がつく場合、実サーバなしの仮想名と同一となります。
例)
delegated -Fauth -a ken:blahblah -smtp.users.local
// AUTHORIZER=-smtp.users.local としても適用します。
ファイル
参考文献
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),
scanf(3),
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 <y DOT sato AT delegate DOT org>
National Institute of Advanced Industrial Science and Technology (AIST),
Tsukuba, Ibaraki 305-8568, Japan
フィードバック
配布
リリース 8.1.0 最終更新: 2002年11月26日
--------- --------- --------- --------- --------- --------- --------- ---------