ファイル - みる会図書館


検索対象: UNIX MAGAZINE 2004年1月号
109件見つかりました。

1. UNIX MAGAZINE 2004年1月号

特集安全なネットワー 図 4 chkconfig の実行 同様にほかのネットワーク・デーモンも起動しないよう このコマンドを実行しても、すでに起動しているプロセ ク① # /sbin/chkconfig —list nt pd syslog netfs network xinetd 0:off O:off 0:off 0:off 0 : off l:off l:off l:off l:off l:off 2:off 2:off : 0 Ⅱ 2:off 2 2 ・ 3 : 0 Ⅱ : on 3 : on 3 : on 3 : 0 Ⅱ 3 4:off : on : on : on : on 4 4 4 4 5:off : 0 Ⅱ : 0 Ⅱ : 0 Ⅱ : 0 Ⅱ 5 5 5 5 6:off 6:off 6:off 6:off 6:off 図 5 Control と Caps Lock を入れ替える ( 下線部おロ ) に言定してください。 KEYTABLE="us ctrl" KEYBOARDTYPE="pc" カーネルのソースコードもインストールしているのは、 ・ kernel ー source -2.4.20 ー 20.9. i386. rpm ・ kernel ー 2.4.20 ー 20.9. i686. rpm ジがインストールされていることを豺是に話を進めます。 たファイルを選びましよう ) 。以降では、これらのパッケー インストールしました ( 使用している CPU の種類に合っ してインストールします。私は、下記の 2 つのファイルを 新のカーネルとカーネルソースの RPM パッケージを入手 次に、 Red Hat L ⅲ ux のダウンロード・サイトから最 # loadkeys us ctrl 次のコマンドを実行しましよう。 変更します。いますぐ入れ替えたいのなら、 root の権限で たいときは、 /etc/sysconfig/keyboard を図 5 のように コンソールで Caps Lock と Control キーを入れ替え いる人にとっては、このままではひどく不便です。 だん、 xmodmap などでこれらのキーを入れ替えて使って 隣、 Control は左 Shift キーの下に配置されています。ふ 101 や 106 キーポードなどでは、 Caps Lock は A キーの ソール上でおこなうことになります。ところが、いわゆる トログインができるようになるまでは ) キャラクタ・コン をインストールしないため、操作は ( すくなくとも、リモー ファイアウォール・ホストには、 X ウインドウ・システム るポート番号を確認しましよう。 て netstat コマンドを再度実行し、待受け状態になってい スは停止されません。設定を終えたらシステムを再起動し 48 次回に PPTP サーバーをインストールするための下準備 です。 PPTP のサーバー・プログラムは、ファイアウォー ル・ホストとは別のホストにインストールしますが、 ip- tables を PPTP に対応させるためのパッチを当ててモ ジュールを再コンパイルする必要があります。 PPTP を インストールしないのであれば、カーネルのソースコード はインストールしなくてもかまいません。 OS のインストール終了後、ディスプレイとキーポード を取り外して運用する場合は、シリアル・コンソールをセッ トアップします。 Red Hat Linux のカーネルは、シリアル・コンソール の機能を組み込んでコンパイルされているので、カーネル を再構築する必要はありません。 編集するファイルは以下の 3 つです。 /etc/grub. conf /etc/inittab /etc/securetty これらのファイルをそれぞれ図 6 のように変更します。 変更したら、 OS を再起動します 2 。 インターネットから DMZ の SSH サーバーへの接続を 可能にするには、 22 番ポートへの接続をファイアウォール で逆 IP masquerade し、 DMZ へ転送します。ところ が、このように設疋すると、インターネットからファイア ウォール・ホストへ SSH で接続できなくなってしまいま す。さきほども述べたように、セキュリティ対策という点 では、インターネットからファイアウォール・ホストへの ログインは禁止すべきです。しかし、リモートからメンテ ナンスしたり、緊急用にログインできるようにしておきた 2 grub. conf を変更しても、 grub-install を再度実行する必要はありませ ん。 LILO では、 lilo. conf ファイルの変更後にⅢ 0 コマンドを実行す る必要がありました。そのときの記億力指に刻み込まれていると、ついつい GRUB も・・・・・・と手カ働きそうになりますが、 GRUB の言ファイルの 変更は OS の走閉塒に反映されます。 UNIX MAGAZINE 2004. 1

2. UNIX MAGAZINE 2004年1月号

