LIBPATH parameter == LIBPATH=dirPath[:dirPath]* -- default: LIBPATH=LIBPATH='.:${STARTDIR}:${LIBDIR}:${EXECDIR}:${ETCDIR}'
DATAPATH parameter == DATAPATH=dirPath[:dirPath]* -- default: DATAPATH='.:${DGROOT}:${STARTDIR}
DGPATH parameter == DGPATH=dirPath[:dirPath]* -- default: DGPATH='+:.:${HOME}/delegate:${EXECDIR}:${ETCDIR}'
DGSIGN parameter == DGSIGN=signatureSpec -- default: DGSIGN="V.R.P/Y.M.D"
DGOPTS parameter == DGOPTS=opt[;opt]* -- default: none
SOCKOPT parameter* == SOCKOPT=[no]name[:value] -- default: reuse
PORT parameter == PORT=port[,port]* port == [host:]portNum[/udp] portNum == number[-number] -- default: none
FORWARD parameter* == FORWARD=gatewayURL[-_-connMap] gatewayURL == gwproto://gwhost[:gwport] connMap == protoList:dstHostList:srcHostList -- default: none
特別な、gwproto で、FORWARD は、 MASTER, PROXY, SOCKS、および SSLTUNNEL の一般化表記として次のように動作します。
複数の FORWARD パラメーターが指定された場合、設定された順序で試されます。 対象サーバーに対し複数のルートが利用可能な場合で、 FORWARD と、他のパラメーター(MASTER, PROXY, SOCKS, SSLTUNNEL) の混合とともに指定された場合、 FORWARD により指定されたルートは、CONNECT で、 "proxy" または、"master" により指定された優先順位で試行されます。
ROUTE parameter* == ROUTE=proto://host:port/-_-dstHostList:srcHostList -- default: none
stHostList 中のホスト指定に、"proto://" を 前置きすることで、転送するプロトコルを制限できます。 例)ROUTE="http://host:port/-_-{ftp://*}:*" は、 FTP サーバーへのアクセスだけ、"http://host:port/" の HTTP プロキシーへ 転送されることを意味します。
dstHostList 中のホスト指定は、ポート番号指定で、さらに制限できます。 例)ROUTE="http://host:port/-_-{*:21}:*" は、 ポート番号 21(FTPサービス)でだけアクセスでき、プロキシーへ転送されます。
MASTER parameter* == MASTER=host:port[/masterControl][:dstHostList] -- default: none
MASTERP parameter == MASTERP=[host:port] -- default: none
RPORT parameter == RPORT={tcp|udp}[:host] -- default: none
PROXY parameter* == PROXY=host:port[:dstHostList] -- default: none -- 制限: HTTP, FTP, Telnet に適用可能
SOCKS parameter* == SOCKS=host[:[port][/socksOpt][:dstHostList[:srcHostList]]] socksOpt == [ -4 | -r ]* -- default: none
例)
SSLTUNNEL parameter == SSLTUNNEL=host:port -- default: none
VSAP parameter == VSAP=host:port -- default: none
例)
YYMUX parameter* == YYMUX=host[:port][:connMap] connMap == ProtoList[:dstHostList[:srcHostList]] -- default: none
YYCONF parameter* == YYCONF=name[:value] -- default: none
CONNECT parameter* == CONNECT=connSeq[:connMap] connSeq == connType[,connType]* connType == cache|icp|proxy|master|https|vsap|direct|socks|udp connMap == ProtoList[:dstHostList[:srcHostList]] -- default: CONNECT="c,i,m,h,y,v,s,d:*:*:*"
connType:
cache | -- CACHE を検索 (接続しない) |
icp | -- ICP サーバーに指示された PROXY 経由 |
proxy | -- PROXY サーバー経由 |
master | -- PROXY または MASTER-DeleGate サーバー経由 |
https | -- SSLTUNNEL (HTTP 上の SSL トンネル) 経由 |
yymux | -- YYMUX サーバー経由 |
vsap | -- VSAP サーバー経由 |
direct | -- 目的サーバーへ直接接続 |
socks | -- SOCKS サーバー経由 |
udp | -- UDP による |
none | -- 接続しない |
それぞれの接続タイプは、それぞれ {c,i,m,d,v,s,u} のように、
頭文字で省略できます。
ProtoList と dstHostList が指定された場合、
リストに含まれるプロトコルとホストにのみ制御が適用されます。
例) 外部ネットワークに接続せず、ホスト上のキャッシュデータを使う場合、
CONNECT="cache:*:!./@"のように指定します。
注記) 現実装では、"cache" が connSeq に含まれる場合、 常に最初に試されます。
-Pport と CONNECT=udp の組合わせは、TCP クライアントから UDP サーバーへ中継します。 また、-Pport/udp と udp ではない CONNECT の組合わせは、 UDP クライアントから TCP サーバーへ中継します。SRCIF parameter* == SRCIF=host[:[port][:connMap]] connMap == ProtoList:dstHostList:srcHostList -- default: SRCIF="*:*:*:*:*"
このパラメーターで、それぞれのサーバーへ接続する際の ソースアドレス(ネットワークインターフェースの)を指定します。 これは、DeleGate ホストが複数のネットワークインターフェースを持つ場合に役立ちます。 それは、SOCKS-DeleDate または、FTP-DeleGate により受け付けられる クライアント接続で使用するポートの指定にも使えます。
ほとんどの場合、特殊パターン "*" を host または、port に指定した場合、 IP アドレス、またはポート番号をワイルドカード指定します。 いくつかの場合、特殊パターン "*" は、 FTP データ接続 (PORT や PASV による) 用ポート、または、 SOCKS (BIND と UDP-ASSOCIATE) 用ポートのような、 プロトコルによって指定された必要なアドレスや、ポート番号に使われます。 ワイルドカードを IP アドレスと、ポート番号で明示的に指定するには、 それぞれ、host に "0.0.0.0" を、port に "0" を指定します。
例)
要求に応じて割り当てられ、相手に通知された "ftp-data" 接続用のポート ( PORT により クライアントからサーバー、PASV によりサーバーからクライアントに向けられた) は、"ftp-data-port" または、"ftp-data-pasv" により、それぞれを個別に制御できます。 PORT のためにサーバーからクライアント、または、PASV のためのクライアントからサーバーへ 確立されるデータ接続用のソースポートは、"ftp-data-src" によって制御できます。
TUNNEL parameter == TUNNEL=tunnelType:script tunnelType == tty7 -- default: none
現状、tunnelType は、"tty7" でなければならず、それは、 DeleGate 間の伝送が 7ビットストリームで行われることを意味します。 タイプが "tty7" の場合、トンネルを確立する方法を、 指定した SHIO スクリプトファイルに書いておきます。 配布パッケージに含まれる、"src/sample.shio" を参照して下さい。 スクリプトファイル名は、絶対パスまたは、 相対パス (LIBPATH で検索できるファイル名) のどちらかで指定する必要があります。 上流のトンネル用 DeleGate は、 SERVER="tunnel1" を指定して起動しなければなりません。
例) ログインダイアログなしで、トンネルを形成する。
PERMIT parameter* == PERMIT=connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
複数の PERMIT パラメーターが指定された場合、アクセスは、 少なくとも1つの PERMIT で指定された権限が許可されます。 PERMIT パラメーターがない場合、アクセス許可は、 REMITTABLE,REACHABLE,RELIABLE パラメーターによって明示されるか、 SERVER パラメーターによる暗黙の指定によって、制御されます。
例) ローカルネット上のホストには無制限に許可し、その他ホストは、http://www のみ許可します
ProtoList (dstHostList) 中の特殊パターン "*" は、 全ての許可されたプロトコル(サーバー) (REMITTABLE (REACHABLE) パラメーターによって明示することもできます) を意味します。 これらパラメーターは、可能となっている許可範囲を制限します。 プロトコル(サーバー)は、REMITTABLE (REACHABLE) パラメーターによって、 明示的または暗黙の指定で許可されていない場合、使えません。 同様に、1複数の RELIABLE パラメーターが明示的に与えられた場合、 これらは、PERMIT のsrcHostList 中にあるクライアントの許可範囲を制限します。
dstHostList で指定したホストは、"host:portNumList" のように ポート番号をつけることで、更に制限できます。 例) PERMIT="telnet:{*:23}:*" は、任意のホストに対する telnet を 標準ポート番号(23)でのみ許可することを意味します。
ProtoList 中のプロトコル名は、 "protocolName/portNumList/methodList" のようにポート番号と手段を使って変更でき、 プロトコルにおけるアクセス可能なポートと手段を制限できます。 例) 一連の PERMIT パラメーター PERMIT="ftp//readonly:Servers:Clients" PERMIT="ftp:*:*" は、 Servers に対する Client からのアップロードを禁止し、 他のサーバー・クライアントの組み合わせで、アップロードを許可することを意味します。
複数の DeleGate サーバーが、MASTER や PROXY によって連結されている場合、 元クライアントの識別情報は、 最初(連結の入り口)の DeleGate サーバーによって取得され、 上流 DeleGate サーバーへ RIDENT パラメーターを使用して転送でき、 また、PERMIT パラメーターを使って検査されます。
REJECT parameter* == REJECT=connMap connMap == ProtoList:dstHostList:srcHostList -- default: none
REMITTABLE parameter == REMITTABLE=ProtoList -- default: REMITTABLE="*" - generalist 用 -- default: REMITTABLE="." - specialist 用
プロトコル名の後ろに "/portNumList" がある場合、PortList に 指定されたポートのみが許可されます。 PortList には "/methodList" を付けることができ、 プロトコルで使える手段を制限できます。 現在、手段として、"readonly" のみが使えます。 例)REMITTABLE="ftp//readonly" は、 FTP サーバーへのアップロードを禁止する、 "読み込み専用" FTP-DeleGate を生成します。
プロトコル固有のデフォルト:
例外:
最初の指定が、"+" の場合、それはデフォルトで許可されたプロトコルのリストを意味します。
例) SERVER=http で、REMITTABLE="+,-https/80,-wais,file" の場合、
REMITTABLE="http,https/443,gopher,ftp,file" を意味します。
注記:ここでの "https" は、SSLtunnel 上の 非 https プロトコルを検出して拒否します。
SSLtunnel 上で 任意のプロトコルを中継する場合、
REMITTABLE="+,ssltunnel" のように、
"https" の代わりに "ssltunnel" を指定します。
REACHABLE parameter* == REACHABLE=dstHostList -- default: REACHABLE="*" (全てのホストに接続可能)
RELIABLE parameter* == RELIABLE=srcHostList -- default: RELIABLE=".localnet"
これは、RELIABLE=Hosts1 RELIABLE=Hosts2 のような、 複数の RELIABLE パラメーターを、 単一の RELIABLE="Hosts1,Hosts2" に、単純に結合したものと解釈しますが、 Hosts1 または、Hosts2 に、いくつかの、 否定、または、 合成演算子が含まれる場合、 "Hosts1 または Hosts2" を意味しません。 もし、この文章の意味が理解できない場合は、代わりに、 複数の PERMIT パラメーターを使用することを推奨します。
RELAY parameter* == RELAY=relayTypeList[:connMap] relayTypeList == relayType[,relayType]* relayType == proxy | delegate | vhost | no | nojava | noapplet connMap == ProtoList:dstHostList:srcHostList -- default: RELAY="delegate,nojava:*:*:.localnet" RELAY="vhost,nojava:http:{*:80}:.localnet" RELAY="proxy:*:*:*"
RELAY="no" は、中継を行わない、元 HTTP サーバーとして動作することを意味します。 (元 HTTP サーバーは、プロキシー用の書式 (要求される URL は、絶対フォーマットで、フル書式や、"/-_-" 書式ではありません) ではない通常の書式での要求を受け付ける、通常のサーバーです。)
"transparent-proxy (透過プロキシー)" と呼ばれる機能は、"RELAY=vhost" で有効にできます。 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" の使用を強く推奨します。
例)
デフォルト:
SCREEN parameter == SCREEN={reject|accept} -- default: none
AUTH parameter* == AUTH=what:authProto:who -- default: none
HTTP-DeleGate の場合、(要求メッセージ中の) Authorization ヘッダー
にある Username:Password で、
"私は誰”かを宣言します。ここでの Username は、
User@Host にもできます。
User, Host, Password のセットを得た後、
DeleGate は、
Host の(FTP)サーバーに、
User と Password でログインを試みます。
成功した場合、
クライアントは User@Host で
認証されます。
現在、以下のカテゴリでの、 認証/権限付与がサポートされます。
-- 任意プロトコルの DeleGate の場合 --
さまざまなプロトコルの DeleGate (SERVER=protocol にかかわらず) は、
"-PuserPort,adminPort/admin" のように、 "/admin" 修飾子をもつ管理専用ポートを指定することで、
リモート管理用ポートを持つことができます。
例)
-- FTP サーバー と FTP/HTTP ゲートウェイの場合 --
3番目のフィールドが "-" である場合(すなわち、AUTH="anonftp:smtp-vrfy:-@*")
"host.domain" 上のメールサーバーに対する接続のみがチェックされます。
-- プロキシーと 元 HTTP サーバーの場合 --
ident | -- 識別プロトコル [default] |
pauth | -- Proxy-Authorization フィールド "user@host:password" を使用 |
auth | -- Authorization フィールド "user@host:password" を使用 |
FTP サーバーベースの認証を使用する場合、 要求される認証情報としてのユーザー名は、 "user@host.domain" のような、E-mail アドレスです。 なお、これは通常、AUTH="anonftp" と AUTH="proxy" 両方で使えます。
AUTHORIZER parameter* == AUTHORIZER=authServList[@realmValue][:connMap] authServList == [authForw,]authServ[,authServ]* | & | * authForw == -map{inPat}{localPat}{fwdPat} | -strip | -fwd authServ == authHost[/portNum][(reprUser)] authHost == hostName | hostAddr realmValue == word | {words separated with space} connMap == ProtoList:dstHostList:srcHostList -- default: none -- 制限: Telnet, FTP, NNTP, SMTP, IMAP, Socks, SockMux および、HTTP に、適用可能
注記: auth-server により認証されたクライアントは、そのクライアントホストが、 他のアクセス制御 (RELIABLE と PERMIT) を通過しない場合、許可されません。 認証された全クライアントを、そのホストを無視して許可したい場合、 RELIABLE="-a/*" のように指定します。 この用途で、RELIABLE="*" も動作しますが、DeleGate と設定変更で使うのは危険です。
connMap に追加するとき、認証サーバーは、 対象プロトコル、サーバーホスト、クライアントホストの組合わせで、条件付で選択できます。 authServList は、認証サーバー名、または、認証サーバーのホスト名リストです。 authServList の後ろに、"@realmValue" が付く場合、 その値は、HTTP-DeleGate における、保護空間の領域指定に使えます。 それは、それぞれの MOUNT ポイントに対して、マウントオプション "realm=realmValue" で上書き可能です。
現在、リモート認証/権限付与サーバーのプロトコルは、 FTP プロトコルの USER/PASS コマンドです。 このように、DeleGate の認証/権限付与サーバーには、 任意の実在の FTP サーバーを使用できます。 他の方法として、DeleGate 自らが持つ 認証/権限付与のためのリストは、 -Fauth 機能により管理できます。
次のように、組み込み auth-server を authServ として使用します:
例)
例)
コマンドによる認証の結果は、その出力文字列か、終了コードで表されます。
コマンドはその標準出力に結果を FTP プロトコルでのステータス応答形式で表し、
成功時 "230"、失敗時 "530" です。
他の場合、プロセスの終了コードが使われ、0 が成功、0 以外が失敗です。
例) ユーザー名を引数で渡し、パスワードを環境変数で渡す。
[myauth コマンドの内容]
//ダイジェスト認証をクライアントと行う HTTP プロキシー、または、サーバー
SERVER=http AUTHORIZER=-dgauth
// クライアントと、APOP 認証を行う、POP プロキシー
SERVER=pop MOUNT="* pop://server/*" AUTHORIZER=-dgauth
注記: ほとんどの PAM 認証の実行には、Unix 上のスーパーユーザー特権
(OWNER="root" オプション付加) が必要です。
しかし、DGROOT/subin/ に
外部プログラム "dgpam" をインストールすることで、
スーパーユーザー特権をともなう DeleGate を実行することを避けられます。
PAM 認証は、リモート PAM サーバーに委任することもできます。
AUTHORIZER="-list{u1:p1,u2:p2}(local),-pam,-none(anonymous)"
// ユーザーは、"local" または PAM でのユーザー、またはその他の "anonymous"
// として認証されます。
AUTHORIZER="-cmd{myauth %U}{MYPASS=%P}"
#!/bin/sh
if [ "$1" = "user1" -a "$MYPASS" = "pass1" ]; then
echo "230 SUCCESS"
else
echo "530 FAILURE"
fi
"-map" プリフィックスは、入ってくる USER と PASS の認証情報 (inPat パターンで)
を分離し、一対の認証(1つは authServList (localPat 内の) によりローカルで使われ、
他は (fwdPat 内の) サーバーに転送されます) にします。
一致または生成される各認証情報は、"username:password" として一対の
ユーザー名とパスワード文字列であらわされます。
fwdPat により生成されるユーザー名文字列が "@Host" で終わる場合、
それは取り除かれ、Host は対象サーバーとして使われます。
文字列は共通仕様フォーマットパターン (MOUNT でのマッチングパターンで使われる) に一致した形式で生成されます。
(例) -strip
(例) -fwd
u1 または PAM によるローカル認証 <-- USER user1 + PASS pass1
サーバー h2 に送られる <-- USER user2 + PASS pass2
(例)
上記例1で見せたのは、"-strip" が、USER "u1@u2@u3@h3@h2@h1" と PASS "p1@p2@p3"
として、ユーザー名とパスワードの多重化に使うということ。
USER と PASS の '@' より前の最初の部分を取り除きローカル認証に使い、
USER 内の '@' 以降の最後の部分は対象サーバーとして、残りの文字列は対象サーバーに転送されます。
"-fwd" 指定は、同じ USER と PASS をローカル認証と、サーバーとの認証の両方に使います。
認証されたユーザーに権限を与えない必要があるときのみ、 authServList として、以下の特別な名前が便利でしょう。
例)
MYAUTH parameter* == MYAUTH=username:password[:connMap] -- default: none -- 制限: Socks, VSAP, SMTP, および HTTP のみに適用可能
クライアントから送られた、ユーザー名+パスワードの組は、 MYAUTH="%U:%P" でサーバーに転送できます。 (HTTP および、FTP でのみ使えます)
注記: プロキシーとの認証では、MYAUTH の代わりに認証情報を含むゲートウェイ URL を FORWARD とともに使用することが強く推奨されます。 例) SOCKS=host:port と MYAUTH=user:pass は、 FORWARD=socks://user:pass@host:port と、表現できます。
例)
RIDENT parameter == RIDENT=ridentType[,ridentType]* ridentType == client|server -- default: none
例)
MAXIMA parameter* == MAXIMA=what:number,... -- default: MAXIMA=listen:20,ftpcc:2,...
randstack | -- | セキュリティ用スタックベースのランダマイズレンジ [32] |
randenv | -- | 環境変数ベースのランダマイズレンジ [1024] |
randfd | -- | クライアントソケットファイルディスクリプターのランダマイズレンジ [32] |
listen | -- | 入り口ポートキューの最大サイズ [20] |
delegated | -- | 一度に実行できる DeleGate プロセス数の最大値 [64] |
service | -- | delegated プロセス単位の最大サービス数 [無制限] |
standby | -- | スタンバイプロセスの最大数 [32] |
conpch | -- | クライアントホスト単位の最大同時接続数 [無制限] |
ftpcc | -- | サーバーからホストに対する FTP 接続キャッシュの最大数 [16] |
nntpcc | -- | サーバーからホストに対する NNTP 接続キャッシュの最大数[16] |
http-cka | -- | (HTTPCONF=max-cka で置き換えられました) |
http-ckapch | -- | (HTTPCONF=max-ckapch で置き換えられました) |
udprelay | -- | 並列 UDPrelay クライアントの最大数[32] |
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] |
nis | -- | NIS 参照 [3] |
acc | -- | クライアントの受入れ (FTP データ接続含む) [10] |
con | -- | サーバーへの接続 [10] |
lin | -- | 出力のための LINGER [30] |
authorizer | -- | AUTHORIZER による権限の有効期限 [unlimited] |
dgnonce | -- | AUTHORIZER=-dgauth 用 ("nonce" の寿命) [60] |
ident | -- | Ident サーバーへの接続 [1] |
rident | -- | RIDENT=client 情報の受取り [1.0] |
io | -- | 一般入出力 (データ転送ではない) [600] |
silence | -- | クライアント・サーバーどちらからもデータ送信無し [0] (tcprelay のみに適用) |
hello | -- | MASTER との HELLO ネゴシエーション [30] |
login | -- | プロキシーへのログイン (Telnet, FTP, SOCKS) [60] |
daemon | -- | delegated [無制限] |
restart | -- | 指定した期間毎に再起動 [無制限] |
standby | -- | 次のクライアントのため delegated が待機する時間 [30] |
takeover | -- | クライアント切断後ダウンロード内容をキャッシュに書込むまで [5]
(ダウンロードを開始した、クライアントの切断後) |
ftpcc | -- | FTP 接続キャッシュのキープアライブ [120] |
nntpcc | -- | NNTP 接続キャッシュのキープアライブ [300] |
http-cka | -- | (HTTPCONF=tout-cka に置き換えられました) |
cfistat | -- | -s,filter からの 状態情報用 [1.0] |
DELAY parameter* == DELAY=what:seconds -- default: DELAY=reject:60,unknown:60,...
reject | -- | 自分もしくは、マウントしたサーバーからの連続的拒否(Reject)応答 [60] |
unknown | -- | 自分もしくは、マウントしたサーバーからの連続的不明(Unknown)応答 [60] |
reject_p | -- | 元サーバーからの、連続的拒否(Reject)応答 [0] |
unknown_p | -- | 元サーバーからの、連続的不明(Unknown)応答[0] |
CHOKE parameter* == CHOKE=Choking:Client:Ua:Referer:Url:Server:Protocol -- default: none
MOUNT parameter* == MOUNT="vURL rURL [MountOptions]" -- default: MOUNT="/* SERVER_URL*"
vURL が "*" で終わる場合、 部分的に一致したパスも書換えられます。 rURL が "*" で終わる場合、 部分的に一致したパスの残り部分は、そのまま rURL の後にコピーされます。
例) HTTP-DeleGate での MOUNT
vURL か rURL に "=" を指定した場合、 マウントは、リクエスト中の vURL を書換えない、 または、 応答中の rURL を書換えるのと同じです。
対象サーバーのポート番号 (rURL において) には、
"-" か "+" が前置きでき、
これは、SERVER
パラメーターに設定した入り口ポート番号に対して、
動的に決定したオフセットを与えます。
rURL (または SERVER パラメーター) 内の特別なホスト名 "odst.-" は、
NAT (Linux 上の iptables で提供される) 経由のクライアントからの TCP 接続の
元の対象ホストを表します。
これは、任意プロトコルの透過プロキシー(または ゲートウェイ) を構成するのに使えます。
元の対象ポート番号は、"odst.-:-" のように、"-" で参照できます。
番号は、例えば、"-8000" や "+8000" のようにオフセットを付けて割り当てられます。
"odst.-" 名は、"rserv" マウントオプションでも使えます。
rURL が "file:path" で path が相対の場合、 データファイルは、DGROOT ディレクトリー、 または DATAPATH に設定された ディレクトリー内で検索されます。 rURL が "vurl:rURL" のように前置きされるなら、 vURL から rURL への書き換えられた URL(要求メッセージ中の) は、他の MOUNT で再度書き換えられます。 この再帰的な MOUNT は、rURL to vURL への応答データ内の URL には、 適用されないので、応答中の URL が逆書き換えされることが、さらに期待されるような、 HTTP では期待の動作はしません。
例) 再帰的な MOUNT
省略形
設定を簡単で再利用可能にするために、 URL の特別な省略形を MOUNT パラメーターで使用できます。 protocol-name://host-name:port-number/url-path からなる rURL 中の protocol-name, host-name, port-number に "=" を指定した場合、 それは、DeleGate 自身をあらわします (すなわち vURL 中のそれ)。 URL が "//" で始まる場合、更なる省略形で、 "///path" は "=://=:=/path" を意味し (プロトコル,ホスト,ポートが同じ)、 また、 "//serv..." は "=://serv..." を意味します (同じプロトコル)。
省略された host-name と、port-number は、 存在する場合、仮想ホスト(HTTP の Host: フィールドで与えられた)の、 または、クライアントとの実インターフェースのそれに置き換えられます。 実インターフェースを明示的に指定する場合、"-P" を "http://-P/path" のように、"host-name:port-number" 部分に使用します。
例) MOUNT パラメーター中の rURL の省略形
マッチングと書換えの複合
vURL と、rURL のパターンの後に "*%" がつく場合、 scanf(3) と似た書式で指定した複合マッチングのためのパターンを表します。 それぞれの書式指定は、"%" に続く指定("%c", "%[a-z]" など)からなります。 拡張書式 "%S" は、隣接したキャラクターにより決定される変数を意味します。 すなわち "%Sx" は "%[^x]x" を意味します: 例) "%S." は "%[^.]." および "%S/" は "%[^/]/" rURL 中の "%(N)" は、 vURL 中の N 番目の 要素の複製を意味します。 vURL パターンが "$" キャラクターで終わる場合、 URL 文字列末端と完全に一致する必要があります。
例) 複合マッチングと書き換え
MountOptions == option[,option]*
条件:
最初のオプショングループは、MOUNT をソースと対象 (クライアントとサーバー)
により条件的に行います。
MOUNT パラメーターに、
1つ以上の条件を含む MountOption を指定した場合、
全ての条件が真にならない限り、MOUNT は無視されます。
これら HostList は、host:port のリストでなければならず、 ここでの :port 部分は、特に気にしない場合省略できます。 host 部は、"*" で置換えでき、 その場合ネットワークインターフェースの違いを気にしません。
例)
制御系:
オプションの2番目のグループは、局所的な MOUNT ポイントに
対する DeleGate の動作を制御します。
URICONV parameter* == URICONV={convSpec|defElem|defAttr} convSpec == convList:attrList defElem == defelem:+,elemnameList defAttr == defattr:+,attrnameList -- default: URICONV=dump で見られます。
mount | -- | MOUNTにより書換え |
normal | -- | URL パス中に"../"を含む MOUNT された URL を正常化する |
partial | -- | 可能なら、(MOUNT された) URL を部分的 URL で表現する。 |
full | -- | 全ての URL をフル URL に変換 |
特別な convList URICONV="+" は、デフォルトの URICONV の設定 (この場合、現実装では attrList はありません) を読みこむことを意味します。 attrList は、属性名リストで、それぞれは、1つの要素名を前置きできます。 特別な属性名 "+" は、属性のデフォルトセットを意味します。 "-" が前置きされた属性は、指定済みの属性セットから除かれます。
他の特別な convList URICONV="where:any" は、 書換える URL の検索対象を HTML タグだけではなく、 XML, JavaScript,CSS (Cascading Style Sheets) および、 SWF (Shockwave Flush) にも行いますします。
例)
BASEURL parameter == BASEURL=URL -- default: none
元/ゲートウェイ HTTP-DeleGate が要求ヘッダー内の "Host:vhost1" を受け取った場合、 "vhost1" を DeleGate のベース URL とするため、 BASEURL="http://vhost0" パラメーターは無視されます。 BASEURL によって、"Host:" ヘッダーを上書きしたい場合、 BASEURL="http://-vhost0" の様に "-" をホスト名の前につけます。
例)
DELEGATE parameter == DELEGATE=gwHost:Port[:ProtoList] -- default: DELEGATE=currentHost:currentPort
元々、このパラメーターは、
gateway-_-URL をともなう
URL (または、ポインタ) や、proto://gwHost:Port/-_-URL
(この gwHost:Port部は、DeleGateによって生成され、埋め込まれたものです)
表記によって書換えられた、CERN HTTP タイプではないプロキシー (gopher プロキシー含む)
のためのプロキシーモードを制御するために取り入れられました。
このパラメーターは、gwHost:Port 部の表現をカスタマイズするために
取り入れられました。
これは、この DeleGate の入り口ポートを表し、
クライアントから解決可能で到達可能でなければなりません。
もっとも一般的な指定は、gwHost のデフォルト値は、
この DeleGate ホストの現ネットワークインターフェースで、
現クライアントはこれを経由し、この DeleGate に到達させ、
また、生の IP アドレスで、表現します。
これにより、クライアントが DeleGate のホスト名解決法を知らなくても、
DeleGate に到達可能になります。
例外的に、入り口ポートが、"-Phost:port”のように
ネットワークインターフェースを明示して指定された場合、
DELEGATE のデフォルト値は、host:port になります。
オプションの ProtoList を指定することで、
このプロキシーでのプロトコルに制限をかけることができます。
応答メッセージ中の URL (ポインタ) は、
"proto://gwHost:Port/-_-" を前置きして、書換えられます。
そのため、ProtoList にプロトコルが含まれる場合、要求は再びこの
DeleGate (gwHost:Portの) に向けられます。
DELEGATE="-:0:-all" のように、存在しない入り口ポートと、 空の ProtoList を指定することで、プロキシーモードを使用不能にできます。 RELAY パラメーターを使用することで、もっと、簡単に実現できますが、 最近のバージョンでは、デフォルトで、無効になっています。
COUNTER parameter == COUNTER=listOfCounterControl counterControl == do | total | acc | ssi | ref | err | ro | no | mntpV -- default: COUNTER=no -- 制限: HTTP, SMTP, FTP, DNS に適用可能
それぞれのアクセスカウンターは、"ADMDIR/counts/access/URL#count" にあるファイルに保存されます。それぞれのカウンターファイルは、 ASCII 10進数形式でのアクセス数で構成された行で始まり、 手動で、初期化/編集できます。 行には、3つの数を含めることができ、1つ目はアクセス数の総合計で、 2つ目は、同一クライアントからの複数回アクセスを除くアクセス数で、 3つ目は、最後の10クライアントからの複数回アクセスを除いたアクセス数です。 それぞれのカウントは、%T, %U, %V それぞれ、後述の書式文字列に置き換えられます。
カウンターは、PAGE_COUNT または、COUNTER 値として、 SSI を使うことで指定した書式で表示できます。 タグ内に "url" を指定しない場合、タグを含む SHTML ファイルの URL を意味します。 カウンター値は、下記の "fmt=..." 属性であたえられた書式文字列で 印刷可能キャラクター文字列に変換にします。 書式の初期値は、"%T" です。
書式指定子:
例)
総合計は、TOTAL_HITS タグまたは "sel=total" を伴う COUNTER タグで表示されます。 URL のリファラカウンターは、HTTP 要求の "Referer:" ヘッダーに URL がある場合加算されます。 それぞれのリファラカウンターは、 "ADMDIR/counts/referer/URL#count-ref" に保存されます。 リファラカウンターは、PAGE_COUNT タグ内の "sel=ref" 属性 で表示できます。
例)
各 URL に対するカウンターを全て有効にするのは、不経済で/か不要かもしれません。 代表として MOUNT ポイントのカウンターを使用するか、 サーバーーの総合計アクセスカウンターだけを使用うことで、 カウンターを削減できます。 以下の例では、全ての URL のカウンターがデフォルトで (COUNTER=do で) 有効です。 /srv1/ 以下の URL のカウンターは、/srv1/ のカウンターで表され、 さらに、サーバーの 総合計と、SSI カウンターは、/mine/ 以下の URL でだけ有効になります。 例で示されるように、COUNTER は、 デフォルト値を COUNTER パラメーターから引き継ぐように、 MountOptionとして指定することができます。
例) COUNTER=do MOUNT="/srv1/* http://srv1/* COUNTER=mntpV" MOUNT="/mine/* file:dirpath/* COUNTER=no,total,ssi"
COUNTERDIR parameter == COUNTERDIR=dirPath -- default: COUNTERDIR='${ADMDIR}/counts[date+/year%y/week%W]'
CACHE parameter* == CACHE=cacheControl[,cacheControl]*[:connMap] cacheControl == do | no | ro connMap == ProtoList[:[dstHostList][:srcHostList]] -- default: none -- 制限: HTTP, FTP, NNTP, Gopher に適用されます。
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 |
例)
CHARCODE parameter* == CHARCODE=[inputCode/]outputCode[:[tosv][:connMap]] outputCode == charCode charCode == iso-2022-jp | euc-jp | shift_jis | utf-8 | us-ascii | JIS | EUC | SJIS | UTF8 | ASCII | guess connMap == [ProtoList][:[dstHostList][:[srcHostList]]] -- 制限: HTTP, FTP, SMTP, POP, NNTP, Telnet, Tcprelay に適用 -- default: none
疑似コード名 "guess" は変換は行わないということですが、 メッセージ中の "Content-Type" ヘッダーに追加される "charset" 属性が 欠けている場合には、メッセージボディからそれを推測します。 これは、EUC-JP のような非アスキーコードが、ビューアによりヨーロピアンとして 推測されてしまうような、メッセージが日本語にローカライズされていない ビューアプログラム(例えば、ウェブブラウザー)のときに便利です。
"tosv" が指定されているなら、変換は要求メッセージ(または、サーバーへ向けたメッセージ) に適用されます。 変換は、その要求 URL 内に "%XX" でエンコードされたHTTP要求メッセージや、 POST メッセージ (Content-Type: application/x-www-form-urlencoded でエンコードされているとき) 内の日本語テキストの断片にも適用されます。 変換が適用される Content-Type の値一式は HTTPCONF=post-ccx-type で指定できます。
変換対象のアプリケーション(プロトコル)は、connMapで指定した、 指定のプロトコル一式、サーバー/クライアントだけに制限できます。 connMap 内での ProtoList, dstHostList, srcHostList の初期値は "*" で、全てのプロトコルやホストと一致します。
例) クライアントへ応答を UTF8 で送り、HTTP サーバーへの要求を Shift_JIS で送る
FTP プロトコルでの変換は、デフォルトでデータ接続上を ASCII 形式で転送されるデータのみに適用されます。 これは、FTPCONF="ccx:any" を伴うことで、バイナリデータやコントロール接続上のデータにも適用されます。
このパラメーターをインターネットメール/ニュースプロトコル (SMTP, POP, NNTP) で 有効にする場合、 キャラクター変換を有効 (デフォルトで有効) にするために MIMECONV パラメーターも指定する必要があります。
HTTP クライアントは、要求メッセージ中の "Accept-Language" フィールドで選択して (各クライアント(WWWブラウザー)で指定できるかもしれません)送信することで、 この指定を無視できます。 例) クライアントの要求で "Accept-Language: (charcode=EUC)" が送られた場合、 応答テキストは、DeleGate の CHARCODE 指定を無視して、 EUC に変換されます。 "Accept-Language: (charcode=THRU)" が指定された場合、 管理者がこの DeleGate に指定した全ての変換は 無効になります。
CHARMAP parameter* == CHARMAP=mapType:charMap[,charMap]*[:tosv] mapType == ascii | ucs | jis | ucsjis | jisucs charMap == inCharCode1[-inCharCode2]/outCharCode2[-[outCharCode2]] charCode == hexa-decimal code | single ASCII character -- default: none
割り当てられる文字は、16進表現の値 (2桁以上で表される) または、
1桁の文字そのものです。
さまざまなエンコード方法 (ISO-2022-JP, EUC-JP, Shift_JIS) によりエンコードされた
JIS X 0208 文字セット内の文字は、"2121" のような、
最上位ビット(8080)がない JIS コードで表現されます。
JIS X 0212 文字セット内の文字は、"1222F" のような "1" を前置きした
その JIS コード値で表現されます。
inCharCode2 と outCharCode2 を指定した場合、
範囲内のそれぞれの文字に一致する文字に割り当てられます。
-outCharCode2 が与えられない場合、範囲内の全ての入力文字は、
outCharCode1 に割り当てられます。
mapType は、以下のいずれかです:
例) 小文字と大文字を逆転
例) "rot13" 符号化
例) JIS X 0208 内の全ての日本語文字を "下駄マーク" に置き換える
例) JIS X 0212 内の全ての日本語文字を "下駄マーク" に置き換える
例) 知らない文字を "下駄マーク" の代わりに "白い四角" で表現する。
HTMLCONV parameter == HTMLCONV=convList convList == conv[,conv]* conv == deent|enent|fullurl -- default: HTMLCONV=deent
deent | -- | decode entity symbol |
enent | -- | encode entity symbol |
fullurl | -- | convert all of URLs to full URLs (equals to URICONV="full:+,-HREF/BASE") |
"deent" と "enent"は、HTML とプレーンテキスト間での特別なキャラクター
(例:"<" から/へ "<" などが、マルチバイトキャラクターセット(ISO-2022-JP など)のテキスト中に現れた場合)
のエンコード・デコードを制御します。
"deent" が指定された場合、
エンコードされた実シンボルがマルチバイトテキスト中
に現れた場合デコードします。
これは、マルチバイトキャラクターを気にしないエンコーダで
無差別にエンコードされたキャラクターが含まれるテキストを
修復するときに便利です。
"enent" が指定された場合、実シンボルがマルチバイトキャラクターセット以外の
テキスト中に現れた場合、エンコードします。
これは、WWW クライアントによってアクセス
される NNTP-DeleGate の場合便利です。
空リストが指定された場合、全ての変換を停止します。
MIMECONV parameter == MIMECONV=mimeConv[,mimeConv] mimeConv == thru | charcode | nospenc | textonly | alt:first | alt:plain -- default: none -- CHARCODE パラメーターが与えられた場合 MIMECONV=""
部品リストを選択または展開する事で、"multipart/*" メッセージ をフィルタして平文メッセージに変換するオプションを以下に示します。
FCL parameter == FCL=filterCommand FTOCL parameter == FTOCL=filterCommand FFROMCL parameter == FFROMCL=filterCommand FSV parameter == FSV=filterCommand FTOSV parameter == FTOSV=filterCommand FFROMSV parameter == FFROMSV=filterCommand FMD parameter == FMD=filterCommand FTOMD parameter == FTOMD=filterCommand FFROMMD parameter == FFROMMD=filterCommand filterCommand == [-s,][-p,][-w,]command -- default: none
フィルターは、サーキットレベル情報では、 CMAP で、 アプリケーションレベル情報では、 CFI script を使うことで、 条件付で利かせることができます。
組み込みフィルター: filterCommand に "-" が前置きされる場合、
それは DeleGate の組み込みフィルターです。
例)
-n -- 出力ライン数
-t -- 出力ラインに対するタイムスタンプ
-v -- 不可視キャラクターを表示
-l -- (-tee を伴う) 出力を stderrに代わり、LOGFILE に出力 (デフォルト)
-e -- (-tee を伴う) stderr に出力
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: ${STARTDIR}/DGROOT がある時はそれを使い、 Unix では、'/' CHROOT が設定されるか '${HOME}/delegate', '/var/spool/delegate-${OWNER}', '/tmp/delegate-${OWNER}' の場合 Windows: '/Program Files/DeleGate'