表 2 Telnet の許可 イ立許可 or キ語 1 2 3 許可 拒否 fs. doubutsu. co ・ JP ・ co も指定で . doubutsu ・ CO ・ JP ユーサー あり なし 挙することかできます。また、否定の未で ! きます。 複数のホスト名や複数の一 dest オプションを列挙した 場合には、した順番に詔面されます。 たとえば、前回紹介した表 2 を寒見するルールは次のよ うに言当します。 tn¯gw: permit¯hosts * . raccoon. doubutsu. CO ・ jp tn¯gw: permit—hosts fs . doubutsu. CO ・」 p —dest * . raccoon. doubutsu ・ CO ・」 p —auth 次のルールは、複数の -dest オプションを使用してい ます。このルールでは、どのような接続か許可さどの ような接続カ甘巨否されるかを考えてみましよう。 tn¯gw: permit—hosts * . raccoon. doubutsu. CO. 」 p -dest king. 1i0Ⅱ . raccoon. doubutsu ・ co ・ JP —dest ! * .1ion. raccoon. doubutsu. CO . JP —dest * . doubutsu ・ co ・」 p 「接続元を制限する」の項て紹介したルーノレの逆のパター ンです なお、 -dest オプションを列挙せすに、次のように記 述することもできます。 tn¯gw: permit¯hosts * . raccoon. doubutsu. CO ・」 p —dest { king ・ 1土0n. raccoon. doubutsu. CO ・ JP !* .1i0Ⅱ . raccoon. doubutsu. co. JP = 〉 * . doubutsu. co ・ jp } X プロトコルの中継 X プロトコルの中継を許可した場合の設定方法について 説明します。 今回は X プロトコルの中継を許可した場合に、 tn-gw 側で必要な設定について説明します (X プロトコルのプ ロキシー・サーバーについての詳細は稿を改めて説明し ます ) 。 特定のホストから tn-gw ' 材妾続するユーサーに対して X プロトコルの中継を許可する場合は、 X のプロキシー サ→ヾーの起動去の違いによって、 2 通りの設定ガ去が あります。 50 ます、ユーサーか明カ勺に X のプロキシー・サー UNIX MAGAZINE 1998.5 /etc/services に登録されたサービス名または数字で言己 アドレスで記述します。には、接続するポートを hostname には、接続する計算機をホスト名または IP 指定された計算機窈旨定されたポート , 材妾続します。 : 書工に : connect ん 0 れ ame ゆ 0 ] connect コマンド を、 tn-gw プロキシーのコマンドモードと呼びます。 tn-gw に接続して、 t Ⅱーー > " が表示されている状態 - プロキシー・コマンドの説明 これで設定完了です。 tn-gw: xforwarder /usr/local/etc/x-gw table に追加します。 最後に、どちらの場合でも次のルールを netperm- tn-gw: permit-hosts hostname —do—x [ 0 0 れ tn-gw: permit-hosts ん os 佖 me —startx [ 0 0 司 -do-x オプションは同じ未てす ) 。 指定するところがポイントです (-startx オプションと に -startx オプション、あるいは一 d 。ー x オプションを ラメータ属性を netperm-table に記述します。叩。れ な設定をおこなうときは、次の書式の permit-hosts パ X のプロキシー・サーバーを起動する去です。このよう 次は、ユーザーが tn-gw に接続するときに、自重加勺に tn-gw: permit-hosts hostname -xok [ 02 0 司 叩。れに -xok オプションを指定するところがポイント hosts パラメータ属性を netperm-table に記述します。 ります。このように設定するときは、次の書式の permit- コマンドモード上で x - gw コマンドを実行する必要があ ・サーバーを利用したいユーザーは、そのつど tn-gw の を起重丿ける場合の設定ガ去です。このとき、 X のプロキシ
し、そこからさらに pepper ヘログインしなければならな いはすです。ところが、図 2 の例ではファイアウォール・ ホスト (sugar) にログインせすに、プロキシー・サーバー を利用して pepper にログインしています。 図 2 の最後のログアウトまでおこなったあと、ファイア ウォール・ホスト上のシステムログに以下のようなログが 言求されているかを石忍してください。 Feb 28 15 : 40 : 30 sugar netacl [ 735 ] : permit host=exp ・ raccoon. doubutsu. co. jP/192.168.255.2 service=telnetd execute=/usr/local/etc/tn—gw Feb 28 15 : 40 : 30 sugar tn—gw [ 735 ] : permit host=exp. raccoon. doubutsu. co . jp / 192.168.255 use Of gateway Feb 28 15 : 40 : 35 sugar tn—gw [ 735 ] : permit host=exp ・ raccoon. doubutsu. co . jp / 192.168.255 destination=192.168. 1 .20 Feb 28 15 : 40 : 37 sugar tn—gw [ 735 ] : connected host=exp ・ raccoon. doubutsu. co. jP/192.168.255 destination=pepper. raccoon. doubutsu. CO ・ JP Feb 28 15 : 40 : 49 sugar tn ー g [ 735 ] : exit host=exp. raccoon. doubutsu. co. jP/192.168.255 dest=pepper. raccoon. doubutsu ・ co . JP in = 909 out = 280 user=unauth duration=19 . 2 . 2 . 2 . 2 次に、 netacl— tn—gw: tn—gw : ちょっと違う実験をやってみましよう。 ます、 netperm-table に以下のルールを追加します。 telnetd:permit-hosts 192.168.1. * そして、次のように authsrv コマンドを実行し、ユー hosts 192. 168. 1 . 100 192. 168.255. 1 # BSD/OS 3 . 1 の場合は次のルールを追加 database /usr/local/etc/fw-authdb host s 127.0.0. 1 authserver 127.0.0. 1 7777 permit—hosts 192.168.1. * —auth —exec /usr/local/etc/tn—gw authsrv : authsrv : authsrv : サー rascal を作成します ( 各コマンドの詳細は次回に説 0k ー user added initially disabled authsrv# adduser rascal # /usr/local/etc/authsrv 明します ) 。 authsrv# Password authsrv# enabled authsrv# 44 password rascal sugar' for rascal changed ・ quit さらに、 /etc/services に次の 1 行を追加します。 7777 / tcp 取後に、 /etc/inetd. conf に次の 1 行を追加します。フ authsrv rascal (tn—gv pepper ・ raccoon. doubutsu ・ co ・ jp/ Feb 28 16 : 05 : 01 sugar authsrv [ 383 ] : AUTHENTICATE のが、 user=rascal" に変わっています。 さらに、最後の行が user=unauth" と表小されていた 始まる行と、、 authenticate" で始まる行が増えています。 されているはすです。まず、、、 AUTHENTICATE" で きはどの実験の場合とくらべると、すこし違うログカ求 ウォール・ホスト上に言当求されたログを見てください。さ 図 3 の最後のログアウトまでおこなったあと、ファイア 対してこの図と同様に入力してください。 力を要求しているようです。前回と同しく、プロンプトに 表示されるはずです ( 図 3 ) 。どうやら、アカウント名の入 でアクセスしてみてください。前回と異なるプロンプトが ワークの言 fr. 算機からファイアウォール・ホストへ telnet これで実験の準備カいました。今度は、殞則のネット /usr/local/etc/authsrv authsrv nowait authsrv stream tcp ルを送って inetd に変更を央させます。 ァイルの変更カ絲冬ったら、 inetd プロセスに HUP シグナ UNIX MAGAZINE 1998.5 gw の使い方の概要が分かったのではないでしようか。 た遠隔ログインをおこなう例を紹介しました。これで、 tn- tn-gw を利用して、ファイアウォール・ホストを越え 導入の手順 に戻しておきます。 つ。 netperm-table と inetd. conf をかならすもとの状態 さて、遊んだあとはきちんと彳刻ヤ付けをしておきましょ 利用したか " が分かります。 からどの引算機にログインし、何バイト送受信し、佃澗 成功したか " カ吩かり、最後のログから、、誰がどの計算機 最初の 2 つのログから、、誰が tn-gw のユーザー認証に in = 909 out = 280 user=rascal duration=19 dest=exp. raccoon. doubutsu. CO. 」 p host=pepper ・ raccoon. doubutsu. co . jp / 192 .168.1.20 Feb 28 16 : 07 : 43 sugar tn-gw [ 735 ] : exit user=rascal Feb 28 16 : 05 : 02 sugar tn—gw [ 382 ] : authenticate 192.168.1.20 )
ア 192.168.1.22 192.168.1.21 ー 92 ユ 68.1.20 ←ファイアウォール・ホストに接続 Trying 192.168.255.1. exp% telnet 192.168.255.1 exp ロ 実験用計算機 192.168.255.2 実験ネットワーク 192.168.255.1 sugar ファイアウォール ロ 192.168.1.100 (a) ネットワーク 図 2 できるかな ? ( その 1 ) ロ pepper Escape character iS Connected tO sugar. raccoon. doubutsu. CO ・〕 p ・ ロ chili ロ salt sugar. raccoon. doubutsu. CO. 」 p telnet proxy (Version V2 . 0 ) ready: Va1id commands are : (unique abbreviations may be used) tn—gv— > he 1p ←コマンドー覧を表示 connect hostname [serv/port] telnet hostname [serv/port] x-gw [hostname/display] help/? password timeout seconds quit/exit tn¯gw—> connect pepper Trying 192.168.1.20 port 23. Connected tO pepper. raccoon. doubutsu. CO ・ JP ← pepper. raccoon. doubutsu. co. jp にログイン BSDI BSD/OS 2 . 1 (pepper. raccoon. doubutsu. co. (p) (ttypO) login: rascal Password : XXXXXXXXX exp% Connection closed by foreign host ・ Remote server has logout salt% exit これで準備完了です。それでは、実験用言 1 算機からファ closed connection UNIX MAGAZINE 1998.5 ださい ) 。 計算機のホスト名は、自分の竟に合わせて置き換えてく ださい ( ただし、 connect コマンドの引数に孑旨定している 降、プロンプトに対して図 2 と同しように入力してみてく う。図 2 ー b のようなプロンプトか表示されたはずです。以 イアウォール・ホストへ telnet でアクセスしてみましょ ←ューサー名を入力 ←パスワードを入力 ←ログアウト この実験をするときに、 1 つだけ慮えておいてほしいこ とがあります。それは、、、現在のファイアウォール・ホスト の設定では、実験用言 t 算機から殞則ネットワークの計算機 ( こ刎列では pepper) へは直接ログインできない " という ことです。理由はお分かりですれファイアウォール・ホ ストが IP バケットを転送しないからです。したがって、 本来ならいったんファイアウォール・ホストヘログイン 43
図 3 できるかな ? ( その 2 ) pepper% telnet sugar Trying 192 .168.1.100. Connected tO sugar. raccoon. doubutsu. CO ・ JP Escape character iS Username : rascal Login Accepted ←ファイアウォール・ホストに接続 ←ューザー名を入力 ←パスワード (cube sugar) を入力 BSDI BSD/OS 2 . 1 (exp. raccoon. doubutsu. co ・ (p) (ttypO) Connected tO exp. raccoon. doubutsu. CO ・コ p Trying 192.168.255.2 port 23. tn—gw—> connect exp ← exp. raccoon. doubutsu. co. jp にログイン sugar. raccoon. doubutsu ・ co ・ jp telnet proxy (Version V2.0 ) ready: login : rascal Password : XXXXXXXX exp% exit logout Remote server has closed connection Connection closed by foreign host. pepper% UNIX MAGAZINE 1998.5 tn-gw の起動方法は、大きく分けて次の 2 通りです。 tn-gw の起動方ラ言聢 す。ルールの記ガ去に関しては、次の節で説明します。 tn-gw に対するルールを netperm-table に記述しま netperm-table の言聢 しよう。 つに、 tn-gw をディスクから消去しておくほうがいいで い、わざわざセキュリティの穴を作るようなことがないよ tn-gw は導入しません。うつかり tn-gw を実行してしま 一方、、 Telnet を中継する " という言当主がない場合は、 制御冓 ( 主 ) の利用を考えるとよいでしよう。 と決めている場合も tn-gw を導入し、 tn-gw のアクセス ファイアウォール・ホストへ窈鬲ログインを許可する " を導入します。 TeInet の中継はしないが、 、、リモートから もし、、 Telnet を中継する " と決めている場合は、 tn-gw net プロトコルをどのように扱うかを石忍します。 ます、前回作成したセキュリティ・プランを参照し、 Tel- tn-gw 導入の判断 その前に乍業の手順を簡単に説明しておきます。 これから tn-gw を導入する作業にとりかかりますが、 ←ューサー名を入力 ←パスワードを入力 ←ログアウト ・ netacl を利用せずに起動 ・ netacl を利用して起動 さらに、それぞれについて次の 2 通りがあります。 ・ inetd から起動 ・デーモンモードて起動 つまり、合計 4 通りの起動方法を考えることができま す。それぞ柑貭番に設定去を紹介します。 ます、 netacl を利用せすに inetd から起重丿ける場合は、 リスト 1- a のエントリをⅲ etd. c 。 nf ファイルに追加しま す。 tn-gw をデーモンモードて起動づ - る場合は、リスト l-b のエントリを rc. 1 。 cal ファイルに追加します。このとき、 inetd. conf ファイルに telnet のエントリがないことを確 認してください。 tn-gw を netacl から起動し、その netacl を inetd か ら起動する場合は、リスト l-c のエントリを inetd. conf と netperm-table にそれぞれ追加します。 tn-gw を起動する netacl をデーモンモードで動かす 場合は、リスト l-d のエントリを rc. local と netperm- table にそれぞれ j 助日します。 以降は、リスト l-d のケースを例に説明します。 45
リスト 2 ライオン部はいや、でも king は別 " の言聢 netacl—telnetd: permit—host king. 1i0Ⅱ . doubutsu. CO. 」 p —exec /usr/local/etc/tn¯gw netacl—telnetd : deny—host * .1i0 Ⅱ . doubutsu ・ CO ・ JP —exec bye netacl—telnetd: permit—host *. doubutsu. CO ・ jp —exec /usr/local/etc/tn—gw 4. tn-gw かプロンプトを表小する。 そして、最後の tn-gw のコマンドモードに対して、 lo- calhost に接続する命令を入力します。すると、ファイア ウォール・ホスト上ではさらに次の順番でフ。ログラムか起 動されます。 5. ファイアウォール・ホスト上の netacl が、 netperm- table の telnetd に関するルールを言刊面する。 6. netacl が tn-gw を実行 (exec) する。 7. tn-gw は netperm-table の tn-gw に関するルールを 調面する。 8. tn-gw カワ。ロンプトを表示する。 さきほどと同しですね。 4 の状態ですでに tn-gw カ起 動されていますが、さらに 6 でも tn ー gw か起動されてい ます。つまり、 8 のプロンプトは 4 の tn ー gw で中継され ており、最糸勺に実験用言 t 算機のディスプレイに表示され ているのです。したがって、これを何回繰り返しても tn- gw の tn-gw の tn-gw の・・・・・・と永遠に繰り返さいつ までたってもファイアウォール・ホストにログインする ことはできません。 「外部からの不正アクセスに対してファイアウォール・ホ ストを守るためだ」といえなくはありませんが、悪意をも ったユーザーに localhost への接続を繰り返されると、フ ァイアウォール・ホストの内部が tn ー gw のプロセスで益 れてしまい、結果的に Denial-of-Service 攻撃の被害を 受けるかもしれません。外部からの不正アクセスへの対処 は別に考える必要がありそうです。 ファイアウォール・ホストへのミログインを許可する 一見同じようにみえるかもしれませんが、 1 と 5 で接 続要求を受け取った netacl には大きな違いがあります。 接翫の計算機が異なる " のです。 この相違を利用して、 tn-gw と ( 本来の TeInet サー バーである ) telnetd を使い分けてみましよう。 5 の netacl は自分自身 (localhost) から起動さオ L 、 1 の netacl は自分以外から接続されています。したがって、 48 localhost から接続要求を受け取ったら telnetd を起動 し、それ以外の場合は tn-gw を起動するように設定すれ ばよさそうです。 もし、コマンドモード上の connect コマンドの引数に、 localhost ではなく自分自身のホスト名を指定した場合は どうなるでしようか。 tn¯gw—> connect sugar Trying 192.168.1.100 port 23. Connected tO sugar ・ tn¯gw¯> localhost の場合と同様の結果になりました。ですから、 、、自分自身の IP アドレスから接続要求を受け取った場合 は telnetd を起動する " というルールも追加する必要があ ります。 まとめると、次のようなルールを netperm-table に記 述することになります。 # localhost から接続を要求された場合は tel Ⅱ etd を起動 netacl—telnetd: permit—hosts 127 . 0.0.1 —exec /usr/libexec/telnetd # 自分自身の IP アドレスからの場合も telnetd を起動 netacl-telnetd: permit-hosts 192 .168.1.100 192.168.255. 1 -exec /usr/libexec/telnetd # それ以外の場合は tn ー g を起動 netacl—telnetd: permit—hosts * —exec /usr/local/etc/tn—gw ファイアウォール・ホストへの京隔ログインを拒否する 許可する場合とは逆に、 localhost からの接続を拒否し ます。このとき、 netperm-table ファイルは次のように 言己します。 # localhost からの接続要求は拒否 netacl-telnetd: deny—hosts 127.0.0.1 —exec bye # 自分自身の IP アドレスからの場合も拒否 netacl—telnetd: deny—hosts 192.168.1.100 192 .168.255.1 —exec bye # それ以外の場合は t Ⅱー gw を起動 UNIX MAGAZINE 1998.5