特集安全なネットワーク① ん。もう 1 つ、重要な役割があります。それは、アクセス ログの言彖です。 フィルタルールを書く前に、ログに記録するアクセスの 種類を決めておきましよう。本来は、許可したアクセスも 拒否したアクセスもすべて記録しておくほうがよいのです が、そうするとログの量カ膨大になり、ログファイルだけ でディスクが満杯になってしまいそうです。もちろん、そ れでもよいからとにかく記録して、古くなったログはどん どん消していくという方針もあります。 しかし、ログファイルはすくなくとも 3 カ月 ~ 半年く らいは保存しておくことをお勧めします。なぜなら、サー バーホストに侵入された場合、すぐにそれと察知すること は稀で、たいていは数日ないし周間後に気づくからです。 そして、この侵入の事実を攻撃元のサイトの管理者に伝え たり、ホストの復旧作業をおこなうときには、 、、いつ侵入 された " という言ゞたいへん重要な情報になります。 そこで、最初はすべて言求し、 1 日ぶんのログファイルの 大きさを見ながら徐々に調節していくのがよいと思います。 iptables で接続を許可すると、コネクション開女寺のロ グは記録できますが、切断時のログはとれません。そのた め、コネクションの接続時間や転送バイト数などは知るこ とができません。この点については、ファイアウォール専 用機に劣ってしまいます。 この特集のモデルとなった糸哉では、 内側からインターネットへ許可したアクセス ・インターネットから DMZ 側へ許可したアクセス ・インターネット側インターフェイスで拒否したバケット の 3 種類のログを言最することにしました。 末尾のリスト 1 に、この細織の運用方針に沿って作成し たフィルタの設疋ファイルを示します。この内容のファイ ルを /etc/rc. d/rc. firewall として用意してください。 ただし、標準の Red Hat Linux でこのファイルを実行 すると、 ip-conntrack-pptp モジュールがみつからないと いうエラーカ咄力されるはすです。これは、 PPTP サーバ ーを DMZ で運用するときに必要な iptables の拡張機能 モジュールで、入手とコンパイルの方法は次回に説明しま す。 PPTP をイ吏用しない場合は、 modprobe でモジュー ルをロードしている行を削除してください。 次に、ファイアウォール・ホストの起動時にフィルタカ黔 54 図 12 /etc/rc ・ d/rc. local を変更する 5 , 9 # want t0 d0 the fu11 Sys V style init stuff . touch /var/lock/subsys/local 十 + sh /etc/rc . d/rc . firewall 録されるように /etc/rc. d/rc. local を変更します ( 図 12 ) 。 フィルタを書くときは慎重なうえにも慎重を期し、間違 えたり途中で混乱して迷子にならないように、ゆっくり落 ち着いた気分で書きましよう。くれぐれも気を急いてはい けません。 リスト 1 の設疋ファイルは、先頭から順に以下のような 構成になっています。 ・初期化 ・システム・ノヾラメータの設疋 ・ログ出力用チェーンの定義 ・ INPUT チェーンの設疋 ・ FORWARD チェーンの設疋 ・ NAT ルールの設疋 リスト 1 で定義しているユーザー定義チェーン ALOG (Accept LOG の略です ) は、許可した接続ログを出力す るために使用します。さきほど、、、内側からインターネッ トへ許可したアクセス " のログを記録すると書きましたが、 DNS 問合せや ping のバケットを言泉すると、ものすごい 勢いでログが書き込まれてディスクの残り容量があっとい うまに減りそうだったので、この 2 つだけは無視すること にしました。 次の INPUT チェーンには、ファイアウォール・ホス トが受信したバケットをフィルタするルールを定義します。 基本的に、外部と DMZ からの入力は拒否し、内部からの 入力は許可するように設定します。ただし、外部から受信 した、、怪しいバケット " は積極的にログに言泉します。 IDENT の接続だけは TCP RESET を返信してい るのは、内部のメールサーバーから外部のメールサーバー へ SMTP 接続したときに、接続先 ( 外部 ) のメールサー バーから IDENT の接続がやってくることがあるためで す。そして、この IDENT 接続のバケットを単純に拒否 (DROP) してしまうと、メールの送信を開始するまでに UN 工 X MAGAZ 工 NE 2004. 1

3. UNIX MAGAZINE 2004年1月号

