翻訳者: 鈴木 雄(すずき ひろし)<setter at i-red dot info>
翻訳開始日:2001/8/23(v7.5) (1997/11-v4.3)
最終更新日:2014/10/13 (v9.9.12 + 10.0)
翻訳者コメント:
翻訳の正確さなどは、一切保証しません (できません(^^;;;)。
ですから、この文書をお読みになる方は、*必ず*原文
(http://www.delegate.org/delegate/)
を併用して下さい。
誤訳などのご指摘は大歓迎です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 佐藤 豊
<ysato AT etl DOT go DOT jp>
<y DOT sato AT delegate DOT org>
著作権 (c) 1994-2000 電子技術総合研究所 (ETL), AIST, MITI
著作権 (c) 2001-2014 独立行政法人 産業技術総合研究所 (AIST)
AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165, H18PRO-443
本マテリアルの、
・評価のための使用
・自らが使用するための複製
・誰もがアクセス可能なオンラインメディアを経由した複製の無料配布
は、
上記の著作権通知、および、この認可通知を、全ての複製中で、
閲覧可能なことを条件として許可します。
AISTは、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。
それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。
このドキュメントは、DeleGate/9.X の最新バージョン( と、部分的にバージョン 10.X)をベースにして書かれています。 このドキュメント (訳注: 原文の英語マニュアルに関してのみ) に関するコメントは、 mailto:feedback@delegate.org まで、お願いします。 なお、それらの内容は、 http://www.delegate.org/feedback/ で、共有/公開します。 DeleGate ホームページ http://www.delegate.org/ で、最新状況をご覧ください。 さらに、初心者の方々は、 http://www.delegate.org/delegate/tutorial/ にて、簡潔な入門書をお読みになることを推奨します。使い方のサンプル集 http://www.delegate.org/delegate/HowToDG.shtml は、DeleGate で何ができるか確認するのに便利でしょう。 関連のドキュメント集は http://www.delegate.org/documents/ にあります。
順列目次
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
FTPxHTTP
X
YYsh
YYMUX
目次
-F
-P
-Q
-f
-r
-v
-d
-D
ADMIN
AF_LOCAL
Aging
AUTH
AUTHORIZER
BASEURL
CACHE
CACHEFILE
CAPSKEY
CERTDIR
CGIENV
CHARCODE
CHARMAP
CHOKE
CHROOT
CLUSTER
CMAP
CONNECT
COUNTER
COUNTERDIR
CRON
DATAPATH
DELAY
DELEGATE
DGCONF
DGOPTS
DGPATH
DGROOT
DGSIGN
DNSCONF
DYCONF
DYLIB
EXPIRE
FCL
FFROMCL
FFROMMD
FFROMSV
FMD
FSV
FTOMD
FTOSV
FILETYPE
FORWARD
FTOCL
FTPCONF
HOSTLIST
HOSTS
HTMLCONV
HTMUX
HTTPCONF
ICP
ICPCONF
INETD
LDPATH
LIBPATH
LOGDIR
LOGFILE
MASTER
MASTERP
MAXIMA
MIMECONV
MOUNT
MountOptions
MYAUTH
NNTPCONF
OWNER
PERMIT
PORT
PROTOLOG
PROXY
REACHABLE
REJECT
RELAY
RELIABLE
REMITTABLE
RESOLV
RES_AF
RES_CONF
RES_DEBUG
RES_NS
RES_RR
RES_VRFY
RES_WAIT
RIDENT
ROUTE
RPORT
SCREEN
SERVER
SHARE
SMTPCONF
SMTPGATE
SockMux
SOCKOPT
SOCKS
SOCKSTAP
SOXCONF
SOCKMUX
SRCIF
SSLTUNNEL
STLS
SYSLOG
TIMEOUT
TLSCONF
TUNNEL
UMASK
URICONV
VSAP
XCOM
XFIL
YYCONF
YYMUX
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" のように、
ローカルファイルを使用します。
(パラメーター置換を見てください)
(DGCONF も見てください)
オプション
-P option -- DeleGateの入り口ポート番号
== -Pport[,port]*
port == [host:]portNum[/udp][/admin][/protocolName]
portNum == number[-number]
このオプションは、DeleGateが、
クライアントからの要求を受ける、入り口ポート番号を指定します。
一般的な例として、"-P8080" は、ホストマシンが持っている、
どのネットワークインターフェースでも、8080番の TCP ポートで、
要求を受けることを意味します。ホストが、複数のインターフェースや複数の
IPアドレスを割り当てた、ひとつの物理インターフェースを持つ場合、
例えば "-Plocalhost:8080" のように、書式 -Phost:portNum で、
それらのひとつを選択できます。
DeleGate サーバーは、-Pport,port,... により、
複数のポートや、(有限の) 複数ネットワークインターフェースで受けることができます。
host を指定しない場合、IPv4 アドレスのみが受理されます。
-P8080 は、 "-P0.0.0.0:8080" の省略形です。
ここに IPv6 アドレスを指定するには、IPv6 アドレス表記のコロン":" を
アンダースコア"_" に置き換えます。
例) "-P__:8080" は、IPv6 におけるワイルドカードアドレス"::" の
8080番ポートで受理することを意味します。必要なら、"-Pfe80__12_34%en0:8080"
のように "%" を付けることでスコープIDを指定できます。
注)SRCIF で、
出力側接続のソースアドレスの選択方法を見てください。
入り口ポートは、デフォルトで、SERVER=protocol パラメーターにより、 UDP ベースアプリケーションプロトコル (dns, icp, cuseeme, udprelay) が指定された場合を除き、TCP ポートが作成されます。 また、-Pport/udp のように "/udp" が後置される場合、 SERVER で指定したプロトコルとは無関係なものとなります。
例えば "-P21/ftp,80/http/,1080/socks" のように、"/protocolName" を指定した場合、DeleGate は、SERVER パラメーターで指定されたデフォルトのプロトコルというよりも、 指定したポートで指定したアプリケーションプロトコルで動作します。
このオプションは、以下の場合を除き、*必ず* 指定しなければなりません。 DeleGate が、inetd(8) から、起動される場合や、 ほとんどの、-Ffunction オプションを利用する場合、 または、SERVER="tunnel1" により、トンネルサーバー として動作している場合には、無視されます。
-Q option* -- DeleGate への入口ポート == -Qport
-f option -- フォアグラウンドで実行 == -f[v]
-r option -- 再起動
-v option -- ログレベルを制御 == -v[vdtsau]
-d option -- サブコンポーネントのデバッグ == -d[hst]
-D option -- サブコンポーネント無効化 == -D[t]
-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" スクリプトでは指定できません。
"+" とともにマークされたパラメータは "+=parameters" スクリプト内では使えません。 これらパラメータ (DGROOT, CHROOT, LDPATH, DYLIB を含む) コマンドライン引数で指定するか、-Fimp オプションで DeleGate 実行ファイルに"埋め込む"必要があります。
一般
ルーティング
アクセス制御
リソース使用制限
キャッシュ制御
マウント
データ変換
フィルター制御
ローカルファイル使用法
ホスト名解決
例) 対象サーバーを限定しない Telnet-DeleGate の SERVER パラメーター
このカテゴリにあるパラメーターは、
使用目的や、対象アプリケーションプロトコルとは独立した、
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 を定義する
*
CLUSTER
protocol:hostList
サーバーのクラスタを定義する
*
CMAP
map-spec
現在の接続に関するマッピングテーブル
DYLIB
patternList
ダイナミックライブラリーのファイル名パターン
LIBPATH
dir:dir:...
ライブラリーファイルのサーチパス
LDPATH
dir;dir;...
DYLIB の検索パス
DATAPATH
dir:dir:...
データファイルの検索パス
DGPATH
dir:dir:...
置換リソースの検索パス
*
DYCONF
conditions:path
要求による動的な設定
DGCONF
dir/file
設定パラメーターのファイル
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
上流プロキシー経由で接続します
*
YYMUX
host[:port]
YYMUX サーバー経由で接続
*
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
指定したクライアントホストのみ受け入れます
*
SCREEN
{reject|accept}
クライアントホストを遮蔽します
*
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
キャッシュファイルの場所
ADMDIR
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 ファイル
COUNTERDIR
dirPath
カウンターのベースディレクトリ
COUNTER
CounterOptions
アクセスカウンター
DNS/NIS/ローカルファイルによる、IPアドレスとホスト名の相互解決。
プロトコル特有
--
----------
------------------
----------------------------------
*
HOSTS
host/addr,...
プライベート ホスト/アドレス マップ
RESOLV
file,nis,dns,sys
レゾルバーの使用順序
RES_WAIT
src:host
レゾルバーの準備ができるまで待つ
RES_CONF
URL
resolv.conf の場所
RES_NS
host[:port]
使用する DNS サーバー
RES_AF
46 | 64 | 4 | 6
検索するアドレスレゾルバー (IPv4/v6)
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 サーバーとしての設定
*
SOCKSTAP
proto[:[dst][:src]]
SOCKS 越しのプロトコルを解釈する
SERVER parameter* == SERVER=protocol[://host[:portNum]][:-:MountOptions]
portNum == [+|-]number
-- default: SERVER=delegate
SERVER=protocol で、
クライアントとの通信で使用するプロトコルを指定し、
それはデフォルトでサーバーとの通信プロトコルになります。
SERVER=telnet
対象サーバー(host) を指定しない場合、 それは、アプリケーションレベルのプロトコルに依存した方法で、 実行時に、クライアントにより、何らかの形で与えられます。
サーバーでのプロトコルは、クライアントでのプロトコルと同様であることが、 暗黙で要求されます。 HTTP のようないくつかのプロトコルは対象サーバーとのプロトコルを指定する固有の方法を 持っています。 他の場合、例えば、MOUNT="/news/* nntp://server/*" のように、MOUNT パラメーター で明示しなければなりません。
SERVER=protocol://host:portNum は、対象サーバーの URL を指定します。
":portNum" 部分は、番号が、プロトコル標準ポート番号の場合、通常、
URL 中で省略できます。
DeleGate によって認識されるプロトコルと標準ポート番号の一覧は、
"http://delegate/-/builtin/mssgs/config.dhtml" で見られます。
Port mapping:
portNum に "-" または "+" が前置される場合、
入り口ポート番号に指定したオフセットを加えたポート番号
を割り当てます。
また、"-"(portNum なし)の場合、同じポート番号を使用します。
例) 複数ポートを単一の他のホストに転送する
特別なホスト名 "odst.-" は、入ってくるデータが
NAT で転送去れてくるときに元の対象サーバーを参照するのに使えます。
例)SOCKS プロキシー経由で、元の対象に NAT を転送する。
SERVER パラメーターが ":-:MountOptions" を伴う場合、
MountOptions に指定された条件を評価した結果が真の場合、
動的に SERVER パラメーターを選択します。
特殊な場合として、
":-:via=HostList" は、
":-:HostList" のように省略できます。
例) クライアントに適切な NNTP サーバーを選択する。
例) {NNTP,SMTP,POP}-DeleGate を単一サーバーで実行
例)クライアントのユーザー名と一致したユーザーIDで動作する
Windows で、OWNER=user を指定してサービスとして起動した時、
DeleGate サービスが作られるときのユーザーをセットします。
OWNER="" のように空のユーザーが指定された場合、ユーザー名は、
USERNAME 環境変数から取得されます。
パスワードは、PASS=pass パラメーター、環境変数で指定するか、コンソールで問い合わせられます。
例)
例)
例)
リストが "/R" で始まるとき、リスト内のサーバーはランダムな順序で試されます
(最初に試されるサーバーはランダムに選択され、他のサーバーはラウンドロビンで試されます)。
これは、同等の (プロキシー) サーバー間で負荷分散するのに使えます。
このパラメーターによる再試行は、通常、サーバーの任意プロトコルでの、
サーバーへの TCP 接続を確立する段階に適用されます。
再試行には、さまざまなプロトコルの認証段階も含まれます。
HTTP 元/ゲートウェイ サーバーで、再試行はサーバーからの応答によって行われ、
例えば、応答コード 503 (Service Unavailable/サービス提供不能) と、
404 (Not Found/見つかりませんでした) が含まれます。
例)
"fcl" を指定した場合、クライアントは STARTTLS ネゴシエーション無しで SSL
を開始できます。このようなクライアントサイドからの暗黙の SSL ネゴシエーションは、
クライアント側から接続時の、SSLハンドシェイクパケットを、
セッション開始時に imimSec によって指定された、
一定時間覗くことで検出されます。デフォルト値は、"im0.25"(250m秒)です。
"-im" は、この暗黙の SSL ネゴシエーションを無効にします。
例えば、対向 (この場合サーバーとの) SSL で STARTTLS ネゴシエーションが無しに適用されるとき、
stlsSpec に、STLS="fsv/im" のように "/im" を続けます。
デフォルト以外の SSLway コマンドパスまたは、オプションを使う必要がある場合、
たとえば STLS="fcl,sslway -Vrfy -cert mycert.pem" のように、
stlsSpecs の後ろに SSLway コマンドを指定できます。
例)
読み込み条件は、新しい要求上のクライアントホスト固有の情報(アドレスまたは、名前)
を基準にできます。
または、接続上のクライアントからの初期要求データの内容(サブストリングまたは、パターン)
も基準にできます。
要求データは、指定した時間 (デフォルト15秒) ポーリングされ、
指定したサイズ(最大 4k バイト:デフォルト)覗き見られます。
条件:
例)
例)
特別な、gwproto で、FORWARD は、
MASTER, PROXY, SOCKS、および SSLTUNNEL の一般化表記として次のように動作します。
複数の FORWARD パラメーターが指定された場合、設定された順序で試されます。
対象サーバーに対し複数のルートが利用可能な場合で、
FORWARD と、他のパラメーター(MASTER, PROXY, SOCKS, SSLTUNNEL) の混合とともに指定された場合、
FORWARD により指定されたルートは、CONNECT で、
"proxy" または、"master" により指定された優先順位で試行されます。
例) 認証つきの SSL トンネル経由で到達できる HTTPS サーバーへの HTTP クライアント用ゲートウェイ
stHostList 中のホスト指定に、"proto://" を
前置きすることで、転送するプロトコルを制限できます。
例)ROUTE="http://host:port/-_-{ftp://*}:*" は、
FTP サーバーへのアクセスだけ、"http://host:port/" の HTTP プロキシーへ
転送されることを意味します。
dstHostList 中のホスト指定は、ポート番号指定で、さらに制限できます。
例)ROUTE="http://host:port/-_-{*:21}:*" は、
ポート番号 21(FTPサービス)でだけアクセスでき、プロキシーへ転送されます。
任意の "/masterControl" 次のように指定できます:
例)
例)
例)
connType:
それぞれの接続タイプは、それぞれ {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 間の伝送が 7ビットストリームで行われることを意味します。
タイプが "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}:*" は、任意のホストに対する telnet を
標準ポート番号(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 サーバーへのアップロードを禁止する、
"読み込み専用" FTP-DeleGate を生成します。
プロトコル固有のデフォルト:
例外:
最初の指定が、"+" の場合、それはデフォルトで許可されたプロトコルのリストを意味します。
例) SERVER=http で、REMITTABLE="+,-https/80,-wais,file" の場合、
REMITTABLE="http,https/443,gopher,ftp,file" を意味します。
これは、RELIABLE=Hosts1 RELIABLE=Hosts2 のような、
複数の RELIABLE パラメーターを、
単一の RELIABLE="Hosts1,Hosts2"
に、単純に結合したものと解釈しますが、
Hosts1 または、Hosts2 に、いくつかの、
否定、または、
合成演算子が含まれる場合、
"Hosts1 または Hosts2" を意味しません。
もし、この文章の意味が理解できない場合は、代わりに、
複数の PERMIT パラメーターを使用することを推奨します。
RELAY="no" は、中継を行わない、元 HTTP サーバーとして動作することを意味します。
(元 HTTP サーバーは、プロキシー用の書式 (要求される URL は、絶対フォーマットで、フル書式や、"/-_-" 書式ではありません)
ではない通常の書式での要求を受け付ける、通常のサーバーです。)
"transparent-proxy (透過プロキシー)" と呼ばれる機能は、"RELAY=vhost" で有効にできます。
RELAY="vhost" は、任意の仮想ホストにも中継する、元 HTTP サーバーに使用できます。
このオプションは、明示された MOUNT を指定せずに、
要求ヘッダー中の "Host:" フィールドで指し示された
任意の対象サーバーに、 HTTP 要求を転送可能にします。
この自動転送は、要求された URL が MOUNT されていない場合のみ実行されますが、
ほとんどの DeleGate は ルート URL ("/*") 用の MOUNT パラメーターが指定された
元サーバーとして動作しているため、それほど使われそうにありません。
例)
デフォルト:
HTTP-DeleGate の場合、(要求メッセージ中の) Authorization ヘッダー
にある Username:Password で、
"私は誰”かを宣言します。ここでの Username は、
User@Host にもできます。
現在、以下のカテゴリでの、
認証/権限付与がサポートされます。
-- 任意プロトコルの DeleGate の場合 --
-- FTP サーバー と FTP/HTTP ゲートウェイの場合 --
-- プロキシーと 元 HTTP サーバーの場合 --
FTP サーバーベースの認証を使用する場合、
要求される認証情報としてのユーザー名は、
"user@host.domain" のような、E-mail アドレスです。
なお、これは通常、AUTH="anonftp" と AUTH="proxy" 両方で使えます。
注記: 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 コマンドの内容]
認証されたユーザーに権限を与えない必要があるときのみ、
authServList として、以下の特別な名前が便利でしょう。
例)
クライアントから送られた、ユーザー名+パスワードの組は、
MYAUTH="%U:%P" でサーバーに転送できます。
(HTTP および、FTP でのみ使えます)
注記:
プロキシーとの認証では、MYAUTH の代わりに認証情報を含むゲートウェイ URL を
FORWARD とともに使用することが強く推奨されます。
例)
SOCKS=host:port と MYAUTH=user:pass
は、
FORWARD=socks://user:pass@host:port
と、表現できます。
例)
例)
-P21,23,25,80 SERVER=tcprelay://host:-/
-P9999 SERVER=tcprelay://odst.-:- SOCKS=sockshost
注記:この、特定のサーバーにバインドした DeleGate は、
任意サーバーに対するプロキシーとしての動作を停止していません。
必要なら PERMIT, REACHABLE, RELAY パラメーターを使用し、
プロキシー機能を制限しなければなりません。
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 でスーパーユーザーのみ
-- 制限: Windows 上でのサービスのユーザーの設定
このパラメーターは、スーパーユーザーにより起動された場合のみ有効です。
指定した場合、DeleGateは、setuid(2) と setgid(2) システムコールを呼び出し、指定したユーザーの権限で実行します。
ユーザーとグループは、それぞれ、シンボリック名か、"#1234" のように、
"#" を前置きした ID 番号で、指定できます。
srcHostList が指定された場合、リスト中にクライアントホストが含まれる場合、
この DeleGate の所有者は、user に設定されます。
ユーザー名 "*" は、クライアントの
ユーザー名 (クライアントホスト上の 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 は、他の HostList 内で参照できます。
複数の HOSTLIST パラメーターが、同じ listName で定義された場合、
最後のひとつが参照されます。
HOSTLIST="listName:+,newHostList"
のように HostList の前に "+," がつく場合、
newHostList は、定義済みリストに追加されます。
// .localnet を再定義する
HOSTLIST=".localnet:localhost,./32,192.168.*"
// 定義済み .localnet から localhost を除外する
HOSTLIST=".localnet:+,!localhost"
CLUSTER parameter* == CLUSTER=[protoList]:ServerList
ServerList == [/R,]Server[,ServerList]
Server == Host[..Port]
CLUSTER パラメーターは、代替または、補助サーバー(元サーバーまたはプロキシー)
の順序セットを指定します。
それは、DeleGate が上流プロキシーサーバーまたは、元サーバーとの接続や認証に
失敗したとき、参照されます。
MASTER, PROXY, SSLTUNNEL, SOCKS
で指定されたプロキシーサーバーや、SERVER または、MOUNT
の右側で指定された元サーバーに適用されます。
CLUSTER=http:www1,www2,www3..8080 MOUNT="/* http://www1/*"
CLUSTER=ftp:ftp1,ftp2,ftp3 MOUNT="/* ftp://ftp1/*"
CLUSTER=http-proxy:/R,px1..8080,px2..9090,px3..8080 PROXY=px1:8080
CLUSTER=socks:/R,sock1,sock2,sock3 SOCKS=socks1
CMAP parameter* == CMAP=resultStr:mapName:connMap
connMap == ProtoList:dstHostList:srcHostList
-- default: none
現接続において、いくつかのパラメーターを条件付にする汎用パラメーター。
現接続においてプロトコル、対象、ソースが connMap と一致する場合、
このマップは、mapName に使用するために、
resultStr 文字列の提供を有効にします。
ホスト名/アドレスだけでなく、対象サーバーのポート番号も
dstHostList におけるマッチングで使用可能です。
このパラメーターは、一般的に、
条件付フィルターを利かせる場合に使用します。
TLSCONF parameter* == TLSCONF=tlsConf[,tlsConf]*
tlsConf == what:value
-- default: TLSCONF=scache:do,xcache:do
STLS parameter* == STLS=stlsSpecs[,sslwayCom][:connMap]
stlsSpecs == [-]stlsSpec[/im][/ssl][,stlsSpecs]
stlsSpec == fsv | fcl | mitm | imimSec
sslwayCom == {sslway [-Vrfy] [-CApath dir] ...}
connMap == ProtoList:dstHostList:srcHostList
-- default: none
-- 制限: HTTP, FTP, SMTP, POP, IMAP, SOCKS に対して有効
-- 必須: SSLway
このパラメーターは、それぞれのアプリケーションプロトコルで、サーバー/クライアント間
ネゴシエーションにおける、SSL(TLS) の初期化を制御します。
ネゴシエーションの共通のスキームは、"STARTTLS" として知られています。
"fsv" は SSL をサーバーと、"fcl" は、SSL をクライアントとの間で使用することを指定します。
接続において SSL がサポートされない場合、
STARTTLS ネゴシエーションは失敗し、デフォルトで接続は閉じられます。
SSL が使用できなくてもセッションを継続したい場合、
"-" を "fsv" または、"fcl" の前につけます。
STLS="fcl" -- クライアントとの通信に SSL を使う (不能な場合、セッションを閉じる)
STLS="-fcl" -- 可能な場合、クライアントとの通信に SSL を使う
STLS="fsv,-fcl" -- サーバーとの通信に SSL を使用し、可能な場合クライアントとの通信に SSL を使う
STLS="fsv/ssl" SERVER="ftp" -- AUTH TLS の代わりに、AUTH SSL を使う
STLS="fsv,im0.5" SERVER="ftp" -- 明示/暗示 SSL サーバーの自動検出
CERTDIR parameter == CERTDIR=dir
-- default: ${ETCDIR}/certs
-- version: DeleGate/9.8.0 + OpenSSL0.9.8g or laters
CERTDIR は、SSLway が使う証明書の置場とするディレクトリーを指定します。
ディレクトリー内の証明書ファイルには以下の名前を付けます。
すべての名前はオプションです。
DGCONF parameter == DGCONF=dir/file
-- default: DGCONF='${EXECDIR}/${EXECNAME}.conf'
DGCONF は起動時に存在すれば読み込む設定パラメーターのファイルを指定します。
初期値は、DeleGate 実行ファイル名からの相対パスです。
例えば、実行ファイルのパスが、"X:/path/of/dg9_4_1.exe" なら、
DGCONF="X:/path/of/dg9_4_1.conf" になります。
DYCONF parameter* == DYCONF=[conditions]parameters
parameters == file:path | cgi:path | arg:{listOfParameters}
-- default: none
DYCONF は、クライアントから TCP 接続を受け付けた後、
アプリケーションプロトコルのリレー開始時、それ(TCP)上でセッションを開始する前に、
動的に読み込む設定パラメーターを指定します。
読み込むパラメーターは、指定した conditions を基準にでき、
パラメーター値は、読み込み毎に生成及び(または)評価できます。
DYCONF="file:path.txt" # path.txt からパラメーターを読み込む
DYCONF="cgi:path.cgi" # path.cgi で生成されたパラメーターを読み込む
DYCONF="qstr/string,arg:{SERVER=tcprelay://sv1:1234;TIMEOUT=io:3}"
DYCONF="{qrex/[a-z][0-9]*},arg:{SERVER=tcprelay://sv1:1234}"
DYLIB parameter == DYLIB=libfilePattern[,libfilePattern]*
-- default: DYLIB='dglib*.so,lib*.so,dglib*.dylib,lib*.dylib'
DYLIB で検索するダイナミックリンクするライブラリーファイルのファイル名パターン
一覧を指定します。 それぞれのパターンに含まれるキャラクター "*" は、
検索するライブラリー名に置換されます。
例) パターン "lib*.so" を指定した場合、"ssl" のために、"libssl.so" が検索されます。
特別なパターン "+" は、デフォルトリストへの追加を意味します。
パターンがフルパス書式ではない場合、ライブラリーファイルは、
システムコンフィギュレーションに依存するか、LD_LIBRARY_PATH のような環境変数
などによるいくつかのディレクトリーで検索されます。
パターンは、"/usr/local/ssl/lib/lib*.so" のようなフルパス、または、
"/usr/local/ssl/lib/libssl.so" のように "*" キャラクターをともなわないものが使用できます。
DYLIB="" ... 動的リンクを無効にする
DYLIB="lib*.so,lib*.so.1"
DYLIB="libz.so,libssl.so"
DYLIB="+,lib*.so.0.9.7"
DYLIB="/usr/lib/libz.so.1,/lib/libssl.so"
LDPATH parameter == LDPATH=dirPath[;dirPath]*
-- default: LDPATH='${LIBDIR};${EXECDIR};${HOME};/usr/lib;/lib'
どこでダイナミックライブラリー (DYLIB) を検索するか指定する。
LIBPATH parameter == LIBPATH=dirPath[:dirPath]*
-- default: LIBPATH=LIBPATH='.:${STARTDIR}:${LIBDIR}:${EXECDIR}:${ETCDIR}'
LIBPATH が相対パスで指定された場合、
ライブラリーファイル/追加パラメーターファイル/CFI スクリプトと
フィルタープログラムは、指定された順序で、
複数のディレクトリー内を検索します。
デフォルトで、LIBPATH の順序リストは、下記のディレクトリーです。
WORKDIR (.) -- ワークディレクトリー
STARTDIR -- DeleGate が起動されたディレクトリー
LIBDIR -- デフォルトの ${DGROOT}/lib
EXECDIR -- DeleGate の実行可能ファイルがあるディレクトリー
ETCDIR -- $デフォルトで {DGROOT}/etc
DATAPATH parameter == DATAPATH=dirPath[:dirPath]*
-- default: DATAPATH='.:${DGROOT}:${STARTDIR}
クライアントに提供するデータファイルを含むディレクトリーリスト。
このパラメーターは、DeleGate が、
MOUNT="/path/* file:dir/*" のように相対パスで指定した
ローカルファイルから応答データを生成するために使用されます。
DGPATH parameter == DGPATH=dirPath[:dirPath]*
-- default: DGPATH='+:.:${HOME}/delegate:${EXECDIR}:${ETCDIR}'
パラメーターファイルの検索パス。
特殊なディレクトリー名 "+" は、"caller" リソース(パラメーターファイルからパラメーターファイルを参照する)の
場所を表します。
DGSIGN parameter == DGSIGN=signatureSpec
-- default: DGSIGN="V.R.P/Y.M.D"
クライアントやサーバーに提示する DeleGate の署名を指定します。
署名全体 "Version.Revision.Patch (Month Day, Year)" は、"V.R.P/Y.M.D" で表されます。
指定部分を隠すには、対応するキャラクターを、"x" に置き換えます。
例) DGSIGN="V.x.x/Y.x.x" は、"DeleGate/9.x.x (x x, 2005)" のような署名にします。
DGOPTS parameter == DGOPTS=opt[;opt]*
-- default: none
コマンドラインオプションのリスト。
これは、-P や、-v のように
name=value 書式ではないオプションを
環境変数で指定する場合に使えます
SOCKOPT parameter* == SOCKOPT=[no]name[:value]
-- default: reuse
ソケットオプションを設定
k -- サイズはキロバイト
例) SOCKOPT="buffsize:2kis" は、サーバーからの受信データのソケットバッファサイズを
2048 バイトにします。
複数のバッファサイズ指定は、"+" で接続できます。
例)
SOCKOPT="buffsize:2k" is equivalent to
SOCKOPT="buffsize:2kis+2kos+2kic+2koc:*:*:*".
i -- 入力バッファ (SO_RCVBUF)
o -- 出力バッファ (SO_SNDBUF)
s -- サーバーへのソケット
c -- クライアントからのソケット
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 へ転送されます。
gwhost に前置した "user:pass@" として認証情報が与えられた場合、
gwhost との接続後の認証段階で使われます。
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
FORWARD="ssltunnel://gwhost:gwport/-_-*:*:*"
FORWARD="direct-_-protoList:dstHostList:srcHostList"
FORWARD="noroute-_-protoList:dstHostList:srcHostList"
MOUNT="/* https://sslhost/*"
STLS=fsv:https:sslhost
FORWARD=ssltunnel://user:pass@proxyhost:8080-_-https:sslhost
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) を指定します。
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
-- 制限: HTTP, FTP, Telnet に適用可能
DeleGate が要求を転送する、
上流プロキシー(specialist DeleGate または、標準プロキシー)を指定します。
dstHostList が指定された場合、対象ホストが一覧に含まれるときのみ、上流プロキシーに転送されます。
HTTP, FTP, Telnet の specialist DeleGate のみ、このパラメーターで指定できます。
SERVER=http PROXY=proxyhost:8080:!*.localdomain
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" オプションは、名前解決をサーバーに任せます
(これは、サーバーが拡張 Socks4A プロトコルをサポートしている場合、使用可能です)。
SocksV5 サーバーの場合、名前解決はデフォルトでサーバー任せとなり、
"-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 ...
YYMUX parameter* == YYMUX=host[:port][:connMap]
connMap == ProtoList[:dstHostList[:srcHostList]]
-- default: none
YYCONF parameter* == YYCONF=name[:value]
-- default: none
例)
YYMUX="HOME:/user/xxxx"
YYMUX="SHELL:/bin/csh -l"
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:*:*:*"
このパラメーターは次のように、対象サーバーにいくつかの接続方法を使って
接続するための試行順序を制御します:
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 -- 接続しない
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 との通信は、
コマンドの標準入出力経由で、トンネルされます。
トンネルは、数種の経路を形成できます。
例えば、生のシリアルライン上で双方向通信が提供されているようなものです。
リモートホスト上の inetd から起動できる DeleGate への経路も使えます。
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="*" - generalist 用
-- default: REMITTABLE="." - specialist 用
ProtoList に指定されたプロトコルのみが、
この DeleDate で許可されます。
generalist(SERVER="delegate" を指定した DeleGate) では、
デフォルトで全てのプロトコルを許可します。
specialist では、SERVER パラメーター ("." で表現可能) により指定されたプロトコルが、
デフォルトで許可されます。
現在の対象サーバーが、
MOUNT="Path1 Proto://Server/Path2" のように、
MOUNT パラメーターによって限定されている場合、Proto プロトコルは、
Server における目的プロトコルとして、
REMITTABLE による制限を無視して、自動的に許可されます。
注記:ここでの "https" は、SSLtunnel 上の 非 https プロトコルを検出して拒否します。
SSLtunnel 上で 任意のプロトコルを中継する場合、
REMITTABLE="+,ssltunnel" のように、
"https" の代わりに "ssltunnel" を指定します。
REACHABLE parameter* == REACHABLE=dstHostList
-- default: REACHABLE="*" (全てのホストに接続可能)
dstHostList に指定されたホスト(またはネットワーク)上のサーバーに
向けられた要求のみ、DeleGate で受け付けます。
複数の REACHABLE パラメーターを使用した場合、
その意味を確実なものにしなければなりません。
RELIABLE parameter* == RELIABLE=srcHostList
-- default: RELIABLE=".localnet"
srcHostList に指定されたホスト(またはネットワーク)上の
クライアントから送られた要求のみ、
DeleGate で受け付けます。
デフォルトで、DeleGate ホストのローカルネット ( .localnet) 上のホストからのアクセスのみ許可されます。
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:*:*:*"
このパラメーターは、DeleGate がどのように、
HTTP プロキシーサーバーとして動作するかを制御します。
HTTP プロキシーサーバーの DeleGate は、2つの方法(プロキシーモード)で動作します:
1つは、リクエスト中 の全 URL を受け付ける、
標準(CERN 互換)HTTP プロキシー ("proxy" relayType)、
もう一つは、要求で、/-_-URL を受け付け、
応答中の URL を書換える、
DeleGate オリジナルのプロキシー ("delegate" relayType)。
":connMap" が付加された、
詳細な書式で利用可能なプロキシーモードは、
サーバープロトコル,サーバーホスト,クライアントホストの組み合わせによって分類できます。
RELAY=no ... プロキシーとして動作しない (元サーバーのみ)
RELAY=proxy ... CERN準拠モードのみ
RELAY=delegate ... DeleGateモードのみ (/-_-URL)
RELAY=proxy,delegate ... CERN と DeleGate モードの両方
RELAY=proxy,noapplet ... プロキシーによって中継される <APPLET> タグを抑制する
"proxy" と "delegate" モードの両方は、".localnet" 上のユーザーを許可し、
"proxy" モードのみの場合、他のユーザーを許可します。
SCREEN parameter == SCREEN={reject|accept}
-- default: none
このパラメーターはクライアント遮蔽用のブラック/ホワイトリストの(DeleGate の再起動なしで)動的更新を有効にします。
SCREEN パラメーターは、RELIABLE や PERMIT で指定された他のアクセス制御を上書きします。
遮蔽動作は "-Eri" オプションとの組み合わせで、アプリケーション層のプロトコルを理解を開始しないで完了します。
"reject" は、リストに列挙されたクライアントホストを拒否し、また、
"accept" はリストに列挙されたクライアントホストのみ許可します。
リストはテキスト形式で、各行は IPアドレスか、MAC アドレスです。
SCREEN="reject" で、DGROOT/etc/hosts.d/reject.txt のテキストファイルを見ます。
SCREEN="accept" で、DGROOT/etc/hosts.d/accept.txt のテキストファイルを見ます。
注)MAC アドレスベースの遮蔽には、DeleGate が arp コマンドを使える必要があります。
AUTH parameter* == AUTH=what:authProto:who
-- default: none
who (誰)が what(何)をする権限を与える。
authProto に指定したプロトコルを使用して、ユーザーを認証する。
プロトコルをサポートする場合、クライアントホストへの識別 (ident) プロトコルベースで、
"クライアントユーザーは誰か" を識別します。
他の場合、FTP サーバーを認証サーバーとして使用するかもしれません。
User, Host, Password のセットを得た後、
DeleGate は、
Host の(FTP)サーバーに、
User と Password でログインを試みます。
成功した場合、
クライアントは User@Host で
認証されます。
さまざまなプロトコルの DeleGate (SERVER=protocol にかかわらず) は、
"-PuserPort,adminPort/admin" のように、 "/admin" 修飾子をもつ管理専用ポートを指定することで、
リモート管理用ポートを持つことができます。
例)
SERVER=pop -P110,9110/admin AUTH=admin::admin:password
この DeleGate (POP プロキシーとしての) のリモート管理用 URL は、
"https://delegateHost:9110/-/admin/" です。
E-mail アドレス書式は、user@host
でなければならず、他の場合 (host 部分がない)、
FTP ログインは DeleGate により拒否されます。
HTTP-DeleGate は、Authorization ヘッダーの Username 部として、
彼/彼女の E-Mail アドレスを宣言するため、
匿名ユーザーに問い合わせます。
passWord フィールドに "*" を指定した場合(すなわち、AUTH="annonftp:*:*")、
Authorization ヘッダーのすべての Password を受理します。
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 == [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")。
指定した場合、アプリケーションプロトコル独自の
ユーザー名/パスワードを送信することによって
auth-server での認証が成功しない限り、
クライアントからのアクセスは許可されません。
"-none" と "-never" の、2つの特別な authServ は、
不要な認証を生成しません。
authServ の後ろに "(reprUser)" がつく場合、
authServ で認証が成功したユーザーは、
代表ユーザー reprUser として表示されます。
//ダイジェスト認証をクライアントと行う 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 をローカル認証と、サーバーとの認証の両方に使います。
"&" -- クライアントホスト (クライアントホスト上のユーザー名が必要)
"*" -- "user@authHost" としてのクライアントで指定された、
任意の authHost
// local.domain 以外のクライアントは認証が必要
SERVER=telnet AUTHORIZER="&:::!*.local.domain"
// ユーザーが localhost で認証された場合、全てのクライアントを許可
SERVER=telnet AUTHORIZER="localhost" RELIABLE="*"
// "-Fauth" により管理される、
DeleGate 自身の "-socksusers" リストを使用する。
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"), '}' ("%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 | -- | スタンバイプロセスの最大数 [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) にも行いますします。
例)
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 パラメーターを使用することで、もっと、簡単に実現できますが、 最近のバージョンでは、デフォルトで、無効になっています。
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 |
例)
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[:[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 に出力
FTOCL=-tee-h-n FTOSV=-tee
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'
SHARE parameter == SHARE=dirPatternList -- default: empty
例)
UMASK parameter == UMASK=mask -- default: 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'
ADMDIR parameter == ADMDIR=dirPath -- default: ADMDIR='${VARDIR}/adm'
LOGDIR parameter == LOGDIR=dirPath
-- default: LOGDIR='${VARDIR}/log'
-- v10-default: LOGDIR='log[date+/y%y/m%m/%d]'
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 互換です。
SYSLOG parameter* == SYSLOG=[syslogOpts,][syslogServ] syslogOpts == syslogOpt[,syslogOpts] syslogOpt == -vt | -vs | -vS | -vH | -fname -- default: none
複数の SYSLOG パラメーターで、syslogServ で指定した それぞれの複数の異なる対象にログデータを送信する設定ができます。 syslogServ は、syslog サーバーか、ローカルファイルの URL です。 syslogServ のデフォルトは、ローカルのロガー (ログは、標準 "syslog()" 関数経由で送られます) です。 それぞれの対象に対し、ログ書式と詳細さは、以下の syslogOpt を前置して指定できます:
-vt | -- LOGFILE を簡素化 |
-vs | -- LOGFILE 無し |
-vS | -- PROTOLOG 無し |
-vH | -- syslog ヘッダーを省略 |
-fname | -- ファシリティ名 "daemon" の代わりに name を使う |
例)
SYSLOG= | -- ローカルの syslog へ |
SYSLOG=syslog://host | -- 遠隔の syslog サーバーへ |
SYSLOG=syslog://host:port | -- 非標準ポート |
SYSLOG=/dev/tty | -- コンソールへ |
SYSLOG=file:path | -- ローカルファイルへ |
SYSLOG=-vH,file:path | -- syslog ヘッダーを省略 |
SYSLOG=-fdaemon | -- "daemon" ファシリティとして (デフォルト) |
SYSLOG=-flocal1 | -- "local1" ファシリティとして |
遠隔 syslog サーバーへの syslog UDP パケットの送信元ポート (とアドレス) は、例えば、
SRCIF=":8514:syslog"
(または SRCIF="xx.xx.xx.xx:8514:syslog"
のように指定できます。
各アプリケーションプロトコルのサーバーとクライアントを基準とした syslog サーバーの
切替えは、(まだ) サポートされていません。
エージングのための LogFilename と dirPath の置換え
例) 1ヶ月で循環する毎日のログ
例) 日付による階層ディレクトリーを持つログ
最新のログファイルは、 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'
WORKDIR parameter == WORKDIR=dirPath -- default: WORKDIR='${VARDIR}/work/${PORT}'
ACTDIR parameter == ACTDIR=dirPath TMPDIR parameter == TMPDIR=dirPath PIDFILE parameter == PIDFILE=fileName -- default: ACTDIR='${DGROOT}/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 == resType[:[resParam][:[queryHostList][:clientHostList]]] resType == 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 サーバー(のリスト) |
例) 問い合わせられた ホスト/アドレスによって DNS サーバーを選択する
例) 問い合わせる(クライアント) DNS ホストによってレゾルバーを選択する
RES_WAIT parameter == RES_WAIT=seconds:hostname -- default: RES_WAIT="10:WWW.DeleGate.ORG"
RES_CONF parameter == RES_CONF=URL -- default: RES_CONF="file:/etc/resolv.conf" or from registry (on Windows)
RES_NS parameter == RES_NS=nsList nsList == dnsServ[,nsList] dnsServ == dnsServer[//socksV5Host] | END. -- default: depend on RES_CONF
デフォルトで、"resolv.conf" に 列挙されている nameサーバー は、使用する DNS サーバーの一覧に追加されます。 特別な dnsServ名 ".END" は、それら name サーバーの追加機能を停止します。 例) RES_NS="192.168.1.1,.END" は、192.168.1.1 のみを使用し、 "resolv.conf" を無視することを意味します。
RES_AF parameter == RES_AF=afOrder afOrder == 46 | 64 | 4 | 6 -- default: 46
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
"host.yy.xx.dom" のホストは、最初の hostSpec に一致しますが、 2番目で除外されます。しかし、再び、3番目で追加されます。 HostList 中の、最初の host が、"!" をともなう場合、 全宇宙("*"、全てのホスト)から除外されることを意味し、 "!host, ..." は "*,!host,..." とみなされます。
例) 不明ホストや、不明ユーザーからのアクセスを抑制する
例) 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" によって置換えられます。
リソース置換 は、暗号化形式で指定できます。 暗号化されたデータは、書式文字列 "+=enc:ext::XXXX:" として直接表現でき、 XXXX 部は、暗号化されたデータを含みます。 この データ書式は、DeleGate の "-Fenc" オプションで作られます。 ファイル名が ".cdh" 付きの "+=conf.cdh" のようになっているとき、 "Credhy" によって非暗号化され、非暗号化で使用されるパスフェーズは、 "config" ユーザーのパスワードとして指定されます。
置換は、再帰的に実行できます。 この場合、相対リソース名は、 DGPATH または LIBPATH 内で検索されます。 デフォルトで、DGPATH='+:.:${HOME}/delegate'" の "+" は、 "caller" (呼び出し元) リソースの場所を表します。 例)"+=file2" が、呼出元ファイル "/usr/etc/file1" から参照される場合、 "file2" は、"/usr/etc/file2" として、検索されます。 リソース名は、"+={http://host/file1}" や "+={http://host/file}" のように URL で指定できます。
paramRef == +=[URL][?label,[label]*] paramList == line line ... paramListPart == CASE label paramList ESAC
置換リソースは、オプション(または、パラメーター)のリストで、 それぞれの行が一つのオプション(または、パラメーター)を表します。 それぞれの行で、 シャープ (#) に続く文字列は注釈として無視されます。 空白文字キャラクター (SPACE, TAB, LF, CR) が 各行の最初または終わりにある場合、無視されます。 シングルクォート (') および、ダブルクォート (") は取り除かれます。 バックスラッシュ (\) に続く文字はそのままの文字として扱われます。
例) 次の5つの例は、互いに同じ意味を持ちます。
PERMIT=a:b:c PERMIT=a:b:d PERMIT=a:e:f PERMIT=x:y:z ...
置換リソースは、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 スクリプト
フィルター(サーキットレベル情報において)は
次のように CMAP パラメーターを使うことで、
条件付で利かせることができます:
クライアントと 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
| tcprelay://host:port
filterName は、
FXX, FTOXX, FFROMXX のような名前で、
XX は CL (クライアント), SV (サーバー),
MD (MASTER-DeleGate) の内の一つです。
FXX のフィルターコマンドは、
クライアントに対して、ファイルディスクリプター 0 がバインドされ、
DeleGate に対しては、ファイルディスクリプター 1 がバインドされます。
FTOXX と FFROMXX
のフィルターコマンドは、標準入力から入力を受け、
XX にバインドされた標準出力へ出力します。
リモートホストの単方向フィルターは、"tcprelay://host:port" により、
TCP 上で接続し使用することができます。
CMAP=filterSpec:filterName:ProtoList:dstHostList:srcHostList
例)
CMAP="sslway:FSV:telnet:hostA:*" は、HostA 上の telnet サーバーに接続する場合のみ、
SSLway フィルターを利かせることを意味します。
FTOXX と、FFROMXX フィルターで、
CFI スクリプトは、
データタイプによって、それぞれのデータに適したフィルターを選択して利かせることができます。
FTOCL=filterCommand のような、
直接的使用の代わりに、
FTOCL=filter.cfi を指定でき、
ここでの filter.cfi は、CFI スクリプト形式のファイルです。
また、CFI スクリプトは、FTOCL=URL のように HTTP や FTP 経由で、
リモートホストから読込むこともできます。
CFI スクリプトのファイル名、または、スクリプト中で参照されるフィルターコマンドが、
相対パス名で指定される場合、
それらは LIBPATH 内で検索されます。
CFI スクリプト
CFI スクリプトは、DeleGate 上で転送されるメッセージデータに効かせる
ために使うフィルターを選択(データタイプ、サーバー名、クライアントタイプなどにより)
する簡単なスクリプトです。
CFI スクリプトは、テキストデータで、
"#!cfi" マジックストリングで始まり、
それぞれ "--" によって区切られた
1つ以上のフィルター設計書を含みます。
入力書式:
マッチングルール:
例) マッチングルール
書換えルール:
フィルター指定:
CFI script == "!#cfi" NL filterUnit [ "--" NL filterUnit ]*
filterUnit == filterRule [ filterRule ]*
filterRule == matchingRule | rewriteRule | filterSpec
matchingRule == matchingName ":" ruleBody
matchingName == MIMEheader | X-header | CGIENV
MIMEheader == "Content-Type" | "User-Agent" | ...
X-header == "X-Status-Ver" | "X-Status-Code"
| "X-Request-Method" | "X-Request-Ver"| "X-Request-URL" | ...
CGIENV == "REQUEST_METHOD" | "SERVER_PROTOCOL" | "SERVER_NAME"
| "PATH_INFO" | "PATH_TRANSLATED" | "HTTP_USER_AGENT" | ...
rewriteRule == Action "/" MIMEheader : ruleBody
Action == "Output" | "Remove"
filterSpec == filterType ":" ruleBody
filterType == "Body-Filter" | "CGI" | "Header-Filter"
| "MIME-Filter" | "Message-Filter"
ruleBody == string NL [ SP string NL ]*
CFI スクリプトへの入力データは、アプリケーションプロトコル
(HTTP, SMTP, POP, NNTP) の要求/応答ステータス行に先行される、
MIME 書式でのアプリケーションプロトコルメッセージです。
ひとつの MIME メッセージは、空行で分離されたヘッダーとボディからなります。
CFIinputMessage == statusLine MIMEheader NL MIMEbody
例) 簡単な HTTP 応答メッセージ
HTTP/1.0 200 OK ... 応答ステータス行
Content-Type: text/html ... ヘッダー
Content-Length: 20 ... ヘッダー
... ヘッダー/ボディ 分離行
メッセージボディ ... ボディ
matchingRule は、
入力ヘッダーと ruleName:ruleBody を突合わせることを表します。
これは、入力メッセージが ruleBody と一致するフィールドボディを
ともなう ruleName ヘッダーを持つときに一致します。
1つ以上のルールが一致した場合、
真になり、filterUnit が採用されます。
filterUnit 内に突き合わせルールが存在しない場合、
filterUnit は、無条件に採用されます。
現在、限られた MIME ヘッダーセット (要求・応答メッセージ中の) のみが
突き合わせに使用できます。
オリジナルヘッダー中に含まれないいくつかの
拡張ヘッダー情報で突き合わせることもできます。
(例: 応答メッセージ中の状態コードを意味する "X-Status-Code")
CGI
環境変数とのマッチング。
#!cfi
HTTP_USER_AGENT: MSIE
SERVER_HOST: www1.dom1
SERVER_HOST: www2.dom2
X-Status-Code: 200
Content-Type: text/html
Content-Type: text/plain
Body-Filter: ...
"Action/" が前置された rewriteRule がある
ruleName:ruleBody は、
関連する ruleName フィールドのための ruleBody データを
使ういくつかの単純な書換えを指定します。
"Output/ruleName:ruleBody" は、
ヘッダーに ruleName:ruleBody フィールドを追加 (または置換)
するということです。
"Remove/ruleName:ruleBody" は、
名前が ruleName で ruleBody と一致するボディを持つ、
ヘッダーフィールドを削除することを表します。
filterSpec は、入力データに効かせるフィルターを指定します。
入力メッセージ全体または一部はフィルタープログラムの標準入力へ渡され、
標準出力からのメッセージが元の入力メッセージの代わりに、
対象(クライアントや、サーバー)に転送されます。
Body-Filter: MIMEbody 用フィルター
CGI: MIMEbody 用フィルター
Header-Filter: MIMEheader 用フィルター
MIME-Filter: MIMEheader + MIMEbody 用フィルター
Message-Filter: statusLine + MIMEheader + MIMEbody 用フィルター
全ての種類のフィルターには、CGI
環境変数が渡されます。
加えて、CFI を起源とする環境変数も渡されます(
"SERVER_HOST" (対象サーバー名),
"REQUEST_URL" (要求 URL))。
"Body-Filter" や "CGI" のフィルターのために, 転送メッセージ中の "Content-Length" ヘッダーは、フィルター後のボディ部分のサイズを示すように 調整されます。 "CGI" フィルターの出力は、CGI 出力 のステータスヘッダーに先行されていなければなりません。
"Header-Filter" フィルターの場合、 メッセージのヘッダー部はフィルターに渡されます。 HTTP メッセージ (Request-Line または、Status-Line) 中の start-line は、 "Request-Line:" または、"Status-Line:" を 前置きされたヘッダーフィールドとして、渡されます。
"MIME-Filter" のフィルターでは、ヘッダーとボディからなる MIME メッセージ全体が、 フィルターとやりとりされます。
"Message-Filter" のフィルターでは、 アプリケーションプロトコルのメッセージ全体がフィルターとやりとりされ、 それぞれのメッセージは、アプリケーションプロトコルの要求/応答ステータスを 表す 1行を最初に持つ MIME メッセージで構成されます。
例) HTTP 応答メッセージの書換え
例) 利用可能なヘッダーと環境変数を表示する
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 サーバーは、各プロトコル用のダイジェスト計算に使用する構成要素一式を受信し、 以下のようにダイジェストを返します。
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 互換の 要求/応答メッセージ書式を使用します。
要求 URL の基点 "/-/pam/" は、PAMCONF="baseurl:/basePath/" で、 任意のパスに置き換えることができます。 要求 URL 全体は、PAMCONF="url:/path" で置き換えられます。 現仕様では、応答メッセージ中の内容は注意されませんが、 将来、いくつかの認証関連情報または、 能力情報は伝達できるようになります。
- 要求:
- GET /-/pam/service/auth HTTP/1.0
Authorization: Basic BASE64of(User:Pass)
- 応答 (以下のいずれか):
- HTTP/1.0 200 OK, authorized
HTTP/1.0 401 Not authorized
HTTP/1.0 403 Forbidden to use the PAM server
次の書式により、あなたは、PAM-DeleGate に代えて、CGI 等を伴う HTTPサーバー などを使用し、PAM サーバーを開発できます。
FTPxHTTP server
例)
YYsh server
例)
YYMUX サーバー
SOCKMUX parameter* == SOCKMUX=host:port:option[,option]* option == acc | con | ssl -- default: none -- status: tentative
host:port は SockMux の持続的接続を確立する 対象のポートを指定します。 接続は、"con" オプションを持つ DeleGate から、 "acc" オプションを持つ DeleGate へ確立されます。
オプション:
例) SockMux 越えで SOCKS プロキシーを連鎖する
例) SockMux 越えで SOCKS プロキシーを連鎖する(サーバー側から接続する)
例) SockMux 越えで HTTP プロキシーを連鎖する
例) SockMux 越えで連鎖した SOCKS プロキシー経由の HTTP
SOXCONF parameter* == SOXCONF=confSpec[,confSpec]* -- default: none
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 パラメーターを使用することで、以下のように、簡単な表記で表現できます:
例) SockMux 経由の tcprelay
Example: SockMux/TCP 経由で UDP を中継する
これらは、他の方法として、名前付パイプのような単一の FIFO デバイスを使用し 2つの SockMux-DeleGate 間の常駐接続を作ります。 それは、SERVER=sockmux:commtype@fifoName のように指定し、 この、commtype は、"commin", "commout", "comm" の内一つで、 それぞれ、単方向入力,単方向出力,双方向入出力を表します。
例)ホスト上の FIFO デバイスを使用する。
例)2ホスト間の通信ポートを使用する (未テスト)
常駐接続は DeleGate により起動された外部プログラムにより生成できます。 プログラムの処理は、 ファイルディスクリプター番号 0 および、1 で DeleGate とのソケット でやり取りされます;
例) 外部コマンドを使用して接続を開始する。
リモートから内部への接続するための対象サーバーは、 受け付けたリモートポートによって選択できます。 SERVER パラメーターに、 ":-:-Pxxxx" を後置することで、PORT=xxxx によりリモートホスト上で 受け付けられた接続にのみ有効になります。
例)複数のポートを転送する
注記)FTP データ接続の転送は、(まだ)サポートされません。
HTMUX parameter == HTMUX=sv[:[hostList][:portList]] | HTMUX=cl:host:port | HTMUX=px:host:port -- 制限: CAPSKEY が必要 -- default: none
標準で、入ってくる接続だけでなく、HTMUX クライアントから出てゆく接続も HTMUX サーバー経由で達成されます。 これは、内部サーバーへ入ってくる要求を転送する DeleGate には不要でしょう。 例えば、このようなケースでは、CONNECT="direct:*:192.168.1.*" のように CONNECT パラメーターを使って、そのような接続を直接的に確立するように指定します。
例)
この例では、hostX は、プライベートアドレス 192.168.1.1 とグローバルアドレス xx.xx.xx.xx を持つマルチホームホストであることを表しています。 hostX 上の DeleGate は、HTMUX サーバーとして機能しています。 hostI 上の HTTP DeleGate と、hostJ 上の FTP DeleGate は、 HTMUX クライアントとして機能していて、hostX 上の HTMUX サーバー経由で、 (xx.xx.xx.xx に来た) 要求を遠隔で受け付けています。
一対の HTMUX サーバー/クライアントは、SockMux プロトコルによって多重化された 複数の並列接続をリレーする単一の持続的接続を使います。 この機能は、入ってくる接続がファイアーウォール上の制限をすり抜けでくるような 悪意を持った使われかたをされてはいけません。 ですので、この機能を有効にするには、CAPSKEY を導入する必要があります。 HTMUX で他に標準で無効になっているのは、 クライアントサーバー間の間接接続(NAT やプロキシー経由の接続)、 クライアントサーバー間の大きすぎる時間のずれ(初期値は300秒)、 クライアントサーバー間に挿入された SSL 暗号化です。
HTMUX のための間接接続を有効にするには2通りの方法があります。
ひとつは、CAPSKEY を導入して、間接 HTMUX 接続を有効にする。
もうひとつは、下記例のように HTMUX プロキシーを挟む事です。
例) HTMUX を HTMUX プロキシーとともにカスケードする
HTMUX クライアントサーバー間の持続的な接続は、双方向接続を搬送できますので、 それ上に一対のプロキシーを形成できます。 各プロキシーは、以下の例のようにローカルポートで要求を受け付けて遠隔のプロキシーに転送します。
例) HTMUX を対称性を持つプロキシーにして使う(もっとも簡単な汎用的な設定)
この例で、-P8080 はワイルドカードアドレス表現 "-P*:8080" と同じで、
ホスト上の全インターフェースのポート番号 8080 から受け付けます。
ですので、hostX 上の任意のインターフェース上のポート 8080 への要求は、
HTMUX クライアント(および HTTP プロキシー)としての hostX 上の DeleGate 経由
でサーバーに転送されます。
対称的に hostY 上の任意のインターフェース上のポート 8080 への要求は、
HTTP プロキシー(および hostX:9876 での HTMUX サーバ)としての hostX 上の
DeleGate 経由でサーバーに転送されます。
(今一度、標準でこの機能は無効になっており、有効にするには CAPSKEY
が必要です。)
サーバー側とクライアント側で使うポートは、-P または -Q オプションに "/local" と "/remote" 修飾子を使う事で別々に指定できます。 "/local" は、ポートをローカルホスト上で使う(HTMUX クライアントで)事を明示し、 "/remote" は、ポートをリモートホスト上で使う(HTMUX サーバー)事を明示します。 上記例の "-P8080" の指定は、"-P*:8080/remote,*:8080/local" と同じです。
例) HTMUX を双方向に使う
この例で、hostX と hostI 間で、 それぞれのホスト上の localhost:8081 への要求は、 対向に転送されます ("-Plocalhost:8081/remote,localhost:8081/local" と同じ)。 hostX と hostJ 間で、 hostX:8082 and hostJ:8083 は、対向に転送されます ("-PhostX:8082/remote,hostJ:8083/local" と同じ)。
例) HTMUX を外向けの要求にのみ使う。
これは、HTMUX を外向けの要求にのみ使う例です。 HTMUX パラメータがなくても動きますが、HTMUX により、サーバークライアント間では、 単一の持続的接続が使われます。 この HTMUX の使いかたは DeleGate がフォアグラウンド動作しているとき (-fv オプションを伴い、サービスやデーモンとしてではなく) に上記制限や CAPSKEY 無しで、標準で使えます。
CAPSKEY parameter* == CAPSKEY=opaque -- default: none
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" のように指定します。
注記: DeleGate を、他の SOCKS サーバーと連結する時、UDP リレーで、 DeleGate によって、内部的に仮に拡張された SOCKS プロトコルに起因する、問題が発生するかもしれません。 そのような問題を回避するために以下の SRCIF パラメーターが使えます。
SOCKSTAP parameter* == SOCKSTAP=ProtoList[:[dstHostList][:[srcHostList][:params]]] -- default: none
例) HTTP と FTP でキャッシュを行う Socks-DeleGate
例) 上流プロキシーとともに、HTTP のキャッシュを行う Socks-DeleGate
See http://www.delegate.org/delegate/sockstap/> for more details.
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 伝送ログ書式
%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 部分は、並列、または、パイプライン 要求がセッション所有者であるクライアントによって生成された場合、 ユニークではありません。 注記: "%As" 用の reqnum 部は、それぞれの要求で加算されないかもしれません。 なぜなら、セッション識別子のコンテナー (この場合、ダイジェスト認証の "opaque" パラメーター) が、それぞれの要求で更新されないかもしれないからです。
HTTPCONF parameter == HTTPCONF=what:conf
MOUNT パラメーターの中から仮想サーバーを自動的に検出し、それらを仮想サーバーだけに
適用する MOUNT ルールとして表します。
これは、各 MOUNT パラメーターの "nvserv" マウントオプションで
指定することで、手動で実行できます。
"nvserv:alias" は、共通の IP アドレスを持つ対象サーバー郡のホスト名を検出し、
それらを仮想サーバーとして表します。
"nvserv:gen" は、"genvhost" マウントオプション付きの MOUNT パラメーターを仮想サーバーとして
表します。
"nvserv:auto" は、"nvserv:alias,gen" と等価です。
推測による自動検出は、avserv マウントオプションを明示的に指定することで
上書きできます。
"nvserv:none" は、自動検出された、または "nvserv" マウントオプションで明示的に指定された、
仮想サーバーに対する全ての取扱いを無効にします。
例)
例)
例)
クライアントに保存される Set-Cookie 応答内の指定した属性を暗号化し、後で、 復号し、Cookie 発行元だけに Cookie 要求を転送します。 Cookie 内の属性は、"attribute@host" または "attribute@.domain" で指定します。 前者では、host で生成された cookie は暗号化され、 host にだけ、エコー(返され)されます。 後者では、domain 内のホストで生成された cookie を、 domain 内のホストにエコー(返せ)せます。 cryptKey 内の特殊文字列 "%a" は、 クライアントの IP アドレスに置き換えられます。 これは、その IP アドレスを持つホスト上のクライアントからのみ 暗号化 Cookie を使えるようにします。
例)
例)
例)
HTTPCONF="add-qhead:X-Forward-For:%a"
例)
例)
例)
例)
FILETYPE parameter == FILETYPE=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-DeleGate 用のマウントオプション
制御:
例) 仮想ホスティング,複数の HTTP サーバーとして動作する
MOUNT="/* http://wwwA/* nvhost=dom1.com"
MOUNT="/* http://wwwB/* nvhost=dom2.org"
MOUNT="/* file:data/wwwC/* nvhost=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 タグ
注)クライアントユーザーに対する DeleGate(元サーバーまたはプロキシー)
による通常のアクセス制御下の SSI によるリソースが含まれます。
それは含まれるリソースのアクセスが拒否されます。
SSI-include 経由でも拒否されます。
virtual=http://exserver/dir/fileX のような DeleGate サーバーの管轄外リソースを含むことを許可するのは
SHTML 書込みのようにユーザーによるセキュリティーホールを作ります。
元サーバーのとき、SSI-includeプロキシーとしての転送は RELAY=no によって拒否される必要がありますが、
他のサーバーからでも SSI-include で拒否されます。
バージョン9での簡単な方法は
RELAY="proxy:http:exserver:*"
のように制限した RELAY を追加することで、exserver のみへのリレーを許可します。
他の安全な方法は、
MOUNT="/ex/* http://exserver/dir/*" の後に
virtual="/ex/fileX" のような SSL-include を書きます。
しかしながら、双方とも exserver の意図された仮想 URL 外のリソースに
アクセスすることをクライアントユーザーに許可します。
バージョン10 において上記問題の対処するため、RELAY=no とともに使う RELAY=ssi が追加されました。
RELAY=ssi は SHTML を書く者に他のサーバーからの物を追加でき、
クライアントユーザーの許可は変化しません(RELAY=no と同じ)。
RELAY=ssi 無しで言えば、あなた(DeleGate 管理者としての)は SHTML を書く者が
他のサーバーを含めるのを防げます。
RELAY=ssi:protocolList:serverList:clientList
のような DeleGate の汎用表記で追加可能な対象サーバー(プロトコル、クライアントも)
を制限することもできます。
注)多分、プラットフォームや言語によらない方法で任意のサーバーにアクセスする CGI を禁止することは不可能です。
ですが、少なくとも、
REMITTABLE="+,-cgi".
で CGI 自体を禁止することができます。
バージョン10 での他の(そしてもっと重要かもしれない)拡張は、SSI-include 経由の
サーバーとクライアント間前後の要求・応答メッセージヘッダ(Cookie や User-Agent)をリレーすることです。
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 プロキシー
例)非匿名 FTP (sftp) サーバーの MOUNT
例) FTP -> LPR (Line Printer Daemon Protocol) ゲートウェイ
LPR/FTP-DeleGate は、FTP クライアントがリモートプリンターにアクセスできるようにします; ファイルの印刷は、FTP のファイルアップロードによって行われ、 プリンターの状態は、FTP ディレクトリー一覧で見られます。 MountOption "readonly" は、状態の参照を禁止します。
例) 元 FTP-DeleGate
"RELAY=no" は、DeleGate が プロキシー FTP サーバーとして動作するのを禁止します。
このような 元 FTP-DeleGate へのファイルの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT="/xxx/* /yyy/* rw" のように、MOUNT ポイントに対し、
マウントオプションとして、"rw" (read/write) を指定する必要があります。
指定ディレクトリー内の全コンテンツを単一の tar 形式のファイルで取り込むため、
"RETR directory.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 Bounce を操る方法を制御します。
FTPCONF can be applied on a specific condition by specifying it
FTPCONF で、
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" (ローカルファイル), "H" (キャッシュヒット), "N" (キャッシュミス) のどれかです。.
例)
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 互換サーバー
SSH/Telnet ゲートウェイ
POP プロキシー
例) プロキシー POP-DeleGate
external% telnet firewall pop
例) POP マウント
MOUNT="//* ="
... サーバーがユーザーによって指定された場合、書換えません
対象 POP サーバーが APOP 認証を受付けられることを示した場合、
(タイムスタンプを伴う挨拶メッセージによって)
DeleGate は、最初に APOP ログインを試み、失敗した場合、USER+PASS を再試行します。
しかし、サーバーがその挨拶にもかかわらず APOP を受け付けない場合、
次のように、"noapop" マウントオプションで、APOP による試行を禁止できます。
例) 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
例) プロキシー SMTP-DeleGate
例)
例) 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つのディレクトリーで、recipient の設定ファイルを検索します。
recipient の設定が見つからない場合、
以下のディレクトリー内のデフォルト設定 (存在する場合) を使用します。
他の場合、組み込みのデフォルト設定が使用されます。
デフォルトは、"/-/builtin/config/smtpgate/@default/conf" にあり、
MOUNT オプションでカスタマイズできます。
デフォルトの内容は、次のようになっており、受信者のメールエクスチェンジャーを経由して、
受信者のアドレスに入力メッセージを配送します。
各 recipient のディレクトリーには、以下のファイルがあります。
例)
NNTP プロキシー/サーバー
例) フィルター
ニュースグループ名が"group.*"のパターンを持つ場合のみ中継する。
nntpServerに対するグループリストは "nntp://nntpServer/group1.,group2.,..."
のように指定できます。
例)複数の NNTP サーバーを認証付 (AUTHINFO を使用) でマージ
例) 選択したグループをマウント
例) POP サーバーから NNTP クライアントへ
例) NNTP サーバーから HTTP クライアントへ
例)元 NNTP-DeleGate
NNTP-DeleGate の SERVER パラメーター中の対象サーバーに "-.-" を指定すると、
DeleGate を 元 NNTPサーバー として使うことを意味し、それの持つスプールに検索/投稿できます。
この新たなニュースグループ名 newsGroup を作るには、空ファイルを作ります。
投稿された記事の最初の行が、"From user date" のような Unix-From を持つか、
"Unix-From: user date" ヘッダーを持つ場合、記事の記事番号は、
"X-Seqno" (または、"X-Sequence") ヘッダーが存在する場合、固有のものにセットされ、
また、スプールファイルの作成日付は、Unix-form の date にセットされます。
NNTP の記事を匿名化する
メールアドレスをスパム用に検索させないようにするため、
NNTP プロトコル上で伝送されたメールアドレスを、
次のように、"rewaddr" マウントオプションで匿名化できます。
Telnet-DeleGate (telnet クライアントのための DeleGate サーバー) で、
"-ssh" と、"." を前置したホスト名 ("-ssh.host" のように) は
host 上の SSH サーバーを表します。
そのようなサーバーにアクセスするとき、Telnet-DeleGate は、Telnet クライアントと
SSH サーバー間のゲートウェイとして動作します。
例として、Telnet-DeleGate を次のように設定して使うと、
以下のように、Telnet クライアントは、host 上の SSH サーバーに user として
ログインできます:
% delegated -P8023 SERVER=telnet://-ssh
対象 SSH サーバーは このように制限できます:
% telnet -l user@host localhost 8023
% delegated -P8023 SERVER=telnet://-ssh.host
対象 SSH サーバー上のユーザーは、このように制限できます:
% telnet -l user localhost 8023
% delegated -P8023 SERVER=telnet://user@-ssh.host
ユーザーのパスワードは、このように指定できます:
% telnet localhost 8023
% delegated -P8023 SERVER="telnet://user:pass@-ssh.host"
この場合、Telnet クライアントは対象サーバーに付いて何も指定できませんが、
ログイン手続きは、全自動で成されます。
pass 部での予約キャラクターは、"%XX" 表記でエスケープしなければなりません
(最後にある "@" は "%40" でエスケープしなければなりません)。
% telnet localhost 8023
"-l user" オプションなどで認証情報を送る機能の無い Telnet クライアントでは、
次のように、Telnet-DeleGate の従来の方法でそれを指定できます:
% delegated -P8023 SERVER=telnet://-ssh
% telnet localhost 8023
>> Host name: user@host
firewall# delegated -P110 SERVER=pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username@servername
...
username と、servername 間の区切り文字には、
"@" の代わりに、"%" や "#" を次のように使えます。
username%servername または、
username#servername
"pop://user@server" は、
内部的に、"pop://server/user" として表現され、
次のように MOUNT で制御されます:
MOUNT="* pop://defaultHost/*"
... デフォルト POP サーバーを指定します
MOUNT="user1 pop://host1/*"
... "user1" のサーバーを "host1" にします
MOUNT="//pop2/* pop://host2/*"
... 実ホスト名 "host2" を隠し、user@pop2 を user@host2 にマップします
MOUNT="//*%S/%S pop://server/*%(1)@%(0)"
... user@host を そのまま pop://server/user@host に転送します
MOUNT="* pop://server/* noapop"
SERVER=pop
MOUNT="* nntp://nntpserver/*"
MOUNT="ns2-* nntp://nntpserver1/* apop=password"
MOUNT="ns3-* nntp://nntpserver2/* pass=password"
firewall# delegated -P80 MOUNT="/mail/* pop://mailHost/*"
例) プロキシー IMAP-DeleGate
SMTP プロキシー/サーバー
firewall# delegated -P143 SERVER=imap
* OK external Proxy-IMAP server DeleGate/6.1.15
C001 LOGIN username@servername
...
LOGIN username%servername も受けいれられます。
// エイリアシング/フィルタリングをともなう
MOUNT="* smtp://-"
SMTPCONF parameter* == SMTPCONF=what:conf
-- default: SMTPCONF=bgdatasize:64K
複数の条件は、
SMTPCONF="reject:nomx+nohelo+nofrom+pipeline"
のように、"+" で連結して指定できます。
デフォルトの設定は、
SMTPCONF="MX:{-MX.*,*}"
で、MX を最初に試行し、失敗したなら、ドメインをホスト名として直接接続を試みます。
SMTPCONF="MX:smtpserver"
-- smtpserver を 上流の SMTP サーバーに使う
SMTPCONF="MX:{smtpserver1,smtpserver2}"
-- 順番に SMTP サーバーを試す
SMTPCONF="MX:{-MX.*,*}"
-- デフォルトの設定
SMTPCONF="MX:{-MX.*,*,smtpserver}"
-- バックアップ SMTP サーバーを追加する
SMTPCONF="MX:{*,-MX.*}:*.localdomain"
-- localdomain ではないなら ホストに直接転送する
SMTPCONF="MX:smtpserver:{*.dom1,*dom2}"
-- 指定ドメインのサーバー
SMTPGATE parameter == SMTPGATE=dirPath
-- default: SMTPGATE='${ETCDIR}/smtpgate'
SMTPGATE (SMTPから、{SMTP,NNTP}への変換) の設定ディレクトリーを指定します。
SMTP メッセージの受け付けと、中継を、
"recipient@the-host-of-DeleGate" に対して、
バインドするためには、それぞれの recipient (受信者) に対しての
"SMTPGATE/users/recipient" に作成し、設定、ログ、カウンター、および、
スプールのファイルを保存するための設定ディレクトリーを作成します。
その後、"SMTPGATE/users/recipient/conf" 設定ファイルを作成します。
// "feedback@delegate.org" で、転送メッセージが受け付けられ、
例) SMTP から NNTP へ転送
// "delegate-en@smtpgate.etl.go.jp" に向けられます。
INHERIT: sendmail
SERVER-HOST: mail.etl.go.jp
RECIPIENT: delegate-en@smtpgate.etl.go.jp
ACCEPT/From: !%, !MAILER_DAEMON@, !hotmail.com, ...
[the contents of SMTPGATE/users/feedback/conf]
INHERIT: postnews
SERVER-HOST: news.delegate.org
OUTPUT/Newsgroups: mail-lists.delegate-en
OUTPUT/Distribution: world
OUTPUT/Reply-To: feedback@delegate.org
OUTPUT/Subject: [DeleGate-En] ${subject:hc}
OUTPUT/Header: X-Seqno: ${seqno}
OUTPUT/Header: UNIX-From: ${unixfrom}
ACCEPT/User-Text: delegate ## ボディに 語句 "delegate" が含まれていない場合拒否
ACCEPT/Max-Bytes: 50000 ## header+body が、50kB 以上の場合拒否
ACCEPT/Min-Body-Bytes: 64 ## 64B 以下のボディの場合拒否
OPTION: isn,rni,res,reb
isn -- シーケンス番号加算 (${seqno}によって参照される)
rni -- メッセージ ID なしを拒否
res -- 空件名 (Subject) を拒否
reb -- 空本文 (Body) を拒否
axo -- X-Original ヘッダーを付与
rxo -- X-Original ヘッダーを除去
gwt -- GateWay 追跡
ntr -- 追跡フィールド (Received:) を付加しない
SMTPGATE/admin/@default/
CONTROL/INHERIT: sendmail
CONTROL/RECIPIENT: ${recipient}
CONTROL/SERVER-HOST: ${recipient.mx}
任意のものは、ファイルやディレクトリーを手動で作成することで有効にできます。
デフォルト記録ファイルのかわりに、
ユーザーはファイル名と保存単位を ARCHIVE 命令で定義できます。
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.
例) 複数の NNTP サーバーをマージ
MOUNT="= nntp://server2/"
MOUNT="= nntp://user2:pass2@server2/"
// グループ group.* をオリジナル名のままでマウント
MOUNT="= nntp://server1/group."
// グループ group.* をエイリアス名 "alias-group.*" でマウント
MOUNT="alias-group. nntp://server1/group."
// メールスプールをニュースグループ名 "+pop.user.host" としてマウント
# delegated -P119 SERVER=nntp
MOUNT="= pop://user:pass@host/"
# delegated -P80 MOUNT="/news/* nntp://nntpServer/*"
# delegated -P119 SERVER=nntp://-.-/
'${ETCDIR}/news/groups/newsGroup'
既存の "/path/of/MH-folder" を newsGroup として中継するには、
上述のファイルを作り、次の内容で埋めます。
0 0 0 0 /path/of/MH-folder
(4つのゼロの後に、MH-folder のパスをつける)
MOUNT="* nntp://server/* rewaddr=*:%l@%r"
NNTP の MountOption
NNTPCONF parameter* == NNTPCONF=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 プロキシー
例)単一サーバーホスト上の2つのディスプレイに中継
例)2つのサーバーホストに中継
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* == DNSCONF=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 ソケット
カスタマイズ
この例で、MOUNT は、forbidden メッセージと、
代替データ ("/tmp" 内のローカルファイル) のみ置換えます。
通常、組み込みデータグループは、ワイルドカード(*) 記号で置換えでき、
また、代替データは、HTTP や FTP 経由でアクセス可能なリモートホスト上に配置できます。
例) 全ての、"src/builtin/" のコピーを "http://yourwww/delegate/builtin/" に入れ、
このように MOUNT する:
リモートデータの読込みは、MOUNT された組み込みデータがキャッシュされ、
一般のデータとして再利用されるので、キャッシュが有効な限りオーバヘッドの影響を受けません。
アタッカー防御
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、
存在するアドレス上にターゲットバッファが存在していることを期待しており、
スタックアドレスをランダ厶化することは、アタック成功の糸口を減少するのに効果的です。
そして、アタックの失敗は致命的エラーを発生させ、DeleGate により捕捉されます。
疑わしいクライアントホストは、関連ファイル (ADMDIR/shutout/ 内) を削除するか、
TIMEOUT=shutout (デフォルト30分) のファイル有効期限が切れるまで、シャットアウトされます。
安全のためには、TIMEOUT="shutout:0" (無限) が望ましく、
アタッカーに2度とチャンスを与えないようにしましょう。
しかし、致命的エラーは、DeleGate のいつものバグで発生するほうが高く、
既定値を扱いにくくしています...
とにかく、以下のオプションを理解し、アクセス制御 設定はもちろんのこと、
このような攻撃も防ぐよう、意識を高く持ってください。
起動時、元の環境変数とスタック領域上のコマンドライン引数はヒープ領域に移動、消去され、
アタッカーの侵入コードに利用されないようになっています。
同時に、ランダムな長さの値 (MAXIMA=randenv の最大値) を持つ RANDENV ダミー環境変数が、
環境変数のランダムなアドレスに挿入され、フィルタープログラムや、
CGI プログラムのような子プロセスに継承されます。
設定の暗号化
Passphrase は、次の例のように、SSL ライブラリーによるプライベート鍵
(証明書と一緒に1つのファイルに含まれるかも知れません)
の非暗号解除に使用されます:
別のパスフェーズは、"+=cong.cdh" で指定された、
暗号化された設定パラメーターを得るためのものです。
これらデータを非暗号化するパスフェーズは、次のように、
特別なドメインに存在する特別なユーザー "config" のパスワードとして与えます。
サフィックス ".cdh" は、"Credhy" アルゴリズムで暗号化された情報であることを意味します。
ファイルは、次のように -Fcredhy で、暗号化/暗号化解除できます:
暗号化された設定ファイルは、次のように使用できます:
設定ファイルがリモートサーバーから読み込まれる場合、暗号化が強く推奨されます。
.
DeleGate が必要とする MasterKey が、CRYPT パラメーターで指定されない場合、
対話形式で聞かれます。
DeleGate が、"-r" または、SIGHUP で再起動した、または、終了後短時間で再起動した、
または、ホストマシンが再起動された場合、MasterKey は自動的に保存され、
対話無しに再利用されます。
アイコンとメッセージを含む、DeleGate のビルトインデータソースは、
ソースコードディレクトリー "src/builtin/*" にあります。
それらは、DeleGate の実行ファイルに組み込まれ、
DeleGate 実行時のリソースとして、
URL "http://delegate/-/builtin/*" で アクセスできます。
これらデータは、MOUNT を定義することで、DeleGate を再コンパイルせずに置換えられます。
例) アクセス禁止で返るエラーメッセージは、
"http://delegate/-/builtin/mssgs/403-forbidden.dhtml" にあり、それは、
次のように、MOUNTパラメーターで置換えられます:
MOUNT="/-/builtin/mssgs/403-forbidden.dhtml /tmp/forbidden.dhtml"
MOUNT="/-/builtin/* http://yourwww/delegate/builtin/*"
SIGSEGV や SIGBUS のような致命的な信号が発生した後、DeleGate は、
クライアントホストへのサービスを直ちに停止します。
致命的エラー発生の原因は、エラー前に、侵入の試みが失敗した印ととらえることもできます。
同時に、事象を通知するため、DeleGate は、
ADMIN パラメーターに指定した管理者に報告メールを送信します。
設定情報は、非暗号化にパスフェーズを必要とする暗号化された物とできます。
このようなパスフェーズは設定の一部として表される、
特別なユーザー "sslway" および、"config" のパスワードとして指定されます。
プラットホーム特有の問題
SSL プライベート鍵を非暗号化するパスフェーズは、特別なドメインに存在する
特別なユーザー "sslway" のパスワードとして、このように与えます:
delegated -Fauth -a sslway:Passphrase -dgauth@admin
delegated -P443 SERVER=https STLS="fcl,sslway -cert cryptedKey.pem"
delegated -Fauth -a config:Passphrase -dgauth@admin
delegated -Fcredhy Passphrase < conf > conf.cdh
delegated -Fcredhy Passphrase -d < conf.cdh > conf
delegated +=conf.cdh
delegated +=http://server/path/conf.cdh
例でも見られるように、パスフェーズを保持する特別なユーザー名は、特別なドメイン
"-dgauth@admin" [DGAuth] に存在します。
DGAuth でのパスワード保管場所は、パスフェーズ、または、MasterKey.
で、暗号化されています。
それは、次のように指定できます:
CRYPT=pass:MasterKey
紳士的再起動
また、SIGHUP での再起動は、AUTH=admin パラメーターを使い、 "http://delegate/-/admin/" にて、リモート HTTP クライアントでも実行できます。
再起動は、DeleGate の設定変更した後に行います。再起動時にパラメーターを再読込するためには、 +=parameters 表記 (パラメーター置換) を指定する必要があります。 他のオプション (パラメーター) は、コマンドライン引数で指定し、 これは、再起動した DeleGate プロセスに継承されます。
再起動する他の目的は、 ごみやリーク (ヒープメモリ や ファイルディスクリプター) をお掃除するためです。 この目的の場合、DeleGate は TIMEOUT=restart または、CRON パラメーターの -restart 動作で、それぞれ予定した時間に周期的に再起動できます。
-Ffunction より前、および、"--" オプション以降のコマンドラインオプションは、 DeleGate のオプションとして、 ( delegated dgopt ... dgopt -Ffunc fopt ... fopt -- dgopt ... dgopt ) function よりも、優先されます。 例外として、name=value 書式のパラメーターオプションが、 fopt の位置に現れた場合、DeleGate のパラメーターとして認識されます。
例) DeleGate をレゾルバーとして使います
ファイル
${DGROOT}/etc | -- 設定のための主な常駐ファイル |
${DGROOT}/lib | -- ライブラリーファイルとスクリプト |
${DGROOT}/adm | -- 管理に関係する重要なログ |
${DGROOT}/log | -- 増大するログファイル |
${DGROOT}/work | -- コアダンプ用 |
${DGROOT}/cache | -- キャッシュデータ用 |
${DGROOT}/act | -- 稼働中の DeleGate の制御情報 |
${DGROOT}/tmp | -- シャットダウン時に削除される一時ファイル |
詳細は、DGROOT パラメーターと、 ローカルファイル使用法 の記述を参照して下さい。
著者
@ @ ( - ) _< >_Yutaka Sato <y DOT sato AT delegate DOT org>
フィードバック
- help ... この情報
- search ... サーチエンジン(FreyaSX) でマニュアルを検索
- decomp ... ハイパーリンクは各パートを分解するように書き換えられます
- parts ... 各パートは注釈され、ハイパーリンクは "decomp" のように書き換えられる
- skeleton ... マニュアルの項目リスト
- frame ... フレーム化されたマニュアル
- [CTX] ... このパートのラベルへジャンプ(プレーン形式のマニュアル)
- [ALL] ... このパートのラベルへジャンプ("decomp"形式のマニュアル)
DeleGate Version 9.9.10 + 10.0.0 最終更新: 2014年8月28日 --------- --------- --------- --------- --------- --------- --------- ---------