////////////////////////////////////////////////////////////////////////////       DeleGate1.9 から DeleGate2.1 への変更点について           Yutaka Sato 1995年3月1日 (DeleGate誕生1周年記念) //////////////////////////////////////////////////////////////////////////// DeleGate2.1 では、DeleGate1.9 と比べて以下のような改良が行なわれています。  ・安全性の向上   - {プロトコル,サーバ,クライアント}の組合せによるアクセス制御(複数可能)   - ユーザ単位のアクセス制御(IDENTプロトコル使用)   - 中継を許すプロトコルやクライアントのデフォルト値の変更  ・軽量化   - FTPサーバへの接続を維持・再利用する『コネクションキャッシュ』   - メモリ(スワップ領域)使用量の減少→高速化  ・新機能   - FTP-Proxy機能、Telnet-Proxy機能(既存のクライアントでfirewall越え)   - source(クライアント)/destination(サーバ)の組合せによる経路制御機能   - HTMLテキスト中の文字ごとにインラインイメージへ変換して表示(CII)  ・バグフィックス   - たくさん 1.9から2.1に移行する場合には以下の「1.9と2.1の非互換性」をよくお読み下さい。 【感謝!】今回の改良・デバッグに有用な情報を多くの方々からいただきました。 特にに記載されている方々、 またDeleGateメーリングリストの参加者の方々、メールや ニュースで情報をお寄せ頂いた方々に感謝いたします。 ----------------------------------------------------------------------------           1.9と2.1の非互換性 ---------------------------------------------------------------------------- 以下のパラメタ名などについては、1.9とデフォルト値や意味が変更されていますの で、注意して下さい。   パラメタ名    デ値 意味 備考 ---------------- ---- ---- -------------------------------- RESTRICT 変更  −  PERMITに統合 REACHABLE −   −  PERMITに統合 RELIABLE 変更  −  PERMITに統合 FORCEON 変更 変更 PROXY,MASTER,CONNECTで一般化 CHARSET −  拡張 CHARCODEに名称変更 MANAGER − − 指定を半ば義務化した -------------------------------------------------------------- DeleGate中継記法 =@=プロトコル別記法から、-_-統一記法に     DeleGate間通信 双方向に。1.Xと2.Xの多段接続は低速    delegatedR    DNSのみを見るように PIDファイル /tmp/delegate/ の下に移動 1) PERMITにより RESTRICT:REACHABLE:RELIABLEを統合、複数の組合せを可能にした   「PERMIT=ProtoList:dstHostList:srcHostList」を導入した。その意味は、   srcHostListに含まれるクライアントから、dstHostListに含まれるサーバへの   ProtoListに含まれるプロトコルによるアクセスのみを許す、ということである。   複数指定可能。ProtoListとして * を指定した場合、現在許されているプロト   コル(デフォルトあるいは PERMIT=ProtoList で指定されたもの)を意味する。   従来の RESTRICT,REACHEBLE,RELIABLEは、     PERMIT=RESTRICT:REACHABLE:RELIABLE   を一つだけ定義することに相当する。 2) RESTRICTのデフォルト値を変更   「RESTRICT=!all,ProtoList」に相当する「PREMIT=ProtoList」を導入した。   ProtoListに列挙したプロトコル以外は(RELIABLEに拘らず)アクセスを禁止する。   従来のRESTRICTでは、ProtoListに指定したプロトコル以外について、RELIABLE   による制限が無効になるため危険。今後RESTRICTは使用しないことが望ましい。   デフォルト値の変更は以下の通り。    1.9: PERMIT=all … Generalist,Specialistとも    2.1: PERMIT=all … Generalistのみ       PERMIT=http,gopher,ftp … HTTP-Specialist       PERMIT="." … その他のSpecialist (. はSERVERで指定したプロトコル) 3) RELIABLEのデフォルト値を変更   「RELIABLE」無指定の場合のアクセス制限を厳しくした。    1.9: RELIABLE="*" がデフォルト(アクセス無制限)    2.1: RELIABLE="localhost,./@" (delegatedのホストと同一ネット上のホスト           のみRELIABLE)    "./@" の "." は、delegatedのホストを指し、"@"はマスク対象のIPアドレス    のクラス(A,B,C)によるデフォルトのマスクを意味する。 4) FORCEONのデフォルト値と意味を変更    1.9: FORCEON=-all、がデフォルト。FORCEONのリストに含まれるプロトコルに      ついてはMASTERやPROXY経由とし、直接接続は行なわない    2.1: FORCEON=all、がデフォルト。FORCEONのリストに含まれるプロトコルに      ついては、最初にMASTERやPROXYへの中継を試み、中継先の該当無しまたは      接続不可の時に直接接続を試みる。直接接続を行なわないようにするには、      プロトコルの名前の前に`!'を前置する。   【注】1.Xでは、まず接続を試みて直接接続に成功したホストには直接、失敗   したものについてMASTER/PROXY経由で、というのがデフォルトであったわけで   すが、2.1からは経路制御機能の実現や性能向上などのためにデフォルトを変更   しました。2.1以降では     MASTER(PROXY)にMASTER=host:port:!{直接接続可能なホストのリスト}   のように、直接接続可能なホストを明示することを推奨します。FORCEONの設定   で1.Xのように動作させることもできますが、推奨しません。 5) CHARSET を CHARCODE に名称変更   より適切な名前に変更。しばらくはCHARSETも別名として使えるが、将来的には   保証しない。 6) DeleGate中継記法の変更    1.9: URLorg -> proxyURL=@=プロトコルごとの記法 (2.1でも利用は可能)    2.1: URLorg -> proxyURL-_-URLorg …プロトコルによらず共通 7) DeleGate間の復路通信プロトコル   多段DeleGate間の接続時に、マスターサーバから ack を返す。   2.1 -> MASTER -> 1.X という接続を行なうと、ackのタイムアウト(5秒)待ちの   ために低速になるので注意。逆はOK。 8) delegatedRのテーブル探索対象の変更    1.9: DNS および file + NIS    2.1: DNS のみ   ただし、そもそもこれは、resolverライブラリがその他と分離されているシス   テムでのみ有効で、そうでない場合には、delegated と delegatedR は同一。 9) PIDFILE の置き場所を変更    1.9: ${LOGDIR}/pid    2.1: /tmp/delegate/pid ----------------------------------------------------------------------------           新たな機能 ---------------------------------------------------------------------------- 1) FTPのコネクションキャッシュ   delegatedから一旦FTPサーバに接続したら、一定時間接続を保持して、引き続   く同一サーバへのアクセスに再利用。/tmp/delegate/ftpget/* に管理ファイル 2) ROUTEパラメタによる経路制御   ROUTE=proxyURL-_-dstHostList:srcHostList (srcHostListに含まれるホストか   ら、dstHostListに含まれるホストへの通信をproxyURLで指定したサーバに中継) 3) HTMLテキスト中の文字ごとにインラインイメージへ変換して表示(CII)   CHARCODE=II により、日本語文字をHTMLのインラインイメージに変換する。   同様にキリル文字、ギリシャ文字、ヘブライ文字などの変換もサポート。   ブルガリアのValentin Shopov氏 による。 4) FTPデータの多段DeleGate中継/制御コネクション上の転送   多重のfirewallを越える場合のFTPのデータ中継ができるようになりました。   この場合データは、コントロールコネクション上で流れます。 5) PROXYの経路制御機能   MASTER同様、PROXY=host:port:dstHostList として、このPROXYに中継すべき   目的サーバのHostListが指定できるようになった。複数指定可能。 6) CONNECTパラメタ   キャッシュの使用/不使用、直接接続とMASTER接続の試行順序を制御が可能に。   FORCEONの一般化版。 7) RESOLVパラメタ   dns, file (/etc/hostsなど) のいずれを使用するかを指定する。   ただし、resolver/DNSライブラリと、{NIS,hosts-file}を見るライブラリが分離   されているシステムにのみ有効。 7) SOCKSパラメタ   これが指定されているとSOCKS対応になる。   SOCKS=serv/ns/domain という形で、SOCKSサーバ(SOCKS_SERVER)、ネームサーバ   (SOCKS_NS)、デフォルトドメイン名(SOCKS_DNAME)を設定できる。 8) MAXIMAパラメタ   最大同時実行サーバ数などを指定する。現在、MAXIMA=ftpcc:N(同一ホスト向け   のFTPコネクションキャッシュサーバ数)および、MAXIMA=delegated:N(同時に   実行可能なdelegatedの数)が指定可能。 ----------------------------------------------------------------------------           その他 ---------------------------------------------------------------------------- 1) delegated, delegatedR, delegatedS の統合   一つの実行ファイルになりました。ファイル名の付け方によって、それぞれの   ように動作します。 RESOLVおよびSOCKSパラメタで指定することもできます。 2) バグフィクス他 ・キャッシュする時にURLのホスト名の大文字/小文字を無視 ・Authorization付きで獲得したデータをキャッシュしないように ・NNTP,SMTP,POPの送出メッセージ本文がISO-2022-JPならcharsetをそのように設定 ・MOUNT="path1 http://host:port/path2" を可能に(path2の指定が可能になった) ・HTTP中継時にHTMLデータの行末の CRLF (復帰/改行コード) を削除しないように ・FTPデータをHTTPに中継する時にContent-Lengthを付加(N bytes of M bytes表示) ・LOGFILEを[date+format]記法で回す時、親玉delegateのぶんの切り替えも忘れず ・HTTP/0.9のリクエスト時はキャッシュデータからヘッダフィールドを切って渡す ・HTTP/0.9のリクエスト時はヘッダフィールドの入力を待たずに応答 ・HTTP上のGopherの中継でも、MASTERなしでキャッシュが可能になった ・CERN-Proxy -> DeleGate という接続が可能に ・FTPのSTOR (putコマンド) の中継が可能に ・可能な場合には、FTPのLISTコマンドのかわりにSTATコマンドを使用(高速化) ・可能な場合には、FTPのPORTコマンドのかわりにPASVコマンドを使用(安全性) ・多段DeleGate時に発生するいくつかのバグの修理 ・システム依存のmake時のいくつかの不具合の修理、warningの除去 ・{Gopher,HTTP}からのchargen(19/tcp)へのアクセスの禁止 ・未定義なパラメタ名が指定された時の警告の導入 ・HTTP状態コード302(Moved)レスポンスのキャッシュ ・その他、もりもり //////////////////////////////////////////////////////////////////////////// .