ク① 特集 安全なネットワー 図 6 シリアル・コンソールのセットアップ ( 下線部おロ ) (a) /etc/grub. conf defau1t=0 timeout=10 splashimage= ( 五 d0 , 0 ) /grub/splash. xpm ・ gz title Red Hat Linux ( 2 . 4 . 20 ー 20 . 9 ) root (hdO,O) kernel / vmli Ⅱ uz ー 2.4.20 ー 20.9 ro root=LABEL=/ CO sole = ttYSO , 9600 initrd /initrd—2.4.20 ー 20 . 9 ・ lmg (b) /etc/inittab (c) /etc/securetty ttyll ttyS0 # Run gettys in standard runlevels co : 2345 :respawn: /sbin/agetty ttyS0 9600 Vt100 1 : 2345:respawn:/sbin/mingetty ttyl 2 : 2345 : respawn : /sbin/mingetty tty2 1 人でフィルタの動作テストをしているうちはログの量 も少ないので、とくに問題はなさそうにみえます。 「ふんふん、拒否したログも許可したログも記録されてる Port 2222 し、カンベキやー」 い場合もあるでしよう。そこで、ファイアウォール・ホス 本格的な運用を始めると、テスト段階の数十倍のログが トの SSH サーノヾーの設定を変更し、デフォルトの 22 番 彖されます。そして、これを確認して、 ポートではなく、別のポートで待ち受けるように設定して 「運用環境でのログも言泉できてるし、カンベキやー」 おきます。 と安こ、していると、あるとき、 図 7 に設定ファイルの変更例を示します。この例では、 2222 番ポートで待ち受けるように設定しています。 「こっちでは何もしとらんのに、インターネットへのアク 変更カ鮗ったら、次のコマンドを実行して SSH サーバー セスがめちゃくちゃ遅いんやけど・ を再起動します。 とユーザーから文句を言われます。たしかに、ネットワー # /etc/init . d/sshd restart クからログインしようとしても反芯してくれません。仕方 がないのでファイアウォール・ホストのシリアル・コンソー そして、再度 netstat コマンドを実行し、待受け状態に ルにログインしようと接続すると、バケットのログが滝の なっているポート番号を確認しましよう。 ように流れ落ちていき、手がつけられないた態になってい ロクの言泉ーー ulogd のインストール ます。 シリアル・コンソールに書き出すメッセージがある程度 iptables でバケットのログを言泉するには、次のどちら 以上の量を超えると、 ( 出力キューが詰まって ) その処理 かのターゲットを使用します。 に時間をとられ、カーネルの動作がどんどんどんどん遅く ・ LOG なっていきます。その結果、ファイアウォールを介した通 ・ ULOG 信はひどく遅くなり、ユーザープロセスも動かなくなって しまいます。 LOG ターゲットでは、カーネルがコンソールに出力した バケットのログは、あとで調査したり統計をとったりす ログを syslogd がファイルに言します。したがって、特 るときに利用するデータです。ですから、リアルタイムに 別なソフトウェアも設定も不要です。ところが、このター コンソールに出力する必要はなく、ファイルに残ってさえ ゲットには思わぬ、、落し穴 " があるので注意してください。 図 7 /etc/ssh/sshd-config の変更 #Port 22 ↓ 一三ロ 49 UN 工 X MAGAZ 工 NE 2004. 1

4. UNIX MAGAZINE 2004年1月号

連載 / UN Ⅸの道具箱ー② 図 1 SDIC 鏈ファイルのダウンロード % ftp http: //www.namazu. org/-tsuchiya/sdic/sdic—2.1.3. tar . gz Requesting http: //W買買 . namazu ・ org/&tsuchiya/sdic/sdic—2.1.3. tar. gz 836 KB Requesting http : //www.namazu.org/-tsuchiya/sdic/data/edict.bz2 % ftp http: //www.namazu.org/-tsuchiya/sdic/data/edict . bz2 SuccessfuIIy retrieved file. Requesting http: //www. namazu ・ orgrtsuchiya/sdic/data/gene95. tar % ftp http: //www.namazu.org/-tsuchiya/sdic/data/gene95.tar.b22 Successfu11y retrieved file . KB . bz2 00 : 00 ETA 00 : 00 ETA 00 : 00 ETA Successfu11y retrieved file. 書も利用できるそうですが、インターネット上では手に入 は、 で、辞書ファイルは上記の 2 種類です ( 図 1 ) 。 sdic-2.1.3. tar. gz ・ http://www.namazu.org/tsuchiya/sdic/ SDIC 本体と利用する辞書ファイルを用意します。本体 それでは、 SDIC をインストールしましよう。まず、 インストールと設定 や LHa で圧縮されたファイルもあります ) 。 れ gene95. tar. bz2 と edict. bz2 です。これ以外に ダウンロードすることができます ( ファイル名は、それぞ この 2 つの辞書は、上記の SDIC の Web ページから らないので試していません。 、 gnp UNIX MAGAZ 工 NE 2004. 1 に変換します。英辞郎などの辞書を利用する場合は、別の ンロードした辞書ファイルを SDIC で扱える SDIC 形式 ルをコンパイルし、続いて、、 make dict " を実行してダウ ure カ冬了したら、 make を実行して Emacs Lisp ファイ 通常はデフォルトのままでかまわないと思います。 config- ンストールするディレクトリを指定することもできますが、 きます。オプションで Emacs Lisp や辞書ファイルをイ あとは、 configure スクリプトで簡単にインストールで % mv edict . bz2 sdic-2.1.3 / % mv gene95. tar. bz2 sdic ー 2.1.3 / % tar zxvf sdic—2.1.3. tar. gz ありません。 に展開されるので、 bunzip2 などで事前に展開する必要は ルもそのディレクトリに置きます。辞書ファイルは自動的 ダウンロードしたソースファイルを展開し、辞書ファイ 手段で SDIC 形式に奐する必要があります ( 詳細はソー スファイルに付属のドキュメントを参照してください ) 。 こまでの作業が終ったら、次のようにしてインストー ルします。 % . /configure % make % make dict % su # make install # make install—dict # make install-info 辞書ファイルは、、、 make install-dict" を実行しない とインストールされません。最後に実行している、、 make install-info" では、 info ファイル (Emacs 上のオンライ ン・マニュアル ) がインストールされます。 これで作業はおしまいです。 なお、 FreeBSD には japanese/sdic という ports が 用意されているので、次のようにすれば簡単にインストー ルできます。 % cd /usr/ports/japanese/sdic % su # make insta11 ports では、 SDIC 本体と EDICT 辞書 ( 和英 ) のほ かに、 EDICT を英和に変換した辞書がインストールさ れます。 GENE 辞書はインストールされないので、こち らも使いたい場合は自分でインストールする必要がありま す。それには GENE 辞書を展開し、 SDIC 本体に付属の gene. perl (SDIC を展開した sdic-2.1.3/contrib ディレ クトリの下にあります ) を利用します。このようにして作 163

