翻訳者: 鈴木 雄(すずき ひろし)setter @ reset . jp
翻訳開始日:2001/8/23(v7.5) (1997/11-v4.3)
最終更新日:2004/9/16(v8.9.6)
翻訳者コメント:
"翻訳のドラフト"です。
翻訳の正確さなどは、一切保証しません(できません(^^;)。
必ず、原文(http://www.delegate.org/)を併用して下さい。
誤訳や欠落などに関するご指摘は謹んでお受けいたしますm(__)m
----------------------------- 以下本文 ------------------------------
Permission to use this material for evaluation, copy this material for your own use, and distribute the copies via publically accessible on-line media, without fee, is hereby granted provided that the above copyright notice and this permission notice appear in all copies. AIST makes no representations about the accuracy or suitability of this material for any purpose. it is provided "as is", without any express or implied warranties.
上記部分(著作権と使用許諾に関する記述)は、
そのままつける必要があるので、訳さないでおきます。(訳者)
参考のための訳:
著作権 (c) 1994-2000 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は、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。
それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。
順列目次
CFI
CU-SeeMe
DGAuth
DNS
FTP
Gopher
HostList
HTTP
ICP
IMAP
LDAP
NNTP
POP
ProtoList
SMTP
SockMux
Socks
SSI.shtml
SSL
TCPrelay
Telnet
UDPrelay
Whois
X
目次
-F
-P
-f
-r
-v
-d
ADMIN
AF_LOCAL
Aging
AUTH
AUTHORIZER
BASEURL
CACHE
CACHEFILE
CGIENV
CHARCODE
CHROOT
CMAP
CONNECT
CRON
DATAPATH
DELAY
DELEGATE
DGOPTS
DGPATH
DGROOT
DNSCONF
EXPIRE
FCL
FFROMCL
FFROMMD
FFROMSV
FMD
FSV
FTOMD
FTOSV
FILETYPE
FORWARD
FTOCL
FTPCONF
HOSTLIST
HOSTS
HTMLCONV
HTTPCONF
ICP
ICPCONF
INETD
LIBPATH
LOGDIR
LOGFILE
MASTER
MASTERP
MAXIMA
MIMECONV
MOUNT
MYAUTH
MountOptions
NNTPCONF
OWNER
PERMIT
PORT
PROTOLOG
PROXY
REACHABLE
REJECT
RELAY
RELIABLE
REMITTABLE
RESOLV
RES_CONF
RES_DEBUG
RES_NS
RES_RR
RES_VRFY
RIDENT
ROUTE
RPORT
SERVER
SHARE
SMTPCONF
SMTPGATE
SockMux
SOCKOPT
SOCKS
SRCIF
SSLTUNNEL
TIMEOUT
TUNNEL
UMASK
URICONV
VSAP
XCOM
XFIL
TCPrelay
UDPrelay
SockMux
Socks
DGAuth
PAM
HTTP
SSI.shtml
ICP
FTP
Telnet
POP
IMAP
SMTP
NNTP
LDAP
Whois
X
Gopher
SSL
DNS
CU-SeeMe
--------- --------- --------- --------- --------- --------- --------- --------- DELEGATED(8) メンテナンス コマンド DELEGATED(8)
名称
DeleGateは、アプリケーションレベルプロキシとして動作し、 クライアント・サーバ間で中継するプロトコル(制御シーケンスと、データ構造)を解釈し、 認知されたプロトコルに対し、さまざまな付加価値を実現します。また、 DeleGateは、サーキットレベルプロキシのように動作し、 TCP や UDP 上で、 クライアント・サーバ間の任意プロトコル通信を、正確に伝達します。
DeleGateは、アクセス制御 を強制でき、
プロトコル免除/到達サーバ/受容クライアントを制限します。
DeleGateは、禁止アクセスの繰返しに対し、
ペナルティとしてディレイを加えたり、
アタックの疑いに対し、自動的にレポートを管理者に送信し、
また、サービスをシャットダウンし、防御します。
任意のプロトコルと、プロトコルによるログインに対する、
普通のサーキットレベルで基本的なロギングは、
いくつかのプロトコルに対して、いくつかの一般的なフォーマットがサポートされます。
DeleGateは、一種のアプリケーションレベルルータ の役割をし、
上流プロキシや、Socksサーバによって選択される、
目的サーバに向ける直接/間接ルートを制御します。
サーバに向けた利用可能なルートのひとつは、アプリケーションプロトコル、
目的ホスト、ソースクライアント、の順序で試され、選択されます。
アプリケーションレベルプロキシの場合、
DeleGateは、さまざまなアプリケーションプロトコルを解釈しつつリレーし、
リレーデータ(それぞれのアプリケーションプロトコルの構造による)の
キャッシュ や、
変換 など、さまざまな付加価値のあるサービスを提供します。
アプリケーションプロトコルの通訳の基本は、
DeleGate を、プロトコルゲートウェイ として使い、
クライアントサイドプロトコル・サーバサイドプロトコル間を翻訳します。
サーキットレベルプロキシの場合、DeleGate サーバは、
TCP やUDP 上の指定したアプリケーションプロトコルの指定したサーバへの通信を、
または、Socks プロトコルを基本とした任意のサーバへ向け、正しく伝送します。
アプリケーションレベルプロキシの場合、
DeleGate は、
他サーバのリソースの仮想ビューをエイリアス/マージや、
実サーバの実名を隠す(リソースやサービスを同一に見立てたURL)ことで、提供します。
それは、NFS ファイルマウントの一般化されたメカニズムに似ていますが、
異なったもので、データの内容を書きかえることで実現しています。
言いかえれば、これは、クライアントへ/からの仮想名を、
サーバの実名にマッピング(書換え)しています。
ここでの名前は、サーバ・クライアント間での要求/応答メッセージ中の、
プロトコルに依存したデータストラクチャに埋め込まれます。
この機能を、マウントと呼び、
例えば、リソース http://hostiN/ を http://hostx/iN/ として、
クライアントに見せたい場合に使います。
MOUNT においても、DeleGate のカスタマイズ
ビルトインアイコンとメッセージを利用できます。
クライアント・DeleGate 間および、
DeleGate ・サーバ間の通信は、
CFI
(Common Filter Interface)と呼ばれるシンプルな仕組みを利用し、DeleGate に関連づけされた、
ユーザ定義フィルタプログラムによって、
フィルタ/変換できます。標準入力からデータを受け取り、標準出力に書き出す既存プログラムは、
そのまま、CFI プログラムとして利用できます。
さらに、外部プログラムによるフィルタリングで、
HTTP ヘッダ削除
/生成を含むいくつかの
くり返し使用される機能は、
DeleGate に内蔵されています。
全ての DeleGate のローカルファイル は、
ログファイルと、キャッシュファイルを含み、
それらは、単一のルートディレクトリ (DGROOT) に、
デフォルトで、DeleGateのオーナ所有のプライベートファイルとなります。
しかし、それらは、異なったユーザ間で共有でき、
パス名、オーナ、アクセスパーミッションをそれぞれのファイルでカスタマイズできます。
ログファイル名は、
エージングのため、日付値で、パラメータ化でき、
また、キャッシュファイル名は、分散キャッシュディスクのため、
ハッシュ値で、パラメータ化できます。
DeleGateは、たくさんのオプションで制御されますが、
-Pport オプションと、
SERVER=protocol パラメータは、
大抵の場合、動作させる上で、必須となります。
-P オプションは、DeleGateが、どのポートで、
クライアントからの要求を受けるかを指定します。
SERVER パラメータは、
DeleGateが、どのプロトコルで、クライアントと通信するかと、
どのサーバに通信を中継するかを、任意で指定します。
オプションは、"+=URL" の記述により、ローカル/リモートリソースから読込めます。
通常、"+=/path/of/parameters" のように、
ローカルファイルを使用します。
(パラメータ置換参照)
オプション
入り口ポートは、デフォルトで、SERVER=protocol パラメータにより、
UDP ベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay)
が指定された場合を除き、TCPポートが作成されます。
また、-Pport/udp のように "/udp" ポストフィックスを伴う場合、
SERVER で指定したプロトコルとは無関係なものとなります。
このオプションは、以下のケースを除き、指定する必要があります。
DeleGateが、inetd(8) から、呼び出される場合や、
-Ffunction オプションを利用する大抵の場合、
または、SERVER="tunnel1" により、トンネルサーバ
として動作している場合には、無視されます。
-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 で、出力側接続のソースアドレスの選択を見てください。
-f option -- フォアグラウンドで実行
-r option -- 再起動
-v option -- ログレベルを制御 == -v[vdtsau]
-S option -- SIGCHLD シグナルを監視します
-T option -- システムコールトレース == -T[xsdt]*
-F option -- 拡張機能 == -Ffunction
-- option -- コマンドライン引数を隠す
parameter == name=value
conditional parameter == (condition)parameter
-e option == -ename=value
パラメータ
下記リストにおいて、パラメータに'*'マークがあるものは、 nameX=value1 nameX=value2 nameX=value3 ... nameX=valueNのように、コマンドライン上で繰り返すことができます。 同じ名前のパラメータが、環境変数とコマンドラインで指定されている場合は、 コマンドラインが環境変数に優先します。 他の、繰返しできない名前が繰返された場合、最後に与えられた値が取得されます。 '+' マークのついているものは、"+=parameter"スクリプトで与えることはできません。
一般
ルーティング
アクセス制御
リソース使用制限
キャッシュ制御
マウント
データ変換
フィルタ制御
ローカルファイル使用法
ホスト名解決
このカテゴリにあるパラメータは、
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
許可するプロトコル/サーバ/クライアント
*
REJECT
proto:dst:src
拒否する プロトコル/サーバ/クライアント
REMITTABLE
ProtoList
サーバに対して、容認するプロトコル
*
REACHABLE
dstHostList
設定したサーバホストのみ到達可能です
*
RELIABLE
srcHostList
指定したクライアントホストのみ受け入れます
*
RELAY
proxy|delegate|no
プロキシモードを制限します
*
AUTH
what:aproto:users
リモート管理のための権限をもつユーザ
*
AUTHORIZER
serv:proto:dst:src
認証サーバ
*
MYAUTH
user:pass:proto:dst:src
認証クライアント
RIDENT
client|server
上流 DeleGate への転送ソケットアドレス
キャッシュの実行/停止と、キャッシュデータの有効期限を指定します。
キャッシュのルーティング関連での利用方法は、
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の簡易型
クライアントまたはサーバとの間の経路で送受信されるデータを変換する、フィルタプログラムを挿入する。
--
----------
------------------
----------------------------------
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
例) 拘束を受けない、Telnet-DeleGate SERVER パラメータ
対象サーバ(host)を指定しない場合、それは、プロトコルに依存した方法で、 クライアントにより、実行時に、どうにか取得します。
サーバプロトコルは、クライアントプロトコルと同様、暗黙で拡張されます。 HTTPのようなプロトコルは対象サーバのプロトコルを指定する固有の方法を持っています。 他の場合、例)MOUNT="/news/* nntp://server/*" のように、MOUNTパラメータで明示する必要があります。
SERVER=protocol://host:portNum は、対象サーバのURLを指定します。 ":portNum" の部分は、通常、URL中の番号が、プロトコルにおいて スタンダードなポート番号の場合省略可能です。 DeleGateによって、認知される、プロトコルリストと、標準ポート番号は、 "http://delegate/-/builtin/mssgs/config.dhtml"で、入手できます。 portNum が "-" または "+"でプリフィックスされる場合、 入り口ポート番号に指定したオフセットを加えマップします。 また、"-"(portNumなし)の場合、同じポート番号を使用します。
例) 複数ポートを他の単一サーバに転送する
注記:この、指定したサーバにバインドした DeleGate は、
任意サーバに対するプロキシとしての動作を停止していません。
必要な PERMIT, REACHABLE, RELAY パラメータを使用し、プロキシ動作能力を制限して下さい。
SERVER パラメータが ":-:MountOptions" を伴う場合、
MountOptionsに指定された条件を評価した結果が真の場合、
動的にSERVERパラメータを選択します。特殊なケースとして、
":-:via=HostList"は、":-:HostList"で、省略できます。
例) クライアントに適切なNNTPサーバを選択する。
例) {NNTP,SMTP,POP}-DeleGate を単一サーバで実行
例)クライアントのユーザ名と一致したユーザIDで動作する
例)
例)
例)
特別な用途で、gwproto で、FORWARD は、以下のように一般化された表記、
MASTER, PROXY、および SOCKS と同等の動作をします。
対象サーバに対し複数のルートが利用可能な場合、
FORWARD により指定されたルートは、CONNECT で、
"proxy" または、"master" により指定された優先順位で試行されます。
stHostList 中のホスト指定は、フォワードするプロトコルを"proto://"プリフィックスで、
制限することができます。
例)ROUTE="http://host:port/-_-{ftp://*}:*"は、
FTPサーバへのアクセス全ては、"http://host:port/"のHTTP-プロキシへ
フォワードされることを意味します。
dstHostList中のホスト指定は、ポート番号で、さらに制限できます。
例)ROUTE="http://host:port/-_-{*:21}:*"は、
ポート番号21(FTPサービス)でのみアクセスでき、プロキシへ転送されます。
オプション "/masterControl" :
例)
例)
例)
それぞれの接続タイプは、それぞれ {c,i,m,d,v,s,u} のように、最初の文字で省略できます。
注記)
現実装では、"cache" が、connSeq 中に含まれる場合、まず最初に試行されます。
このパラメータで、それぞれのサーバへ接続する際のソースアドレス(ネットワークインターフェースの)
を指定します。
これは、DeleGate ホストが複数のネットワークインターフェースを持つ場合に有効です。
それは、SOCKS-DeleDate または、FTP-DeleGate により受容される
クライアント接続で使用するポートの指定にも利用可能です。
ほとんどの場合、特殊パターン "*" は、host または、portとして、
IP アドレスまたは、ポート番号のワイルドカードを指定します。
いくつかの場合、特殊パターン "*" は、
FTP データ接続 (PORT または、PASVによる) 用ポート、または、
SOCKS (BIND および、UDP-ASSOCIATE)用ポート のように、
指定されたプロトコルによって要望されたアドレスおよび、番号として使用します。
ワイルドカードを IP アドレスと、ポート番号で明示的に指定する場合、
それぞれ、host に、"0.0.0.0" および、port に、"0" を使用します。
例)
要求に応じて割り当てられ、ピアに通知された "ftp-data" 接続用のポート
( PORT により クライアントからサーバ、PASV によりサーバからクライアントに向けられた)
は、"ftp-data-port" または、"ftp-data-pasv" により それぞれ分離して制御できます。
PORT のためにサーバからクライアント、または、PASV のためのクライアントからサーバへ
確立されるデータ接続用のソースポートは、"ftp-data-src" によって制御できます。
現状、tunnelType は、"tty7"でなければならず、それは、
DeleGate間の伝送が 7bitストリームで行われることを意味します。
タイプが"tty7"の場合、トンネルを確立するには、SHIO-スクリプトファイルに指定を書きこみます。
パッケージに含まれる、"src/sample.shio"を参照して下さい。
スクリプトファイル名は、絶対パスまたは、相対パス(LIBPATH 中で検索できるファイル名)
のどちらかで指定する必要があります。
上流のトンネル用DeleGateは、SERVER="tunnel1"を伴なって呼出さなければなりません。
例) ログインダイアログなしで、トンネルを形成する。
複数の 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パラメータにより調査し、転送されます。
例)
メールクライアントが、メールサーバ上のメッセージを削除することを禁止します。
プロトコル名の後ろに"/portNumList"がある場合、PortList中に列挙されたポートのみが許可されます。
PortList は "/methodList"を付けることができ、プロトコル上で可能な手段を制限できます。
現在、手段として、"readonly"のみがサポートされます。
例)REMITTABLE="ftp//readonly" は、FTPサーバへのアップロードを禁止する、"read only" FTP-DeleGateを生成します。
プロトコルに関するデフォルトの設定:
例外:
これは、RELIABLE=Hosts1 RELIABLE=Hosts2 のような、
複数のRELIABLEパラメータを、単一の RELIABLE="Hosts1,Hosts2"
へ、単純に、結合したものへ解釈しますが、
Hosts1 または、Hosts2 が、
否定 または、
合成演算子に含まれる場合、
"Hosts1 または Hosts2" を意味するものではありません。
もし、この文章の意味が理解できない場合は、かわりに、複数のPERMITパラメータを使用することを推奨します。
RELAY="no" は、リレーを行わない、元 HTTP サーバとして動作することを意味します。
元 HTTP サーバは、プロキシ用のフォーマット(要求中のURLが、絶対フォーマットであるが、
フルフォーマットや、"/-_-" フォーマット)ではない、通常フォーマットの要求を受け付ける、通常のサーバ。
RELAY="vhost" は、任意の仮想ホストにリレーする、元 HTTP サーバとして使用できます。
このオプションは、明示された MOUNT を伴わない、要求ヘッダ中の "Host:" フィールドで指し示された
任意の対象サーバに、 HTTP 要求を転送可能にします。
この自動転送は、要求された URL が MOUNT されていない場合のみ実行されますが、
ほとんどの DeleGate は ルート URL ("/*") 用の MOUNT パラメータもつ元サーバとして動作しているため、
それほど、ありそうにありません。
例)
デフォルト:
HTTP-DeleGateの場合、(要求メッセージ中の)認証ヘッダにあるUsername:Password で、
"私は誰”かを宣言します。ここでのUsernameは、User@Hostとも、できます。
User, Host, Password のセットを得た後、DeleGateは、
Host 中の(FTP)サーバに、User と Password でログインを試みます。
成功した場合、クライアントは、User@Host で、認証されます。
現在、以下のカテゴリでの、認証/認可がサポートされます。
-- 何らかのプロトコルのDeleGateの場合 --
-- FTPサーバ と FTP/HTTP ゲートウェイの場合 --
-- プロキシと 元HTTP サーバの場合 --
FTPサーバベースの認証を使用する場合、要求される認証情報としてのユーザ名は、"user@host.domain"のような、E-mailアドレスです。なお、これは、通常、AUTH="anonftp" と AUTH="proxy"のために使用します。
注記:auth-server により認証されたクライアントは、
そのクライアントホストが、他のアクセス制御
(RELIABLE and PERMIT)
をパスしない場合、許可されません。
認証された全クライアントを、そのホストを無視して許可したい場合、
RELIABLE="-a/*" の様に指定します。
この用途では、RELIABLE="*" も動作しますが、DeleGateのコンフィギュレーション変更には
安全ではありません。
connMap に追加するとき、認証サーバは、
対象プロトコル、サーバホスト、クライアントホストの組合わせで、
条件付で選択できます。
authServList は、認証サーバ名、または、認証サーバのホスト名リストです。
authServList の後ろに、"@realmValue" が付く場合、
その値は、HTTP-DeleGate における、保護空間の領域指定に使用されます。
それは、それぞれの MOUNT ポイントに対して、マウントオプション
"realm=realmValue" で上書き可能です。
現在、リモート認証/権限付与サーバのプロトコルは、FTP プロトコルの USER/PASS コマンドです。
このように、DeleGate の確認/認証 サーバには、任意の実在 FTP サーバを使用できます。
他の方法として、DeleGate 自らが持つ 確認/認証 のためのリストは、
-Fauth 機能により使用できます。
これらは内蔵 auth-server を authServ として、以下のように使用します。
DGAuth: ダイジェストパスワードを元にした認証スキームで、
各アプリケーションプロトコル特有のそれは、"AUTHORIZER=-dgauth"
を伴うことで、有効になります。
この種の認証スキームは、少なくとも、APOP プロキシや、
HTTP Digest/Basic ゲートウェイが行い、元の、クリアテキストのパスワードが
要求されます。
そのように使用するパスワードを格納するには、DeleGate を、
"-Fauth -a username:password -dgauth"
と共に起動します。
-dgauth 用パスワードは暗号化された形で格納され、暗号化のためのキーワードが必要となります。
キーワードは、CRYPT=pass:keyword で指定するか、後で対話形式で応答します。
他の場合、DGAuth は、リモートDGAuth server に委任出来ます。
DGAuth サーバ.
DGAuth は、認証によって開始されたセッションの間、保持された確認と、同様のセッション確認を生成し、
また、CFI/CGI プログラムに、環境変数 "X_DIGEST_SESSION" で渡され、
さらに、PROTOLOG でログを取ることができます。
例)
PAM: プラットフォーム上で PAM(Pluggable Authentication Modules) が有効な場合、
以下の書式で認証に使うことが出来ます。
AUTHORZIER="-pam/service",
例としては、AUTHORIZER="-pam/passwd", AUTHORIZER="-pam/ftp" 等です。
LIST: "-list{user:pass,...}" 内で、"[date+format]" を
user と pass に置き換えて使用できます。
例)AUTHORIZER="-list{guest:[date+%y%m]}" はユーザ名 "guest" を 2004年5月にパスワード "0405"
で受け入れることを意味します。
認証されたユーザに権限が不要な場合のみ、authServList として、以下の特別な名前が有効です。
例)
クライアントから送られた、ユーザ名+パスワードの組は、
MYAUTH="%U:%P" でサーバに転送できます。
(HTTP および、FTP のみサポート)
例)
例)
SERVER="nntp://newsserver1:-:from={*.dom1}"
SERVER="nntp://newsserver2:-:from={*.dom2}"
-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でスーパーユーザのみ
このパラメータは、スーパーユーザにより呼出された場合のみ有効です。
指定した場合、DeleGateは、setuid(2) と setgid(2) システムコールをコールし、指定したユーザ権限で実行します。
ユーザとグループは、それぞれ、シンボリック名か、"#1234"のように"#"をプリフィックスした、ID 番号で、指定できます。
srcHostList が指定された場合、このDeleGateの所有者は、
リスト中にクライアントホストが含まれる場合、ユーザに設定されます。
ユーザ名"*"は、クライアントのユーザ名
(クライアントホスト上のIdentificationサーバから得られた)
に置換えられます。
OWNER="*:*@*".
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 は、定義済みリストに追加されます。
// .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}:${ETCDIR}'
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:${ETCDIR}'
パラメータファイルのサーチパス。
特殊なディレクトリ名"+"は、"caller"リソース(パラメータファイルからパラメータファイルを参照する)の場所を表します。
DGOPTS parameter == DGOPTS=opt[;opt]*
-- default: none
コマンドラインオプションのリスト。これは、-P や、-v のように
name=value フォーマットではないオプションを環境変数で与える場合、有効です
SOCKOPT parameter == SOCKOPT=[no]name[:value]
-- default: reuse
ソケットオプションをセット
PORT parameter == PORT=port[,port]*
port == [host:]portNum[/udp]
portNum == number[-number]
-- default: none
-Pオプションのように、入り口ポートを作ります。
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
FORWARD=delegate://gwhost:gwport/-_-*:dstHostList:*
FORWARD=gwproto://gwhost:gwport/-_-*:dstHostList:*
FORWARD=socks://gwhost:gwport[/socksOpt]-_-*:dstHostList:srcHostList
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:*"と同じです。
MASTER parameter* == MASTER=host:port[/masterControl][:dstHostList]
-- default: none
このパラメータは、この DeleGate が、要求を転送する、上流のgeneralist DeleGate(MASTER-DeleGate)を指定します。
DeleGate は、要求を指定された MASTER-DeleGate へ、条件付で転送します。
MASTERへの転送は、":dstHostList"をポストフィックスすることにより、フィルタできます;
dstHostList にリストされている対象サーバへ向けた要求のみ MASTER-DeleGateに転送されます。
複数の MASTER が与えられる場合、順序通りに、MASTER への接続が成功するまで試行されます。
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:*:*:*"
このパラメータは、以下のように、いくつかの接続方法を使用し、対象サーバに接続するための試行順序を制御します:
connType:
cache -- CACHE を検索 (接続なし)
icp -- ICPサーバをヒントとしたPROXY経由
proxy -- PROXY サーバ経由
master -- PROXY または MASTER-DeleGate サーバ経由
https -- SSLTUNNEL (SSL tunnel on HTTP)経由
vsap -- VSAP サーバ経由
direct -- 目的サーバへ直接接続
socks -- SOCKS サーバ経由
udp -- UDPによる
none -- 接続しない
ProtoList と dstHostList が与えられる場合、リストに含まれるプロトコルとホストにのみ制御が適用されます。
例)外部ネットワークに接続せず、ホスト上のキャッシュデータを使う場合、CONNECT="cache:*:!./@"のように指定します。
SRCIF parameter* == SRCIF=host[:[port][:connMap]]
connMap == ProtoList:dstHostList:srcHostList
-- default: SRCIF="*:*:*:*:*"
このパラメータは、マルチホームホストまたは、
パケットフィルタされたファイアーウォールに隠されたホスト上で動作する
DeleGate において、有用です。
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 リレーで、指定アドレスを使用します。
TUNNEL parameter == TUNNEL=tunnelType:script
tunnelType == tty7
-- default: none
指定した場合、上流 DeleGate との通信は、コマンドの標準入出力経由で、トンネルされます。
トンネルは、数種の経路を形成できます(例えば、素のシリアルライン)。
それは、経路上での双方向通信を提供します。
DeleGate の経路はリモートホスト上の inetd から呼出すこともできます。
TUNNEL=tty7:tunnel.shio
例) ログインダイアログありで、トンネルを形成する。
[content of tunnel.shio]
o rsh host delegated SERVER=tunnel1\n
i READY\r\n
=
TUNNEL=tty7:tunnel.shio
上記に見られる例のような場合、SHIO-スクリプト ファイルの最初の行は、
リモートサーバとの接続を確立するために、"o command\n" のような
シェルコマンドであることが期待されます。
接続を確立するための他の方法として、"c host:port" を先頭行に書きます。
この場合、シェルや、シェルコマンドは呼び出されません。
[content of tunnel.shio]
o telnet hostname\n
i login:BR>
o username\n
i Password:
o password\n
i %
o delegated SERVER=tunnel1 \n
i READY\r
i \n
=
PERMIT parameter* == PERMIT=connMap
connMap == ProtoList:dstHostList:srcHostList
-- default: none
PERMITパラメータは、この DeleGate が許可するアクセス方法を指定します。アクセスは、srcHostList
に含まれるクライアントホストから、dstHostList に含まれるサーバホストに対して、ProtoList
に含まれるプロトコルで、行われた場合に許可されます。
PERMIT="*:*:.localnet"
PERMIT="http:www:*"
REJECT parameter* == REJECT=connMap
connMap == ProtoList:dstHostList:srcHostList
-- default: none
REJECT パラメータで、PERMIT と同じ書式で、
どのようなアクセスを拒否するか指定します。
アクセスを拒否するケースが例外的である場合、
PERMIT より便利で、許可するための記述を簡素化できます。
REJECT="pop//DELE:mail-server:mail-client"
REJECT="imap//EXPUNGE:mail-server:mail-client"
REMITTABLE parameter == REMITTABLE=ProtoList
-- default: REMITTABLE="*" for generalist
-- default: REMITTABLE="." for specialist
ProtoList 中にリストされたプロトコルのみが、このDeleDateによって、許可されます。
generalist(SERVER="delegate" を伴なう DeleGate ) は、デフォルトで、全てのプロトコルを許可します。
specialist は、SERVERパラメータ("."で表現可能)により指定されたプロトコルが、デフォルトで許可されます。
現在の対象サーバが、 MOUNT="Path1 Proto://Server/Path2"のように、
MOUNTパラメータによって固定されている場合、REMITTABLEによる制限を無視して、
Proto プロトコルは、対象プロトコルのServerによって、自動的に許可されます。
リストの最初が、"+"の場合、デフォルトで許可されたプロトコルのリストを意味します。
例)
REMITTABLE="+,-https/80,-wais,file" と SERVER=http の場合、
REMITTABLE="http,https/443,gopher,ftp,file" を意味します。
注記:この "https" では、SSLtunnel 上の 非 https プロトコル は、検出され、拒否されます。
SSLtunnel 上で 任意のプロトコルをリレーする場合、 "https" の代わりに、 "ssltunnel" を、
REMITTABLE="+,ssltunnel" のように指定します。
REACHABLE parameter* == REACHABLE=dstHostList
-- default: REACHABLE="*" (全てのホストに到達可能)
dstHostList に列挙されたホスト(またはネットワーク)上のサーバへ要求の転送のみ、DeleGate で受入れます。
複数の REACHABLE パラメータを使用した場合、
その意味を確実なものにしなければなりません。
RELIABLE parameter* == RELIABLE=srcHostList
-- default: RELIABLE=".localnet"
srcHostList に列挙されたホスト(ネットワーク)上のクライアントから送られた要求のみ、DeleGate で受入れます。
デフォルトで、DeleGate ホストのローカルネット上のホストからのアクセスのみ許可されます。
RELAY parameter* == RELAY=relayTypeList[:connMap]
relayTypeList == relayType[,relayType]*
relayType == proxy | delegate | vhost | no | nojava | noapplet
connMap == ProtoList:dstHostList:srcHostList
-- default: RELAY="delegate,vhost,nojava:*:*:.localnet"
RELAY="proxy:*:*:*"
このパラメータは、DeleGate がどのように、HTTPプロキシサーバとして動作するかを、制御します。
HTTP DeleGateは、2つの方法(プロキシモード)で、動作します:
1つは、リクエスト中 ("proxy" relayType) の全URLを受け付ける、
標準(CERN準拠)HTTPプロキシ、
もう一つは、応答中のURLを書換え、要求中の
/-_-URL を受け付ける、
DeleGateオリジナルのプロキシ。
":connMap"をともなう、詳細な書式で可能なプロキシモードは、
サーバプロトコル,サーバホスト,クライアントホストの組み合わせによって分類できます。
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サーバは、認証サーバを使用します。
E-mailアドレス書式は、user@host
でなければならず、他の場合(host部分がない)、FTPログインは、DeleGateにより拒否されます。
HTTP-DeleGateは、認証時の Username 部として、彼/彼女のE-Mailアドレスを宣言するため、
匿名ユーザに問い合わせます。
passWord に "*" を指定した場合(例えば、 AUTH="annonftp:*:*")、
認証時に、すべてのパスワードを受付けます。
FTP-DeleGate の場合、匿名ユーザには、E-mail アドレスがパスワード(PASS コマンドで)として与えられなければならず、
また、passWord とマッチするためにも、パスワードは使用されます。
現実装では、2番目のフィールドは"*"でなければなりません。
例)
ident -- 識別プロトコル [default]
pauth -- Proxy-Authorization フィールド "user@host:password"を使用
auth -- Authorization フィールド "user@host:password"を使用
AUTH=proxy:auth PERMIT="*:*:{*,!?}@*"
注記:
// 彼/彼女が識別できる間、全てのホストの全てのユーザが、許可。
クライアントがプロキシ認証をサポートしていない場合、認証に、"proxy:auth"を使用することが強制されます。このような場合、クライアントは、認証要求のあるリソースにアクセスできません。
AUTHORIZER parameter* == AUTHORIZER=authServList[@realmValue][:connMap]
authServList == authServ[,authServ]* | & | *
authServ == authHost[/portNum]
authHost == hostName | hostAddr
connMap == ProtoList:dstHostList:srcHostList
-- default: none
-- 制限: Telnet, FTP, NNTP, SMTP, Socks および、HTTP に、適用可能
認証および、権限付与するためのサーバを指定します("auth-server")。
指定した場合、アプリケーションプロトコル特有のユーザ名/パスワードを送信することによって
auth-server での認証が成功しない限りクライアントからのアクセスは許可されません。
"-none" と "-never" の、2つの特別な authServ は、不要な認証の生成を除外します。
//ダイジェスト認証をクライアントと行う HTTP プロキシ、または、サーバ
SERVER=http AUTHORIZER=-dgauth
// クライアントと、APOP認証を行う、POP プロキシ
SERVER=pop MOUNT="* pop://server/*" AUTHORIZER=-dgauth
注記:ほとんどの PAM 認証の実行には、Unix上のスーパーユーザ特権(OWNER="root" オプション付加)が必要です。
しかし、DGROOT/subin/ に 外部プログラム "dgpam" をインストールすることで、
スーパーユーザ特権をともなう DeleGate を走らせることを回避できます。
PAM 認証は、リモート PAM サーバに委任することも出来ます。
"&" -- クライアントホスト (クライアントホスト上のユーザ名が必要)
"*" -- "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:30,...
shutout | -- | 致命的エラーでセットされた、シャットアウトを解除する [1800] | ||||||||||||||||||||||||||||||||||||
dns | -- | DNS 参照 [10] | ||||||||||||||||||||||||||||||||||||
dnsinv | -- | DNS 逆引き参照 [6] | ||||||||||||||||||||||||||||||||||||
acc | -- | クライアントの受入れ (FTP データ接続含む) [10] | ||||||||||||||||||||||||||||||||||||
con | -- | サーバへの接続 [10] | ||||||||||||||||||||||||||||||||||||
lin | -- | 出力のための LINGER [30] | ||||||||||||||||||||||||||||||||||||
dgnonce | -- | AUTHORIZER=-dgauth 用 ("nonce"の寿命) [60] | ||||||||||||||||||||||||||||||||||||
ident | -- | Ident サーバへの接続 [10] | ||||||||||||||||||||||||||||||||||||
rident | -- | RIDENT=client 情報の受取り [1.0]
io | -- | 一般入出力 (データ転送ではない) [600]
| silence | -- | クライアント・サーバどちらからもデータ送信無し [0]
(tcprelay のみに適用)
| hello | -- | MASTERとのHELLOネゴシエーション [30]
| login | -- | プロキシログイン (Telnet,FTP) [60]
| daemon | -- | delegated [無制限]
| restart | -- | 指定した期間毎に再起動 [無制限]
| standby | -- | 次のクライアントのため、delegatedが待機する時間 [30]
| takeover | -- | クライアント切断後、ダウンロード内容をキャッシュに書込むまで [5]
| (ダウンロードを開始した、クライアントの切断後) ftpcc | -- | FTP接続キャッシュのキープアライブ [120]
| nntpcc | -- | NNTP接続キャッシュのキープアライブ [300]
| http-cka | -- | (HTTPCONF=tout-cka に置き換えられました)
| cfistat | -- | -s,filter からの状態情報用
| |
DELAY parameter* == DELAY=what:seconds -- default: DELAY=reject:60,unknown:60,...
reject | -- | 自分もしくは、マウントしたサーバからの連続的、拒否(Reject)応答 [60] |
unknown | -- | 自分もしくは、マウントしたサーバからの連続的、不明(Unknown)応答 [60] |
reject_p | -- | 元サーバからの、連続的、拒否(Reject)応答 [0] |
unknown_p | -- | 元サーバからの、連続的、不明(Unknown)応答[0] |
MOUNT parameter* == MOUNT="vURL rURL [MountOptions]" -- default: MOUNT="/* SERVER_URL*"
vURLが"*"で終わる場合、部分的にマッチしたパスが書換えられます。 rURLが"*"で終わる場合、部分的にマッチしたパスの、 残り部分は、rURLの後にコピーされます。
例) HTTP-DeleGateのMOUNT
vURL か rURL に "=" を指定した場合、
マウントは、リクエスト中のvURLを書換えない、
または、応答中のrURLを書換えるのと同じことを意味します。
対象サーバのポート番号(rURL において)は、"-"か"+"でプリフィックスでき、 これは、SERVER パラメータにおける入り口ポート番号に対し、動的に決定したオフセットを与えます。
rURL が "file:path" を含み、かつ、path が相対の場合、
データファイルは、
DGROOT ディレクトリまたは、
ディレクトリリスト DATAPATH 以下から検索されます。
省略
設定を簡単かつ再使用するために、URLも特別な省略形を MOUNT パラメータで使用できます。
protocol-name://host-name:port-number/url-path
からなる rURL 中の
protocol-name, host-name, port-number に "=" を指定した場合、
それは、DeleGate 自身をあらわします。(例:vURL中のそれ)
URLが "//" で始まる場合、更なる省略を意味します。
"///path" は "=://=:=/path" を意味し
(プロトコル,ホスト,ポートが同じ)、また、
"//serv..." は "=://serv..." を意味します
(同じプロトコル)。
省略された host-name と、port-number は、
存在する場合、仮想ホスト(HTTP の Host: フィールドで与えられた)の、
または、クライアントとの実インタフェースのそれに置き換えられます。
実インタフェースを明示的に指定する場合、"-P" を "http://-P/path"
のように、"host-name:port-number" 部分に使用します。
例) MOUNT パラメータ中の rURL の省略
マッチングと書き換えの複合
vURL と、rURL のパターンの後に "*%" がつく場合、
scanf(3) のそれと似た書式で指定した複合マッチングのためのパターンを表します。
それぞれの書式指定は、"%" に続く指定("%c","%[a-z]" など)からなります。
拡張書式 "%S" は、隣接したキャラクタにより決定される変数を意味します。
例えば、"%Sx" は "%[^x]x" を意味します。
例)"%S." は "%[^.]." および "%S/" は "%[^/]/"
rURL 中の "%(N)" は、vURL 中のN番目の
要素の複製を意味します。
vURL パターンが "$" キャラクタで終わる場合、
URL 文字全体に対する完全なマッチングを要求します。
例) 複合マッチングと書き換え
// DeleGate のパラメータ: SERVER=http -Pdhost:9080 ...
// 要求された URL: http://vhost:9080/x/
MOUNT="/x/* =://=:=/y/*" -> http://vhost:9080/y/
MOUNT="/x/* ///y/*" -> (上記の省略形)
MOUNT="/x/* //-P/y/*" -> http://dhost:9080/y/
MOUNT="/x/* =://serv/y/*" -> http://serv:80/y/
MOUNT="/x/* //serv/y/*" -> (上記の省略形)
MOUNT="/x/* //serv:=/y/*" -> http://serv:9080/y/
MOUNT="/x/* //=:9088/y/*" -> http://vhost:9088/y/
MOUNT="/x/* https://=/y/*" -> https://vhost:443/y/
// 要求された URL: http://dhost/x/abc/def
MOUNT="/x/*%S/%S ///y/*%S.%S" -> http://dhost/y/abc.def
MOUNT="/x/*%S/%S ///y/*%(1)/%(0)" -> http://dhost/y/def/abc
MOUNT="/x/*%1[a-z]%S http://w/*%S/%S" -> http://w/a/bc/def
MountOptions == option[,option]*
条件:最初のオプショングループはソースと対象(クライアント・サーバ)によって、条件的に MOUNT します。 MOUNT パラメータが、1つ以上の条件を含むMountOptionを持つ場合、 全ての条件が真にならない場合、MOUNT は無視されます。
これらHostList は、host:portのリストでなければならず、 この、 :port 部分は、特に気にしない場合、省略できます。 host 部は、"*"で、置換えられ、その場合、異なったネットワークインターフェースを気にしません。
例)
URICONV parameter* == URICONV={convSpec|defElem|defAttr} convSpec == convList:attrList defElem == defelem:+,elemnameList defAttr == defattr:+,attrnameList -- default: URICONV=dump で見れます。
mount | -- | MOUNTにより書換え |
normal | -- | URLパス中に"../"を含むMOUNTされたURLを正常化する |
partial | -- | 可能な場合、(MOUNTされた)URLを部分URLで表現する。 |
full | -- | 全てのURLをフルURLに変換 |
特別なconvList URICONV="+"は、デフォルトの URICONV の構成(この場合、現実装で、attrListはありません)を読みこむことを意味します。 attrList は、属性名リストで、それぞれは、1つの要素名をポストフィックスできます。 特別な属性名"+"は、属性のデフォルトセットを意味します。 "-" でプリフィックスされた属性は、計画された属性セットから除かれます。
他の特別な convList URICONV="where:any" は、書換え対象 URL の検索を HTML タグだけではなく、 JavaScript および、CSS (Cascading Style Sheets) に対しても有効にします。
例)
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
元/ゲートウェイ HTTP-DeleGate が要求ヘッダ内の "Host:vhost1" を受け取った場合、 "vhost1" を DeleGate のベース URL とするため、 BASEURL="http://vhost0" パラメータは無視されます。 BASEURL によって、"Host:" ヘッダを上書きしたい場合、 BASEURL="http://-vhost0" の様に "-" をホスト名の前につけます。
例)
DELEGATE parameter == DELEGATE=gwHost:Port[:ProtoList] -- default: DELEGATE=currentHost:currentPort
元々、このパラメータは、gateway-_-URLをともなうURL(または、ポインタ)や、
proto://gwHost:Port/-_-URL
(このgwHost:Port部は、DeleGateによって生成され、埋め込まれたものです)表記によって書換えられた、
CERN HTTP タイプではないプロキシ(gopherプロキシ含む)のための、プロキシモードを制御するために取り入れられました。
このパラメータは、gwHost:Port 部の表現をカスタマイズするために取り入れられました。
これは、このDeleGateの入り口ポートを表し、クライアントから、解決可能かつ、到達可能でなければなりません。
もっとも一般的な作り方は、gwHostのデフォルト値は、このDeleGateホストの現ネットワークインターフェースで、
現クライアントはこれを経由し、このDeleGateに到達させ、また、生のIPアドレスで、表現します。
これにより、クライアントがDeleGateのホスト名解決法を知らなくても、DeleGateに到達可能になります。
例外的に、入り口ポートが、"-Phost:port”のようにネットワークインターフェースを明示して指定された場合、
DELEGATEのデフォルト値は、host:port にセットされます。
オプションの ProtoList を指定することで、このプロキシでのプロトコルに制限をかけることができます。
応答メッセージ中のURL(ポインタ)は、"proto://gwHost:Port/-_-"をプリフィックスして、書換えられます。
そのため、ProtoList中にプロトコルが含まれる場合、要求は再びこのDeleGate(gwHost:Portの)に向けられます。
DELEGATE="-:0:-all"のように、存在しない入り口ポートと、空の ProtoList を指定することで、プロキシモードを使用不能にできます。 RELAY パラメータを使用することで、もっと、簡単に実現できます。 これは、最近のバージョンでは、デフォルトで、使用不能になっています。
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
CACHEFILE parameter == CACHEFILE=fileNameSpec -- default: CACHEFILE='$[server:%P/%L/%p]'
%P | -- | scheme | プロトコル名部 |
%L | -- | host.d2.d1:port | ログイン(またはサイト)部 |
%H | -- | host.d2.d1 | ホスト名 |
%T | -- | port | ポート番号 |
%h | -- | d1/d2/host | 階層ホスト名ディレクトリ |
%d | -- | d1/d2 | 階層ドメイン名ディレクトリ |
%1 | -- | d1 | 最上位ドメイン |
%2 | -- | d2 | 第2ドメイン |
%p | -- | path | URL-パス部 |
%Q | -- | host.d2.d1.d0 | FQDN なホスト名を使用 (%Q%L または %Q%H 同様) |
他のフォーマットパターンは、"$[hash:format]" で、このハッシュは、format
により生成された文字列を、"00"から"1f"の範囲の16進の値になります。
これは、全てのサーバを含む、1つの巨大なディレクトリを32の小さなディレクトリ
(分散した物理ディスク)に分割します。
例)
ICP parameter* == ICP=icpServerList[:icpServerSpec[:connMap]] icpServerList == icpServer[,icpServer]* icpServer == icpHost[/icpType/proxyPort/icpPort] icpServerSpec == icpOptions:proxyPort:icpPort connMap == ProtoList:dstHostList:srcHostList -- default: none-- 制限: {HTTP,FTP}-DeleGate に対し適用
s | -- ICP サーバは、"sibling"(兄弟) [default] |
p | -- ICP サーバは、"parent"(親) |
l | -- ICP サーバは、応答しない"listener"(リスナ) |
n | -- ICP サーバは、ナビゲーションプロキシ |
o | -- HIT_OBJ 応答が必要 |
H | -- 対象サーバは、HTTP プロキシ [default] |
D | -- 対象サーバは、MASTER-DeleGate. |
O | -- 対象サーバは、元サーバ |
timeout/N | -- ICPクライアントとしての応答待ち時間(秒)[2.0] |
parent | -- icpServers のデフォルトタイプが"parent"の印 |
listener | -- icpServers のデフォルトタイプが"listener"の印 |
hitobj | -- デフォルトで 全icpServers にHIT_OBJ を許可 |
Origin | -- 対象サーバは、元サーバ |
DeleGate | -- 対象サーバは、DeleGate |
ICP="host0"
ICP="host0//8080/3130"
ICP="host0::8080:3130"
ICP="host1:timeout/1.0:::http,ftp:!*.my.domain:*.my.domain"
ICP="host1,host2/O/80/13130:timeout/2.0:8080:3130"
CHARCODE parameter == CHARCODE=[inputCode/]outputCode outputCode == charCode charCode == iso-2022-jp | euc-jp | shift_jis | JIS | EUC | SJIS | UTF8 -- default: none
このパラメータをインターネットメール/ニュースプロトコル(SMTP, POP, NNTP)で有効にする場合、 キャラクタ変換を有効(デフォルトで有効)にするように MIMECONV パラメータも指定する必要があります。
HTTPクライアントは、要求メッセージ中の "Accept-Language"フィールドで選択して (それぞれのクライアント(WWWブラウザ)で、指定できるかもしれません)送信することで、 この指定を無視できます。 例)クライアントの要求で"Accept-Language: (charcode=EUC)"が送られた場合、 応答テキストは、DeleGateのCHARCODE指定を無視して、EUCに変換されます。 "Accept-Language: (charcode=THRU)"が指定された場合、管理者がこの DeleGate に指定した全ての変換は、無効になります。
HTMLCONV parameter == HTMLCONV=convList convList == conv[,conv]* conv == deent|enent|fullurl -- default: HTMLCONV=deent
deent | -- | decode entity symbol |
enent | -- | encode entity symbol |
fullurl | -- | convert all of URLs to full URLs (equals to URICONV="full:+,-HREF/BASE") |
"deent" と "enent"は、HTMLとプレーンテキスト間での特別なキャラクタ
(例:"<" から/へ "<" などが、マルチバイトキャラクタセット(ISO-2022-JPなど)のテキスト中に現れた場合)
のエンコード・デコードを制御します。
"deent"が指定された場合、エンコードされた実シンボルがマルチバイトテキスト中に現れた場合デコードします。
これは、マルチバイトキャラクタを気にしないエンコーダで無差別にエンコードされたキャラクタが含まれるテキストを修復するときに便利です。
"enent"が指定された場合、実シンボルがマルチバイトキャラクタセット以外のテキスト中に現れた場合、エンコードします。
これは、WWW クライアントによってアクセスされる NNTP-DeleGate の場合、便利です。
空リストが指定された場合、全ての変換は停止します。
MIMECONV parameter == MIMECONV=mimeConv[,mimeConv] mimeConv == thru | charcode | nospenc -- default: none -- MIMECONV="" CHARCODE パラメータが与えられた場合
FCL parameter == FCL=filterCommand FTOCL parameter == FTOCL=filterCommand FFROMCL parameter == FFROMCL=filterCommand FSV parameter == FSV=filterCommand FTOSV parameter == FTOSV=filterCommand FFROMSV parameter == FFROMSV=filterCommand FMD parameter == FMD=filterCommand FTOMD parameter == FTOMD=filterCommand FFROMMD parameter == FFROMMD=filterCommand filterCommand == [-s,][-p,][-w,]command -- default: none
フィルタは、サーキットレベル情報では、CMAP で、 アプリケーションレベル情報では、CFI script を使うことで、 条件付で利かせることができます。
XCOM parameter == XCOM=filterCommand XFIL parameter == XFIL=filterCommand -- default: none
WindowsNTとOS/2上では、XCOMで実行されたコマンドには、クライアントに接続したソケットを受継いだハンドル値を持つ、 環境変数 "SOCKHANDLE_CLIENT"が、提供されます。
CHROOT parameter == CHROOT=dirPath -- default: none -- 制限: 大抵のUnixで、super-user のみ
DGROOT parameter == DGROOT=dirPath -- default: on Unix: '/' if CHROOT is set or '${HOME}/delegate' or '/var/spool/delegate-${OWNER}' or '/tmp/delegate-${OWNER}' on Windows: '/Program Files/DeleGate'
SHARE parameter == SHARE=dirPatternList -- default: empty
例)
UMASK parameter == UMASK=mask -- default: the value of umask(2)
VARDIR parameter == VARDIR=dirPath -- default: VARDIR='${DGROOT?&:/var/spool/delegate}'
CACHEDIR parameter == CACHEDIR=dirPath -- default: CACHEDIR='${VARDIR}/cache'
ETCDIR parameter == ETCDIR=dirPath -- default: ETCDIR='${VARDIR}/etc'
LOGDIR parameter == LOGDIR=dirPath -- default: LOGDIR='${VARDIR}/log'
LOGFILE parameter == LOGFILE=[LogFilename] PROTOLOG parameter == PROTOLOG=[LogFilename][:logFormat] ERRORLOG parameter == ERRORLOG=LogFilename TRACELOG parameter == TRACELOG=LogFilename -- default: LOGFILE='${LOGDIR}/${PORT}' -- default: PROTOLOG='${LOGDIR}/${PORT}.${PROTO}' -- default: ERRORLOG='${LOGDIR}/errors.log' -- default: TRACELOG='${LOGDIR}/ptrace.log'
パターン ${PROTO} と ${PORT} は、それぞれ、このDeleGateのプロトコル名と、ポート番号に置換えられます。 これらファイルとディレクトリは、可能な場合、DeleGateにより自動生成されます。 LOGFILE=""や、PROTOLOG=""のように、空ファイル名を指定することで、ログを停止できます。
HTTP 用の PROTOLOG 書式は、コモンログファイル書式とコンパチブルで、カスタマイズ可能です。 FTP 用の PROTOLOG 書式は、xferlog コンパチブルです。
エージングのためのLogFilenameとdirPathの置換え
例) 1ヶ月で循環する毎日のログ
他のエージングパターン"[start+format]"は、同様に評価され、"date+"を除いた、 DeleGateが開始しした時間(SIGHUPまたは、TIMEOUT=restartによる再起動)に置換えられます。
EXPIRELOG parameter == EXPIRELOG=LogFilename -- default: EXPIRELOG='${LOGDIR}/expire.log'
WORKDIR parameter == WORKDIR=dirPath -- default: WORKDIR='${VARDIR}/work/${PORT}'
ACTDIR parameter == ACTDIR=dirPath TMPDIR parameter == TMPDIR=dirPath PIDFILE parameter == PIDFILE=fileName -- default: ACTDIR='${ACTDIR}/act' -- default: TMPDIR=system dependent -- default: PIDFILE='${ACTDIR}/pid/${PORT}'
HOSTS parameter* == HOSTS=nameList[/addrList] nameList == name | {name[,name]*} addrList == addr | {addr[,addr]*} -- default: HOSTS=localhost/127.0.0.1
RESOLV parameter == RESOLV=[resolver[,resolver]*] resolver == cache | file | nis | dns | sys -- default: RESOLV=cache,file,nis,dns,sys
cache | -- 以下のレゾルバによる結果のキャッシュ |
file | -- ローカルの hosts(5) ファイル(一般的に /etc/hosts に配置) |
nis | -- NIS または YP(4) サービスのホストマップ |
dns | -- DNS サービス |
sys | -- gethostbyname() と gethostbyaddr() を使用する。(大抵、ホストのシステム標準レゾルバをコール) |
cache:/path | -- キャッシュディレクトリパス名 [$TMPDIR/resolvy] |
file:/path | -- パスワードファイルパス名 [/etc/hosts] |
nis:nisDomain | -- NIS ドメイン名 [default domain] |
dns:dnsHost | -- DNS サーバとデフォルトドメイン |
RES_CONF parameter == RES_CONF=URL -- default: RES_CONF="file:/etc/resolv.conf" or from registry (on Windows)
RES_NS parameter == RES_NS=dnsServer[//socksV5Host] -- default: RES_CONF による
RES_RR parameter == RES_RR=HostList -- default: RES_RR="*"
RES_VRFY parameter == RES_VRFY="" -- default: none
RES_DEBUG parameter == RES_DEBUG=number -- default: none
ProtoList == [!]protoSpec[,ProtoList] protoSpec == protocolName[/[portNumList][/methodList]]
HostList == [!][-iType]hostSpec[,HostList] iType == {h|a|c|*}/[iType] hostSpec == [{userList}@]hostSpec[/netMask] userList == userNamePattern[,userNamePattern]* hostSpec == hostNamePattern|hostAddrPattern userNamePattern == [*]uname[*] hostNamePattern == [*]hname[*] hostAddrPattern == IPaddressPattern|IPrange netMask == IPaddress|maskLength
例) 不明ホストや、不明ユーザからのアクセスを抑制する
例)CMAP を使って、条件付でフィルタリングする。
例)
例)
period の完全な書式はこのようになります: [wW]HH[MM][-HH[MM]]. 週内の時間制限は、"wW" で表現され、ここでの W は、 "0"(日曜日)から、"6"(土曜日)の範囲です。 利便性のため、日曜日は、"7" でも表現できます。
例)
"+=file"のようなオプションは、オプションのリストが列挙された、 "file"の名前を持つリソースに置換えられ、"name=+=file"のようなオプションは、 "name=value"リストに置換えられ、この"value"は、"file"中に列挙されます。 同様に、"name=xxx:+=file"のようなオプションは、 リスト"name=xxx:value"によって置換えられます。
置換は、繰返し実行できます。 この場合、相対リソース名は、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つの例は、他と同じ意味を持ちます。
置換リソースは、DeleGateが、SIGHUPを受けるか、CRONパラメータの"-restart"動作により、 再起動したときに再読込されます。
他の置換 "name=-=URL" は、URLの内容をローカルファイルシステム上(ACTDIR内)の 一時ファイルに読込み、パラメータを"name=/path/of/temporary-file"に書換えます。 これは、"-eCONFIGDATA=-=http://server/configData"のように、リモートリソースを CGI または、 CFIプログラム経由にしたい場合、有効です。 この場合、これらプログラムは、環境変数 CONFIGDATA ("http://server/configData" の内容を含む一時ファイル名を値に持つ)で与えられます。
CFI と CFI スクリプト
filterName="filterSpec" CMAP="filterSpec":filterName:connMap filterName == FCL | FTOCL | FFROMCL | FSV | FTOSV | FFROMSV | FMD | FTOMD | FFROMMD filterSpec == filterCommand | CFIscriptName | tcprelay://host:portfilterName は、FXX, FTOXX,FFROMXX のような名前で、 XX はCL (クライアント), SV (サーバ), MD (MASTER-DeleGate)の内の一つです。 FXX のフィルタコマンドは、クライアントに対して、 ファイルディスクリプタ0がバインドされ、DeleGateに対しては、ファイルディスクリプタ1がバインドされます。 FTOXX と FFROMXX のフィルタコマンドは、標準入力から入力を受け、 XX に対してバインドされた標準出力へ、出力を投げます。 リモートホストの単方向フィルタは、"tcprelay://host:port" により、 TCP 上で接続し使用することができます。
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 応答メッセージの書換え
[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書換えによるプロキシ動作
U->C:
user opens http://delegate/-_-http://www/path1
C->D: GET /-_-http://www/path1
D->S: GET /path1
D<-S: HREF=/path2
C<-D: HREF=http://delegate/-_-http://www/path2
U->C: user clicks the anchor
C->D: GET /-_-http://www/path2
D->S: GET /path2
S->D: HREF=ftp://ftp/path
D->C: HREF=http://delegate/-_-ftp://ftp/path
元々、この宛名書換え機構は、Gopherプロキシと、HTTPプロトコルを拡張するために実装され、 後に、汎用MOUNT機構に拡張されました。現在、ほとんど"-_-"をともなう宛名書換えと同じ効果は、 以下のように、"-_-"と任意文字列を許可する、MOUNTパラメータに受け継がれています。
HTML中にDeleGateのスイッチングテーブルを書くことができます。 もし、異なるネットワークプロバイダなどに接続した、2つのDeleGateホストがあり、 ブラウザの設定を変更せず、"http://delegate/-_-"をプリフィックスした長ったらしいURLをタイプせずに、 それらの一つを明示的に選択したい場合。 このように、HTML中にテーブルを書込み、DeleGateを選択できます:
このテーブルは、クライアントが DeleGate を使う・使わないにかかわらず、動作します。 なぜなら、DeleGate は、上記表現による応答メッセージ中の URL 書換えを行いません (上記のようにすでにURLが書換えられています)。
-_- マーク以降の右側には、オプションで、以下のように、"/Modifier/"書式を差込めます:
共通の表記
TCPrelay
例) 同様の役割をする、TCP上の2つのプロキシ
UDPrelay
例) 同様の役割をする、UDP上の2つのプロキシ
例)UDP/TCP 間のゲートウェイ
上記のような一対のゲートウェイは、TCP接続上でUDPパケットを伝送できますが、 このようなリレー(トンネリング)は、単一の TCP 接続で SockMux を使用することで、さらに能率的に実現できます。
DGAuth サーバ
例) DGAuth-DeleGate サーバとそのクライアント
例) DGAuth-DeleGate サーバと同じホスト上のクライアント
DGAuth サーバは、各プロトコル用のダイジェスト計算に使用するコンポーネント一式を受信し、 以下のように、ダイジェストを返します。
要求: HTTP user nonce realm method uri APOP user nonce [realm] (not used currently) 応答: 200 digest 501 syntax error 502 unknown user
PAM server
例) PAM-DeleGate サーバとそのクライアント
例) PAM-DeleGate サーバとそのクライアントの SSL 上での通信
注記:ほとんどの PAM 認証は Unix 上のスーパーユーザ特権 (OWNER="root" オプションを伴う)で実行することが必要です。 しかし、DGROOT/subin/ に 外部プログラム "dgpam" をインストールすることで、 スーパーユーザ特権をともなう DeleGate を走らせることを回避できます。
実験 PAM/HTTP サーバ の初期ポート番号は、8686 です。 他のポートは、 AUTHRIZER=-pam//host..port で指定できます。例) AUTHORIZER="-pam//hostX..8765/passwd"
PAM/HTTP プロトコルは、以下のような HTTP 互換 要求/応答メッセージ書式を使用します。
Request: GET /-/pam/service/auth HTTP/1.0 Authorization: Basic BASE64of(User:Pass) Response (one of followings): HTTP/1.0 200 OK, authorized HTTP/1.0 401 Not authorized HTTP/1.0 403 Forbidden to use the PAM server要求 URL の基準 "/-/pam/" は、PAMCONF="baseurl:/basePath/" で、 任意のパスに置き換えることが出来ます。 要求 URL 全体は、PAMCONF="url:/path" で置き換えられます。 現仕様では、応答メッセージ中の内容は注意されませんが、 将来、いくつかの認証関連情報または、能力情報は伝達できるようになります。
書式により、あなたは、PAM-DeleGate に代えて、CGI 等を伴う HTTPサーバ を使用し、PAM サーバを開発できます。
SockMux サーバ
持続的接続は、レセプタ側では、"-Phost:port" パラメータ、コネクタ側では、 "SERVER=sockmux://host:port" によって生成されます。 外部のリモートへの転送を行うため、接続を受理するポートは、 PORT="listOfPorts パラメータで指定します。 リモートから内部サーバへの接続は、接尾文字列 ",-in" を、SERVER="telnet://host:23,-in" のようにつけて指定します。
1つの内部への接続は、指定したプロトコルのプロキシである DeleGate で処理できます。 プロトコル名が、SERVER="telnet,-in" または、"-in" が接尾された "-in(option list)" のような 指定をした場合のみ、DeleGate は接続処理を呼び出します。 オプションリスト は、呼び出された DeleGate にコマンドラインオプションリストとして渡されます。 例)SERVER="telnet://host,-in(+=config.cnf)" は、 ``delegated SERVER=telnet://host +=config.cnf'' のような コマンドラインオプションで、DeleGate を呼び出します。
例)双方向 SockMux-DeleGate
例)単方向 SockMux-DeleGate
例)単方向 を proxy-Telent-DeleGate へ
SockMux をソケット間のデータリレーに使用する場合、 アプリケーションプロトコルを解釈せずに SockMux 上をリレーし、 このようなリレーは、SERVER パラメータの代わりに、 DEST パラメータを使用することで、以下のように、簡単な表記で表現できます:
例) tcprelay over SockMux
Example: relaying UDP over SockMux/TCP
これらは、他の方法として、名前付パイプのような 単一の FIFO デバイスを使用し 2つの SockMux-DeleGate 間の持続的接続を生成します。 それは、SERVER=sockmux:commtype@fifoName のように指定し、 この、commtype は、"commin", "commout", "comm" の内一つで、 それぞれ、単方向入力,単方向出力,双方向入出力 を表します。
例)ホスト上の FIFO デバイスを使用する。
例)2ホスト間の通信ポートを使用する(未テスト)。
持続的接続は DeleGate により呼び出された外部プログラムにより生成できます。 プログラムの処理は、ファイルディスクリプタ番号 0 および、1 で DeleGate とのソケット がやり取りされます;
例)外部コマンドを使用して接続を開始する。
リモートから内部への接続するための対象サーバは、 受け入れたリモートポートによって選択できます。 SERVER パラメータに、 ":-:-Pxxxx" を接尾することで、PORT=xxxx によりリモートホスト上で受理された接続にのみ有効になります。
例)複数のポートを転送する
注記)FTP データ接続の転送は、(まだ)サポートされません。
Socks サーバ
例) Socks-DeleGate
Socks-DeleGate サーバ経由で内向けの TCP 接続を許可する場合、
そのために使用されるネットワークインターフェースは、DeleGate が自動的に選択します
(DST.ADDR または、SOCKS クライアントから BIND コマンドのパラメータとして送られた、DSTIP を基準として)。
SRCIF をともなう場合、擬似プロトコル名 "tcpbind" と共に、
ネットワークインターフェース(およびポート番号)を指定できます。
パラメータの完全な書式は、
SRCIF=
"[host]:[port]:tcpbind[:dstHostList[:srcHostList]]" となります。
通常、host フィールドには、選択するネットワークインターフェースのみを、
SRCIF="150.29.202.120::tcpbind" のように指定します。
HTTP プロキシ/サーバ
このDeleGateを内部ホスト上のクライアントから使う場合、
HTTP, HTTPS (Security), FTP, Gopher, Wais のプロキシに "firewall:8080"を指定します。
例) HTTPプロキシDeleGate(カスケード)
内部ホストからの要求のみ受け付けるgeneralist DeleGateをfirewall
上で走らせ、firewallホスト上のgeneralistを使用する、specialistを内部で、走らせる。
generalistは、上流DeleGateとして、任意プロトコルの複数のDeleGateから、共有できます。
例) 元HTTPサーバDeleGate
例) DeleGateをCGIプログラムとして使う
HTTP 伝送ログ書式
Socks-DeleGate は、SocksV4とV5の両方を受け付けます。
現在、SocksV5 における USER/PASS 認証の仕組みのみ使用可能です。
# delegated -P1080 SERVER=socks
例) 上流Socksサーバ に転送する。
# delegated -P1080 SERVER=socks SOCKS=sockhost
例) 単一HTTPプロキシDeleGate
firewall% delegated -P8080 SERVER=http
firewall% delegated -P8888 SERVER=delegate RELIABLE=internal
internal% delegated -P8080 SERVER=http MASTER=firewall:8888
".cgi" 拡張子をともなう名前のファイルは、CGIスクリプトとみなされます。
以下のように、MOUNTで指定したディレクトリ内の任意名のCGIスクリプトを使用できます。:
MOUNT="/xxx/* cgi:/path/of/cgi-bin/*"
DeleGateを、HTTPサーバからのCGIプログラムとして使用できます。
例)以下のように、HTTPサーバ(A)の"httpd.conf"ファイル中で指定する。
Exec /other/* /path/of/cgi-delegate
次に、以下のような内容のファイル /path/of/cgi-delegate を書きます:
#!/bin/sh
これは、
/other/www2/(HTTPサーバ"wwwserv2"の内容)と、
/other/news/(NNTPサーバ"newsserv"の内容)を含む、
擬似サブツリー"/other/"をサーバ(A)に追加します。
MOUNT="/www2/* http://wwwserv2/*" \
MOUNT="/news/* nntp://newsserv/*"
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)
%s -- HTTPCONF=session によるセッション ID
%As -- ダイジェスト認証中のセッション ID
%{field} -- 要求メッセージ中の任意のフィールド
"%s" により出されるセッション識別は、 AUTHORIZER=-dgauth オプションによって生成された "%As" の間、 HTTPCONF=session:cookie によって生成されています。 セッション識別の書式:
例) "031114-173045.1234.5+6+7.9" は、PID=1234 のプロセスによって、 November 14 の 17:30:45 に開始されたセッション中での クライアントからの9回目の要求であることを意味します。 セッションの開始は、LOGFILE にこのように記録されます。
注記: reqnum 部分は、並列、または、パイプライン 要求がセッション所有者であるクライアントによって生成された場合、 ユニークではありません。 Note that the reqnum part for "%As" may not be incremented on each request because the container of session identifier, the opaque" parameter in Digest Authentication in this case, may not be updated on each request.
HTTPCONF parameter == what:conf
例)
例)
例)
例)
HTTPCONF="add-qhead:X-Forward-For:%a"
例)
例)
例)
FILETYPE parameter == suffix:gopherType:altText:iconName:contentType -- default: FILETYPE=".txt:0:TXT:text:text/plain" FILETYPE=...
例)
FILETYPE=".txt:0:TXT:text:text/plain"
FILETYPE=".gif:g:GIF:image:image/gif"
CGIENV parameter == CGIENV=name[,name]* -- default: CGIENV="*"
制御:
例)仮想ホスティング,複数の HTTP サーバとして動作する
> MOUNT="/* http://wwwA/* vhost=-dom1.com"
> MOUNT="/* http://wwwB/* vhost=-dom2.org"
> MOUNT="/* file:data/wwwC/* vhost=-dom3.net"
> MOUNT="/* file:data/www/*"
例)
MOUNT="http:* = method=POST,asproxy,useproxy"
MOUNT="http:* = withquery,asproxy,useproxy"
HTTP-DeleGate の AUTH パラメータ
例)
%u | -- Identプロトコルで得られたユーザ名 |
%h | -- ソケットから得られたクライアントのホスト名 |
%i | -- クライアントに向けたネットワークインタフェースのホスト名 |
%I | -- %i と同様ですが、HTTP で "Host:" が与えられた場合その値を使用します。 |
%a | -- クライアントのホストアドレス |
%n | -- クライアントのネットワークアドレス |
%H | -- DeleGateのホスト名 |
%M | -- DeleGateのADMIN |
%A | -- "CMAP=string:authgen:mapSpec"によって生成される文字列 |
%U | -- クライアントの [Proxy-]Authorization: username:password の username 部 |
%P | -- クライアントの [Proxy-]Authorization: username:password の password 部 |
例)
"passWord/%i"書式でパスワードが生成され、DeleGateは、 このようなパターンのAuthorizationフィールドをともなって入ってくる要求を拒否します。 このように、偽パスワードは、ホスト"%i"上のDeleGateを通過できません。
例)
%F | -- FromフィールドのE-mailアドレス |
%L | -- From: local@domain フィールドのlocal部 |
%D | -- From: local@domain フィードのdomain部 |
%U | -- Authorization: username:password のusername部 |
%P | -- Authorization: username:password のpassword部 |
%Q | -- Forwarded: フィールドの"for clientFQDN" 部分 |
例)
firewall% delegated AUTH="fromgen:%u@%h" ...
internal% delegated AUTH="log:%D/%h:%L/%u:%U" ...
ユーザによるDeleGateの構成
例) ニュースサーバNを、http://delegate/news/servN/にMOUNTする
(この機能は、FTPのような他のプロトコルに適用するべきです...)
SHTMLファイルでのサーバサイドの実装(SSI)
SSI タグ
META タグ
ICP プロキシ/サーバ
例) ICP とHTTP DeleGateの組は CACHEDIRを共有。
ICPCONF parameter* == ICPCONF={icpMaxima|icpConf} icpMaxima == para:N|hitage:N|hitobjage:N|hitobjsize:N|timeout:N icpConf == icpOptions:ProtoList:dstHostList:srcHostList -- default: ICPCONF=para:2,hitage:1d,...
para:N | -- 並列ICP-DeleGateサーバ数 [2] |
hitage:N | -- HITとして通知する、キャッシュデータの有効期限 [1d] |
hitobjage:N | -- HIT_OBJ似よって送信される、キャッシュデータの有効期限 [1h] |
hitobjsize:N | -- HIT_OBJによる、キャッシュデータの最大容量 [1024](bytes) |
timeout:N | -- 応答待ちタイムアウトのデフォルト値 [2.0](seconds) |
debug:N | -- デバッグ用ログレベル [0] |
FTP プロキシ/サーバ
完全な書式 user:pass@host[:port] もまた、以下のように、 URL中の一般的なサーバ表記において、USERと、CWDが使用可能です。
マルチホームホスト、または、ファイアーウォールに隠されたホスト上で、 データ接続用の IP アドレスまたは、ポート番号は、SRCIF によって、制御できます。
例) プロキシ FTP-DeleGate
このFTPプロキシを経由して、任意のFTPサーバ (ファイアウォールの外側にあっても良い)に接続できます。
internal% ftp ftp> open firewall 8021 220- firewall PROXY-FTP server (DeleGate/6.1.0) ready. 220- @ @ 220- ( - ) { DeleGate/6.1.0 (February 3, 2000) } ... 220- -- 220- You can connect to a SERVER by `user' command: 220- ftp> user username@SERVER 220- or by `cd' command (after logged in as an anonymous user): 220- ftp> cd //SERVER 220- Cache is enabled by default and can be disabled by `cd .' (toggle) 220- This (proxy) service is maintained by 'admin@your.domain' 220 Name (yourhost:yourname): ftp@ftp1 331-- USER for ftp@ftp1. 220- ftp1 FTP server ready. 331- Guest login ok, send your complete e-mail address as password. 331-- @ @ 331 \( - )/ -- { connected to `ftp' } Password: me@my.domain 230 Guest login ok, access restrictions apply. ftp> cd //ftp2 250-- CWD for ftp@ftp2 220- ftp2 FTP server ready. 230- Guest login ok, access restrictions apply. 250-- @ @ 250 \( - )/ -- { connected to `ftp2' } ftp>注記:大抵のftpクライアントは、以下のように、コマンドラインで、FTPのポート番号を指定可能です。
例) フィルタ/マージ/エイリアスをともなう、FTP MOUNT
例) FTP to LPR (Line Printer Daemon Protocol) ゲートウェイ
LPR/FTP-DeleGate は、FTPクライアントがリモートプリンタにアクセスできるようにします;
ファイルの印刷は、FTPのファイルアップロードによって行われ、
プリンタステータスは、FTPディレクトリリストで見ることができます。
MountOption "readonly"は、ステータス閲覧を禁止します。
このDeleGateは、serv1の全ての内容を中継し、"/pub2/*"は、ftp://serv2/pub/* のそれと置換えられた部分が除外されます。
MOUNT="/* lpr://printer0/queue0/*"
MOUNT="/pr1/* lpr://printer1/queue1/*"
MOUNT="/pr2/* lpr://printer2/queue2/*"
例) 元FTP-DeleGate
"RELAY=no" は、DeleGate が プロキシ FTP サーバとして動作するのを禁止します。
元FTP-DeleGateこのケースでの、ファイルへの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT="/xxx/* /yyy/* rw"のように、MOUNTポイントに対し、
マウントオプションとして、"rw" (read/write)を指定する必要があります。
全コンテンツはの取込動作は、指定ディレクトリ内に行われ、
"RETR directory.tar" コマンドによって、
tarフォーマットの単一ファイルとして返されます。
この機能を有効にするには、REMITTABLE="+,tar"のように、
REMITTABLE リストに、"tar" を追加します。
FTPCONF parameter* == FTPCONF=ftpControl[:{sv|cl}] ftpControl == nopasv | noport | noxdc | rawxdc -- default: none
上で列挙された ftpControl は、"nopasv:sv" のように ":sv" または ":cl" がつづく場合、 例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに 適用されます。
FTP 伝送ログ書式
transferTime は、秒で表される、トータル伝送時間です。 transferType "a" (アスキー) または、"b" (バイナリ)のどちらかです。 specialActionFlag は、現実装では、常に "_" (none) です。 direction は、"o" (outgoing) または、"i" (incoming)のどちらかです。 accessMode は、"a" (anonymous)または、 "r" (real user)のどちらかです。 userName は、e-mail アドレス(accessMode "a") または、存在するユーザ名(accessMode "r")のどちらかです。 serviceName 現実装では、常に"ftp"です。 authenticationMethod は、"0" (none) または、 "1" (RFC1413 Authentication)のどちらかです。 authenticatedUserID は、 authenticationMethod によって得られたユーザID、または "*"(認証なし)のどちらかです。 DeleGateStatus は、"L" (local file), "H" (cache hit), "N" (cache miss)のどれかです。.
例)
Telnet プロキシ/サーバ
例) プロキシ Telnet-DeleGate
このTelnetプロキシ経由で、任意のTelnetサーバに接続できます。
internal% telnet firewall 8023 ... -- @ @ firewall PROXY-telnet server DeleGate/6.1.0 -- ( - ) { Hit '?' or enter `help' for help. } ... -- -- -- This (proxy) service is maintained by 'admin@your.domain' >> Host name: exthost -- Connected to exthost. SunOS UNIX (exthost) login:
例) 元 Telnet-like server
POP プロキシ
例) プロキシ POP-DeleGate
external% telnet firewall pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username@servername
...
username と、servername 間の区切り文字には、"@" の代わりに、
"%" や、"#" が以下のように利用可能です。
username%servername または、
username#servername
対象 POP サーバが APOP 認証を受付出来ることを示した場合、 (タイムスタンプを伴う挨拶メッセージによって) DeleGate は、最初に APOP ログインを試み、失敗した場合、USER+PASS を再試行します。 しかし、サーバがその挨拶にもかかわらず APOP を受け付けない場合、 以下のように、"noapop" MountOption によって、APOP による試行を禁止できます。
例) POP MOUNT
MOUNT="//* ="
... サーバがユーザによって指定された場合、書換えしない
MOUNT="* pop://defaultHost/*"
... デフォルト POP サーバを指定
MOUNT="user1 pop://host1/*"
... "user1"のサーバを "host1"にする
MOUNT="//pop2/* pop://host2/*"
... 実ホスト名 "host2"を隠し、user@pop2 を user@host2 にマップする
例) NNTP サーバから POP クライアントへのゲートウェイ
クライアントは、ユーザ名として、ニュースグループ名を送信することが要求されます。
例) POP サーバから HTTP クライアントへのゲートウェイ
このDeleGateは、POPサーバ(デフォルトでmailHost にある)のメールボックスを、 HTTPクライアントに提供します。 クライアントが、"http://firewall/mail/"にアクセスするには、 HTTPの認証情報として、mailHost にある POP サーバの Username と Password を入力するように要求されます。 Usernameが、"user@mailHost2" の場合、mailHost ではなく、 mailHost2 が対象POPサーバとしてアクセスされます。 Hostサーバユーザのそれぞれのメールボックスは、 "http://firewall/mail/+pop.User.Host"になり、URL中にUserとHostを直接指定できます。
IMAP プロキシ
external% telnet firewall imap
* OK external Proxy-IMAP server DeleGate/6.1.15
C001 LOGIN username@servername
...
LOGIN username%servername も受けいれられます。
SMTPCONF parameter == SMTPCONF=what:conf -- default: SMTPCONF=bgdatasize:64K
SMTPGATE parameter == SMTPGATE=dirPath -- default: SMTPGATE='${ETCDIR}/smtpgate'
例) SMTP から SMTP へ、転送
delegate.org# delegated -P25 SERVER=smtp
[the contents of SMTPGATE/users/feedback/conf]
SMTPGATE設定ファイルは、命令行の集まりによってなるファイルで、 それぞれは、インターネットメッセージのメッセージヘッダのようです。 それぞれの行で、シャープキャラクタ(#)に続くコメント文字列は、無視されます。 命令は、3つのグループに分類されます;CONTROL , ACCEPT , OUTPUT
SMTP-DeleGateが、recipient@mailhost, のようなアドレスをともなう受信者にバインドするメッセージを受信したとき、 以下の順序の2つの命令で、受信者の設定ファイルを検索します。
受信者の設定が見つからない場合、以下のディレクトリ内のデフォルト設定(存在する場合)を使用します。
他の場合、内臓のデフォルト設定が使用されます。 デフォルトは、"/-/builtin/config/smtpgate/@default/conf" にあり、 MOUNTオプションでカスタマイズできます。 デフォルトのないようは、以下のようになっており、受信者のメールエクスチェンジャを経由して、 受信者のアドレスに、入力メッセージを配送します。
例)
NNTP プロキシ/サーバ
例)フィルタ
ニュースグループ名が"group.*"のパターンを持つ場合のみ中継する。 nntpServerに対するグループリストは "nntp://nntpServer/group1.,group2.,..." のように指定できます。
例)複数のNNTPサーバを認証付(AUTHINFOを使用)でマージ
例) 選択したグループをマウント
例) POP サーバから NNTPクライアントへ
例) NNTP サーバから HTTP クライアントへ
例)元 NNTP-DeleGate
NNTP-DeleGateのSERVERパラメータ中の対象サーバに"-.-"を指定すると、 DeleGateを元NNTPサーバとして使うことを意味し、それの持つスプールに検索/投稿できます。 この新たなニュースグループ名 newsGroup を作るには、空ファイルを作ります。
NNTPのMountOptions
NNTPCONF parameter* == what:conf -- default: NNTPCONF=upact:600/300/120
LDAP プロキシ
このDeleGateをクライアントのLDAPサーバとして指定し、ルートディレクトリ名 (例えば、サーチ用、baseObject名)の後に"@host.of.ldap-server"を付加します。
% ldapsearch -x -h localhost -p 389 -b o=netcenter@memberdir.netscape.com
Whois プロキシ
X プロキシ
Gopher プロキシ
internal% gopher firewall 8070
internal% gopher -p -_-gopher://gopher.tc.umn.edu firewall 8070
SSL プロキシ
例) SSLサーバ・非SSLクライアント間を中継
DNS (Domain Name System) プロキシ/サーバ
例) {NIS,FILE,DNS}/DNS ゲートウェイ
hostname のための MX レコード は、与えられた場合、 -MX.hostname ( 以下の例のように)または、 hostname のための A レコードが使用されます。 複数の MX レコード間の優先順位は、現実装では表現できません。
例)HostB の MX として、HostA の hosts テーブルを使用する。
DNSCONF parameter* == what:value
para:N | -- 並列サーバプロセス数 [2] |
domain:FQDN | -- [DeleGateホストのドメイン名] |
origin:FQDH | -- [DeleGateホストのホスト名] |
admin:Email | -- 管理者のメールアドレス [ADMIN] |
mx:FQDH | -- [存在する場合、-MX.host のプライマリホスト名、または、自身による host 問い合わせ] |
serial:N | -- シリアルナンバ [最終変更時の %Y%m%d%h ] |
refresh:period | -- リフレッシュ間隔 [6h] |
retry:period | -- リトライ間隔 [10m] |
expire:period | -- 有効期限 [14d] |
minttl:period | -- 最小 ttl [6h] |
CU-SeeMe プロキシ
予約名
AF_LOCAL ソケット
カスタマイズ
アタッカー防御
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、
存在するアドレス上にターゲットバッファが存在していることを期待しており、
スタックアドレスをランダマイズすることは、アタック成功の糸口を減少するのに効果的です。
そして、アタックの失敗は、致命的エラーを発生させ、DeleGateにより、捕獲されます。
疑わしいクライアントホストは、関連ファイル(ADMDIR/shutout/ 内)を削除するか、
TIMEOUT=shutout(デフォルト30分)でファイルの有効期限が切れるまで、シャットアウトされます。
安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。
しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御設定はもちろんのこと、
このような攻撃を防ぐよう意識を高く持ってください。
紳士的再起動
再起動は、DeleGateの設定変更した後に行います。再起動時にパラメータを再読込するためには、
+=parameters 表記(パラメータ置換)を与える必要があります。
他のオプション(パラメータ)は、コマンドライン引数で与え、
これは、リスタートしたDeleGateプロセスに継承されます。
他の再起動目的は、ごみや、リーク(ヒープメモリや、ファイルディスクリプタ)を、お掃除します。
この目的の場合、DeleGateは
TIMEOUT=restart
または、CRON パラメータの
-restart 動作で、それぞれ予定した時間に、周期的に再起動できます。
-Ffunction より前、および、"--" オプション以降のコマンドラインオプションは、
DeleGate に対してのオプションとして、
機能
( delegated dgopt ... dgopt
-Ffunc fopt ... fopt
-- dgopt ... dgopt )
よりも、優先されます。
例外として、name=value 書式のパラメータオプションは、
fopt の位置に現れた場合、DeleGate のパラメータとして認識されます。
例) レゾルバとしてDeleGate を使う
ファイル
詳細は、DGROOT パラメータと、 ローカルファイル使用法
の記述を参照して下さい。
著者
フィードバック
アイコンとメッセージを含む、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パラメータの名前の管理者にレポートメールを送信します。
プラットフォームに関する詳細
起動時、元環境変数と、スタック領域上のコマンドライン引数は、ヒープ領域に移動・消去され、
アタッカーの侵入コードに利用されないようになっています。
同時に、ランダムな長さの値(MAXIMA=randenvが最大)を持つ RANDENV ダミー環境変数が、
環境変数のランダムなアドレスに挿入され、フィルタプログラムや、
CGIプログラムのような子プロセスに継承されます。
機能オプション
子プロセスの外向けセッションを中止せず、DeleGateのプロセスIDを変更せず、
入力ポートなどのリソースを保持したまま、
DeleGateプロセスにSIGHUPシグナルを送信し、優しくDeleGateを再起動します。
プラットフォームに属さない方法は、
このように、-Fkill 機能を使用することで行えます。
delegated -Fkill-hup -Pport
また、SIGHUPでの再起動は、AUTH=admin パラメータを使い、
"http://delegate/-/admin/"にて、リモートHTTPクライアントで、実行できます。
-Ffunction
オプションが与えられる場合、DeleGateは、指定した機能を実行するために動作し、
通常は、特定プロトコルのクライアント側の動作をします。
長い "delegated -F" 入力をファイル名 "function" を
DeleGate 実行ファイルに与えることで省略でき、function としてコールできます。
function 名のマッチは、case-insensitive です。
% delegated -Fresolvy www.delegate.org
以下は主要機能の一覧です。
% ln -s delegated Resolvy
% Resolvy www.delegate.org
例)"du(1)"と共に、"find . -ls" を実行
delegated -Ffindu -ls -du
例) 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"
例)
delegated -Fauth -a ken:blahblah -smtp.users.local
// AUTHORIZER=-smtp.users.local としても適用します。
参考文献
${DGROOT}/etc -- 主に設定のための持続性ファイル
${DGROOT}/lib -- ライブラリファイルとスクリプト
${DGROOT}/adm -- 管理に関係する重要なログ
${DGROOT}/log -- 増加するログファイル
${DGROOT}/work -- コアダンプ用
${DGROOT}/cache -- キャッシュデータ用
${DGROOT}/act -- 現在アクティブなDeleGateの制御情報
${DGROOT}/tmp -- シャットダウン時に削除される揮発性ファイル
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),
,
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)
DNS(RFC1034),
FTP(RFC959),
Gopher(RFC1436),
HTML(RFC1866),
HTTP(RFC2068),
ICP(RFC2186),
Ident(RFC1413)
@ @
( - )
_< >_
Yutaka Sato <y DOT sato AT delegate DOT org>
National Institute of Advanced Industrial Science and Technology (AIST),
Tsukuba, Ibaraki 305-8568, Japan
DeleGate に関するコメントを、
mailto:feedback@delegate.org
へ送ってください。
それらは、
http://www.delegate.org/feedback/
で、開示、および、共有されます。
配布
最新バージョンの DeleGate は、以下の場所で入手可能です。
<URL:ftp://ftp.delegate.org/pub/DeleGate/>
名前が、"delegate*.tar.gz" の tar+gzip フォーマットファイル。
リリース 8.9.6 最終更新: 2004年9月15日 --------- --------- --------- --------- --------- --------- --------- ---------