[CTX]
[ALL]
AUTH =authgen:basic:authString
HTTP要求ヘッダ中に、クライアントからのオリジナルAuthorizationフィールドがない場合、"Authorization:
Basic authString " を生成し、サーバに転送します。authString は、
"userName :passWord "でなければなりません。以下の特別文字列は、クライアントの属性をあらわします。
%u -- Identプロトコルで得られたユーザ名
%h -- ソケットから得られたクライアントのホスト名
%i -- クライアントに向けたネットワークインタフェースのホスト名
%a -- クライアントのホストアドレス
%n -- クライアントのネットワークアドレス
%H -- DeleGateのホスト名
%M -- DeleGateのADMIN
%A -- "CMAP=string:authgen:mapSpec"によって生成される文字列
%U -- クライアントの [Proxy-]Authorization: userame:password の username 部
%P -- クライアントの [Proxy-]Authorization: userame:password の password 部
例)
ファイアウォールが2つのネットワークインタフェースを持ち、内部/外部ホストが異なるインタフェースからアクセスする場合、それらは、インタフェース名で区別できます。
AUTH ="authgen:basic:%i:%h" 他の場合、内部ネットワークは以下のようにCMAPで、明示する必要があります。
AUTH ="authgen:basic:%A"
CMAP ="{internal:passWord }:authgen:*:*:{InternalNetList }"
CMAP ="{external:passWord }:authgen:*:*:*"
"passWord /%i"書式でパスワードが生成され、DeleGateは、このようなパターンのAuthorizationフィールドをともなって入ってくる要求を拒否します。
このように、にせパスワードは、ホスト"%i"上のDeleGateを通過できません。
AUTH =pauthgen:basic:authString
AUTH=authgen のように"Proxy-Authorization: Basic authString "
を生成する。
例)
クライアントからの要求メッセージ中の消費 Proxy-Authorization を
そのまま上流プロキシに転送する(authString == %U:%P によって)。
AUTH =proxy:pauth AUTH ="pauthgen:basic:%U:%P" PROXY =...
AUTH =fromgen:fromString
指定した場合、 オリジナルヘッダが、オリジナルのFromフィールドを持たない場合、"From:
fromString"が、HTTP要求に差込まれます。fromStringが省略された場合、デフォルト値は "%u@%h"になります。
AUTH =log:remoteHost :identUser :authUser
HTTPサーバコモンログファイル書式内のクライアント情報部の内容を指定します。デフォルト値は、AUTH="log:%h:%u:%U"です。
%F
-- FromフィールドのE-mailアドレス
%L
-- From: local@domain フィールドのlocal部
%D
-- From: local@domain フィードのdomain部
%U
-- Authorization: userame:password のusername部
%P
-- Authorization: userame:password のpassword部
%Q
-- Forwarded: フィールドの"for
clientFQDN "部分
例)
ユーザによるDeleGateの構成
DeleGateを構成する場合、柔軟に、それは、DeleGate管理者だけではなく、ユーザも行えるように、
(WWWリソース(元HTTP-DeleGate上の)提供者)DeleGateは、ユーザが設定した、構成パラメータを、
要求プロセス時毎に読むことをサポートしています。
そのパラメータは、MOUNTされたローカルファイルシステム上の、
"+=parameters" ファイルフォーマットで、
拡張子に".dgp"を持つファイルによって与える必要があります。
それは、-Fcgi と同様に動作し、
新しいプロセスを生成しないでに、効率を上げます。
例)
ニュースサーバN を、http://delegate /news/servN /にMOUNTする
(1) 起動時のパラメータによる
MOUNT ="/news/servN /* nntp://nntpserverN /*"
(2) CGI-DeleGateによる
MOUNT ="/news/* cgi:/dirPath /*"
[the contents of file:/dirPath /servN /welcome.cgi]
delegated -Fcgi MOUNT ="/* nntp://nntpserverN /*"
(3) ".dgp" ファイルによる
MOUNT ="/news/* file:/dirPath /*"
[the contents of file:/dirPath /servN /welcome.dgp]
MOUNT ="/* nntp://nntpserverN /*"
(この機能は、FTPのような他のプロトコルに適用するべきです...)
SHTMLファイルでのサーバサイドの実装(SSI )
元HTTP-DeleGateで、接尾辞".shtml"のつくローカルファイルは、
HTMLファイルとは、サーバサイドの実装 (SSI )のための特別なタグが含まれるのを除き、
".html"のつくファイルのように扱われ、METAは、クライアントに送信される前に、
HTTP-DeleGateによって、理解され、置換されます。
SSI タグ
<!--#echo var="varName " -->
varName で指定された値で置換されます。
varName は、以下のような、
"REMOTE_HOST " または、"HTTP_SERVER "
と同様な、任意のCGI互換名です。
<!--#include virtual="URL " -->
"virtual"属性で指定されたデータに置換されます。
"virtual" は、"proto ://server /upath "のような完全なURLまたは、
"/upath " のような部分URLとでき、http://delegate /upath として、
解釈されます。
"/"で始まらない"upath "のような相対URLは、shtmlファイルの
ベース(カレント)に対する相対として、解釈されます。
<!--#fsize virtual="URL " -->
<!--#flastmod virtual="URL " -->
それぞれ、指定したデータのサイズまたは、最終更新時間で、置換されます。
<!--#config timefmt=timeFormat -->
"#echo","#flastmod"などによって生成される時間文字列の書式を、
strftime(3)互換の書式で指定します。
(default: timefmt="%a, %d %b %Y %H:%M:%S %z")
META タグ
<META HTTP-EQUIV=fieldName content="filedBody ">
HTTP応答メッセージに"fieldName : fieldBody "ヘッダを生成します。
fileBody 内の以下のパターンは、前記のものとして、置換されます。
${varName } or
<!--#echo var=varName -->
${flastmod:URL } or
<!--#flastmod virtual=URL -->
${fsize:URL } or
<!--#fsize virtual=URL -->
${include:URL } or
<!--#include virtual=URL -->
例)
<META HTTP-EQUIV=Status content="200 OK">
<META HTTP-EQUIV=Content-Type content="text/html">
<META HTTP-EQUIV=Pragma content="no-cache">
<META HTTP-EQUIV=Date content="${DATE_GMT}">
<META HTTP-EQUIV=Last-Modified content="${flastmod:URL}">
ICP プロキシ/サーバ
ICPCONF parameter* == ICPCONF ={icpMaxima |icpConf }
icpMaxima == para:N |hitage:N |hitobjage:N |hitobjsize:N |timeout:N
icpConf == icpOptions :ProtoList :dstHostList :srcHostList
-- default: ICPCONF =para:2,hitage:1d,...
DeleGateをICPサーバ(SERVER=icp)として動作させる場合の、ICP設定
para:N
-- 並列ICP-DeleGateサーバ数 [2]
hitage:N
-- HITとして通知する、キャッシュデータの有効期限 [1d]
hitobjage:N
-- HIT_OBJ似よって送信される、キャッシュデータの有効期限 [1h]
hitobjsize:N
-- HIT_OBJによる、キャッシュデータの最大容量 [1024](bytes)
timeout:N
-- 応答待ちタイムアウトのデフォルト値 [2.0](seconds)
debug:N
-- デバッグ用ログレベル [0]
FTPCONF parameter* == FTPCONF =ftpControl [:{sv|cl}]
ftpControl == nopasv | noxdc | rawxdc
-- default: none
nopasv
データ接続の PASV コマンドを使用不可とする。
noxdc
制御接続で、データ伝送の XDC モードを使用不可にする。
rawxdc
XDC モードにおいて、伝送データをBASE64エンコードしない。
ftpControl に "nopasv:sv" のように ":sv" または ":cl" がつづく場合、
例えば、ftpControl は、それぞれ、サーバ側、または、クライアント側のみに
適用されます。
FTP プロキシ/サーバ
internal % ftp
ftp> open firewall 8021
220- firewall PROXY-FTP server (DeleGate/6.1.0) ready.
220- @ @
220- ( - ) { DeleGate/6.1.0 (February 3, 2000) }
...
220- --
220- You can connect to a SERVER by `user' command:
220- ftp> user username@SERVER
220- or by `cd' command (after logged in as an anonymous user):
220- ftp> cd //SERVER
220- Cache is enabled by default and can be disabled by `cd .' (toggle)
220- This (proxy) service is maintained by 'admin @your.domain '
220
Name (yourhost:yourname): ftp@ftp1
331-- USER for ftp@ftp1.
220- ftp1 FTP server ready .
331- Guest login ok, send your complete e-mail address as password.
331-- @ @
331 \( - )/ -- { connected to `ftp' }
Password: me@my.domain
230 Guest login ok, access restrictions apply.
ftp> cd //ftp2
250-- CWD for ftp@ftp2
220- ftp2 FTP server ready .
230- Guest login ok, access restrictions apply.
250-- @ @
250 \( - )/ -- { connected to `ftp2' }
ftp>
注記:大抵のftpクライアントは、以下のように、コマンドラインで、FTPのポート番号を指定可能です。
internal % ftp firewall 8021
例) カスケード FTP-プロキシ
例) フィルタ/マージ/エイリアスをともなう、FTP
MOUNT
firewall # delegated -P21 SERVER =ftp://serv1/ \
MOUNT ="/pub2/* ftp://serv2/pub/*"
このDeleGateは、serv1の全ての内容を中継し、"/pub2/*"は、ftp://serv2/pub/* のそれと置換えられた部分が除外されます。
例) FTP to LPR (Line Printer Daemon Protocol) ゲートウェイ
MOUNT ="/* lpr://printer0/qname0/*" MOUNT ="/pr1/*
lpr://printer1 /qname1/*" MOUNT ="/pr2/*
lpr://printer2 /qname2/*"
LPR/FTP-DeleGateは、FTPクライアントがリモートプリンタにアクセスできるようにします;
ファイルの印刷は、FTPのファイルアップロードによって行われ、
プリンタステータスは、FTPディレクトリリストで見ることができます。
MountOption "readonly"は、ステータス閲覧を禁止します。
例) 元FTP-DeleGate
host# delegated -P21 SERVER =ftp MOUNT ="/* /path/of/root/*"
元FTP-DeleGateこのケースでの、ファイルへの書込みは、
デフォルトで禁止されます。書き込みが必要な場合、
MOUNT ="/xxx/* /yyy/* rw"のように、MOUNTポイントに対し、
マウントオプションとして、"rw" (read/write)を指定する必要があります。
全コンテンツはの取込動作は、指定ディレクトリ 内に行われ、
"RETR directory .tar" コマンドによって、
tarフォーマットの単一ファイルとして返されます。
この機能を有効にするには、REMITTABLE="+,tar"のように、
REMITTABLE リストに、"tar" を追加します。
FTP 伝送ログ書式
FTPプロトコルのPROTOLOG書式は、xferlog (5)と呼ばれる、
"wu-ftp"コンパチブルなものです。xferlogにおける各行は、以下の要素(1行に)を含みます。
currentTime transferTime clientHost
fileSize fileName transferType
specialActionFlag direction accessMode
userName serviceName authenticationMethod
authenticatedUserID
DeleGateStatus
transferTime は、秒で表される、トータル伝送時間です。
transferType "a" (アスキー) または、"b" (バイナリ)のどちらかです。
specialActionFlag は、現実装では、常に "_" (none) です。
direction は、"o" (outgoing) または、"i" (incoming)のどちらかです。
accessMode は、"a" (anonymous)または、 "r" (real user)のどちらかです。
userName は、e-mail アドレス(accessMode "a")
または、存在するユーザ名(accessMode "r")のどちらかです。
serviceName 現実装では、常に"ftp"です。
authenticationMethod は、"0" (none) または、
"1" (RFC1413 Authentication)のどちらかです。
authenticatedUserID は、 authenticationMethod
によって得られたユーザID、または "*"(認証なし)のどちらかです。
DeleGateStatus は、"L" (local file), "H" (cache hit), "N" (cache miss)のどれかです。.
例)
Mon Feb 28 15:32:15 2000 13 proxy.xyz.co.jp
182558 /ftp/pub/DeleGate/Manual.htm a _ o a
webmaster@xyz.co.jp ftp 0 * L
Telnet プロキシ/サーバ
internal % telnet firewall 8023...
-- @ @ firewall PROXY-telnet server DeleGate/6.1.0
-- ( - ) { Hit '?' or enter `help' for help. }
...
-- -- -- This (proxy) service is maintained by 'admin @your.domain '
>> Host name: exthost
-- Connected to exthost.
SunOS UNIX (exthost)
login:
例) 元 Telnet-like server
C:\> delegated -P23 SERVER =exec XFIL =command.com
WORKDIR ="/" // Windows95/98
command.com を使った、簡単なテルネットサーバ。
POP プロキシ
例) プロキシ POP-DeleGate
firewall # delegated -P110 SERVER =pop
external % telnet firewall pop
+OK Proxy-POP server (DeleGate6.1.0) at firewall starting.
USER username @servername
...
USER username %servername is also available.
例) POP MOUNT
"pop://user @server "
は、内部的に、"pop://server /user " として表現され、以下のようにMOUNTで制御されます:
MOUNT ="//* =" ... サーバがユーザによって指定された場合、書換えしない MOUNT ="*
pop://defaultHost /*" ... デフォルト POP サーバを指定 MOUNT ="user1
pop://host1/*" ... "user1"のサーバを "host1"にする MOUNT ="//pop2/*
pop://host2/*" ... 実ホスト名 "host2"を隠す
例) NNTP サーバから POP
クライアントへのゲートウェイ
例) POP サーバから HTTP
クライアントへのゲートウェイ
firewall # delegated -P80 MOUNT ="/mail/*
pop://mailHost /*"
このDeleGateは、POPサーバ(デフォルトでmailHost
にある)のメールボックスを、HTTPクライアントに提供します。クライアントが、"http://firewall /mail/ "にアクセスするには、HTTPの認証情報として、mailHost
にあるPOPサーバのUsernameとPasswordを入力するように要求されます。Usernameが、"user @mailHost2 "の場合、mailHost
ではなく、mailHost2 が対象POPサーバとしてアクセスされます。Hostサーバユーザのそれぞれのメールボックスは、
"http://firewall /mail/+pop.User.Host"になり、URL中にUserとHostを直接指定できます。
IMAP プロキシ
SMTP プロキシ/サーバ
例) プロキシ SMTP-DeleGate
// エイリアスとフィルタ
firewall # delegated -P25 SERVER =smtp://mail-server/
\
MOUNT ="foo@bar smtp://foo2@bar2" \
MOUNT ="* smtp://-"
SMTPCONF parameter == SMTPCONF =what :conf
-- default: SMTPCONF =bgdatasize:64K
nohelo
"HELO" を言わない行儀の悪いクライアントを許可する。
bgdatasize:N
データが N バイトより大きい場合、バックグラウンドでリレーします。
これは、"DATA" コマンドを投げた後に、サーバからの "QUIT" コマンド応答を待たない
クライアントをリレーするための手段です。
注)DeleGate はスプールや、転送機能を持たないので、1つのメールデータのみをバックグラウンドで
リレーできますが、伝送終了前に DeleGate がクラッシュした場合、メールは失われます。
SMTPGATE parameter == SMTPGATE =dirPath
-- default: SMTPGATE ='${ETCDIR}/smtpgate'
NNTP プロキシ/サーバ
MOUNTは、NNTP-DeleGateに対して、ニュースグループのフィルタとエイリアス、複数NNTPサーバのマージ応用することもできます。
例)MOUNT="alias-group. nntp://server/group."は、"group.*"へ通過し、また、それらに"alias-group.*"の別名を与えます。簡単なフィルタ指定は、SERVER="nntp://server/group."で、
MOUNT ="= nntp://server/group."と同じです。複数のNNTPサーバに対して、複数MOUNTした場合、DeleGateは、複数サーバの複数ニュースグループをマージし、それらが、単一サーバ上に存在するかのようにクライアントにニュースグループを提供します。
例) フィルタ
# delegated -P119 SERVER =nntp://nntpServer /group .
ニュースグループ名が"group .*"のパターンを持つ場合のみ中継する。nntpServer に対するグループリストは
"nntp://nntpServer /group1 .,group2 .,..."のように指定できます。
例) 複数の NNTP サーバをマージ
# delegated -P119 SERVER =nntp \
MOUNT ="= nntp://server1 /"
MOUNT ="= nntp://server2 /"
例)複数のNNTPサーバを認証付(AUTHINFOを使用)でマージ
# delegated -P119 SERVER =nntp \
MOUNT ="= nntp://user1 :pass1 @server1 /"
MOUNT ="= nntp://user2 :pass2 @server2 /"
例) 選択したグループをマウント
// グループ group.* をオリジナル名のままでマウント
MOUNT ="= nntp://server1 /group."
// グループ group.* をエイリアス名 "alias-group.*" でマウント
MOUNT ="alias-group. nntp://server1 /group."
例) POP サーバから NNTPクライアントへ
// メールスプールをニュースグループ名 "+pop.user.host"としてマウント
# delegated -P119 SERVER =nntp
MOUNT ="= pop://user :pass @host /"
例) NNTP サーバから HTTP クライアントへ
# delegated -P80 MOUNT ="/news/* nntp://nntpServer /*"
例)元 NNTP-DeleGate
# delegated -P119 SERVER =nntp://-.-/
NNTP-DeleGateのSERVERパラメータ中の対象サーバに"-.-"を指定すると、DeleGateを元NNTPサーバとして使うことを意味し、それの持つスプールに検索/投稿できます。の新たなニュースグループ名
newsGroup を作るには、空ファイルを作ります。
'${ETCDIR}/news/groups/newsGroup '
既存の"/path/of/MH-folder"をnewsGroup
として中継するには、上記のようにファイルを作り、このような内容で埋めます。
0 0 0 0 /path/of/MH-folder (4つのゼロの後に、MH-folderのパスをつける)
投稿された記事の最初の行が、"From user date "のようなUnix-Fromを持つか、
"Unix-From: user date "ヘッダを持つ場合、記事の記事番号は、"X-Seqno"
(または、"X-Sequence")ヘッダが存在する場合、
固有のものにセットされ、スプールファイルの作成日付は、Unix-formのdate にセットされます。 NNTPのMountOptions
hide={GroupList }
クライアントから隠す、ニュースグループ名パターンリスト 例) "hide={alt.*,!alt.comp*}"
cache=no-article
ARTICLE キャッシュを停止
cache=no-list
LIST キャッシュを停止
upact:Invoke /Reload /Posted
LIST(active list)のキャッシュ更新を制御。同じ意味の、NNTPCONF=upact:Invoke /Reload /Posted
は、このMOUNTパラメータの対象サーバのみ、制御が除外されます。
NNTPCONF parameter* == what :conf
-- default: NNTPCONF =upact:600/300/120
pathhost:Server /PathHost
物理Server ホストの論理PathHost 名を定義します。 例)
NNTPCONF ="wall.etl.go.jp/delegate.org"
upact:Invoke /Reload /Posted
アクティブなリストのキャッシュ更新を制御します。nvoke と Reload
は、キャッシュの有効期限を秒で指定します。DeleGate経由で記事がポストされた後、Posted
に指定した期間内で、クライアントがチェックしたとき(LISTコマンドで)に、キャッシュが更新されます。
overview.fmt:{FieldList }
default --
overview.fmt:{Subject,From,Data,Message-ID,References,Bytes,Lines}
DeleGateによって生成される、XOVER応答書式
xover:Number
default -- xover:2000 "XOVER range "での最大記事数の制限
nice:Number
指定した場合、nice値をセット
auth:{srcHostList }
クライアントがsrcHostList に含まれる場合、NNTPセッションを開始するときに認証(AUTHINFOコマンドを使用)を強制ます。このパラメータは、NNTPサーバが、ユーザのサブセットに対する認証を行うときと、このDeleGateが、NNTPキャッシュを行う場合、セットする必要があります。
server:host [:port ][/grouplist ]
URL nntp://*/... または news:...によるHTTP要求に対する、NNTPサーバをセットする
nntpcc:Number
default -- nntpcc:1 "nntpcc:0"指定で、NNTP "connection
cache"を停止します
LDAP プロキシ
Whois プロキシ
例) プロキシ Whois-DeleGate
firewall # delegated -P43 SERVER =whois
internal % whois -h firewall
"whois://whois.nic.ad.jp/help"
X プロキシ
例)単一ホスト上のディスプレイに中継
x-server % xhost firewall
firewall % delegated -P6008 SERVER =X://x-server
internal % xterm -display firewall :8
例)単一サーバホスト上の2つのディスプレイに中継
firewall % delegated -P6002-6003 SERVER =X://x-server:-6002
例)2つのサーバホストに中継
firewall % delegated -P6011-6012 \
SERVER =X://x-server1:-:{*:6011} \
SERVER =X://x-server2:-:{*:6012}
Gopher プロキシ
SSL プロキシ
FCL , FSV , CMAP パラメータで、フィルタプログラム
"sslway "を使用し、クライアント側と/かサーバ側の通信をSSLプロトコルでラップできます。このフィルタを使うには、sslwayと、適切なPEMファイル(LIBPATH(通常
DGROOT/lib)内に配置)が必要です。詳細はhttp://www.delegate.org/delegate/ssl/
を参照して下さい。
例) SSLサーバ・非SSLクライアント間を中継
例) SSLクライアント・非SSLサーバ間を中継
DNS (Domain Name System) プロキシ/サーバ
DNS-DeleGate サーバは、ホスト名情報をDNS,NIS,ローカルファイルを含めて、
収集し、リレーします。
A, PTR , SOA 及び 単純化された MX のみに制限された、
リソースレコードタイプを提供します。
SOA レコードは、
DNSCONF 設定の情報と共に構成されます。
例) {NIS,FILE ,DNS}/DNS ゲートウェイ
hostname のための MX レコード は、与えられた場合、
-MX.hostname ( 以下の例のように)または、
hostname のための A レコードが使用されます。
複数の MX レコード間の優先順位は、現実装では表現できません。
例)HostB の MX として、HostA の hosts テーブルを使用する。
10.1.2.3 hostA
10.4.5.6 hostB, -MX.hostA
DNSCONF parameter* == what :value
DNS-DeleGateサーバの構成を指定します
para:N -- 並列サーバプロセス数 [2]
domain:FQDN -- [DeleGateホストのドメイン名]
origin:FQDH -- [DeleGateホストのホスト名]
admin:Email -- 管理者のメールアドレス [ADMIN]
mx:FQDH -- [存在する場合、-MX.host のプライマリホスト名、または、自身による host 問い合わせ]
serial:N -- シリアルナンバ [最終変更時の %Y%m%d%h ]
refresh:period -- リフレッシュ間隔 [6h]
retry:period -- リトライ間隔 [10m]
expire:period -- 有効期限 [14d]
minttl:period -- 最小 ttl [6h]
CU-SeeMe プロキシ
例) プロキシ CU-SeeMe-DeleGate
firewall % delegated -P7648 SERVER =cuseeme://Reflector/
INTERNAL # delegated -P7648 SERVER =cuseeme://firewall /
internal %
{firewall または INTERNAL を
リフレクタのproxy-reflectorとして使用}
予約名
特殊名"-"と"-.-"を、URLの"host :port "部に使用したとき、DeleGateのホストとポートを意味します。また、URL
"http://-.-/-/"は、DeleGateの制御ページの入り口として、予約されています。
カスタマイズ
アイコンとメッセージを含む、DeleGateのビルトインデータソースは、ソースコードディレクトリ"src/builtin/*"にあります。それらは、DeleGateの実行ファイルにまとめられ、リソースとして、URL
"http://delegate /-/builtin/*"でDeleGate実行時にアクセスできます。これらデータは、それらのMOUNTを定義することで、DeleGateをコンパイルせずに置換えられます。例)アクセス禁止で返るエラーメッセージは、"http://delegate /-/builtin/mssgs/403-forbidden.dhtml"にあり、それは、このように、MOUNTパラメータで、置換えられます:
MOUNT ="/-/builtin/mssgs/403-forbidden.dhtml
/tmp/forbidden.dhtml" この例で、MOUNTは、forbiddenメッセージと、代用データ("/tmp"内のローカルファイル)のみ置換えます。しかし、大抵の場合、ビルトインデータグループは、ワイルドカード(*)記号で、置換えられ、また、代用データは、HTTPやFTP経由でアクセス可能なリモートホスト上に配置できます。例)全ての、"src/builtin/"のコピーを"http://yourwww/delegate/builtin/"に入れ、このようにMOUNTする:
MOUNT ="/-/builtin/*
http://yourwww/delegate/builtin/*" リモートデータの読込みは、MOUNTされたビルトインデータが、キャッシュされ、一般のデータとして再利用されるキャッシュが有効な限り、オーバヘッドの影響を受けません。
アタッカー防御
SIGSEGV や
SIGBUSのような致命的信号が発生した後、DeleGateは、クライアントホストへのサービスを直ちに停止します。の発生は、致命的エラー発生の原因は、エラー前に、侵入の試みが失敗したサインととらえることもできます。同時に、事象を通知するため、DeleGateは、ADMINパラメータの名前の管理者にレポートメールを送信します。
アタッカーのもっとも典型的な手段は、スタック上のバッファオーバーフローで、存在するアドレス上にターゲットバッファが存在していることを期待しており、スタックアドレスをランダマイズすることは、アタック成功の糸口を減少するのに効果的です。そして、アタックの失敗は、致命的エラーを発生させ、DeleGateにより、捕獲されます。
疑わしいクライアントホストは、関連ファイル(ADMDIR/shutout/
内)を削除するか、TIMEOUT=shutout(デフォルト30分)でファイルの有効期限が切れるまで、シャットアウトされます。安全のため、TIMEOUT="shutout:0"(無限)が、望ましく、アタッカーに2度とチャンスを与えないようにしましょう。しかし、致命的エラーは、DeleGateのいつものバグで発生するほうが高く、デフォルト値を扱いにくくしています...
とにかく、以下のオプションを承知し、アクセス制御 設定はもちろんのこと、このような攻撃を防ぐよう意識を高く持ってください。
TIMEOUT =shutout:N [30m] ... アタック再試行間隔の最短
MAXIMA =randstack:N [32] ... スタックアドレスのランダム化
MAXIMA =randenv:N [1024] ... 環境変数のランダム化
MAXIMA =randfd:N [32] ... クライアントソケットディスクリプタのランダム化
CHROOT =dirPath ... アクセス可能なファイル空間を制限
OWNER =user [nobody] ... DeleGateプロセスの能力を制限
ADMIN =E-mail-address ... 正しく、SMTP配送できること
-Tx [off] ... execve() システムコールを停止
起動時、元環境変数と、スタック領域上のコマンドライン引数は、ヒープ領域に移動・消去され、アタッカーの侵入コードに利用されないようになっています。同時に、ランダムな長さの値(MAXIMA=randenvが最大)を持つRANDENV
ダミー環境変数が、環境変数のランダムなアドレスに挿入され、フィルタプログラムや、CGIプログラムのような子プロセスに継承されます。
プラットフォームに関する詳細
Unix
Inetdからの呼出し
"nowait" と
"wait"ステータスをinetd.confで指定可能です。"nowait"ステータスの場合、DeleGateは、1つの要求(セッション)を処理し、終了し、無効にします。"wait"ステータスの場合、DeleGateは、複数の要求を処理します;要求数の最大は、"MAXIMA =service:N "のNによって制限できます。
Windows
サービスとして開始
WindowsNT/2000上で、DeleGateは、デフォルトで、自動的にサービスとして開始(バックグラウンドプロセスとして)します(コマンドプロンプトで、-vや、-fオプションなしで呼出した場合)。-Pxxxx
オプションで、サービスとして動作しているDeleGateを停止かつ/または除去するには、コマンドプロンプトで、"delegated
-Pxxxx "を入力し、DeleGateからの簡単な質問に答えてください。Windows95/98上では、DeleGateは、フォアグラウンドプロセスとしてのみ動作します。
CYGWIN
呼出した管理者所有で見えます。
OS/2
インストールには、オプションのループバックデバイス(localhost)が必要です。
紳士的再起動
子プロセスの外向けセッションを中止せず、DeleGateのプロセスIDを変更せず、入力ポートなどのリソースを保持したまま、DeleGateプロセスにSIGHUPシグナルを送信し、優しくDeleGateを再起動します。プラットフォームに属さない方法は、このように、-Fkill 機能を使用することで行えます。
delegated -Fkill-hup -Pport また、SIGHUPでの再起動は、
AUTH=admin
パラメータを使い、"http://delegate /-/admin/"にて、リモートHTTPクライアントで、実行できます。
再起動は、DeleGateの設定変更した後に行います。再起動時にパラメータを再読込するためには、
+=parameters
表記(パラメータ置換)を与える必要があります。他のオプション(パラメータ)は、コマンドライン引数で与え、これは、リスタートしたDeleGateプロセスに継承されます。
他の再起動目的は、ごみや、リーク(ヒープメモリや、ファイルディスクリプタ)を、お掃除します。この目的の場合、DeleGateは
TIMEOUT=restart
または、CRONパラメータの
-restart 動作で、それぞれ予定した時間に、周期的に再起動できます。
機能オプション
-Ffunction
オプションが与えられる場合、DeleGateは、指定した機能を実行するために動作し、通常は、特定プロトコルのクライアント側の動作をします。長い
"delegated -F"入力をファイル名
"function "をDeleGate実行ファイルに与えることで省略でき、function としてコールできます。
function 名のマッチは、case-insensitive です。
例) レゾルバとしてDeleGate を使う
% delegated -Fresolvy www.delegate.org
% ln -s delegated Resolvy
% Resolvy www.delegate.org
以下は主要機能の一覧です。
-Fhelp
使用可能な機能を表示
-Fkill[-hup] -Pport
SIGTERM(SIGHUP)を送り、DeleGateを終了(再起動)
-Fcgi [DeleGateOptions ]
任意のHTTP サーバCGIプログラムとして動作
-Fconnect host port [/udp] [XCOM=clientCommand ]
テルネットクライアントのように、指定したhost :port に接続し、それから/へ標準入出力を中継する
-Fresolvy {[-MX.]hostname |
IPaddress [-num ]}
nslookup(8)のように、与えられたホスト名や、IPアドレスを解決する。(10.10.10.1-128のようにレンジ指定可)
-Ffindu [-atime N ] [-ls] [-du] [-rm] ... [dir ]*
find(1)のように、ファイルを探し、指定した動作を行う。使用法は "delegated -Ffindu"のようになります。 例)
"du(1)"といっしょに、"find . -ls"を実行
delegated -Ffindu -ls -du
-Fdget [-h] [-o] [PROXY=host :port ] URL
URL で指定したリソースをダウンロードし、"-o"オプションで、標準出力に出力
"-h" オプションをともなう場合、HTTP応答メッセージのヘッダ部も出力されます。
-Ficp [-h server ] URL
ICPクライアントとして動作。使用法は、"delegated -Ficp"のようになります。
-Fsched {"crontabSpec " |
crontabFile | schedSpec }*
cron(8)のように、指定した動作を指定したタイミングで起こす。 例) 15分ごとに動作
delegated -Fsched "0,15,30,45 * * * *
/bin/date" schedSpec は、スケジュール設定の正規化表記です。
schedSpec ==
Wday :year :month :mday :Hour :Min :Sec :action 例)15秒ごとに動作
delegated -Fsched "*:*:*:*:*:*:0,15,30,45:/bin/date"
-Fmd5 [infile ]
入力データの MD5 ダイジェストを出力
ファイル
参考文献
du(1),
ps(1),
tee(1),
cat(1),
find(1),
chroot(2),
execve(2),
getpeername(2),
getsockname(2),
pstat(2),
ptrace(2),
setgid(2),
setuid(2),
umask(2),
scanf(3),
strftime(3),
system(3),
YP(4),
crontab(5),
hosts(5),
inetd.conf(5),
cron(8),
inetd(8),
nslookup(8),
DNS(RFC1034 ),
FTP(RFC959 ),
Gopher(RFC1436 ),
HTML(RFC1866 ),
HTTP(RFC2068 ),
ICP(RFC2186 ),
Ident( RFC1413 ),
IMAP(RFC2060 ),
LDAP(RFC1777 ),
LPR(RFC1179 ),
MIME(RFC2045 ),
NNTP(RFC977 ),
POP(RFC1460 ),
Socks(RFC1928 ),
SMTP(RFC821 ),
Telnet(RFC854 ),
URI(RFC2396 ),
URL(RFC1738 ),
Wais(RFC1625 ),
X(RFC1013 )
著者
@ @
( - )
_< >_
Yutaka Sato <ysato@etl.go.jp>
Electrotechnical Laboratory (AIST ,MITI ), Tsukuba, Ibaraki 305-8568, Japan
配布
リリース 7.1.2 最終更新: 2001年3月10日
--------- --------- --------- --------- --------- --------- --------- ---------