5. UNIX MAGAZINE 2004年1月号

SC 翡 好評発売中 ! 実践セキュリティ ーーー頼れるファイアウォールを作る denied" と表示されて終了してしまいます。このエラー は、 adsl-setup が生成した設疋ファイルを開けないこと カ源因なので、 # chmod go + r /etc/sysconfig/=> network—scripts/ifcfg-ppp() を実行して言蒲ムみパーミッションを設定すると接続でき るようになります。おそらく、 ifup と adsl-setup の パッケージ間のポリシーの不整合カ源因ではないかと思 います。 ミッションを変更したくない場合は、 ファイルのノヾー ifup ではなく、次のコマンドを実行するとよいでしよう (ifup は、内部で usernetctl を実行します ) 。 /usr/sbin/usernetctl ppp0 up ・ FIREWALLING フィルタの設疋について訊いています。フィルタは独自 こでは、、 0 " ( ゼロ ) を入力しておき に設疋するので、 ます。 ・ Start this connection at bOOt time システムを起動したときに、自動的に PPPoE 接続する かどうかの設疋です。ここでは、、 yes" を入力します。 これで、ファイアウォール・ホストがインターネットに接 続できました。しかし、この時点のファイアウォール・ホス トは、インターネットから直接アクセスされてしまう無防 備な状態です。まるで、夏の夜に窓を全開にして寝ている ようなものです。ぶ ~ んと寄ってくる蚊から身を守り、夏 の夜もスャスヤ眠るために蚊帳を吊りましよう。 OS をインストールしたときに、ほとんどのネットワー ク・デーモンを停止させていますが、まだ sshd は動いて いるので、これを攻撃される可能「生があります。 「やった、やった、接続できたで。きようはこのくらいに して、残りは明日のお楽しみにとっといたろ」 とホストをインターネットに接続したまま帰ってしまうと、 その夜のあいだに侵入されてしまうかもしれません。攻撃 者 ( 攻撃プログラム ) からホストを守り、枕を高くして眠る ためにスクリーンを張りましよう。 フィルタリング ファイアウォールの重要な役割は、ネットワーク間のア クセスを制御することですが、それですべてではありませ 実践 宀崎博生 』セキュリ - アイ ・白崎博生著 ・ A5 判、 288 ページ ・ ISBN 4-7561-4296-6 ・ 2 , 800 円十税 SC 本書は、日本でトップクラスのセキュリティ技術者 によるファイアウォー丿レの構築・運用指南書であり、 ネットワーク・セキュリティの本質を理解するため の第一級の解説書でもある。本質が分かっていれば、 日常的に起こるさまざまな問題にも容易に対処でき る。これからファイアウォールを構築する人はもち ろん、運用に携わっている人にもぜひ一読をお勧め する。 ( 奈良先端科学技術大学院大学山口英 ) 【目次から】 1 章常時接続って何 ? 基本的な用語 / 現在の常時接続事情 / 常時接続は嬉し い ? / 常時接続時の危険性 2 章攻撃の手法 スキャン / TCP / 旧への攻撃 / アプリケーションへの攻撃 3 章ファイアウォールの基礎知識 セキュリティ対策は必要 ? / セキュリティ対策とポリシー / フ ァイアウォール / ファイアウォールを構成する要素 / ファイ アウォール構築のポイント / Script Kiddie 4 章ファイアウォールを作ろう ( ルータ編 ) 端末型接続と LAN 型接続 / プロトコル / RTA55i で作るフ ァイアウォール / フィルタリング機能 / フィルタ設定の操作 手順 / DMZ を作る / 攻撃検知機能 5 章ファイアウォールを作ろう (Linux 編 ) 端末型接続と LAN 型接続 / netf ⅱ ter / ne 廿ⅱ te 「の仕組み / iptables / ipchains との互換性 / フィルタリング・ルールの 設定 / アドレス変換の設定 / ipta es の設定例 / ipchains/ipchains の設定例 6 章攻撃されたときの対処 セキュリティ動向を知る / 相談するところ / 連絡先アドレス の探し方 / 攻撃か事故かを冷静にみきわめる / 消さないで、 そのログ / 典型的な対応 / ケーススタディ / やってはいけ ないこと 株式会社アスキー 〒 1 60 ー 8584 東京都新宿区信濃町 34 J 日信濃町ビル 出版営業部電話 (08) 5362 ー 8300 53 UNIX MAGAZINE 2004. 1

