[CTX]
[ALL]
マッチングと書き換えの複合
vURL と、rURL のパターンの後に "*%" がつく場合、
scanf(3) のそれと似た書式で指定した複合マッチングのためのパターンを表します。
それぞれの書式指定は、"%" に続く指定("%c","%[a-z]" など)からなります。
拡張書式 "%S" は、隣接したキャラクタにより決定される変数を意味します。
例えば、"%Sx " は "%[^x ]x " を意味します。
例)"%S." は "%[^.]." および "%S/" は "%[^/]/"
rURL 中の "%(N )" は、vURL 中のN 番目の
要素の複製を意味します。
vURL パターンが "$" キャラクタで終わる場合、
URL 文字全体に対する完全なマッチングを要求します。
例) 複合マッチングと書き換え
// 要求された 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 ]*
MountOptionsは、オプションのリストで、条件付MOUNTや、特定の機能MOUNTしたURLのみに利かせます。それらのいくつかは、さまざまなプロトコルに対する一般化で、他のものは、プロトコル
( HTTP , NNTP ) に特化します。
条件:最初のオプショングループはソースと対象(クライアント・サーバ)によって、条件的にMOUNTします。MOUNTパラメータが、1つ以上の条件を含むMountOption を持つ場合、全ての条件が真にならない場合、MOUNTは、無視されます。
from={HostList } -- クライアントから
クライアントがHostList に含まれる場合、真。
via={HostList } -- ホスト経由
経路中で1つ以上の、HostList に含まれるホストを経由した場合、真。
path={HostList } -- ホストを通ってきた
HostList 中に含まれる全てのホストを経由してきた場合、真。
host={HostList } -- ホストとクライアントを結ぶインターフェース
クライアントが、HostList 中の指定された、ネットワークインターフェース経由でDeleGateと接続した場合、真。
DeleGateが、元サーバとして動作し、要求メッセージ中の仮想ホスト名が、"Host: host"として見えている場合、仮想ホスト名は、実ホスト名より前に検査されます。複数の仮想名が、同じIPアドレスに関連付けされている場合、"host=-hostname"のように"-"を仮想ホスト名にプリフィックスする事で、仮想名を区別します。
dstproto={ProtoList } -- 指定したプロトコルのサーバ
多少サーバのプロトコルがProtoList 中の含まれる場合、真。
dst={HostList } -- サーバに向けて
対象ホストがHostList 中にに含まれる場合、真。このオプションは、MOUNTの右側に"="が使用されている場合に有効です。method={methodList } --
現リクエストのアクセス方法が、methodList 中に含まれる場合、真。
これらHostList は、host :port のリストでなければならず、この、 :port 部分は、特に気にしない場合、省略できます。host 部は、"*"で、置換えられ、その場合、異なったネットワークインターフェースを気にしません。
例)
// クライアントがどのインターフェースからきたかによって、MOUNTを切りかえる
MOUNT ="* URL1 host=this-host" MOUNT ="* URL2 host=localhost"
// クライアントがどのポートからきたかによって、MOUNTを切りかえる
-P70,80 MOUNT ="* URL1 host=*:70" MOUNT ="* URL2 host=*:80"
制御:
オプションの第2グループは、DeleGateのローカルMOUNTポイントに対する動作を制御します。
ro -- 読込みのみ許可
NNTP(POSTコマンドを無効化)と、元FTP(デフォルト)にあてはまります。
rw -- 読み書き両方を許可
元FTP-DeleGateのローカルファイルへの書込み許可。
cache=no -- キャッシュを無効化
このMOUNTポイントのサーバに対して、キャッシュを全て無効にする。
expire=period -- キャッシュの有効期間
MOUNTポイントに関する満期(EXPIRE パラメータに優先する)。
ftocl=filterCommand -- 外部フィルタを利かせる
MOUNTポイントにフィルタを利かせる(FTOCL パラメータに優先する)。
charcode=charCode -- コード変換
このMOUNTポイントに対してのコード変換を指定します(CHARCODE パラメータに優先する)。
proxy=host :port -- 上流プロキシサーバ
master=host :port -- 上流 MASTER-DeleGate
MASTER や PROXY パラメータで指定されたものに代えて、MOUNTポイントに対して使用する上流プロキシサーバ。
indirect -- 間接MOUNT
例) ここで、MOUNT="URL1/* URL2/* indirect" が与えられた場合、"URL1/name1/path" が要求され、"URL2/name1/indirect.cfi" が "Base: URL3"を含むとき、"URL3/path" がアクセスされます。 これは、MOUNT ="URL1/name/* URL3/*"によって生成されます。
URICONV parameter* == URICONV ={convSpec |defElem |defAttr }
convSpec == convList :attrList
defElem == defelem:+,elemnameList
defAttr == defattr:+,attrnameList
-- default: URICONV =dump で見れます。
HTMLドキュメント中タグのどれに、どのようなURI書換えを利かせるか指定します。convList は、以下の項目リストです。
mount
--
MOUNTにより書換え
normal
--
URLパス中に"../"を含むMOUNTされたURLを正常化する
partial
--
可能な場合、(MOUNTされた)URLを部分URLで表現する。
full
--
全てのURLをフルURLに変換
特別なconvList
URICONV ="+"は、デフォルトのURICONVの構成(この場合、現実装で、attrList はありません)を読みこむことを意味します。attrList
は、属性名リストで、それぞれは、1つの要素名をポストフィックスできます。特別な属性名"+"は、属性のデフォルトセットを意味します。"-"で、プリフィックスされた属性は、計画された属性セットから、除かれます。
例)
BASEURL parameter == BASEURL =URL
-- default: none
DeleGateにより生成される、絶対URLに埋め込まれる、このサーバのベース(仮想)URL:例)NNTP/HTTPゲートウェイDeleGateによって生成されるHTMLページのアイコンURL。
例)
MOUNT ='/* nntp://newsserver/*" BASEURL ="http://wwwserver/news"
// これは、このHTTP-DeleGateのルートが"/news"にマッピングされた、HTTP サーバ "http://wwwserver"
に有効です。
DELEGATE parameter == DELEGATE =gwHost:Port [:ProtoList ]
-- default: DELEGATE =currentHost :currentPort
このパラメータは、大部分が、BASEURL、RELAY、URICONVパラメータに取って代わられると思います。
元々、このパラメータは、gateway -_-URL をともなうURL(または、ポインタ)や、
proto ://gwHost:Port /-_-URL
(このgwHost:Port 部は、DeleGateによって生成され、埋め込まれたものです)表記によって書換えられた、CERN
HTTPタイプではないプロキシ(gopherプロキシ含む)のための、プロキシモードを制御するために取り入れられました。
このパラメータは、gwHost:Port
部の表現をカスタマイズするために取り入れられました。これは、このDeleGateの入り口ポートを表し、クライアントから、解決可能かつ、到達可能でなければなりません。
もっとも一般的な作り方は、gwHost のデフォルト値は、このDeleGateホストの現ネットワークインターフェースで、現クライアントは、これを経由し、このDeleGateに到達させ、また、生のIPアドレスで、表現します。これにより、クライアントがDeleGateのホスト名解決法を知らなくても、DeleGateに到達可能になります。
例外的に、入り口ポートが、"-Phost :port ”のようにネットワークインターフェースを明示して指定された場合、DELEGATEのデフォルト値は、
host :port にセットされます。 オプションのProtoList
を指定することで、このプロキシでのプロトコルに制限をかけることができます。応答メッセージ中のURL(ポインタ)は、"proto ://gwHost:Port /-_-"をプリフィックスして、書換えられます。そのため、ProtoList 中にプロトコルが含まれる場合、要求は再びこのDeleGate(gwHost :Port
の)に向けられます。
DELEGATE ="-:0:-all"のように、存在しない入り口ポートと、空のProtoList を指定することで、プロキシモードを使用不能にできます。RELAYパラメータを使用することで、もっと、簡単に実現できます。これは、最近のバージョンでは、デフォルトで、使用不能になっています。
CACHE parameter* == CACHE =cacheControl [,cacheControl ]*
cacheControl == do | no | ro
-- default: none
-- 制限: HTTP , FTP , NNTP , Gopher に適用されます。
do -- CACHEDIR がない場合、作成します。(キャッシュを使用可能にする)
no -- キャッシュ禁止
ro -- キャッシュを読込のみにする キャッシュはデフォルトで使用可能です。キャッシュは、CACHEDIRディレクトリが存在しないか、DeleGateが、読込できない、書込みできない、または、CACHE="no"が指定されている、または、"cache"が、CONNECTに含まれない場合、使用不可となります。
EXPIRE parameter* == EXPIRE =validity [/custody ][:connMap ]
connMap == ProtoList :dstHostList :srcHostList
validity == period
custody == period
period == Num [d|h|m|s]
-- default: EXPIRE =1d
EXPIREは、キャッシュデータの有効期限を、日,時,分,秒単位で、指定します。有効期限は、DeleGateによりキャッシュデータが削除されることを意味するわけではありません;DeleGateは、指定された期限より古いキャッシュデータを、単に、無視するだけです。
CACHEFILE parameter == CACHEFILE =fileNameSpec
-- default: CACHEFILE ='$[server:%P/%L/%p]'
CACHEFILEは、キャッシュファイル名をどのように構成するかを指定します。名前は、主に、サーバホストと、要求URLの情報により得られます。これらの情報は、
"$[server:format ]"形式で指定され、ここでの、format
は、以下のように、連続したシンボルからなり、それぞれ、URL
scheme ://host .d2 .d1 :port /path
の一部を参照します。
%P
--
scheme
プロトコル名部
%L
--
host .d2 .d1 :port
ログイン部
%H
--
host .d2 .d1
ホスト名
%T
--
port
ポート番号
%h
--
d1 /d2 /host
階層ホスト名ディレクトリ
%d
--
d1 /d2
階層ドメイン名ディレクトリ
%1
--
d1
最上位ドメイン
%2
--
d2
第2ドメイン
%p
--
path
URL-パス部
%Q
--
host .d2 .d1 .d0
FQDN なホスト名を使用 (%Q%L または %Q%H
同様)
他のフォーマットパターンは、"$[hash:format ]"で、このハッシュは、format
により生成された文字列を、"00" から"ff" の範囲の16進の値になります。これは、全てのサーバを含む、1つの巨大なディレクトリを255の小さなディレクトリ(分散した物理ディスク)に分割します。
例)
CACHEFILE ='$[server:%P]/$[hash:%H]/$[server:%L/%p]'
ICP parameter* == ICP =icpServerList [:icpServerSpec [:connMap ]]
icpServerList == icpServer [,icpServer ]*
icpServer == icpHost [/icpType /proxyPort /icpPort ]
icpServerSpec == icpOptions :proxyPort :icpPort
connMap == ProtoList :dstHostList :srcHostList
-- default: none
-- 制限: {HTTP,FTP}-DeleGate に対し適用
CHARCODE parameter == CHARCODE =[inputCode /]outputCode
outputCode == charCode
charCode == JIS|EUC|SJIS|UTF8
-- default: none
指定した場合、DeleGateは、テキストタイプの応答メッセージ中にあるJISコードを、指定されたキャラクタコードに変換します。パラメータ値の完全な指定書式は、
inputCode /output-code です。CHARCODE=JIS は、CHARCODE=JP/JIS
の省略形で、ここでのJPは、日本語テキストのエンコード {JIS,EUC ,SJIS ,UTF8} を意味します。
このパラメータをインターネットメール/ニュースプロトコル(SMTP , POP , NNTP )で有効にする場合、キャラクタ変換を有効(デフォルトで有効)にするようにMIMECONV
パラメータも指定する必要があります。
HTTPクライアントは、要求メッセージ中の
"Accept-Language"フィールドで、選択して(それぞれのクライアント(WWWブラウザ)で、指定できるかもしれません)送信することで、この指定を無視できます。例)クライアントの要求で"Accept-Language:
(charcode=EUC)"が送られた場合、応答テキストは、DeleGateのCHARCODE指定を無視して、EUCに変換されます。
"Accept-Language: (charcode=THRU)"が指定された場合、管理者がこのDeleGateに指定した全ての変換は、無効になります。
HTMLCONV parameter == HTMLCONV =convList
convList == conv [,conv ]*
conv == deent|enent|fullurl
-- default: HTMLCONV =deent
HTTP応答メッセージ中のHTMLテキストに対する変換制御フラグのリストを指定します。
deent
--
decode entity symbol
enent
--
encode entity symbol
fullurl
--
convert all of URLs to full URLs (equals to
URICONV ="full:+,-HREF/BASE")
"deent" と
"enent"は、HTMLとプレーンテキスト間での特別なキャラクタ(例:"<" から/へ
"<" などが、マルチバイトキャラクタセット(ISO-2022-JPなど)のテキスト中に現れた場合)のエンコード・デコードを制御します。"deent"が指定された場合、エンコードされた実シンボルが、マルチバイトテキスト中に現れた場合、デコードします。これは、マルチバイトキャラクタを気にしないエンコーダで無差別にエンコードされたキャラクタが含まれるテキストを修復するときに便利です。
"enent"が指定された場合、実シンボルが、マルチバイトキャラクタセット以外のテキスト中に洗え割れた場合、エンコードします。これは、WWWクライアントによってアクセスされるNNTP-DeleGateの場合、便利です。空リストが指定された場合、全ての変換は停止します。
MIMECONV parameter == MIMECONV =mimeConv [,mimeConv ]
mimeConv == thru | charcode
-- default: none
-- MIMECONV ="" CHARCODE パラメータが与えられた場合
NNTP/POP/SMTP DeleGateで、MIMEエンコード/デコードを制御します。MIMECONV=thruは、全てのMIMEエンコード/デコードを停止し、MIMECONV=charcodeは、キャラクタコード変換のみ有効にします。
FCL parameter == FCL =filterCommand
FTOCL parameter == FTOCL =filterCommand
FFROMCL parameter == FFROMCL =filterCommand
FSV parameter == FSV =filterCommand
FTOSV parameter == FTOSV =filterCommand
FFROMSV parameter == FFROMSV =filterCommand
FMD parameter == FMD =filterCommand
FTOMD parameter == FTOMD =filterCommand
FFROMMD parameter == FFROMMD =filterCommand
-- default: none
DeleGate・クライアント間や、DeleGate・サーバで、通信されるデータに利かせるfilter コマンドを指定します。filterCommand が相対パスで指定された場合、 LIBPATH 内を検索します。
フィルタは、サーキットレベル情報では、CMAP で、アプリケーションレベル情報では、CFI script を使うことで、条件付で利かせることができます。
ビルトインフィルタ: filterCommand が"-"でプリフィックスされる場合、DeleGateのビルトインフィルタです。
teeFilter == -tee[teeOpt ]*[SPACE filePath ] ... tee(1)
コマンドライクフィルタ
catFilter == -cat[teeOpt ] ... cat(1) コマンドライクフィルタ
teeOpt == -h | -n | -t | -v | -l
-h -- ヘッダ部のみ出力
-n -- 出力ライン数
-t -- 出力ラインに対するタイムスタンプ
-v -- 不可視キャラクタを表示
-l -- stderrに代わり、LOGFILEに出力
codeconvFilter == -charCode ... CHARCODE と同様のキャラクタコード変換
charCode == jis | sjis | euc | utf8 例)
XCOM parameter == XCOM =filterCommand
XFIL parameter == XFIL =filterCommand
-- default: none
CHROOT parameter == CHROOT =dirPath
-- default: none
-- 制限: 大抵のUnixで、super-user のみ
ファイルシステムのルートを、開始時に、chroot(2)システムコールを使用し、DirPath に変更します。
DGROOT parameter == DGROOT =dirPath
-- default: on Unix: '${HOME}/delegate' or '/var/spool/delegate-${OWNER}' or '/tmp/delegate-${OWNER}' on Windows: '/Program Files/DeleGate'
全てのサブディレクトリ (LOGDIR , ADMDIR , CACHEDIR , WORKDIR , ETCDIR , ACTDIR , TMPDIR )は、デフォルトで、DGROOT 以下に配置されます。
実行開始時(Unix上で)、DeleGateは、利用可能なDGROOT(OWNERによって読み書き両方ができる)を検索します。候補となるディレクトリが存在しない場合、DeleGate自身が、ディレクトリを作成しようとします。DGROOTの指定が明示された場合、それが最初に試行されます。失敗するか、DGROOTが与えられない場合、デフォルトの候補順序によって利用可能なディレクトリが見つかるまで、試行されます。
SHARE parameter == SHARE =dirPatternList
-- default: empty
指定した場合、与えられたパターンにマッチした名前を持つ作成されたディレクトリやファイルは、それぞれ、アクセスモードが、0777(rwxrwxrwx)、または、0666(rw-rw-rw-)
となり、任意のユーザ間で、共有可能になります。非絶対形式でパターンを指定した場合、DGROOTに対する相対とみなされます。デフォルトで、ディレクトリやファイルのアクセスモードは、UMASK(通常、022)で変更された、0755(rwxr-xr-x)
か、 0666(rw-rw-rw-)で作成されます。
例)
// 全てを共有する
SHARE =""
// DGROOT下のキャッシュとログを共有
SHARE ="cache/*,log/*"
// 古いバージョンで、ディレクトリを共有
SHARE ='${CACHEDIR}/*' CACHEDIR ='/var/spool/delegate-anybody'
SHARE ='${VARDIR}/*' VARDIR ='/var/spool/delegate'
UMASK parameter == UMASK =mask
-- default: the value of umask(2)
umask(2)システムコールで使用する、ファイル作成モードマスク をセット。
VARDIR parameter == VARDIR =dirPath
-- default: VARDIR ='${DGROOT?&:/var/spool/delegate}'
このパラメータは、DeleGate/6.xで、DGROOTが標準になった後、古いものとなりました。ACTDIRとTMPDIRを除き、DGROOTと同様に、サブディレクトリのデフォルトのベースを指定します。
CACHEDIR parameter == CACHEDIR =dirPath
-- default: CACHEDIR ='${VARDIR}/cache'
キャッシュを有効にするには、CACHEDIRが存在しなければならず、また、DeleGateが読み書きの両方ができなければなりません。これは、CACHE="do"により、必要なアクセス権で、自動的に作成されます。
ETCDIR parameter == ETCDIR =dirPath
-- default: ETCDIR ='${VARDIR}/etc'
DeleGate管理/設定用、持続性ファイルのディレクトリ。元 SMTP-DeleGate(SMTPGATE ) と、元 NNTP-DeleGate (NNTP ) 用設定ファイルは、ここに配置します。
LOGDIR parameter == LOGDIR =dirPath
-- default: LOGDIR ='${VARDIR}/log'
LOGFILE parameter == LOGFILE =[LogFilename ]
PROTOLOG parameter == PROTOLOG =[LogFilename ][:logFormat ]
ERRORLOG parameter == ERRORLOG =LogFilename
TRACELOG parameter == TRACELOG =LogFilename
-- default: LOGFILE ='${LOGDIR}/${PORT}'
-- default: PROTOLOG ='${LOGDIR}/${PORT}.${PROTO}'
-- default: ERRORLOG ='${LOGDIR}/errors.log'
-- default: TRACELOG ='${LOGDIR}/ptrace.log'
LogFilename s
が相対パスで指定された場合、それらは、${LOGDIR}内に配置されます。これら名前が"./"で始まる場合、それらは、${WORKDIR}内に配置されます。
パターン ${PROTO} と ${PORT}
は、それぞれ、このDeleGateのプロトコル名と、ポート番号に置換えられます。これらファイルとディレクトリは、可能な場合、DeleGateにより自動生成されます。LOGFILE=""
や、PROTOLOG=""のように、空ファイル名を指定することで、ログを停止できます。
HTTP用のPROTOLOG書式は、コモンログファイル書式 とコンパチブルで、カスタマイズ可能です。FTP用のPROTOLOG書式は、xferlog コンパチブルです。
エージングのためのLogFilenameとdirPathの置換え
パターン"[date+format ]"がファイル名に含まれる場合、format 文字列は、現時刻とstrftime(3)準拠の関数で評価され、評価値で置換えられます。これは、指定されたログディレクトリ(またはファイル)指定した時限で細分化でき、これにより、エージング されます。典型的な時限は、以下の書式で表します。
%Y -- 年 (like 2000)
%y -- 世紀を除く年 [00-99]
%m -- 月番号 [01-12]
%d -- 1ヶ月中の日 [01-31]
%W -- 1年の週番号 [00-53]
%w -- 1週間の日番 [0-6, Sunday=0]
%H -- 時間 [00-23]
例) 1ヶ月で循環する毎日のログ
例) 日付による階層ディレクトリを持つログ
LOGDIR ='log[date+/aged/%y/%m/%d]'
最近のログファイルは、LOGFILE指定の"[date+format ]"部を省略した名前で作成された、違うファイル名(ハードリンクされた)を指しています。例)上記例のLOGFILE指定で、ログファイルは、"log/aged/00/12/31/80.http"のようになり、最近のログは、他の名前"log/80.http"となります。
他のエージングパターン"[start+format ]"は、同様に評価され、"date+"を除いた、DeleGateが開始しした時間(SIGHUPまたは、TIMEOUT=restartによる再起動)に置換えられます。
EXPIRELOG parameter == EXPIRELOG =LogFilename
-- default: EXPIRELOG ='${LOGDIR}/expire.log'
CRONでの"-Fexpire"機能または、"-expire"動作による、期限切れ動作(削除)のログファイル。
WORKDIR parameter == WORKDIR =dirPath
-- default: WORKDIR ='${VARDIR}/work/${PORT}'
WORKDIRがアクセスできない場合、または、-vvオプションが与えられ、WORKDIRを明示しない場合、現ディレクトリ(DeleGateを呼出した者の)が、WORKDIRとして、使用されます。
ACTDIR parameter == ACTDIR =dirPath
TMPDIR parameter == TMPDIR =dirPath
PIDFILE parameter == PIDFILE =fileName
-- default: ACTDIR ='${ACTDIR}/act'
-- default: TMPDIR =system dependent
-- default: PIDFILE ='${ACTDIR}/pid/${PORT}'
現在アクティブなサーバに関する情報は、ACTDIRに配置されます。これらは一時ファイルは、DeleGateサーバ呼び出しで作成され、終了で、削除されます。
HOSTS parameter* == HOSTS =nameList [/addrList ]
nameList == name | {name [,name ]*}
addrList == addr | {addr [,addr ]*}
-- default: HOSTS =localhost/127.0.0.1
ドメイン名/IPアドレス ペアのリストは、DNS(または、NIS または、 /etc/hosts
テーブル)データを無効にします。これは、繰返し参照されるホストや、別名の解決を高速化したり、レゾルバの知らないホストに対して、代理を行わせることができます。
複数の名前やアドレスは、書式 {name1,name2,...}/{addr1,addr2,...}で、指定できます。addr 部のない、{name1,name2,...}のみが与えられた場合、name1,name2,...は、一つのホストとして評価されます。
RESOLV parameter == RESOLV =[resolver [,resolver ]*]
resolver == cache | file | nis | dns | sys
-- default: RESOLV =cache,file,nis,dns,sys
使用する名前レゾルバと、順番を指定。
cache
-- 以下のレゾルバによる結果のキャッシュ
file
-- ローカルの hosts(5) ファイル(一般的に /etc/hosts に配置)
nis
-- NIS または YP(4) サービスのホストマップ
dns
-- DNS サービス
sys
-- gethostbyname() と gethostbyaddr()
を使用する。(大抵、ホストのシステム標準レゾルバをコール)
RESOLV =""のように、空値を指定した場合、HOSTSパラメータに列挙されたホストのみ、解決できます(これは、安全を考慮し、hostsテーブルを隠さなければならない場合有効です。)それぞれのレゾルバは、オプションの引数とともに、以下のように指定できます:
cache:/path
-- キャッシュディレクトリパス名 [$TMPDIR/resolvy]
file:/path
-- パスワードファイルパス名 [/etc/hosts]
nis:nisDomain
-- NIS ドメイン名 [default domain]
dns:dnsHost
-- DNS
サーバとデフォルトドメイン
デフォルトで、複数のIPアドレスを持つホストに接続する場合、それぞれのレゾルバで設定された順序に従い、それぞれのアドレスが試されます。特別なパラメータ
HOSTS ="*/*/RR"は、 "Round Robin "の指定を追加でき、それらIPアドレスは、ラウンドロビンの順序で試されます。
RES_CONF parameter == RES_CONF =URL
-- default: RES_CONF ="file:/etc/resolv.conf" or from registry (on Windows)
"resolv.conf"ファイルの場所を指定。ファイルは、DeleGateオリジナルのレゾルバ Resolvy により翻訳されます。Resolvyは、含まれる、"nameserver", "domain", "ndots", "search", "sortlist"を認識します。
RES_NS parameter == RES_NS =dnsServer [//socksV5Host ]
-- default: RES_CONF による
使用するDNSサーバを指定します:dnsServer
は、DNSサーバのホスト名か、ホスト名のIPアドレスで、オプションで、ポート番号が標準ポート(53)以外の場合、
"host:8053"のように、ポート番号を付けることもできます。"dnsServer //socksV5Host "をともなう場合、防火壁の向こうにあるDNSサーバは、指定したSocks
V5サーバ経由で参照できます。
RES_RR parameter == RES_RR =HostList
-- default: RES_RR ="*"
HostListに含まれるホストのための、ラウンドロビンIPアドレスリスト。現在、RES_RR="*" と、
RES_RR =""のみがサポートされます。
RES_VRFY parameter == RES_VRFY =""
-- default: none
"RES_VRFY="をともなう場合、DNSサーバの逆引き結果を確認します。IPaddress1 が、Hostname として解決されたとき、および、Hostname が、Paddress-list
として解決され、IPaddress1 が含まれない場合、確認は失敗し、結果は、無視されます。
RES_DEBUG parameter == RES_VRFY =number
-- default: none
PROTOLIST
ProtoList == [!]protoSpec [,ProtoList ]
protoSpec == protocolName [/[portNumList][/methodList]]
ProtoListは、プロトコル名のリストです。予約名"*"は、全てのプロトコルを意味します。"!"や、"-"がプリフィックスされた場合、プロトコルは、プロトコルリストから除外されます。
HOSTLIST
HostList == [!]hostSpec [,HostList ]
hostSpec == [{userList }@]hostSpec [/netMask ]
userList == userNamePattern [,userNamePattern ]*
hostSpec == hostNamePattern |hostAddrPattern
userNamePattern == [*]uname [*]
hostNamePattern == [*]hname [*]
hostAddrPattern == IPaddressPattern |IPrange
netMask == IPaddress |maskLength
HostListは、ホストのリスト(名前、または、アドレス)で、存在するホストが、リストに含まれているか、いないかを付き合わせ、確認するために使用します。それぞれのホスト
(hostSpec )
は、オプションで、ユーザリスト(userList )でプリフィックス、および、オプションで、netMask
を付けることができます。
ワイルドカード ( * )
一つのドメインか、ネットワークに属するホストは、ワイルドカード記号をともなう1つの hostSpec で表現できます。
"*.com"または、 "*.delegate.org" または、
"www.*"のように、ワイルドカードキャラクタ"*"をプリフィックス/ポストフィックスできます。
特殊なケースで、"*.domain "のように、"*." で始まる hostSpec は、
"xx.domain " や "yy.xx.domain のような、普通のホスト名と同様に、"domain " をホスト名として、
マッチします。(DeleGate/6.1.18 から)
ネットワークに相当する、IPアドレス範囲は、192.168.[0-255],
192.168.1.[32-63]のように指定できます。これら範囲は、192.168.0.0/16 と 192.168.1.32/27
のように書くこともできます。IPアドレスの表記で、ワイルドカードキャラクタ"*"は、[0-255]を意味し、"192.168.*"のような場合、
192.168.[0-255] と同じです。
否定 ( ! )
host
に"!"をプリフィックスした場合、そのホストは、リストから除外される事を意味します。リスト中の全ての要素は、最初から最後まで走査されます。このように、一度追加(除外)された名前は、成功リストから、除外(追加)されます。例)HostListは、以下のようになります:
"*.dom,!*.xx.dom,*.yy.xx.dom" "host.yy.xx.dom"のホストは、最初のhostSpec
にマッチしますが、2番目で除外されます。しかし、再び、3番目で追加されます。HostList中の、最初のhost
が、"!"をともなう場合、全宇宙("*"、全てのホスト)から除外されることを意味し、"!host, ..."は、"*,!host,
..."とみなされます。
ネットマスク ( host /mask )
Specifying a netMask , you can check only a part of address,
the network address part typically. The netMask can be specified in
one of following formats;
netMask の指定で、アドレスの一部を検査できます。通常、ネットワークアドレス部です。netMask
は、以下のうちの一つで、指定できます。
/24 , /28 , ... マスクビット長
/FFFFFF00 , /FFFFFFF0, ... 16進表記
/255.255.255.0 , /255.255.240.0, ... ドット表記
/@A , /@B or /@C ... アドレスクラスマスク
@A , @B および、@C は、それぞれ、/8 ,
/16 および、/24 を表します。この表記法は、サブネットのために、ビット数をつけることができます;例) /@B4 は、クラスBネットワークを16のサブネットに分割することを意味します。
@ ... デフォルトネットマスク
ホストのIPアドレスクラスによって/@A , /@B , /@C
のいずれかを表現し、マスクする。
ユーザリスト ( {userList }@host )
srcHostList(例:クライアントホストに関するHostList)用、{user1,user2,...}@hostのように、ホスト名にプリフィックス可能な、ユーザ名リスト (userList )です。 否定記号"!"は、HostListと同じ意味を持ちます。注記: !user@hostは、{!user}@hostとは、異なります;前記は、user@hostを除外しますが、後者は、{*,!user}@host を意味し、このように、*@host の追加は、user@hostが除外されます。特別なユーザ名"?"は、identdで、識別されていないユーザ名にマッチします。
例) 不明ホストや、不明ユーザからのアクセスを抑制する
ポートリスト ( host :{portList } )
特殊ホスト名
これらは、特殊なホスト名で、実行時に、実ホスト名に置換えられます。
"." DeleGateが動作しているホスト。
"-" ホストがユニークなIPアドレス(ネットワークインターフェース)を持つ場合、"."と同様ですが、IPアドレスを複数もつ場合、クライアントが、このDeleGateに接続したIPアドレスになります。
".o" ホストがユニークなIPアドレス(ネットワークインターフェース)を持つ場合、"."と同様ですが、複数のネットワークインターフェースを持つ場合、出ていくネットワークインターフェース。
".localnet" "localhost,./@,-/@,.o/@"を表す。
"-C" クライアントホストで、クライアントからのアクセスをクライアント(ネットワーク)のみに制限する場合有効です。
"?" 名前や、アドレスがレゾルバ(RESOLV の指定)によって解決できない"unknown hosts "(不明なホスト)にマッチします。
名前解決停止 ( -host )
ホスト名(または、IPアドレス)が "-hostname" ("-192.168.1.1")
のように"-"がプリフィックスされる場合、ホスト名(IPアドレス)に対して、名前解決(逆引き)を試行しません。これにより、名前解決不能なホスト名(IPアドレス)に対する名前解決の試行における無だな時間を省くことができます。
時間条件 ( -T.period )
ホスト名の頭に、"-T."をともなう、擬似ホスト名パターンは、1日のうちの時限を指定するために使用します。
"-T.period " は、現在時刻が、指定したperiod 中にある場合マッチし、ここでのperiod
は、"hour1 -hour2 ”で表現します。
例)
PERMIT ="*:-H.9-16:hostList1 "
PERMIT ="*:-T.17-8:hostList2 " // hostList1
は、終業時間内に許可 // hostList2 は、終業時間外に許可
period の完全な書式はこのようになります:
[wW ]HH [MM ][-HH [MM ]].
週内の時間制限は、"wW " で表現され、ここでの W は、
"0"(日曜日)から、"6"(土曜日)の範囲です。
利便性のため、日曜日は、"7" でも表現できます。
例)
-T.w5-0 // 金曜日から日曜日
-T.w5-7 // 金曜日から日曜日
-T.w51730-10830 // 金曜日の午後5:30から、月曜日の午前8:30まで
合成演算子 ( &, |, ! )
上記でも説明しましたが、カンマ(,)の意味は、HostListで、"A,B"のような場合、ANDや、ORではありません。AND,
OR, NOTのような演算子は、 リストの特別なメンバによって、提供されます。
"&"
"hostList =A,&,B"のように使う、AND演算子で、Aが偽の場合、hostList
は、Bを評価せずに、トータルで偽になります。他の場合、全体で真になるためには、Bが真になる必要があります。
"|"
"hostList =A,|,B"のように使う、OR演算子で、Aが真の場合、hostList
は、Bを評価せず、トータルで真になります。他の場合、全体で真になるためには、Bが真になる必要があります。
"!"
"A,!,B"のように使う、NOT演算子で、Aの結果は反転され、続いて、Bがある場合、評価されます。 例)
PERMIT ="*:*:-T.9-16,&,hostList1 "
PERMIT ="*:*:-T.17-8,&,hostList2 " //
上記例と同じ意味です。
パラメータ置換
これらは、DeleGateのシンタックスを良く見せるため(もう)の、設定ファイル 書式ではありませんが、単純な再帰的置換え機構(階層的および、分散した、パラメータ部を一つのパラメータ(または、オプション)リストに組み立てます)です。
オプションとパラメータは、外部の"substitution
resources "(置換リソース)から、読込むこともできます。"+=file "のようなオプションは、オプションのリストが列挙された、"file "の名前を持つリソースに置換えられ、"name =+=file "のようなオプションは、"name =value "リストに置換えられ、この"value "は、"file "中に列挙されます。同様に、"name =xxx :+=file "のようなオプションは、リスト"name =xxx :value "によって置換えられます。
置換は、繰返し実行できます。この場合、相対リソース名は、DGPATH または LIBPATH 内で検索されます。デフォルトで、DGPATH ='+:.:${HOME}/delegate'の "+"は、"caller "(呼出したユーザ)リソースの場所を表します。例)"+=file2"が、呼出者ファイル"/usr/etc/file1"から参照される場合、"file2"は、"/usr/etc/file2"として、検索されます。リソース名は、"+={http://host/file1}"や、"+={http://host/file}"のようにURLで、指定できます。
paramRef == +=[URL ][?label ,[label ]*]
paramList == line
line
...
paramListPart == CASE label
paramList
ESAC
置換リソースは、オプション(または、パラメータ)のリストで、それぞれの行が一つのオプション(または、パラメータ)を表します。それぞれの行で、シャープ(#)に続く文字列は、コメントとして、無視されます。空白文字キャラクタ(
SPACE ,
TAB , LF,
CR)が、各行の最初または終わりにある場合無視されます。シングルクォート(')および、ダブルクォートは、取り除かれます。バックスラッシュ(\)に続く文字は、そのままの文字として扱われます。
例) 以下の5つの例は、他と同じ意味を持ちます。
置換リソースは、DeleGateが、SIGHUPを受けるか、CRONパラメータの"-restart"動作により、
再起動 したときに再読込されます。
他の置換 "name =-=URL "
は、URLのないようをローカルファイルシステム上(ACTDIR内)の一時ファイルに読込み、パラメータを"name=/path/of/temporary-file"に書換えます。これは、"-eCONFIGDATA=-=http://server/configData"のように、リモートリソースをCGIまたは、CFIプログラム経由にしたい場合、有効です。この場合、これらプログラムは、環境変数
CONFIGDATA("http://server/configData"の内容を含む一時ファイル名を値に持つ)で与えられます。
CFI と CFI スクリプト
クライアント・DeleGate間、または、DeleGate・サーバ間の通信は、CFI(Common Filter Interface)と呼ばれる簡単な仕組みを用い、DeleGateに関連付けたユーザ定義フィルタプログラムによって、抽出、または、変換できます。すでに存在するフィルタプログラムが、標準入力から受けて、標準出力に出力する場合、CFIプログラムとして、変更なしで使用可能です。CFIの使用法は、以下のようなパラメータで制御されます:
filterName ="filterSpec "
CMAP ="filterSpec ":filterName :connMap
filterName == FCL | FTOCL | FFROMCL |
FSV | FTOSV | FFROMSV |
FMD | FTOMD | FFROMMD
filterSpec == filterCommand | CFIscriptName
filterName
は、
FXX ,
FTOXX, FFROMXX
のような名前で、
XX は
CL (クライアント),
SV (サーバ),
MD (MASTER-DeleGate)の内の一つです。
FXX
のフィルタコマンドは、クライアントに対して、ファイルディスクリプタ0がバインドされ、DeleGateに対しては、ファイルディスクリプタ1がバインドされます。
FTOXX
と
FFROMXX のフィルタコマンドは、標準入力から入力を受け、
XX
に対してバインドされた標準出力へ、出力を投げます。
フィルタ(サーキットレベル情報において)以下のようにCMAPパラメータを使うことで、条件付で利かせることができます:
CMAP =filterSpec :filterName :ProtoList :dstHostList :srcHostList 例)
CMAP ="sslway:FSV:telnet:hostA:*"
は、HostA上のテルネットサーバに接続する場合のみ、SSLwayフィルタを利かせることを意味します。
FTOXX と、 FFROMXX フィルタで、
CFIスクリプトは、データタイプによって、それぞれのデータに、適したフィルタを選択して利かせることができます。FTOCL =filterCommand
のような、直接使用の変わりに、TOCL =filter.cfi
を指定でき、ここでのfilter.cfiは、CFIスクリプトフォーマットのファイルです。また、CFIスクリプトは、FTOCL =URL
のようにHTTPやFTP経由で、リモートホストから、読込むこともできます。CFIスクリプトのファイル名、または、スクリプト中で参照されるフィルタコマンドが、相対パス名で、指定される場合、それらは、LIBPATH 内を検索されます。
CFIスクリプトは、テキストデータで、"#!cfi"
マジックストリングで、始まり、それぞれ"--"によって区切られた、1つ以上のフィルタ設計書を含みます。
CFI script == "!#cfi" NL filterUnit [ "--" NL filterUnit ]*
filterUnit == filterRule [ filterRule ]*
filterRule == [ Action "/" ] ruleName ":" ruleBody
Action == "Output" | "Remove"
ruleName == "Filter" | "CGI" | "Header-Filter" | MIMEhdr
MIMEhdr == "Content-Type" | "User-Agent" | ...
X-hdr == "X-Status-Ver" | "X-Status-Code"
| "X-Request-Method" | "X-Request-Ver"| "X-Request-URL" | ...
ruleBody == string NL [ SP string NL ]*
Action (動作)を指定しない場合、入力ヘッダに
ruleName :ruleBody
を突合わせることを表します。入力メッセージが、ruleBody とマッチするフィールドボディをともなう
ruleName ヘッダ
を持つ場合、マッチします。
1つ以上のルールがマッチした場合、真になり、 filterUnit が採用されます。
filterUnit 内にマッチするルールが存在しない場合、
filterUnit は、無条件に採用されます。
現在、限られたMIMEヘッダセット(要求・応答メッセージ中の)のみがマッチングに使用できます。
オリジナルヘッダ中に含まれないいくつかの拡張ヘッダ情報でマッチすることもできます。
(例:応答メッセージ中のステータスコードを意味する、"X-Status-Code")
ヘッダruleName が"Filter"または、"CGI" または、"Header-Filter " の場合、例外的に、
それらは、動作(または、フィルタ)を指定し、入力データに利かせます。
"Filter" または、"CGI"フィルタの場合、入力メッセージのボディ部は、
フィルタプログラムの標準入力にパスされ、標準出力から出力されます。
また、出力データは、元の入力メッセージの変わりに、対象(クライアントや、サーバ)に転送されます。
転送メッセージ中の"Content-Length"は、ボディ部のサイズを示す値に調整され、転送されます。
"Header-Filter" フィルタの場合、メッセージのヘッダ部は、フィルタに授受されます。
HTTPメッセージ(Request-Line または、Status-Line)中のstart-line は、
"Request-Line:" または、"Status-Line:" をプリフィックスされたヘッダフィールドとして、
渡されます。
ruleName :ruleBody に対して、"Action /" をプリフィックスした場合、
いくつかの簡単な書換えは、ruleBody データを使用し、関連する、ruleName
に対して行われます。"Output/ruleName :ruleBody "は、
ruleName :ruleBody
フィールドを、ヘッダに付け加え(または置換え)る事を表します。"Remove/ruleName :ruleBody "は、ruleBody
にマッチするボディと、ruleName 名をともなうヘッダフィールドを削除することを意味します。
例) HTTP 応答メッセージの書換え
SERVER =http FTOCL =test.cfi
[content of test.cfi]
#!cfi
Content-Type: text/html
Filter: sed's/string1 /string2 /'
--
Content-Type: image/gif
Output/Content-Type: image/jpeg
Filter: gif2jpeg
URL書換えによるプロキシ動作
プロトコルの詳細と使用例
共通の表記
# delegated ...
特権のあるポート番号を使用するため、DeleGateをsuper-userで呼出す事を意味する
% delegated ...
super-user以外でDeleGateを呼出すことを意味する
firewall % delegated ...
DeleGateが、インターネットに/から到達できる、あなたのサイトに属したホスト上で動作していることを意味する
internal % delegated ...
DeleGateが、インターネットから隔離された、あなたの内部ホスト上で動作していることを意味する
external % ...
あなたのサイト外のホスト上で、何かすることを意味する
TCPrelay
SERVER =tcprelayパラメータをともなうDeleGateは、伝送内容を把握しないで、クライアント・サーバ間の通信を1つのTCP接続で中継します。このように、TCP上の任意アプリケーションプロトコルは、DeleGateのサポートするプロトコルリスト中に存在しなくても、SERVER=tcprelayによって、中継できます。しかし、この場合、サービスへの付加価値(キャッシュ,マウント,ログ)は、使用できません。クライアントからのリクエストによる、任意サーバへの接続は、できません。主接続以外に動的に他の接続を生成するアプリケーションプロトコル(FTPなど)は、中継できません。プロトコル上、元サーバ上で、他の名前に変わってしまうアプリケーションプロトコル(HTTP中の完全なURL指定など)も中継できません。
例) 同様の役割をする、TCP上の2つのプロキシ
# delegated -P25 SERVER =smtp://mailserver # delegated -P25
SERVER =tcprelay://mailserver:25
UDPrelay
SERVER =udprelayパラメータをともなうDeleGateは、伝送内容を把握しないで、クライアント・サーバ間の通信をUDPで中継します。これは、TCPのためのtcprelayと同様な、長所/欠点を持ちます。ルーティング情報が変更されるようなアプリケーションプロトコル(CU-SeeMeなど)もまた、udprelayで中継できません。
例) 同様の役割をする、UDP上の2つのプロキシ
# delegated -P53 SERVER =dns://nameserver # delegated -P53
SERVER =udprelay://nameserver:53
Socks サーバ
Socks-DeleGateは、SocksV4とV5の両方を受け付けます。しかし、SocksV5における、認証の仕組みは、まだサポートしていません。
例) Socks-DeleGate
# delegated -P1080 SERVER =socks 例) 上流Socksサーバ に転送する。
HTTP プロキシ/サーバ
例) 単一HTTPプロキシDeleGate
firewall % delegated -P8080 SERVER =http
このDeleGateを内部ホスト上のクライアントから使う場合、HTTP, HTTPS (Security), FTP , Gopher,
Waisのプロキシに "firewall :8080"を指定します。
例) HTTPプロキシDeleGate(カスケード)
firewall % delegated -P8888 RELIABLE =internal
internal % delegated -P8080 SERVER =http MASTER =firewall :8888
内部 ホストからの要求のみ受け付けるgeneralist DeleGateをfirewall
上で走らせ、firewall ホスト上のgeneralistを使用する、specialistを内部で、走らせる。generalistは、上流DeleGateとして、任意プロトコルの複数のDeleGateから、共有できます。
例) 元HTTPサーバDeleGate
host# delegated -P80 SERVER =http \
MOUNT ="/* /path/of/www/*" RELAY =no RELIABLE ="*"
".cgi"拡張子をともなう名前のファイルは、CGIスクリプトとみなされます。以下のように、MOUNTで指定したディレクトリ内の任意名のCGIスクリプトを使用できます。:
MOUNT ="/xxx/* cgi:/path/of/cgi-bin/*"
例) DeleGateをCGIプログラムとして使う
DeleGateを、HTTPサーバからのCGIプログラムとして使用できます。例)以下のように、HTTPサーバ(A)の"httpd.conf"ファイル中で指定する。
Exec /other/*
/path/of/cgi-delegate 次に、以下のような内容のファイル/path/of/cgi-delegateを書きます:
#!/bin/sh
delegated -Fcgi
MOUNT ="/-* =" \
MOUNT ="/www2/* http://wwwserv2/*" \
MOUNT ="/news/* nntp://newsserv/*"
これは、/other/www2/(HTTPサーバ"wwwserv2"の内容)と、/other/news/(NNTPサーバ"newsserv"の内容)を含む、擬似サブツリー"/other/"をサーバ(A)に追加します。
HTTP 伝送ログ書式
HTTPプロトコル用PROTOLOGフォーマットは、PROTOLOG="LogFilename :format "として、LogFilename
の後にポストフィックスした、オプションの指定書式により、変更できます。この場合、デフォルトのファイル名は省略できます。例)PROTOLOG =":%X"の指定は、NCSAライクの拡張コモンログファイル書式を作ります。デフォルトの書式は、PROTOLOG=":%C
%D"です。
%C
-- CERN-HTTPDのコモンログファイル書式
%c
-- ミリ秒解像度を持った日付を除き、%C と同じ
%D
-- DeleGateによる拡張
(connTime +relayTime :status )
%X
== '%C "%r" "%u"' Referer と
User-Agent付きのコモンログファイル書式
%r
-- 要求メッセージ中のReferer フィールド
%u
-- 要求メッセージ中のUser-Agent フィールド
%S
-- サーバへのCONNECT ステータス (c,m,p,d,s,v)
%Cにおける、クライアント情報部は、ホスト名,Ident,および、ユーザ名が、デフォルトで記録され、AUTH="log:"パラメータで、変更できます。
HTTPCONF parameter == what :conf
-- default: welcome.dgp ,welcome.shtml ,welcome.html,...
welcome:listOfWelcomeFiles
-- default: welcome.{dgp,shtml,html,cgi},index.{dgp,shtml,html,cgi},-dir.html
インデックスファイルか、"/path/"のように"/"で終わるディレクトリのURLのために使わなければならない、CGIスクリプトのリスト。これは、ファイル名の候補リストです。リストは"-dir.html"で終了することができ、これは、内臓インデックスジェネレータを意味します。リストが空の場合、空データが、インデックスデータの代わりになります。
search:pathOfSearchScript
-- default: none
"/path?search"のようなサーチ部をともなうURLに利かせるCGIスクリプトのパス。これは、全てのURLに利かせる全体的な設定です。また、このように、それぞれのMOUNTポイントに対して、ローカルな検索スクリプトを指定できます。
MOUNT ="/path2/* /root/of/path2/*
search:srcipt2". この、ローカルな設定は、全体的なものに優先します。特殊ローカル設定"search:-"で、MOUNTポイントに対する全体的な設定を無視できます。
methods:listOfAcceptableMethods
-- default: methods:OPTIONS,GET ,HEAD ,POST ,PUT ,... -- LOGFILE
に書かれたログ(HTTPCONF=methods:"+") を参照して下さい。 許可するHTTP機能を制限/追加する
例)
ver:1.0
HTTP/1.0 クライアント/サーバとして動作
svver:1.0
HTTP/1.0 サーバに対して、クライアントとして動作 (HTTP/1.0 で、要求を送信)
clver:1.0
クライアントに対して、HTTP/1.0 サーバとして動作
(応答中で、chunked エンコードを使用しない)
tout-wait-reqbody:period [30]
要求ボディ内の最初のデータを待つ最大値
tout-in-reqbody:period [15]
要求ボディ内の次のデータを待つ最大値
(クライアントサイドでの遅いフィルタプログラムのため、調整できます)
tout-cka:period [5]
クライアントの接続を確保する最大値
(タイムアウトは、それぞれのクライアントホストからの最初の接続のため10倍長くなっています)
max-cka:number [10]
キープアライブ中の単一ホストからのリレー要求の最大値
(それぞれのクライアントホストからの最初の接続に対しては10倍の値が提供されます)
max-ckapch:number [4]
クライアントホスト単位でのキープアライブ中接続の最大数
max-reqline:length [4k]
許容する要求文字長の最大値
max-reqhead:length [12k]
許容する要求ヘッダ長の最大値
max-gw-reqline:length [512]
他のプロトコルの他のサーバに転送する要求文字長の最大値
max-hops:number [20]
HTTPプロキシチェーンの最大ホップ数
tout-resp:period
[TIMEOUT=io ]
サーバからの応答待ち時間の最大値
xferlog:ftp
xferlog フォーマットでもFTP/HTTP処理を記録する
例)
HTTPCONF =search:/path/of/searchScript
MOONT ="/bin/* cgi:/path/of/cgi-bin/* search:-"
MOUNT ="/* file:/path/of/data/*"
FILETYPE parameter == suffix :gopherType :altText :iconName :contentType
-- default: FILETYPE =".txt:0:TXT:text:text/plain"
FILETYPE =...
ファイル名を、content-typeマッピングに定義
gopherType :
0 - text,
1 - directory,
4 - BinHex,
6 - uuencode,
9 - binary,
g - gif,
I - image,
...
altText :
テキストのみディスプレイ内の、アイコンイメージに対して表示するテキストを選択(<IMG ALT ="altText " ... >のように、HTMLテキスト中に埋め込まれた、IMGタグ)。
iconName :
binary, binhex, compressed, directory, document, ftp, gzip, image,
index, index2, movie, sound, tar, telnet, text, unknown, uu (see http://delegate /-/builtin/icons/) の内1つ。
contentType :
text/plain, image/gif, ... (RFC2045 参照)
例)
CGIENV parameter == CIGENV =name [,name ]*
-- default: CGIENV ="*"
Http-DeleGate の MountOptions
条件:
asproxy
DeleGateが、プロキシサーバとしてコールされた場合(完全なURL書式で要求されたURL)に、真。
withquery
要求されたURLが、 "?query "部を持つ場合、真。 制御:
moved
HTTPで、 "302 Moved"応答が返った場合以外、中継しない
useproxy[=proxyURI ]
"305 Use
Proxy"応答メッセージを生成。proxyURIが省略されるか、"direct"が与えられる場合、応答メッセージは、"Set-Proxy: DIRECT"として、 Set-Proxyフィールドをともなって送信されます。
他の場合、URIは、フィールド中に"Set-Proxy: SET; proxyURI=proxyURI"で、セットされます。
rcode={301|302|305|306|403|404}
指定したステータスコードの応答を返す。エラーメッセージをカスタマイズするとき有効です。
robots={no|ok}
ロボットによる検索の許可・不許可。NNTPとFTPでは、デフォルトは"no"で、他のプロトコルでは、"ok"です。
genvhost=host
サーバに転送される要求メッセージ中の "Host: host "フィールドをセット。
ftosv=-cc-charCode
サーバに転送されるHTTPヘッダのキャラクタセットを charCode (jis|sjis|euc|utf8)に変換する。
例)
"useproxy", "method", "dst", "withquery"
オプションは、元々、潜在的に厄介なアクセス(対象サーバのCGIプログラムを呼出すような)を拒否するために取り入れられました。例)POSTメソッドをともなう要求、または、"?"をともなうURLを、拒否する。:
MOUNT ="http:* = method=POST,asproxy,useproxy"
MOUNT ="http:* = withquery,asproxy,useproxy"
HTTP-DeleGate の
AUTH パラメータ
ユーザによるDeleGateの構成
DeleGateを構成する場合、柔軟に、それは、DeleGate管理者だけではなく、ユーザも行えるように、
(WWWリソース(元HTTP-DeleGate上の)提供者)DeleGateは、ユーザが設定した、構成パラメータを、
要求プロセス時毎に読むことをサポートしています。
そのパラメータは、MOUNTされたローカルファイルシステム上の、
"+=parameters" ファイルフォーマットで、
拡張子に".dgp"を持つファイルによって与える必要があります。
それは、-Fcgi と同様に動作し、
新しいプロセスを生成しないでに、効率を上げます。
例)
ニュースサーバN を、http://delegate /news/servN /にMOUNTする
(1) 起動時のパラメータによる
MOUNT ="/news/servN /* nntp://nntpserverN /*"
(2) CGI-DeleGateによる
MOUNT ="/news/* cgi:/dirPath /*"
[the contents of file:/dirPath /servN /welcome.cgi]
delegated -Fcgi MOUNT ="/* nntp://nntpserverN /*"
(3) ".dgp" ファイルによる
MOUNT ="/news/* file:/dirPath /*"
[the contents of file:/dirPath /servN /welcome.dgp]
MOUNT ="/* nntp://nntpserverN /*"
(この機能は、FTPのような他のプロトコルに適用するべきです...)
SHTMLファイルでのサーバサイドの実装(SSI )
元HTTP-DeleGateで、接尾辞".shtml"のつくローカルファイルは、
HTMLファイルとは、サーバサイドの実装 (SSI )のための特別なタグが含まれるのを除き、
".html"のつくファイルのように扱われ、METAは、クライアントに送信される前に、
HTTP-DeleGateによって、理解され、置換されます。
SSI タグ
<!--#echo var="varName " -->
varName で指定された値で置換されます。
varName は、以下のような、
"REMOTE_HOST " または、"HTTP_SERVER "
と同様な、任意のCGI互換名です。
<!--#include virtual="URL " -->
"virtual"属性で指定されたデータに置換されます。
"virtual" は、"proto ://server /upath "のような完全なURLまたは、
"/upath " のような部分URLとでき、http://delegate /upath として、
解釈されます。
"/"で始まらない"upath "のような相対URLは、shtmlファイルの
ベース(カレント)に対する相対として、解釈されます。
<!--#fsize virtual="URL " -->
<!--#flastmod virtual="URL " -->
それぞれ、指定したデータのサイズまたは、最終更新時間で、置換されます。
<!--#config timefmt=timeFormat -->
"#echo","#flastmod"などによって生成される時間文字列の書式を、
strftime(3)互換の書式で指定します。
(default: timefmt="%a, %d %b %Y %H:%M:%S %z")
META タグ
<META HTTP-EQUIV=fieldName content="filedBody ">
HTTP応答メッセージに"fieldName : fieldBody "ヘッダを生成します。
fileBody 内の以下のパターンは、前記のものとして、置換されます。
${varName } or
<!--#echo var=varName -->
${flastmod:URL } or
<!--#flastmod virtual=URL -->
${fsize:URL } or
<!--#fsize virtual=URL -->
${include:URL } or
<!--#include virtual=URL -->
例)
<META HTTP-EQUIV=Status content="200 OK">
<META HTTP-EQUIV=Content-Type content="text/html">
<META HTTP-EQUIV=Pragma content="no-cache">
<META HTTP-EQUIV=Date content="${DATE_GMT}">
<META HTTP-EQUIV=Last-Modified content="${flastmod:URL}">
ICP プロキシ/サーバ
ICPCONF parameter* == ICPCONF ={icpMaxima |icpConf }
icpMaxima == para:N |hitage:N |hitobjage:N |hitobjsize:N |timeout:N
icpConf == icpOptions :ProtoList :dstHostList :srcHostList
-- default: ICPCONF =para:2,hitage:1d,...
DeleGateをICPサーバ(SERVER=icp)として動作させる場合の、ICP設定
para:N
-- 並列ICP-DeleGateサーバ数 [2]
hitage:N
-- HITとして通知する、キャッシュデータの有効期限 [1d]
hitobjage:N
-- HIT_OBJ似よって送信される、キャッシュデータの有効期限 [1h]
hitobjsize:N
-- HIT_OBJによる、キャッシュデータの最大容量 [1024](bytes)
timeout:N
-- 応答待ちタイムアウトのデフォルト値 [2.0](seconds)
debug:N
-- デバッグ用ログレベル [0]
FTPCONF parameter* == FTPCONF =ftpControl [:{sv|cl}]
ftpControl == nopasv | noxdc | rawxdc
-- default: none
nopasv
データ接続の PASV コマンドを使用不可とする。
noxdc
制御接続で、データ伝送の XDC モードを使用不可にする。
rawxdc
XDC モードにおいて、伝送データをBASE64エンコードしない。
ftpControl に "nopasv:sv" のように ":sv" または ":cl" がつづく場合、
例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに
適用されます。
FTP プロキシ/サーバ
internal % ftp
ftp> open firewall 8021
220- firewall PROXY-FTP server (DeleGate/6.1.0) ready.
220- @ @
220- ( - ) { DeleGate/6.1.0 (February 3, 2000) }
...
220- --
220- You can connect to a SERVER by `user' command:
220- ftp> user username@SERVER
220- or by `cd' command (after logged in as an anonymous user):
220- ftp> cd //SERVER
220- Cache is enabled by default and can be disabled by `cd .' (toggle)
220- This (proxy) service is maintained by 'admin @your.domain '
220
Name (yourhost:yourname): ftp@ftp1
331-- USER for ftp@ftp1.
220- ftp1 FTP server ready .
331- Guest login ok, send your complete e-mail address as password.
331-- @ @
331 \( - )/ -- { connected to `ftp' }
Password: me@my.domain
230 Guest login ok, access restrictions apply.
ftp> cd //ftp2
250-- CWD for ftp@ftp2
220- ftp2 FTP server ready .
230- Guest login ok, access restrictions apply.
250-- @ @
250 \( - )/ -- { connected to `ftp2' }
ftp>
注記:大抵のftpクライアントは、以下のように、コマンドラインで、FTPのポート番号を指定可能です。
internal % ftp firewall 8021
例) カスケード FTP-プロキシ
例) フィルタ/マージ/エイリアスをともなう、FTP
MOUNT
firewall # delegated -P21 SERVER =ftp://serv1/ \
MOUNT ="/pub2/* ftp://serv2/pub/*"
このDeleGateは、serv1の全ての内容を中継し、"/pub2/*"は、ftp://serv2/pub/* のそれと置換えられた部分が除外されます。
例) FTP to LPR (Line Printer Daemon Protocol) ゲートウェイ
MOUNT ="/* lpr://printer0/qname0/*" MOUNT ="/pr1/*
lpr://printer1 /qname1/*" MOUNT ="/pr2/*
lpr://printer2 /qname2/*"
LPR/FTP-DeleGateは、FTPクライアントがリモートプリンタにアクセスできるようにします;
ファイルの印刷は、FTPのファイルアップロードによって行われ、
プリンタステータスは、FTPディレクトリリストで見ることができます。
MountOption "readonly"は、ステータス閲覧を禁止します。
例) 元FTP-DeleGate
host# delegated -P21 SERVER =ftp MOUNT ="/* /path/of/root/*"
元FTP-DeleGateこのケースでの、ファイルへの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT ="/xxx/* /yyy/* rw"のように、MOUNTポイントに対し、
マウントオプションとして、"rw" (read/write)を指定する必要があります。
全コンテンツはの取込動作は、指定ディレクトリ 内に行われ、
"RETR directory .tar" コマンドによって、
tarフォーマットの単一ファイルとして返されます。
この機能を有効にするには、REMITTABLE="+,tar"のように、
REMITTABLE リストに、"tar" を追加します。
FTP 伝送ログ書式
FTPプロトコルのPROTOLOG書式は、xferlog (5)と呼ばれる、
"wu-ftp"コンパチブルなものです。xferlogにおける各行は、以下の要素(1行に)を含みます。
currentTime transferTime clientHost
fileSize fileName transferType
specialActionFlag direction accessMode
userName serviceName authenticationMethod
authenticatedUserID
DeleGateStatus
transferTime は、秒で表される、トータル伝送時間です。
transferType "a" (アスキー) または、"b" (バイナリ)のどちらかです。
specialActionFlag は、現実装では、常に "_" (none) です。
direction は、"o" (outgoing) または、"i" (incoming)のどちらかです。
accessMode は、"a" (anonymous)または、 "r" (real user)のどちらかです。
userName は、e-mail アドレス(accessMode "a")
または、存在するユーザ名(accessMode "r")のどちらかです。
serviceName 現実装では、常に"ftp"です。
authenticationMethod は、"0" (none) または、
"1" (RFC1413 Authentication)のどちらかです。
authenticatedUserID は、 authenticationMethod
によって得られたユーザID、または "*"(認証なし)のどちらかです。
DeleGateStatus は、"L" (local file), "H" (cache hit), "N" (cache miss)のどれかです。.
例)
Mon Feb 28 15:32:15 2000 13 proxy.xyz.co.jp
182558 /ftp/pub/DeleGate/Manual.htm a _ o a
webmaster@xyz.co.jp ftp 0 * L
Telnet プロキシ/サーバ
internal % telnet firewall 8023...
-- @ @ firewall PROXY-telnet server DeleGate/6.1.0
-- ( - ) { Hit '?' or enter `help' for help. }
...
-- -- -- This (proxy) service is maintained by 'admin @your.domain '
>> Host name: exthost
-- Connected to exthost.
SunOS UNIX (exthost)
login:
例) 元 Telnet-like server
C:\> delegated -P23 SERVER =exec XFIL =command.com
WORKDIR ="/" // Windows95/98
command.com を使った、簡単なテルネットサーバ。
POP プロキシ
例) プロキシ POP-DeleGate
firewall # delegated -P110 SERVER =pop
external % telnet firewall pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username @servername
...
USER username %servername is also available.
例) POP MOUNT
"pop://user @server "
は、内部的に、"pop://server /user " として表現され、以下のようにMOUNTで制御されます:
MOUNT ="//* =" ... サーバがユーザによって指定された場合、書換えしない MOUNT ="*
pop://defaultHost /*" ... デフォルト POP サーバを指定 MOUNT ="user1
pop://host1/*" ... "user1"のサーバを "host1"にする MOUNT ="//pop2/*
pop://host2/*" ... 実ホスト名 "host2"を隠す
例) NNTP サーバから POP
クライアントへのゲートウェイ
例) POP サーバから HTTP
クライアントへのゲートウェイ
firewall # delegated -P80 MOUNT ="/mail/*
pop://mailHost /*"
このDeleGateは、POPサーバ(デフォルトでmailHost
にある)のメールボックスを、HTTPクライアントに提供します。クライアントが、"http://firewall /mail/ "にアクセスするには、HTTPの認証情報として、mailHost
にあるPOPサーバのUsernameとPasswordを入力するように要求されます。Usernameが、"user @mailHost2 "の場合、mailHost
ではなく、mailHost2 が対象POPサーバとしてアクセスされます。Hostサーバユーザのそれぞれのメールボックスは、
"http://firewall /mail/+pop.User.Host"になり、URL中にUserとHostを直接指定できます。
IMAP プロキシ
SMTP プロキシ/サーバ
例) プロキシ SMTP-DeleGate
// エイリアスとフィルタ
firewall # delegated -P25 SERVER =smtp://mail-server/
\
MOUNT ="foo@bar smtp://foo2@bar2" \
MOUNT ="* smtp://-"
SMTPCONF parameter == SMTPCONF =what :conf
-- default: SMTPCONF =bgdatasize:64K
nohelo
"HELO" を言わない行儀の悪いクライアントを許可する。
bgdatasize:N
データが N バイトより大きい場合、バックグラウンドでリレーします。
これは、"DATA" コマンドを投げた後に、サーバからの "QUIT" コマンド応答を待たない
クライアントをリレーするための手段です。
注)DeleGate はスプールや、転送機能を持たないので、1つのメールデータのみをバックグラウンドで
リレーできますが、伝送終了前に DeleGate がクラッシュした場合、メールは失われます。
SMTPGATE parameter == SMTPGATE =dirPath
-- default: SMTPGATE ='${ETCDIR}/smtpgate'
NNTP プロキシ/サーバ
MOUNTは、NNTP-DeleGateに対して、ニュースグループのフィルタとエイリアス、複数NNTPサーバのマージ応用することもできます。
例)MOUNT="alias-group. nntp://server/group."は、"group.*"へ通過し、また、それらに"alias-group.*"の別名を与えます。簡単なフィルタ指定は、SERVER="nntp://server/group."で、
MOUNT ="= nntp://server/group."と同じです。複数のNNTPサーバに対して、複数MOUNTした場合、DeleGateは、複数サーバの複数ニュースグループをマージし、それらが、単一サーバ上に存在するかのようにクライアントにニュースグループを提供します。
例) フィルタ
# delegated -P119 SERVER =nntp://nntpServer /group .
ニュースグループ名が"group .*"のパターンを持つ場合のみ中継する。nntpServer に対するグループリストは
"nntp://nntpServer /group1 .,group2 .,..."のように指定できます。
例) 複数の NNTP サーバをマージ
# delegated -P119 SERVER =nntp \
MOUNT ="= nntp://server1 /"
MOUNT ="= nntp://server2 /"
例)複数のNNTPサーバを認証付(AUTHINFOを使用)でマージ
# delegated -P119 SERVER =nntp \
MOUNT ="= nntp://user1 :pass1 @server1 /"
MOUNT ="= nntp://user2 :pass2 @server2 /"
例) 選択したグループをマウント
// グループ group.* をオリジナル名のままでマウント
MOUNT ="= nntp://server1 /group."
// グループ group.* をエイリアス名 "alias-group.*" でマウント
MOUNT ="alias-group. nntp://server1 /group."
例) POP サーバから NNTPクライアントへ
// メールスプールをニュースグループ名 "+pop.user.host"としてマウント
# delegated -P119 SERVER =nntp
MOUNT ="= pop://user :pass @host /"
例) NNTP サーバから HTTP クライアントへ
# delegated -P80 MOUNT ="/news/* nntp://nntpServer /*"
例)元 NNTP-DeleGate
# delegated -P119 SERVER =nntp://-.-/
NNTP-DeleGateのSERVERパラメータ中の対象サーバに"-.-"を指定すると、DeleGateを元NNTPサーバとして使うことを意味し、それの持つスプールに検索/投稿できます。の新たなニュースグループ名
newsGroup を作るには、空ファイルを作ります。
'${ETCDIR}/news/groups/newsGroup '
既存の"/path/of/MH-folder"をnewsGroup
として中継するには、上記のようにファイルを作り、このような内容で埋めます。
0 0 0 0 /path/of/MH-folder (4つのゼロの後に、MH-folderのパスをつける)
投稿された記事の最初の行が、"From user date "のようなUnix-Fromを持つか、
"Unix-From: user date "ヘッダを持つ場合、記事の記事番号は、"X-Seqno"
(または、"X-Sequence")ヘッダが存在する場合、
固有のものにセットされ、スプールファイルの作成日付は、Unix-formのdate にセットされます。 NNTPのMountOptions
hide={GroupList }
クライアントから隠す、ニュースグループ名パターンリスト 例) "hide={alt.*,!alt.comp*}"
cache=no-article
ARTICLE キャッシュを停止
cache=no-list
LIST キャッシュを停止
upact:Invoke /Reload /Posted
LIST(active list)のキャッシュ更新を制御。同じ意味の、NNTPCONF=upact:Invoke /Reload /Posted
は、このMOUNTパラメータの対象サーバのみ、制御が除外されます。
NNTPCONF parameter* == what :conf
-- default: NNTPCONF =upact:600/300/120
pathhost:Server /PathHost
物理Server ホストの論理PathHost 名を定義します。 例)
NNTPCONF ="wall.etl.go.jp/delegate.org"
upact:Invoke /Reload /Posted
アクティブなリストのキャッシュ更新を制御します。nvoke と Reload
は、キャッシュの有効期限を秒で指定します。DeleGate経由で記事がポストされた後、Posted
に指定した期間内で、クライアントがチェックしたとき(LISTコマンドで)に、キャッシュが更新されます。
overview.fmt:{FieldList }
default --
overview.fmt:{Subject,From,Data,Message-ID,References,Bytes,Lines}
DeleGateによって生成される、XOVER応答書式
xover:Number
default -- xover:2000 "XOVER range "での最大記事数の制限
nice:Number
指定した場合、nice値をセット
auth:{srcHostList }
クライアントがsrcHostList に含まれる場合、NNTPセッションを開始するときに認証(AUTHINFOコマンドを使用)を強制ます。このパラメータは、NNTPサーバが、ユーザのサブセットに対する認証を行うときと、このDeleGateが、NNTPキャッシュを行う場合、セットする必要があります。
server:host [:port ][/grouplist ]
URL nntp://*/... または news:...によるHTTP要求に対する、NNTPサーバをセットする
nntpcc:Number
default -- nntpcc:1 "nntpcc:0"指定で、NNTP "connection
cache"を停止します
LDAP プロキシ
Whois プロキシ
例) プロキシ Whois-DeleGate
firewall # delegated -P43 SERVER =whois
internal % whois -h firewall
"whois://whois.nic.ad.jp/help"
X プロキシ
例)単一ホスト上のディスプレイに中継
x-server % xhost firewall
firewall % delegated -P6008 SERVER =X://x-server
internal % xterm -display firewall :8
例)単一サーバホスト上の2つのディスプレイに中継
firewall % delegated -P6002-6003 SERVER =X://x-server:-6002
例)2つのサーバホストに中継
firewall % delegated -P6011-6012 \
SERVER =X://x-server1:-:{*:6011} \
SERVER =X://x-server2:-:{*:6012}
Gopher プロキシ
SSL プロキシ
FCL , FSV , CMAP パラメータで、フィルタプログラム
"sslway "を使用し、クライアント側と/かサーバ側の通信をSSLプロトコルでラップできます。このフィルタを使うには、sslwayと、適切なPEMファイル(LIBPATH(通常
DGROOT/lib)内に配置)が必要です。詳細はhttp://www.delegate.org/delegate/ssl/
を参照して下さい。
例) SSLサーバ・非SSLクライアント間を中継
例) SSLクライアント・非SSLサーバ間を中継
DNS (Domain Name System) プロキシ/サーバ
DNS-DeleGate サーバは、ホスト名情報をDNS,NIS,ローカルファイルを含めて、
収集し、リレーします。
A, PTR , SOA 及び 単純化された MX のみに制限された、
リソースレコードタイプを提供します。
SOA レコードは、
DNSCONF 設定の情報と共に構成されます。
例) {NIS,FILE ,DNS}/DNS ゲートウェイ
hostname のための MX レコード は、与えられた場合、
-MX.hostname ( 以下の例のように)または、
hostname のための A レコードが使用されます。
複数の MX レコード間の優先順位は、現実装では表現できません。
例)HostB の MX として、HostA の hosts テーブルを使用する。
10.1.2.3 hostA
10.4.5.6 hostB, -MX.hostA
DNSCONF parameter* == what :value
DNS-DeleGateサーバの構成を指定します
para:N -- 並列サーバプロセス数 [2]
domain:FQDN -- [DeleGateホストのドメイン名]
origin:FQDH -- [DeleGateホストのホスト名]
admin:Email -- 管理者のメールアドレス [ADMIN]
mx:FQDH -- [存在する場合、-MX.host のプライマリホスト名、または、自身による host 問い合わせ]
serial:N -- シリアルナンバ [最終変更時の %Y%m%d%h ]
refresh:period -- リフレッシュ間隔 [6h]
retry:period -- リトライ間隔 [10m]
expire:period -- 有効期限 [14d]
minttl:period -- 最小 ttl [6h]
CU-SeeMe プロキシ
例) プロキシ CU-SeeMe-DeleGate
firewall % delegated -P7648 SERVER =cuseeme://Reflector/
INTERNAL # delegated -P7648 SERVER =cuseeme://firewall /
internal %
{firewall または INTERNAL を
リフレクタのproxy-reflectorとして使用}
予約名
特殊名"-"と"-.-"を、URLの"host :port "部に使用したとき、DeleGateのホストとポートを意味します。また、URL
"http://-.-/-/"は、DeleGateの制御ページの入り口として、予約されています。
カスタマイズ
アイコンとメッセージを含む、DeleGateのビルトインデータソースは、ソースコードディレクトリ"src/builtin/*"にあります。それらは、DeleGateの実行ファイルにまとめられ、リソースとして、URL
"http://delegate /-/builtin/*"でDeleGate実行時にアクセスできます。これらデータは、それらのMOUNTを定義することで、DeleGateをコンパイルせずに置換えられます。例)アクセス禁止で返るエラーメッセージは、"http://delegate /-/builtin/mssgs/403-forbidden.dhtml"にあり、それは、このように、MOUNTパラメータで、置換えられます:
MOUNT ="/-/builtin/mssgs/403-forbidden.dhtml
/tmp/forbidden.dhtml" この例で、MOUNTは、forbiddenメッセージと、代用データ("/tmp"内のローカルファイル)のみ置換えます。しかし、大抵の場合、ビルトインデータグループは、ワイルドカード(*)記号で、置換えられ、また、代用データは、HTTPやFTP経由でアクセス可能なリモートホスト上に配置できます。例)全ての、"src/builtin/"のコピーを"http://yourwww/delegate/builtin/"に入れ、このようにMOUNTする:
MOUNT ="/-/builtin/*
http://yourwww/delegate/builtin/*" リモートデータの読込みは、MOUNTされたビルトインデータが、キャッシュされ、一般のデータとして再利用されるキャッシュが有効な限り、オーバヘッドの影響を受けません。
アタッカー防御
SIGSEGV や
SIGBUSのような致命的信号が発生した後、DeleGateは、クライアントホストへのサービスを直ちに停止します。の発生は、致命的エラー発生の原因は、エラー前に、侵入の試みが失敗したサインととらえることもできます。同時に、事象を通知するため、DeleGateは、ADMINパラメータの名前の管理者にレポートメールを送信します。
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、存在するアドレス上にターゲットバッファが存在していることを期待しており、スタックアドレスをランダマイズすることは、アタック成功の糸口を減少するのに効果的です。そして、アタックの失敗は、致命的エラーを発生させ、DeleGateにより、捕獲されます。
疑わしいクライアントホストは、関連ファイル(ADMDIR/shutout/
内)を削除するか、TIMEOUT=shutout(デフォルト30分)でファイルの有効期限が切れるまで、シャットアウトされます。安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御 設定はもちろんのこと、このような攻撃を防ぐよう意識を高く持ってください。
TIMEOUT =shutout:N [30m] ... アタック再試行間隔の最短
MAXIMA =randstack:N [32] ... スタックアドレスのランダム化
MAXIMA =randenv:N [1024] ... 環境変数のランダム化
MAXIMA =randfd:N [32] ... クライアントソケットディスクリプタのランダム化
CHROOT =dirPath ... アクセス可能なファイル空間を制限
OWNER =user [nobody] ... DeleGateプロセスの能力を制限
ADMIN =E-mail-address ... 正しく、SMTP配送できること
-Tx [off] ... execve() システムコールを停止
起動時、元環境変数と、スタック領域上のコマンドライン引数は、ヒープ領域に移動・消去され、アタッカーの侵入コードに利用されないようになっています。同時に、ランダムな長さの値(MAXIMA=randenvが最大)を持つRANDENV
ダミー環境変数が、環境変数のランダムなアドレスに挿入され、フィルタプログラムや、CGIプログラムのような子プロセスに継承されます。
プラットフォームに関する詳細
Unix
Inetdからの呼出し
"nowait" と
"wait"ステータスをinetd.confで指定可能です。"nowait"ステータスの場合、DeleGateは、1つの要求(セッション)を処理し、終了し、無効にします。"wait"ステータスの場合、DeleGateは、複数の要求を処理します;要求数の最大は、"MAXIMA =service:N "のNによって制限できます。
Windows
サービスとして開始
WindowsNT/2000上で、DeleGateは、デフォルトで、自動的にサービスとして開始(バックグラウンドプロセスとして)します(コマンドプロンプトで、-vや、-fオプションなしで呼出した場合)。-Pxxxx
オプションで、サービスとして動作しているDeleGateを停止かつ/または除去するには、コマンドプロンプトで、"delegated
-Pxxxx "を入力し、DeleGateからの簡単な質問に答えてください。Windows95/98上では、DeleGateは、フォアグラウンドプロセスとしてのみ動作します。
CYGWIN
呼出した管理者所有で見えます。
OS/2
インストールには、オプションのループバックデバイス(localhost)が必要です。
紳士的再起動
子プロセスの外向けセッションを中止せず、DeleGateのプロセスIDを変更せず、入力ポートなどのリソースを保持したまま、DeleGateプロセスにSIGHUPシグナルを送信し、優しくDeleGateを再起動します。プラットフォームに属さない方法は、このように、-Fkill 機能を使用することで行えます。
delegated -Fkill-hup -Pport また、SIGHUPでの再起動は、
AUTH=admin
パラメータを使い、"http://delegate /-/admin/"にて、リモートHTTPクライアントで、実行できます。
再起動は、DeleGateの設定変更した後に行います。再起動時にパラメータを再読込するためには、
+=parameters
表記(パラメータ置換)を与える必要があります。他のオプション(パラメータ)は、コマンドライン引数で与え、これは、リスタートしたDeleGateプロセスに継承されます。
他の再起動目的は、ごみや、リーク(ヒープメモリや、ファイルディスクリプタ)を、お掃除します。この目的の場合、DeleGateは
TIMEOUT=restart
または、CRONパラメータの
-restart 動作で、それぞれ予定した時間に、周期的に再起動できます。
機能オプション
-Ffunction
オプションが与えられる場合、DeleGateは、指定した機能を実行するために動作し、通常は、特定プロトコルのクライアント側の動作をします。長い
"delegated -F"入力をファイル名
"function "をDeleGate実行ファイルに与えることで省略でき、function としてコールできます。
function 名のマッチは、case-insensitive です。
例) レゾルバとしてDeleGate を使う
% delegated -Fresolvy www.delegate.org
% ln -s delegated Resolvy
% Resolvy www.delegate.org
以下は主要機能の一覧です。
-Fhelp
使用可能な機能を表示
-Fkill[-hup] -Pport
SIGTERM(SIGHUP)を送り、DeleGateを終了(再起動)
-Fcgi [DeleGateOptions ]
任意のHTTP サーバCGIプログラムとして動作
-Fconnect host port [/udp] [XCOM=clientCommand ]
テルネットクライアントのように、指定したhost :port に接続し、それから/へ標準入出力を中継する
-Fresolvy {[-MX.]hostname |
IPaddress [-num ]}
nslookup(8)のように、与えられたホスト名や、IPアドレスを解決する。(10.10.10.1-128のようにレンジ指定可)
-Ffindu [-atime N ] [-ls] [-du] [-rm] ... [dir ]*
find(1)のように、ファイルを探し、指定した動作を行う。使用法は "delegated -Ffindu"のようになります。 例)
"du(1)"といっしょに、"find . -ls"を実行
delegated -Ffindu -ls -du
-Fdget [-h] [-o] [PROXY=host :port ] URL
URL で指定したリソースをダウンロードし、"-o"オプションで、標準出力に出力
"-h" オプションをともなう場合、HTTP応答メッセージのヘッダ部も出力されます。
-Ficp [-h server ] URL
ICPクライアントとして動作。使用法は、"delegated -Ficp"のようになります。
-Fsched {"crontabSpec " |
crontabFile | schedSpec }*
cron(8)のように、指定した動作を指定したタイミングで起こす。 例) 15分ごとに動作
delegated -Fsched "0,15,30,45 * * * *
/bin/date" schedSpec は、スケジュール設定の正規化表記です。
schedSpec ==
Wday :year :month :mday :Hour :Min :Sec :action 例)15秒ごとに動作
delegated -Fsched "*:*:*:*:*:*:0,15,30,45:/bin/date"
-Fmd5 [infile ]
入力データの MD5 ダイジェストを出力
ファイル
参考文献
du(1),
ps(1),
tee(1),
cat(1),
find(1),
chroot(2),
execve(2),
getpeername(2),
getsockname(2),
pstat(2),
ptrace(2),
setgid(2),
setuid(2),
umask(2),
scanf(3),
strftime(3),
system(3),
YP(4),
crontab(5),
hosts(5),
inetd.conf(5),
cron(8),
inetd(8),
nslookup(8),
DNS(RFC1034 ),
FTP(RFC959 ),
Gopher(RFC1436 ),
HTML(RFC1866 ),
HTTP(RFC2068 ),
ICP(RFC2186 ),
Ident( RFC1413 ),
IMAP(RFC2060 ),
LDAP(RFC1777 ),
LPR(RFC1179 ),
MIME(RFC2045 ),
NNTP(RFC977 ),
POP(RFC1460 ),
Socks(RFC1928 ),
SMTP(RFC821 ),
Telnet(RFC854 ),
URI(RFC2396 ),
URL(RFC1738 ),
Wais(RFC1625 ),
X(RFC1013 )
著者
@ @
( - )
_< >_
Yutaka Sato <ysato@etl.go.jp>
Electrotechnical Laboratory (AIST ,MITI ), Tsukuba, Ibaraki 305-8568, Japan
配布
リリース 7.1.2 最終更新: 2001年3月10日
--------- --------- --------- --------- --------- --------- --------- ---------