図 4 オプジェクト object を表示 File Edit Text W ⅲ do 、、 HeIp ロロ匚丘ロ回可日を EI 口一園」 et's PIay with UNIX ④ オシレータからの出力 図 8 File Edit Text Windows HeIp 05 ( ・・ 440 d ” ddin New Obje 代 図 5 440HZ を出力するオシレータ・オプジェクト File Edit Text Windows 図 9 オシレータから scope object に出力 E 山を T を WindOWS Help Help 庫庫新第回阿区区所庫 0 ・・ 440 0 ; ( ” 440 図 6 パッチ接続用のアンカー 05 い 440 図 7 オシレータの出力先をサウンドカードに言聢 FiIe E 山を Te Windows ロ「 , ロ丘ーロ回日を・ロロロ 門火 Help 手のアイコンも、、パー " から、、グー " に変化する。 これで プログラムか夫行可能になる。 この状態で File メニューから、 Activate-DSP" を選 択すると、サウンドカードから 440HZ の音が出るはすで ある。音カ咄ると、直線だったパッチコードか 1 杉に変わ る ( 図 8 ) 。 こバ杉が正強皮であることを不忍するために、オシレ ータの出力先を、、 scope object" にしてみたのか図 9 で ある。 0 ・・ 440 ている。上が入力、下が出力である。 今度は、オシレータの出力先を作ってみよう。サウンド jMax の取得とインストール カードに信号を送るには、 dac- jMax に興未をもったら、ぜひインストールして使って というコマンドを入力する。さきほどと同様にして新しい みよう。起動させるまでの作業はごく簡単である。 object を引っ張りだし、そこに dac ~ と書き入れると、オ さきはど述べたように、 jMax は JavaVM 上で動くの プジェクトの上部に 2 つのアンカーか現れる。これとオシ で、 JDK (Java Development Kit) または JRE (Java レータの出力をパッチコードで結べばいい ( 図 7 ) 。 Runtime Environment) が必要になる。 jMax 本体に ついてはバイナリの RPM パッケージも配布されており、 そして、オプジェクト・パレットの左端にある手の形 mamalala. de という Web サイトから入手できる。 をしたアイコンをクリックする。するとパレットか隠 139 UNIX MAGAZINE 2002.10
特集・ RTA55i のフィルタリング設耳 図 8 動的フィルター胸 . ルール イル用アクセス制御ルールの一 込信元 番号 ツロトユレ 0 図 10 動的フィルタ用 イルの一 通用 送信元 プロトユレ 番号 入出監視逆方向 , 方向 炉アドレス ・クライアント← SYN サーバー クライアント→ SYN 十 ACK →サーバー ・クライアント← ACK ←サーバー の 3 つのバケットと、これ以降に送受信されるバケット は、 1 つの、、逆方向制脚ルール " で扱うことになります。 番号 図 8 刎列では 1 番なので 1 を記します。 番号 最後の、順方向制御ルール " は、トリガーの接続以外 番号 浦除「 5- ヨ に、クライアントからサーバーへの接続がある場合に設定 最後に、これらのルールを用いて新しい重加勺フィルタを します。たとえは、 作成します。 クライアント→サ→ヾ ー ( 7000 / TCP ) 重加勺フィルタの定義は、上記のルールを定義したところ ・クライアント ( 7001 / TCP ) ←サー の上にある罰第勺フィルタの設定 " でおこない、以下の 3 ・クライアント→サーバー ( 7000 / UDP ) つの頁を設定します ( 図 9 ) 。 ・始点 IP アドレス のように、さらに UDP で通信をおこなうような場合は順 ・終点 IP アドレス 方向制御ルールを設定します。ただし、内部から外部への ・トリガー / 逆方向 / 順方向ルール 接続をデフォルト許可のフィルタリング・ルールで設定し ている場合は、順方向制御ルールを設定しなくてもかまい 、、始点 IP アドレス " と、、終点 IP アドレス " の意味は文字 ません。順方向缶ルールが必要になるのは、デフォルト どおりです。アクセスするサーバーやクライアントカ墹定 拒否のポリシーでフィルタを設定している場合です。 的に決まっているのであれは、 IP アドレスを設定してお ルール番号 0 と 1 を図 9 のように入力して、曇後に [ 追 いたはうがよいでしよう。とくにアクセスを制限しないの 加 ] ボタンをクリックします。 であれば、、、 * " のままでもかまいません。 なぜか、、メモ " のフィールドに文字列を言己しても無視 こで重要なのは、 されてしまうようですが (' ヾグ ? ) 、フィルタは当求される 監視用アクセス制御ルール ので問題ありません。 ・逆方向制御ルール 動的フィルタを適用する ・順方向制御ルーノレ これまでの操作で、動的フィルタが作成されたはすで の 3 つのフィーノレドです。 す。 、監視用アクセス缶卩ルール " のフィールドには、トリガ 最後に、作成したフィルタを適用すれば操作は終りです ーのルール番号を設定します。図 8 の例では 0 番なので ( 図 10 ) 。ただし、トリガールールにマッチするバケット 0 をします。 がフィルタリング・ルールで許可されるかどうかを、かな 次の、、逆方向制御ルール " は、サーバーからクライアン らす石忍しましよう。この例では、 トに向けて接続するバケットを許可するルール番号です。 クライアント→サーバ ー ( 7000 / TCP ) こて注意が必要なのは、このルールは、クライアントか らサ→ヾーへ送り返される返イヤヾケットにも適用されるこ のバケットを許可するフィルタリング・ルールか存在する とです。つまり、 ことを確かめます。内部から外部への接続をデフォルト許 受信先 アドレス - 受信先 7000 7001 tcp 1 .COm れ一 tcp 図 9 勺フィルタの新規定義 送信元田アドレ ロト 静合ょフィルタ定義の番号リストでアクセス制師ルールを登録するを 監視 ス制レール 達方向制ルール イルの 。受信先アドレス 方向刈師ルル 53 UNIX MAGAZINE 2002.10
特集・袞 TAS のフィルタリング設定 ~ 図 2 なネットワーク構成 図 1 RTA55iTDMZ を構成 ことも可能かもしれませんが、履歴書の迎未欄に、ネット 防ぐということは、言い換えれば、サーバーホストを内部 ワーク " と書く人を除けば、 ISDN か WAN ポートのど への侵入の足掛かりにさせないということです。そのため ちらか一方だけを使ってインターネットに接続するのカ には、 DMZ から内部ネットワークへの接続はすべて拒否 通でしよう。 します。一方、内部ネットワークから DMZ への接続は そんな WAN ポートを遊ばせておくのはもったいない 許可してもかまいません。 ので、 WAN ポートのコネクタを LAN 用に設定し、こ Web サーバーのように、サーバーホストからクライ れを利用して図 1 のような DMZ を構成することができ アントへ接続することのないサーノヾーを運用する場合は、 ます。 DMZ から外部への接続も拒否するほうがよいでしよう。 このように構成した場合、インターネットと内部ネット これは、サ→ヾーホストがはかのサイトへの攻撃の踏み台 ワークとのあいだのフィルタリング・ルールは、 DMZ を として利用されるのを防ぐためです。 設けていないときと同様に設定します。 図 1 のように DMZ を構成できない場合は、インター 公開サーバーを運用するときは、 ネットに対してサーバーを公開してはいけません。 稀に、図 2 のようにして公開サーバーを内部ネットワー ・サーパーホストに侵入されても内部へ被害がおよばない クに接続しているのを見聞きしたり、同様な構成を紹介し ように言 f する ている文献をみかけることがあります (RTA55i のマニュ アルにもそのような言当があります ) 。また、さきはど触 を基本方針とすべきです。つまり、サーバーに侵入された れたプロードバンド・ルータの、、 ( 似非 ) DMZ 機能 " で ことを想定してフィルタリング・ルールを設定します。も も、これと同様な構成をとります。 ちろん、これはサーバーへの侵入を許容するという意味で こういったネットワーク構成は、、、単純でお金がかから はありません。サーバーホストにしつかりとセキュリティ ない " というメリットとともに紹介されることが多いよう 対策を施し、そのうえで、ルータにもセキュリティ対策を ですが、たいへん危険なので糸寸にしてはいけません。 講しるわけです。 この構成では、サーバーへの侵入を許してしまった場 サーバーホストに侵入されても内部へネ皮害がおよぶのを 48 UNIX MAGAZINE 2002.10
特第・ Linux2.4 の netfilter 図 1 0 0 u 」 〇 図 2 ipchains におけるフィルタリング里 (a) バケットの受信 ⑧上位層へ ⑦旧 demasquerade 1 ⑥宛先を調べる ③ source Routed バケットのチェック ② INPUT チェーン ・①旧ヘッダのチェック ⑤ (b) バケットの転送 →① FORWARD チェーン ②旧 masquerade ・ MASQ ④下位層へ ③ OUTPUT チェーン ℃ MP を返送 routing : de-masq ・ ↑ ↑ 上位層 ipchains ~ 里の充オ 旧バケット → INPUT 図 3 iptables ~ 里の充れ 26 →ド de-masq → →ー routing → FORWARD ↑ INPUT 上位層 (c) / ヾケットの送信 上位層より ① OUTPUT チェーン ②下位層へ 上位層 →ー 上位層 ↓ OUTPUT routing ↓ masq → UNIX MAGAZINE 2002 ユ 0
・ RTA5 のフィルタリング設定 図 5 FTP の動的フィルタを適用する 適用 99 广广 98 广「 84 广广 83 「「 82 「广 80 「マ 番号 づロトコル 入出監視逆方向、 ; 魎方向 sm ゆ p 叩 3 tcp udp 図 6 トリガールールの定義 動ワイルタ用アクセス制御ルールの設定 ゴロトコル CP 信元ポート番号 番号メモ 図 7 5 魴向ルールの定義 、フィルタ用アセス制御ルールの設定 づロトコル を cp 送信元ポート番号 番号メモ の CO 受先ポート番号 間 00 受信先ポート番号 7001 静的フィルタと動的フィルタの適用 」竺更」チ = ックされている静的フィルタと ルタの適用 " の [ 適用 ] 、ボタンをクリックするだけです。 デフォルトでは、このほかにもいくつかの重加勺フィルタ が定義されていますが、 IP masquerade を利用している 環境では使うことはないでしよう。もしかすると、デフォ ルトで定義されている測酌フィルタを利用するよりも、独 自にフィルタを定義して使う可能性のほうか高いかもしれ ません。そこで、自分て新加勺フィルタを定義する手順を説 クライアント←サーバー の接続に引き続き、 クライアント→サーバー フィルタカ喊力を囎軍するのは、 IP masquerade を利用している場合、 RTA55i の重加勺 動的フィルタの定義 明しましよう。 52 かは知りません ) 。このところ、流行の兆しをみせている 使ってこのような接続をおこなうプロトコルがあるかどう いう数字はたんなる例です。現実に、これらのポートを フィルタの定義手順を説明します ( この 7000 と 7001 と TCP で接続しなおしてくるようなプロトコルを例に重加勺 で接続すると、サーバーからクライアントの 7001 番に 以下では、たとえはサーバーの 7000 番ポートに TCP ルールを追加してもおもしろくありません。 うにルールが定義されているので、あらためて FTP の FTP か有名ですが、 FTP についてはすでに説明したよ このような形態の接続をおこなうプロトコルとしては するときです。 のような逆方向の接続が必要なサーピスをフィルタリング P2P (peer to peer) アプリケーションのなかには、この 例のようにピアどうしで相互に接続するものがあるようで す。この種の P2P アプリケーションを使いたいのであれ は、実際に使われるポート番号を詩ヾ、以降の説明に出て くるポート番号と置き換えながら読み進めてください。 トリガールールの定義 まず、 ー ( 7000 / TCP ) クライアント→サーバ のルールを定義します。この接続は、重加勺フィルタか動き 始めるきっかけとなるため、 RTA の用語ではトリガーと 呼ばれています。また、 Web インターフェイスでは、、監 視 " と表記されています。 重加勺フィルタのトリガールールは、ページの一番下にあ る、、重加勺フィルタ用アクセス制御ルールの設定 " で定義し ます。トリガールールで定義できるのはポート番号だけな ので、図 6 のように入力して日助日 ] ボタンをクリックし ます。 逆方向ルールの定義 ・クライアント ( 7001 / TCP ) ←サー のルールを定義します。 同様に、図 7 のように入力して [ 追加 ] ボタンをクリッ ルか表示されているはすです ( 図 8 ) 。 図 6 ~ 7 の操作か終ると、設定ページには定義したルー 動的フィルタ乍成 クします。 UNIX MAGAZINE 2002.10
特集・ Linux2.4 の netfilter iptables コマンドて斤しいチェ チェーンの作成と削除 ・ DROP ・ ACCEPT きません。 だけで、はかのターゲットをポリシーに言殳定することはで iptables —X c んれ (b) 削除 iptables —N c んれ (a) 作成 図 14 チェーンの作成と削除 ーンを作成する書式を してみたところ、 iptables はきちんとループを検出して登 で、次のようにループしたチェーンを篇図的に作って実験 ープしたチェーンを作ってしまう場合があります。そこ また、チェーンを駆使することに熱くなりすぎると、ル 揮するのはやめておきましよう。 カヾ替んでいるか分からないので、妙なところで冒険心を発 ているようにみえます。しかし、どこにどのような不具合 も、バケット・フィルタリングはとくに問題なく機能し 英数字以外の文字列を含む名前のチェーンを作成して 区別されます ) 。 ( 英数字 ) にしたほうがよいと思います ( 大文字と小文字は 複しなけれはなんでもいいようです。ただし、無難な文字 名前は 29 文字以下の文字列で、すでにある名前と重 前です。 図 14 ー a に示します。引数 c んれは作成するチェーンの名 UNIX MAGAZINE 2002.10 ことが必要です。 ・ほかのルールのターゲットに指定されていない ・ルールが当求されていない b のようにします。ただし、チェーンを削除するには、 ューザーが作成したチェーンを削除する場合は、図 14- iptables : Loop found in table # iptables -I INPUT —j 100P1 # iptables -1 100P2 —j 100P1 # iptables —1 100P1 —j 100P2 # iptables —N 100P2 # iptables —N 100P1 録を拒否しました。 アドレス変換の設定 アドレス変換ルールを追加 / 編集するには、 iptables コ —t nat" オプションを指定して実行します。 マンドに IP masquerade ルールの編集 IP masquerade のルールを登録 / 編集する書式を図 15 に示します。 インターネットに出ていくすべてのバケットを IPmas- querade の対象とするには、次のように書きます。 iptables —A POSTROUTING —t nat , ・ ー 0 外側 -j MASQUERADE 「フィルタリング・ルールの設定」の節で説明したオプ ションを駆使すれば、 IP masquerade の対象とする / し ないバケットの不頁を細かく指定できます。ただ、現実に そのようなルールを書くことはほとんどないと思うので、 図 15 の書式は簡略化してあります。 Destination NAT ルールの編集 図 16 は、バケットがインターフェイスから出ていく 直前に、バケットの終点アドレスを書き換える NAT ル ールの書式です。 netfilter では、このタイプの NAT を、、 DNAT (Destination NAT)" と呼び、プライベー ト・ネットワーク上のサーバーをインターネットに公開す るときに使用します。 たとえは、グローバル・アドレスが 1 つしかないネット ワークてサーバーを外部に公開するには、外部からのアク セスを内部ホストへ中継する必要があります。この場合、 特定のポートへ送られてきたバケットを内部ネットワー クに転送するときに、バケットの終点アドレスをサーバー ホストのアドレスに書き換えます ( 同時にポート番号を書 き換えることもあります ) 。 ipchains では、このようなパ ケット転送機能をポート・フォワーディングと呼んでい ましたが、 netfilter では DNAT と呼びます。 内部の Web サーバー ( アドレス 192.168.1.2 ) を外部 —to—destination 192. 168 . 1 . 2 —dport 80 —i 外側 -j DNAT iptables —A PREROUTING —t nat —p tcp に公開する場合は、以下のように設定します。 37
連載 JavaServer Pages—@ 図 3 txt:style タグ吏った JSP ファイル (style ・ jsp) く %@ page contentType="text/htm1 ; charset=EUC—JP" % > く %@ taglib prefix="txt" uri="http://www.astec.co ・ jp/text" % > く ! DOCTYPE HTML PUBLIC "—//W3C//DTD HTML 4.0 Transitiona1//EN" > く html> く head> く meta http—equiv="Content—Type" content="text/html ; charset=EUC¯JP"> く tit1e>TextSty1e く /title> く /head> く body> く txt : sty1e text= く txt : style text¯ く /body> く /html> ー " 普通の文字列 " " 大きな文字列” ド T “にに - に「叩に€ 図 4 style. jsp の表示 size="9"> く /txt : style> く br> size="5"/> く br> - ファイルの編集表示検索ジャンプ 0 プマーグ印タスりヘルプ ( 印 第本を 普通の文字列 大きな文字列 働は一ム複常ーロカりマグ騫一物“。、新着、お第め、メンバーズ いト発癶 4 了タグが別々に言己されていても、 1 つのタグとして言己 2 不頁のタグをくらべれば分かるように、開始タグと終 さが、 size 属性の値に応して変わっています。 うな画面になります。 text 属性で指定した文字列の大き 図 3 の style. jsp をプラウザて表示すると、図 4 のよ の表示をみてみましよう。 さきに TextStyle タグハンドラで作った txt:style タグ 必要になりますが、具体的な手順の説明は後回しにして、 タグハンドラを利用するにはこのあといくつかの準備が txt :style タグの表示 をそのまま続けることかて、きます。 ソッドを抜けています。これにより、 JSP ページの処理 doEndTag() の最後では、 EVAL-PAGE を返してメ でおこなってもプラウサ上の表示は同しになります。 メインの処理を doStartTag() と doEndTag() のどちら 本体をもたないタグの場合は、カスタムタグを変換する く fo 取 t size="9"> 大きな文字列く / f0 Ⅱ t > ます。 タク冽の例では、次の文字列が write() メソッドに渡され 100 図 5 style ・ jsp をプラウサで表示したときのソース ( カスタム タグの部分のみ ) く font size = " 9 " > 大きな文字列く / fo Ⅱ t > く br > く font size = " 5 ” > 普通の文字列く / fo Ⅱ t > く br > されていても表示結果は同しです。 タグハンドラをテストするときは、プラウザに表示され た内容だけでなく、 JSP ファイルのコードがどのような HTML コードに変換されたのかも不忍してください。 図 5 は、プラウサのメニューから、、ページソース " など お尺して表示させたソースコードのうち、カスタムタグ に対応する部分だけを取り出したものです。 JSP ファイ ルの 2 不頁のタグが、いずれも font タグを使って書き換 えられていることカ蔀忍できます。 txt:style タグのさまざまな表示 図 3 と図 4 で、カスタムタグの正常な動列をみてみ ました。次に、カスタムタグの仕様とは違う使い方をした り、通常の使い方からすこし外れたことをした場合に何が 起きるのか試してみましよう。 誤った使い方をしたときにどのようなエラーか起きるの かが分かっていると、テンヾッグの際に役立ちます。タグ や JSP ページを開発する場合は、よくあるエラーについ て知っておいたはうがよいでしよう。 こではいくつかの実列を紹介しますが、仕様に合わ ないタグをみつけたときの JSP 工ンジンの振舞いやエラ ーメッセージは環竟によって異なります。できれば、自分 UNIX MAGAZINE 2002.10
連載 / シェルの魔術ー⑩ 図 4 /usr/bin/netstat のパーミッション $ ls ー 1 /usr/bin/netstat —r—xr—sr—x 1 root kmem 108644 Aug 12 17 : 21 /usr/bin/netstat* 図 5 他人のパスワードを変更しようとすると $ passwd ohm passwd: Permission denied 実効グループを変える よって異なる場合があります。詳しくは図 6 ~ 7 と、次ページ 実効グループとグルーフ・アクセスリストの扱いは、 OS に ノート 6 ID と呼びます。詳しくは intro(2) を参照してください。 ことができるイ督目みがあります。これを Saved Set Group クループを変更されたプロセスも、もとの実効グループに戻る 実効ューサーの変更と同じように、 SetGID ビットで実効 ノート 5 を実行した場合、もとの実効グルーフ。の権限はなくなります。 のようなプロセスが SetGID ヒ、ツトの言殳定されているコマンド グループ・アクセスリストに含まれていない場合があります。 SetGID ヒ、ツトて変更されたプロセスで、実効グルーフ。が くなりません。 グループか変更されても、もとの実効グルーフ。の権限はな プはグループ・アクセスリストに含まれているので、実効 クセスリストは変更されません。多くの場合、実効グルー した場合、実効グループは変更されますが、グループ・ア います。 SetGIDE ットか設疋されているファイルを実行 グループとグループ・アクセスリストの二本立てになって 前項で説明したように、プロセスのグルーフ権限は実効 ットが定されている場合には大文字の、 S " か表示されます。 これも SetUID と同様に、実行可能ではなく、 SetGID ピ 定されていることを表しています。 は、実行可能 (x) であると同時に、 SetGID ヒ、ツトか設 ルーフ。の実行可能を表す部分が、、 s " になっています。これ ドの例を挙げます。 SetUID のときと同じように、所有グ ットで変更することができます。図 4 に、 netstat コマン ました。これと同じように、実効グループも SetGID ビ 実効ユーサーは SetUID ヒ、ツトで変更することができ UNIX MAGAZINE 2002.10 のコラムを参照してください。 ←このシェルの実効ューサーが moley だとすると・ ←変更できない 図 6 NetBSD におけるグループ・アクセスリスト non-set-Group-ID moley wheel s ね幵 EGID Group Access List set-Group-ID staff wheel moley 図 7 FreeBSD におけるグループ・アクセスリスト non-set-Group-ID set-G rou p- 旧 moley moley wheel staff EGID EGID Group Access List operato r moley wheel s ね幵 Group Access List List Access Group ほんとは誰が実行したのさ ? 123 たかということを (SetUID ビットに景グされすに ) 言当求 べることができます。また、誰がどんなコマンドを利用し マンドのように本当に実行したユーサーか誰であるかを調 景グを受けません。実ューサーを利用すると、 passwd コ UID ビットによって実効ユーサーか変更されたとしても、 この謎を解くのか実ユーサーです。実ユーザーは、 Set- ているのでしようか。 passwd コマンドはどうやって実行したユーサーを見分け トによって実効ユーザーが ro 。 t になっているはすなのに スワードは変更できないようです。しかし、 SetUID ビッ 図 5 を見てください。やはり、 ( 当然ですか ) 他人のパ ね ? やってみましよう。 のパスワードを勝手に変更できるというのは、何か変です ドを変更することもできます・・・・・・つと、ほかのユーザー ドを変更しますが、ユーサー名を指定して他人のパスワー passwd コマンドは引数なしで実行すると自分のパスワー ところで、 passwd コマンドは実行してみましたか ?
聞着】ブログラミ / グ⑨ 図 11 子音の位置からしかできない Suffix Array 図 9 Suffix を辞書順にソートして Suffix Array を作る Suffix Suffix lndex a b : 8 : r a a b a d a b : 1 : r a C r a : 4 : a d a b a C て a 三 6 : a d a b r a : 9 : b r a : 2 : a d a b b r a r a C a d a b r a C : 7 : d a b r a : 10 : r a a d a b : 3 : て a r a C Suffix Array 10 3 : 1 1 8 1 4 6 9 2 ミ 7 lndex : 9 : : 2 : b c a d a b r a a a d a b r a : 5 : . C : 7 : d ・ a b r a 三 10 : a d a b r a : 3 : a C Suffix Array 9 2 5 7 10 3 辞書順にソート 辞書順にソート もとのテキスト : abracadabra ・ Suffix Array: [ 11 , 8 , 1 , 4 , 6 , 9 , 2 , 5 , 7 , 10 , 3 ] の 2 つのデータだけがあれはいい。すべての Suffix は、 もとのテキストとインデックス・ポイントだけで表現でき adabra" という Suffix にアクセスする る。たとえば、 には、、 abracadabra の 6 文字目から始まる文字列 " とい うように表せばいい。 mksary コマンドの説明のなかで、インデックス・ポイ ントとは、、テキスト中の検索可能な位置 " のことだと述べ た。上の例では、すべての文字にインデックス・ポイント を割り当てているが、子音のみに割り当てると、テキスト の子音の位置からしか検索できない Suffix Array が作れ る ( 図 11 ) 。 Suffix Array の言田は、文献 [ 1 , 2 ] を参照していただ きたい。 サンプル・プログラム プログラムを読むほうが、図解よりも分かりやすいとい 、、れ文字目から これらの Suffix を辞書順にソートし、 う読者も多いと思うので、 C で書いたサンフ。ル・プログラ の Suffix" のれの部分 ( 図 8 では lndex の部分 ) を並べ ムをリスト 3 に示す。これは、テキスト、、 abracadabra' ると Suffix Array かて、きあがる。 の Suffix Array を作成するコードである。 テキストの検索は、 Suffix が辞書順にソートされてい サンフ。ル・プログラムのコンパイル方法と実行結果は次 るという性質を利用して 2 分探索のアルゴリズムでおこな のとおりである。 、、 ra " て験索する過程を図 10 に示す。数字付きの矢 % cc ー 0 samp1e3 samp1e3 . C 印は、 2 分探索の順序を表している。 % . /samp1e3 array [ 0 ] 0 abracadabra 0 , この図では、 abracadabra 、 bracadabra 、 racadab- text array[ 1 ] 1 bracadabra 1 , text ・・ bra 、 ra 、 a とたくさんの Suffix か並んでいる array [ 2 ] ra 、 2 racadabra 2 , text array [ 3 ] 3 acadabra 3 , text が、プログラムを書くときには、 array [ 4 ] 4 cadabra 4 , text 図 10 2 分探索て検索 Suffix Array Suffix rQ rQ rQ (d rQ (d rd (d rQ (d rd (d rd rQ S-4 S--4 (d (d (d cd rQ ,-Q rQ O rd S--I (d (d (d (d 2 3 114 UNIX MAGAZINE 2002.10
特集 0 フィルタリングで守る S 0 H 0 環境 n び x2.4 のれ etf te ′ 白崎博生 ノヾージョン 2.4 でソヾケット・フィ Linux カーネルは、 ルタリングのイ督はみを大きく変えました。以下では、バー ジョン 2.4 から採り入れられた netfilter というイ督はみと、 その上に実装された iptables について説明します。 カーネル 2.2 には、 ipchains というノヾケット・フィルタ リングのイ督はみと、バケットの IP アドレスを変換する IP masquerade かま装されていました。これらは、どちらも IP のバケットを処理するため、プログラムは同し IP 層 に組み込まれています。しかし、もともとは別々に開発さ れたこれらのプログラムをカーネルに組み込んだ結果、 IP 層の部分が、読みにくく、拡張しにくい " コードになって しまいました。コードだけでなく、図 1 に示すようにデザ インの面からみても複雑です。そのため、どの順番でどの 処理がおこなわれるのかを理解していないと、適切なフィ ルタリング・ルールか書けなくなっていました。要するに ipchains は、、見通しの悪いシステム " だったのです。 これらの点を考慮し、、、すっきりしていて、かっ拡張し やすいシステム " を目指して netfilter と呼ばれるフレー ムワークカ鯛発されました。そして、そのフレームワーク の上に実装されたフィルタリング・システムが iptables です。 カーネル 2.2 では、図 2 のような過程をたどって IP の バケットが処理されていました ( この図は、 iptables と対 比するために図 1 を並べ替えたものです ) 。この場合、チェ ーンと Masquerade ()P masquerade) の処理の順番が 憶えにくく、とくにいったん上位層にいくとみせかけて、 やつばり FO VARD チェーンに入ってくるバケットな 概要 UNIX MAGAZINE 2002.10 どをみると頭か混乱しそうです。 一方、カーネル 2.4 の iptables では、ノヾケットの処 理は図 3 のようにおこなわれます。この図からも分かると おり、 その計算機が受信するバケットは INPUT チェーン その計算機が送信するバケットは OUTPUT チェーン 中幻医するバケットは FORWARD チェーン と叫屯化されています。さらに、中幻医するバケットをチェ ックするとき、 ipchains では INPUT 、 FORWARD 、 OUTPUT の 3 つのチェーンを通るのにヌ寸し、 iptables では FORWARD チェーンしか通らないのが大きな特徴 です。 これらの変更によって、 柔軟なフィルタか書きやすい ・バケット転却のパフォーマンスか 1 ヒする といった利点カ碍られます。 netfilter のメリットはほかにもあります。構成が単純 になったため、処理ルーチンのモジュール化が容易にな り、モジュールの開発や追加が簡単におこなえるようにな りました。事実、カーネル 2.4 にはさまざまなモジュール が用意されています。これらをカーネルに読み込むと、以 下の機能力硬えるようになります。 ・ステートフノレ・インスペクション 中幻医するバケットの内容を角財斤することにより、バケッ トフィルタ・システムが、、コネクション " を角眷尺し、コ ネクションに必要なフィルタルールを重加勺に j 助日 / 削除 してくれる機能です。単純なバケット・フィルタリン グでは、コネクションの、、戻りバケット " であるかのよ 25