6. UNIX MAGAZINE 2004年1月号

図 3 構築するネットワーク構成 インターネット ファイアウォール ADSL モデム DMZ ネットワーク ( 192.168.0.0 / 24 ) ロ メールサーバー Web サーバー FTP サーバー SSH サーバー PPTP サーバー 内部 DNS サーバー ・ PPPoE (PPP over Ethernet) の糸村崙 ・バケットのフィルタリング 内部と DMZ 用の NTP サーバー ・ DMZ 用の DNS サーバー PPPoE の終端は、ファイアウォール・ホストではなく、 プロードバンド・ルータでおこなうという選択肢も考えら れますが、 1 つにまとめても問題はないのでこのようにし ました。ただし、 PPPoE の終端はそれなりに負荷のかか る処理のようなので、十分に速い CPU の PC が用意で きなければ分離するほうがよいでしよう。なお、今回の環 境では CPU が Celeron 560MHz の PC を使っていま すが、これまでとくにイ ; 合は感じていません。ですから、 、、十分に速い " といってもその程度です。 バケットのフィルタリングについては、ステートフルな バケット・フィルタリングをおこなうため、 (ipchains で はなく ) iptables を使用します。 今回のファイアウォールは、 DMZ からほかのネット 内部ネットワーク ( 192.168.1.0 / 24 ) 端末 UNIX MAGAZ 工 NE 2004. 1 特集安全なネットワーク ワークへの接続はデフォルト拒否、インターネットへの SMTP のみ許可する方針で設定します。そのため、 DMZ ネットワークのホストに対して DNS と NTP のサービス を提供します。 OS のインストール Red Hat Linux のインストール手川頁の詳細は説明しま せん。途中でファイアウォールの設疋について訊かれると ころがありますが、そこでは、、 N 。 firewall" を j 尺してく ださい。 基本的には、必要最低限のパッケージだけをインストー ルします。ただし、プログラムをコンパイルするための GCC と、 OpenSSH のパッケージはインストールしてお きましよう。ファイアウォールでは、 X ウインドウ・シス テムやドキュメント・ツール、ネットワーク・サーバー類 は不要です。ただし、調子に乗って削りすぎると依存関係 ・・といわれることもあります。 1 つ削りそこねたから どうこうというものでもないので、「よっしや、なにがなん でも削ったるで」と根を詰めるほどの必要はありません。 OS のインストールが終ってシステムが起動したら、次 のコマンドを実行して開いているポートを調べます。 netstat —an 最初の段階では、 22 番 (ssh) と 123 番 (ntp) だけカ畤 受け状態になることを目指して、ネットワーク・サービス を停止していきます。 ネットワーク・サービスを提供するデーモンプロセスは、 ディレクトリ /etc/rc?. d の下にあるスクリプトから起動 されます。よって、 こから不要なスクリプトを消去すれ ばよいのですが、 Red Hat Linux では該当するファイル を rm や mv で消すのではなく、 chkconfig というツール を使います。 現在の設疋内容を確認するには、図 4 のように プションを指定します。 ファイアウォール・ホスト上では、 sshd と named 、 ntpd 以外のネットワーク・デーモンは停止します。よっ て、 xinetd は不必要なので、次のコマンドを実行し、プー ト時に xinetd を起動しないようにします ( オプションの 意未は、 chkconfig のマニュアルを参照してください ) 。 # /sbin/chkconfig ——level 345 xinetd off —list オ 47

7. UNIX MAGAZINE 2004年1月号

特集安全なネットワーク 図 14 タ絢きフィルタルールの方針 図 15 /etc/ntp. conf restrict default ignore restrict 127 . 0 . 0 . 1 restriCt 192.168.0.0 mask 255 . 255 .255 . 0 restriCt 192. 168 . 1 . 0 mask 255 . 255 . 255 . 0 ISP から指定された IP アドレス /etc/ntp/drift driftfile せつかく口グを残しても、、、いつの " ログなのかが分からな ければ、ログを記録する未は半減してしまいます。 こんなことにならないように、ファイアウォール・ホス トではかならす畤刻の同期をおこないましよう。 図 15 に /etc/ntp. conf の設定例を示します。最後から 2 行目は、 ISP から指定された NTP サーバーの、、 IP ア ドレス " を言します。 restrict によるアクセス制御の設疋は、 iptables による フィルタリングをおこなうので不要ですが、念のため二重 にフィルタリングしています。 設定が終ったら、次のコマンドを実行します。 # chkconfig -—level 345 ntpd on マ模様で、設疋ファイルに記述しようという気は起きませ キャッシュ専用ネームサーバー んでした。そこで、仕方なく、 APNIC が管理する IP ア ファイアウォール・ホストは、 DMZ に接続したホスト ドレスプロックからの接続のみ許可するように設疋してい にドメイン名サービスを提供します。 DNS と聞いて、 ます。リモートからのアクセスを許可するユーザーカ坏リ用 「うええ ~ 、 named のインストールはええけど、設疋ファ する ISP が分かっているのであれば、その ISP のアドレス イルを書くのは面倒ゃなあ・・ どこかにテンプレート プロックだけを許可するように書き換えてもよいでしよう。 があったらええのに」 NTP と躊躇する人がいるかもしれません。さいわい、 Red Hat ファイアウォール・ホストが正しい時刻を刻むために、 Linux には caching—nameserver というパッケージカゞあ NTP を使用します。ファイアウォールが正しい時刻を口 り、これをインストールするだけですぐにキャッシュ専用 グに記録することは、たいへん重要です。 のネームサーバーがセットアップされます。 インストールカ鮗ったら、次のコマンドを実行しておき もし、万が -- - ・、何か ( 事件や事故 ) カ起こってアクセスロ ましよう。 グを参照しなければならない状況になったとします。この とき、ファイアウォール・ホストのシステム時刻カ壅って # chkconfig ——level 345 named 0 Ⅱ いると、ログに記録されている時刻を補正しなければなり これで、 OS の起動時にネームサーバーか起動されるよ ません。この作業は、考えただけでうんざりするほど面倒 うになります。これ以上の設定は不要です。 です。しかも、現在のシステム時刻が 1 時間すれているか らといって、 1 週間前、あるいは 1 カ月前にログカ第最さ 次回は、 Web サーバーなど、公開サーバーの構築手川頁を れた時点でも 1 時間すれていたとはいえません。そのとき 紹介します。 は 50 分ずれていたかもしれませんし、 30 分かもしれませ ( しらさき・ひろお IIJ) ん。いすれにせよ、過去のことは確かめようがありません。 インターネット SMTP のみ許可 ロ ロ ロ ロ ☆ 56 UNIX MAGAZINE 2004. 1

8. UNIX MAGAZINE 2004年1月号

図 2 危険なネットワーク構成 内部ネットワーク ロ 公開サーバー 端末 インターネット ロロロ 一方、内部ネットワークから DMZ へのアクセスはすべ て許可してもよいでしよう。 もし可能であれば、 DMZ から外部への接続は拒否する ほうがよいと思います。これは、サーバーホストがほかの サイトへの攻撃の踏み台として悪用されるのを防ぐためで す。 ダメな言十とその理由 ときどき、図 2 のような構成で公開サーバーを内部ネッ トワークに接続しているのをみたり、同様な構成を紹介し ている文献をみかけることがあります。 このようなネットワーク構成は、、、手軽でお金がかから ない " というメリットとともに紹介されることが多いので すが、ルータでフィルタリングするか否かにかかわらず、た いへん危険なので絶対にマネしてはいけません。たとえ公 開サーバーを安全に構築したとしても、危険であることに 変わりはありません。 この構成では、さきほど述べたセキュリティの基本方釣・ が考慮されていません。つまり、いったん公開サーバーへ 侵入されると、内部ネットワークへのアクセスを食い止め られなくなってしまうのです。攻撃者の立場からみると、 たとえばサーバーホスト上で root の権限を奪ってから、 UN 工 X MAGAZ 工 NE 2004. 1 特集安全なネットワーク ネットワーク上に流れるパスワードを盗み、それを使って ほかのホストヘログインするという一連の攻撃が容易にお こなえます。 「内部ネットワークでも、リモートログインには SSH を 使うてるから大丈夫 ! 」 という人でも、ファイルの転送には FTP を使っていたり しないでしようか。 内部ホストへの侵入は、パスワードの覗き見によるも のだけでなく、そのホストで動いているサーバープロセス への攻撃によっておこなわれる場合もあります。したがっ て、ワームが内部ネットワークの計算機に侵入することも ありえます。 これまで安全だといわれていた Apache ですら、 root で侵入できるセキュリティ・ホールが発見されました。最 近は、 SSH にも定期的にセキュリティ・ホールが発見され ています。もはや、放っておいても 100 % 安全といえるよ うなサーバーはありません。もう一度書きますが、糸寸に 公開サーバーを LAN にキしてはいけません。 リモートロクイン ファイアウォール・ホストにリモートログインするとき は、たとえ LAN 内からであっても、通信を暗号化しない telnet や rlogin などは使わす、 SSH を利用しましよう。 また、ファイアウォール・ホストヘログインできるユーザー を制限し、アカウント管理も厳しく運用すべきです。 インターネットからファイアウォール・ホストへのリモ ートログインは禁止します。 SSH だったらよいというこ ともありません。外部からのアクセスはすべて禁止、カ源 則です。 もちろん、原則は守らなければいけません。しかし、緊 急事態が生じたときには、原則を曲げざるをえないことも あります。たとえば、ホストの管理者力外出中に緊急の保 乍業が必要になっても、出先からログインできなければ お手上げです。 このようなときは、インターネットからのログインに利 用するホストをあらかじめ決めておき、その IP アドレスか らの接続だけ許可するフィルタを設定します。ただし、 の IP アドレスは、 ( PPP 接続で動的に割り当てられるよ うな ) 誰カ駛うのカ吩からないようなものではいけません。 45

9. UNIX MAGAZINE 2004年1月号

だとすると、、、 /conf/base/" がパターンと一致するため、 usr を値として取り出すことができます。 このとき、 /conf/base/ だけでなく、 /conf/ や / もパタ ーンと一致します。しかし、、、 $ { j # # パターン } " という記 法では、パターンと一致するもっとも長いものを取り除く と決まっているため、 /conf/base/ がパターンと一致する ものとして処理されます。これでは都合が悪い場合には、 パターンと一致するもっとも短いものを取り除く、、 $ { j # パターン } " という記法もあります。また、パターンと一致 する頁部分ではなく、末尾部分を取り除きたい場合には、 、、 $ { j % % パターン } " や、、 $ { j % パターン } " といった記法が 使えます。 サプディレクトリ名を取り出したら、みつけたディレク トリか存在し、さらにそのなかに md-size という名前のフ ァイルがあるかを確認します。ファイルがある場合には、 そのファイル内に書かれている値を、、 md-size- ディレクト リ名 " という変数ロ常内します。 if [ —d $j —a —f $j/md-size ] ; then eval md-size—$subdir=' cat $j/md-size f i こでも、さきほど紹介した eval コマンドカ駛われてい ます。変数名のディレクトリ名の部分は別の変数ロ常内さ れているため、これを展開して変数名を作り、さらにその 変数に値を代入しなければなりません。 eval コマンドは、 そのような場合に活躍します。 ループをまわりながらこの処理をおこなうと、異なるコ ンフィグ・ディレクトリの下に同じ名前のサプディレクト リか存在し、 1 つのサプディレクトリに対して複数回処理 をおこなってしまう可能性もあります。このような場合に は、毎回同じ処理をおこなうことになるため、最後に実行 した内容力陏効になります。つまり、最初に並べた base 、 default 、プロードキャスト・アドレスまたは IP アドレス の名前のディレクトリは、後ろのものほど優先川頁位か濡い ということになります。 次は、同じくディレクトリに diskless-remount ファイ ルがあるかどうかを確認します。このファイルが存在する 場合、ファイル内に注目しているディレクトリに対応する NFS のマウントボイントカ艚かれていると仮定し、 mount を試みます。このコマンドを実行したあと、さきほど定義 した chkerr 関数を呼び出して、コマンド呼出しが失敗し 116 ていなかったことを確認します。 if [ -d $j -a —f $j/diskless—remount ] ; then nfspt=' /bin/cat $j/diskless—remount' mount—nfs $nfspt $j chkerr $ ? "mount-nfs $nfspt $ 主 done done ファイルシステムの内容の復帰 このあとは、ふたたび同様なループをまわりながら実際 にメモリ・ファイルシステムを作成し、保存してあるアー カイプなどからディレクトリの内容を復帰する処理をおこ ないます。 まず、メモリ・ファイルシステムを構築します。 for i in base default ${bootp-ipbca} , ${bootp-ipa} ; do for j in /conf/$i/* ; d0 if [ -d $j ] ; then create-md $subdir cp —Rp $j/* /$subdir done メモリ・ファイルシステムの構築には、さきほど定義し た create-md 関数を使います。 create-md 関数では、前 節で設疋しておいた、、 md-size- ディレクトリ名 " という値 を使って、作成するメモリ・ファイルシステムのサイズを 決定します。このディレクトリにある md-size ファイル の内容を使ってサイズを決定しないのは、もっとも優先頂 位の高いファイルに書かれていたサイズ指定を利用するた めです。 メモリ・ファイルシステムを作成してマウントしたら、コ ンフィグ・ディレクトリに置かれているファイル群を、作 成したファイルシステム上にコピーします。 さらに、同じくコンフィグ・ディレクトリに、サプディ レクトリではなくそこに十内すべきファイル群がまとめら れた、、ディレクトリ名 . cpio. gz " というファイルか存在す るかどうかを調べます。このファイルがあれば、そのなか に十内されているファイル群を、指定されたディレクトリ f i に展開します。 UN 工 X MAGAZINE 2004. 1

10. UNIX MAGAZINE 2004年1月号

ロプログラミンク・テクニック 多治見寿和 rc スクリプト ( 2 ) 前回は、あるプログラムをとりあげてその動作やソース コードを解説するこれまでのスタイルとはすこし異なり、 システムの起動時におこなわれる処理に注目しました。そ の一連の処理のなかで実行される /etc/rc ファイルをとり あげ、このスクリプトの内容と動作について説明しました。 しかし、前号で紹介したのはほんの入口の部分にすぎま せん。 /etc/rc ではほかにもいくつかの技術が使われてい ます。今回は、 rc スクリプトのなかから最初に呼び出され るスクリプトである initdiskless についてみていきましょ /etc/rc. d ディレクトリに置かれているスクリプトの実 行判よ、前回紹介した rcorder プログラムで決められま す。それによれば、最初に実行するのは initdiskless スク リプトになります。これは、システムをディスクレス・マ シンとして起動する際にメモリディスクの設疋をおこなう ためのスクリプトです。したがって、通常の起動時には実 行する必要はなく、ディスクレス・マシンとして利用する 場合にのみ実行されます。 このファイルも / b ⅲ / sh スクリプトとして作られている ため、インタープリタ指定の行から始まっています。 # ! /bin/sh このあとに続くコメントのなかで、 rcorder コマンド用 rco 「 der による順番の決定 # PROVIDE: initdiskless の条イ牛指定プロックカ第当されています。 # KEYWORD : FreeBSD 前回も説明したように、 この言当からは、 このファイル UNIX MAGAZ 工 NE 2004. 1 では initdiskless という条件を提供しており、 FreeBSD のときに利用するファイルであることが分かり ます。 システムカゞ 111 場合にのみ 1 となっています。 の値は、システムをディスクレス・マシンとして利用する less-valid というシステムの変数値を取得しています。 最初の行では、 sysctl コマンドを使って vfs. nfs. disk- [ ${d1v:=0} -eq 0 ] & & exit 0 2 > /dev/null ( dlv='/sbin/sysctl —n vfs . nfs . diskless_valid , で折り返しています。以下同様 ) 。 行からプログラムの本体部分が始まります ( 誌面の都合上、 これ以降もコメントカいたあと、次のようなコマンド 内容を実行するかどうかの決定 ドによってこのファイルが先頭に配置されたわけです。 指定されることはありません。そのため、 rcorder コマン REQUIRE に指定されることはあっても、 BEFORE に PROVIDE している initdiskless は、ほかのファイルで 行することはできません。一方、 initdiskless ファイルが で BEFORE に指定されているため、これらを最初に実 が PROVIDE している securelevel は、ほかのファイル と vinum が PROVIDE している disks や、 securelevel less 、 securelevel 、 vinum の 4 つがあります。しかし、 ccd 調べてみると、このようなファイルには ccd 、 initdisk- いファイルはないことも分かります。 このファイルを実行する前に実行しておかなければならな また、 REQUIRE キーワードは指定されていないので、