警告メッセージ以下のレベルのメッセー たい場合には、次のように言します。 ftp . = く warning ジだけを処理し これにより、レベルが warning 以下のメッセージがこ のセレクタにマッチするようになります。 レベルの比較フラグを指定せず、たんにドットでファ シリティとレベルを区切った場合には、比較フラグとして = > が指定されたとみなします。そのため、基本的な記法 を使っている場合には、指定したレベル以上のメッセージ とマッチしていたわけです。 これらの比較フラグを用いることで、、、より大きい " 、、以 上 " 、、等しい " 、、以下 " 、、より小さい " の 5 通りの条件を表 せます。しかし、、、等しくない " という条件は表現できま せん。もちろん、、、より大きい " と、、より小さい " を指定し た 2 つのセレクタをセミコロンでつなげれば同じ意未にな こはもっと簡単に書きたいところです。その りますが、 ために利用できるのが、、否定 " を表す ! です。レベルの 指定では、比較フラグの直前に ! を付けることができ、この 場合、比較フラグの未はまったく逆になります。つまり、 ファシリティ . ! = レベル " とすれば、そのファシリティの 指定したレベル以外のすべてのメッセージとマッチするセ レクタとなります。 プログラム指定 syslogd がメッセージを処理する際には、ファシリティ を利用してシステムのどの部分から送られてきたメッセー ジかを判断します。しかし、ファシリティに使える値の数 は限られており、場合によっては管理者が思い描くような 分類での指定ができないこともあるでしよう。このような ときに便利なのが、、プログラム指定 " と呼ばれる機能です。 この機能を使うと、同じファシリティを利用しているプロ グラム群から生成されるメッセージのなかで、特定のプロ グラムが生成したメッセージを特別扱いすることができま す。 まずは例からみていきましよう。次のように記述する と、 sshd プログラムが生成したすべてのメッセージを / var /log/sshd. log ファイルに保存することができます。 ! sshd UNIX MAGAZINE 2005.4 プログラミング・テクニック : /var/log/sshd. 10g ジを sftp.log ファイルに保存する言定です。 を sshd. 10g ファイルに、 sftp に関するすべてのメッセー となります。次の例は、 sshd に関するすべてのメッセージ そこから先は新たに指定したプログラムについてのみ有効 定を記述するところで再度プログラム指定をおこなえば、 に書かれていても有効なので、別のプログラムに関する指 するのでしようか。プログラム指定は設疋ファイルのどこ それでは、別のプログラムについて言したい場合はどう 分は指定されたプログラムについてのみ有効となります。 プログラム指定を利用すると、設定ファイルの以後の部 と共有する場合のために残されていると考えてください。 # で始まる形式は、あくまで設疋ファイルを古いシステム とになるので、前者の形式を使うことカ材隹奨されています。 ただし、今後は # で始まる行はコメントとして扱われるこ に、直後に ! カく場合はプログラム指定として扱われます。 コメントとして扱われますが、現状では後方互換性のため 言当しなければなりません。後者の # で始まる行は通常は という形式も認められています。いずれも行の先頭から # ! プログラム名 ために、 という形式に加え、以前の設疋ファイルとの互換性を保つ ! プログラム名 プログラム指定は、この例のような、 みカ寸象となるわけです。 実際には sshd プログラムにより発行されたメッセージの がって、 2 行目ですべてのメッセージを指定していますが、 指定されたプログラムについてのみ肩効になります。した ラム指定がおこなわれると、これ以降に言当された内容は、 この例の 1 行目がプログラム指定にあたります。プログ ! sshd ! sftp /var/log/sshd. 10g /var/log/sftp ・ 10g このように、新たなプログラム指定により別のプログラ ムについてもすることができます。しかし、場合によ っては特定のプログラムを指定しないた態に戻したいこと もあるでしよう。このような場合には、プログラム名とし て * を使い、 、、 ! * " と指定します。これは、ファシリティ 73
図 7 ロポットのモー ロ ンヨ / 実際のロポットの動き 時間 0 秒 ロ ロ ロ ポーズデータ ( 初期ポーズ ) 116 見ると、・麦いろいろなオプションを提供する予定らしいので、 向への屈曲、上腕の回転である。スピーシーズの web サイトを か含まれているのが分かる。具体的には、つま先、胴体の前後方 ロポットの 3D 画像をよく見ると、実在しない関節がいくつ なくてもポーズやモーションは作れることになる。 やモーションは作成できる。つまり、ロポットカ黝いてい は、画面上の動きはロポットには反映されないが、ポーズ [ 接続 ] ボタンを押していない状態 ( オフライン状態 ) で トの IP アドレスを指定しておく必要がある ) 。 ンライン ) 大態で使うには、、、環境設疋 " ダイアログでロボッ かすたびにロポットの該当する関節カ働くようになる ( オ 、、同期モード " をチェックしておくと、画面上で各関節を動 送され、ロポットカその姿勢になるように動作する。また、 すると、現在のポーズ ()D 画像のポーズ ) がロポットに転 ライン状態 ) 。そして、 [ ポーズを転送 ] ボタンをクリック ポット側のプロセッサ・ユニットと通信を開始する ( オン も使うことができる。 [ 接続 ] ボタンをクリックすると、ロ モーション・エデイタは、オンラインでもオフラインで 関節の数だけ並んでいるという単純な形式である。 では詳細は公開されていない ) が 1 行に言杢され、それが 5 秒 UN 工 X MAGAZINE 2005 . 4 ーズ情報を配置するかたちでモーションを作っていく。 のモーション・エデイタは、時間軸上の適当なところにポ ョンは、時間軸に沿ったロポットの姿勢の変化である。 のポーズの組合せというかたちで実現されている。モーシ Speecys ロボットキットの環境では、モーションは複数 ( モーション ) を作成することができる。 ン・エデイタでは、その名が示すとおり、ロポットの動き ン (Motion)" はロポットの一連の動きを指す。モーショ よって得られる静止状態の姿勢である。一方、、、モーショ トの、、ポーズ (Pose)" 、すなわち、各関節の角度の指定に モーション・エデイタの 3D 画面で作成するのはロボッ ポーズとモーション ない。 デイタでは、ティーチングによるポーズ定義はサポートされてい ポーズデータとする方法である。ただし、現在のモーション・エ 勢をとらせ、そのときの各関節の状態をコンピュータカ第売み取り、 方法もある。これは、ロポットの各部を人間カ働かして適当な姿 ロポットのポーズデータの作成には、、ティーチング " という もちろん、現状ではこれらの関節の操作はできない。 れらを柔軟に指定できるような拡張を考えているのだろう。 ポーズテータ ( 5 秒後のポーズ )
図 1 Junk Mail Controls の言画面 11 期市ト”引 ways ect ⅱま mail. に it con ols 6 8 『℃ om messages ⅵ dentify せ浦 se are •os い如レ′ k A ま if せ愴 message 記ⅲ f ま REiL Settngs Ad 叩をⅳ 0 FiIter %ite L 地 曰ま m k れ ss es ま ma ⅱ if せ旧 s 鼾「叫記女 ess E] ”第 om rnessaees t m 『 d to i ′ま mail 〇 - よ『ド fo 旧 s ( れ is. na の ロ協 m 鹵まー ness 0 蜘「物 団印 1 お庁 k n 溶 ss よ聶、・ 〇トわ仕に m 扣を気ま " r 〇 Delete を m 曰Ⅷ 1 displayng HTML れ肥 ss ” marked え′ま . syiitize 1 HTML Loggng VEW ⅵ 0 侊曜 e まれ渇ⅱ log をⅳ . 連載 /UNIX Communication Notes 202 ォルダに入れたメールも、あとで取り出せるようにしてお くほうが安心である。 SPAM をうまく処理できたとして も、単純なミスで重要なメールを破棄してしまったら元も 子もない。このような処理の設定は、慎重におこなうのが 基本である。 、 Adaptive Filter ( 学習フィルタ ) " タブでは、 SPAM フ イルタの肩効 / 無効か第定できる。また、学習した SPAM 判定用のデータをリセットすることも可能である。 Spam. A. ssassin メールサーバー側で設定する SPAM フィルタとして有 名なのが SpamAssassin である。さきほど述べたように これも SPAM の判別に Bayesian フィルタを用いている。 SpamAssassin は独立したフィルタであり、メールサー バー側での運用を前提として開発されたものである。この ため、メールリーダーに統合された SPAM フィルタとは 異なり、ユーザーカ斗夏数のメールリーダーを使い分けてい るような竟でも、 SPAM フィルタの学習効果に差が生じ 、 Settings ( 設疋 ) " タブの、、 White Lists ( ホワイトリス ないという利点がある。 ト ) " では、無条件に SPAM と判定しないメールを送信 たとえば、 IMAP サーバーを利用していると、複数のシ 者アドレスによって指定する。そのユーザーが使ってい ステムから同じメールドロップにアクセスしてメールを読 る、、 Personal Address Book ( 個人用アドレス帳 ) " に登 むことがよくある ( 私も、すべてのメールを 1 台の IMAP 録されているメールアドレスからのメールは、原則として サーバーに集め、オフィスや外出先から、それそれ異なるシ SPAM とはみなさない。 ステムを使って同じメールドロップにアクセスしている ) 。 、 Handling ( フィルタの処理 ) " では、 SPAM と判定され この場合、メールリーダーに組み込まれた SPAM フィル たメールをどう処理するかを指定する。はじめのうちは、 タの学習の度合いはシステムごとに違うので、挙動が一定 SPAM と判定されたメールを特定のフォルダに移動する しないという問題がある。とくに、購入直後のシステムに 処理は無効にしておき、しばらく使って処理に納得できた インストールしたばかりのメールリーダーを使う場合、か ら言定を変更すればよいだろう。 Thunderbird が SPAM なり悲惨な状況になる。 とみなしたメールを、たとえば、、 Junk ( 迷惑メール ) " と このような問題を解決するには、サーバー側に SPAM いうフォルダに移動させるように設疋しておけば、誤って フィルタを導入し、そこで処理をおこなうほうがよい。 SPAM と判断したメールを普通のフォルダに戻すことも れを実現してくれるのが SpamAssassin である。 可能になる。 SPAM フィルタが、、 SPAM ではない " とみなしたメー ルをユーザーが SPAM と判断したとき、どのような処理 をおこなうかも指定できる。これも、 Junk フォルダなど に移動させるように設定するのカましい。人間が手で操 作する以上、どんなに注意していても間違う可能性はある ( 私自身、 SPAM ではないメールを SPAM に分類してし まったことカ舸回もある ) 。したがって、いったん Junk フ 回区 Junk MaiI C00 れ引 s P son 引 Ad 市 0 80 巨丕コ days om folder 亠ー 込物ま Mai は 特徴 SpamAssassin は、 Bayesian フィルタ以外に、次のよ うな手法を用いて SPAM の判定精度を高めている。 ・メールヘッダのチェック 詢解析 ・ white list/black list の設疋 ・ SPAM データベース (DCC 、 pyzor 、 Razor2 など ) ニ = ロ 37 UNIX MAGAZINE 2005.4
やレベルの指定の場合と同様に、、すべて " のプログラムを 表します。つまり、プログラム名として * を指定すると、 以降はすべてのプログラムに関する言古が続くことを意味 しますから、プログラム指定を無効にすることになるわけ です。 プログラム指定で複数のプログラムを指定することもで きます。これには、プログラム名を指定する部分で対象の プログラム名をカンマで区切って並べます。このようにす ると、以降の言は指定したすべてのプログラムについて 効になります。 プログラム指定を使ってあるプログラムに関するメッセ ージの処理方法を指定したあとで、それ以外のプログラム に関する指定を言杢したい場合も多いでしよう。ここまで に紹介した記法でこれを実現するには、メッセージを出力 する可能性のあるすべてのプログラムを列挙しなければな らず、現実的ではありません。 もちろん、このような処理をおこなうための記法も用意 されています。プログラム指定では、 ! の後ろに十やーを指 定することができます。十を指定した場合は普通のプログ ラム指定と変わるところはありませんが、一を指定すると プログラム指定の未がまったく変わります。 ! ープログラム名 とした場合、以降の記述は指定されたプログラム以外のす べてのプログラムからのメッセージが対象となります。 の機能を使えば、あるプログラムに関する設定と、それ以 外に関する定を簡単に分けることができます。 ! sshd /var/log/sshd. 10g !—sshd /var/log/all ・ 10g この設定では、 sshd から送られたメッセージはすべて sshd.log にオ帑内されます。そして、 syslogd に渡されたす べてのメッセージは all. log に本内されますが、 sshd から 送られたメッセージだけはこのファイルには書き込まれま せん。 これまでの説明では、プログラム名は実際にメッセージ を出力したプログラムを表していましたが、例外として、カ ーネルが出力するメッセージだけは特別な処理がおこなわ れます。具体的には、カーネルが出力するメッセージの先 頭が、指定されたプログラム名と一致する場合にも、以降 74 の設定が効になります。この機能は、プログラムが異常 終了した場合などに、カーネルが出力するメッセージをプ ログラムに関するログとして扱うために用意されているの でしよう。 プログラム指定では以降の言を適用するプログラムを 選択できましたが、ホスト指定ではメッセージを生成した ホストを選べます。ログの一元管理などのためにあるマシ ンにログを集めた場合、すべてのマシンから出力されたメ ッセージをそのまま 1 つのファイルに保存したのでは、さ まざまなホストが出力したメッセージが入り交じってしま い、ログがひどく読みにくくなってしまうこともあるでし よう。ホスト指定を使えば、メッセージを出力したホスト を限定して設定を適用できるため、ホストごとに出力ファ イルを変更するなど、柔軟な対応がおこなえるようになり ます。 行頭が十かーで始まる行がホスト指定を表します。十記 号を使って、 ホスト指定 + ホスト名 とした場合、以降の言杢は指定したホストから送られるメ ッセージについてのみ有効になります。一方、一記号を使 って、 ーホスト名 とした場合、以降の言は指定したホスト以外のホストか ら送られるメッセージについてのみ有効になります。 ホスト指定でも後方互換性のために、十とー記号の前に # を置くことができます。また、プログラム指定と同様、 複数のホストを指定したい場合にはカンマで区切って並べ、 ホスト指定を無効にしたい場合にはホストとして * を指定 することができます。 ホスト指定では、ホスト名として、、@" カ坏リ用できます。 これは、 syslogd を実行しているホストを表します。もち ろんホスト名をそのまま指定してもかまいませんが、 @ を 使うことで、複数のマシン間で設定ファイルを共有できる ようになります。 UNIX MAGAZ 工 NE 2005.4
ることができます。 ルのものを除いてすべてログファイルに記録しつつ、重要 なメッセージはログインしているユーザーの端末に表示す @loghost ることが叮能です。 * と複数の指定を組み合わせて使う際には、管理者の意 次は、複数のセレクタに対して同じアクションを実行し 図とは異なる解釈がされることがあるので注意が必要です。 たい場合を考えてみましよう。もちろん、セレクタごとに syslog. conf のオンライン・マニュアルにも例が出ていま 同じアクションを指定した行を言古する方法もありますが、 複数のセレクタをまとめて指定できる略記法を使うほうが 簡単です。セレクタを指定する際に複数のセレクタを mail . crit ; * . err ( セコロン ) で区切ってすると、受け取ったメッセー と指定したとします。この場合、管理者は電子メールに関 ジカそのいずれかにマッチした場合にアクションが実行さ しては crit ( 危険なエラーが発生したとき ) 以上を、ほかの れます。たとえば、 auth と authpriv の両方について、 プログラムに関しては err ( 工ラーが発生したとき ) 以上を info 以上のすべてのメッセージをファイルに記録したけれ 指定したいわけです。しかし実際には、後者の指定に電子 ば、次のように言します。 メール関連の通常のエラーについてのメッセージがマッチ /var/log/auth ・ 10g auth. infO ; authpriv. 1 Ⅱ fO するため、けっきよく、後者だけを指定したのと同じ ( すべ てのファシリティに関してエラー以上のメッセージを指定 この場合、 auth. info にマッチするメッセージと、 auth- した ) ことになってしまいます。意図どおりに動作させる priv. info にマッチするメッセージの両方が auth. log ファ には、 * の部分に mail 以外のすべてのファシリティを記 イルに言泉されます。 述しなければなりません 1 。 この例では、 2 つのセレクタでファシリティの部分は異 なりますが、レベルはどちらも info で共通しています。 のような場合の略記法として、複数のファシリティを ( カンマ ) で区切って並べると、それらに対して 1 つのレベ ルを指定できます。したがって、上の例は次のように言杢 こまでの説明では、ファシリティに対してあるレベル してもまったく同じ前末になります。 を指定すると、そのレベル以上のすべてのレベルのメッセ ージがマッチすると述べました。これは、ファシリティと /var/log/auth ・ 10g auth , authpriv. inf0 レベルをドットで区切る記法では正しいのですが、この 2 この場合にも auth. info にマッチするメッセージと、 au ー つを異なる方法で組み合わせることもできます。 thpriv. info にマッチするメッセージの両方が auth. log フ レベルの指定では、レベルの比較フラグカリ用できます。 ァイルに言彖されます。 = > ( または 比較フラグには < 、 < = ( または = < ) 、 複数の指定とはやや異なりますが、ファシリテイやレベ > = ) 、 > があり、渡されたメッセージのレベルとセレクタ ルの指定には、、すべて " を意味する * カ駛えます。ファシ に記述されたレベルの関係を調べ、指定されたフラグの条 リティとして * を指定すればすべてのファシリティとマッ 件を満たしている場合にマッチしたとみなします。このと チし、レベルとして * を指定すれば一番低いレベルの de- き、メッセージのレベルを左辺に、セレクタのレベルを右辺 bug を指定した場合と同様に、すべてのレベルのメッセー に置いて条件を満たすかをチェックします。たとえば、 ftp ジとマッチします。これを利用して次のように言当してお に関するエラーメッセージだけを処理したい場合には、セ けば、 syslogd に渡されるすべてのメッセージをファイル レクタを次のように言します。 に言彖することができます。 ftp.=err /var/log/all .10g 1 これには、さきほと韶介した複数のファシリティをまとめて指定する去カ硬 また、次のようにすれば、このホストではログの処理を えます。また、杢のプログラム指定をうまく利用すると、同様の効果を比 おこなわず、 loghost というホスト上でログを一元管理す 車効純な記述で知見できます。 ミ、ゞ レベル指定の詳細 72 UNIX MAGAZINE 2005.4
プログラム指定とホスト指定 プログラム指定とホスト指定は独立に機能します。次の 場所 4 + hostY 場所 3 !progB 場所 2 + hostX 場所 1 ! progA 例を見てください。 UNIX MAGAZINE 2005.4 厄 gge 「コマンド スクリプトからもメッセージが発行できるようにしておき らメッセージを送れません。せつかくですから、シェル・ を利用していたので、これだけではシェル・スクリプトか を発行する方法を紹介しました。そこではライプラリ関数 ところで、前回はプログラム中から syslog にメッセージ カべられるのです。 が -- - ・致しているかどうかを検査してから、セレクタの条件 にマッチしているかどうかを判断する場合には、まず属性 はホスト属性の値を変更します。実際にメッセージカ霈 ログラム指定はプログラム属性の値を変更し、ホスト指定 付いていると考えれば、分かりやすいかもしれません。プ れの行には、、プログラム " と、、ホスト " という 2 つの属性が 定には影響しません。設疋ファイルに書かれているそれぞ んら影響はありませんし、逆に、プログラム指定もホスト指 ホスト指定をしたからといって、プログラム指定にはな セージ 場所 4 : ホスト hostY のプログラム progB からのメッ セージ 場所 3 : ホスト hostX のプログラム progB からのメッ ッセージ 場所 2 : ホスト hostX のプログラム progA からのメ ッセージ 場所 1 : すべてのホストのプログラム progA からのメ 指定は次のようなメッセージに対して効となります。 このように言当されていた場合、場所 1 ~ 4 に書かれた プログラミング・テクニック : ましよう。前回紹介したライプラリ関数を使って自分でプ ログラムを作成してもよいのですが、システムにはそのた めのコマンドとして logger が用意されています。 logger は syslog にメッセージを送るためのコマンドで す。使い方はいたって簡単で、 logger コマンドの引数に送 信したいメッセージを指定するだけです。たんにメッセー ジのみを指定した場合は、ファシリティが user 、レベルが notice のメッセージを送ります。ファシリテイやレベルを 指定するには一 p オプションを使います。 -p オプションの 引数として、、ファシリティ . レベル " という文字列を指定す ると、指定したファシリテイやレベルを用いてメッセージ が送られます。ファシリテイやレベルには、 syslog. conf フ ァイルで使われているような文字列を指定できます。です から、 logger ¯p auth. warning lnvalid password などとすれば、 auth ファシリティの warning レベルのメ ッセージとして、、、 lnvalid password" という文字列を送 ることができます。 これ以外には、メッセージのなかにプロセス ID を含め る -i オプション、メッセージを送信するだけでなく標準ェ ラー出力にも出力する一 s オプション、コマンドを実行した ホストではなく別のホストへメッセージを送信するための —h オプション、メッセージの内容をファイルから取得する ための一 f オプションなどが用意されています。 今回は、おもに syslogd デーモンの動作やその設疋につ いて説明し、シェル・プログラムから syslog システムを 利用するための logger コマンドも紹介しました。 これでシステムの動作はひととおり説明したので、いよ いよ次回からはソースコードをみていくことにしましよう。 syslogd には、送られたメッセージを電子メールで送イ言する という機能はありません。現在のところ、これを実現する にはコマンドを実行する機能を使うことになります。しか し、ソースコードを理解すれば拡張するのも簡単です。電 子メール機能を拡張してみるのもおもしろいかもしれませ ☆ ん。 75 ( たじみ・ひさかす )
ん。つまり、ファシリティには kern 、 console 、 auth 、 au- thpriv 、 security 、 ftp 、 lpr 、 mail 、 news 、 cron 、 uucp 、 syslog 、 daemon 、 user 、 local()æ 10Ca17 のいずれかを指 定します。 レベルのほうも、ライプラリ関数の引数として用いる 記号定数 (LOG-EMERG など ) の一以降の文字列を指定 します。こちらも大文字と小文字は区別されません。つま り、レベルとしては emerg 、 alert 、 crit 、 err 、 warning 、 notice 、 info 、 debug のいずれかを指定します。 レベルの値は上記の順番で重要度カ皜く、もっとも高い のが emerg 、もっとも低いのが debug となります。レ ベルの順番は重要です。たとえば、セレクタとして、、 ftp. warning" を指定した場合、 FTP に関するメッセージのな かの警告メッセージを未するのではなく、 warning 以上 のレベルのメッセージ ( つまり warning 、 err 、 crit 、 alert 、 emerg の 5 種類 ) を指定したことになります。 アクション部では、セレクタ部で設定したメッセージの 処理方法を指定します。次のような記法羽吏えます。 / で始まるパス名 指定したファイルにメッセージを追加する。 , で区切られたユーザーのリスト 指定されたユーザーのうちログインしているユーザー 端末にメッセージを表示する。 ログインしているすべてのユーザーの端末にメッセー を表示する。 ・ @ホスト名 推定したホストにメッセージを中幻医する。 戸マンド行 の ン 標準入力としてメッセージを渡しながら、 sh を使ってコ マンド行を実行する。 コマンド行を使うときに注意が必要なのは、コマンドの 標準出力と標準ェラー出力は /dev/null に割り当てられて いるため、コマンドのなかで明示的に出力先を指定しない と何も出力されない点です。また、ファイルに出力する場 合などは、その出力のバッファリングにも注意しなければ なりません。バッファリングにより出力に時間がかかる場 合もありますし、プロセスが異常終了したときに出力がお こなわれない可能性もあります。このような場合には、で UNIX MAGAZINE 2005 . 4 プログラミング・テクニック : きればバッファリングをおこなわない入出力を使うほうが よいでしよう。 コマンドはメッセージごとに起動されるわけではありま せん。いったんメッセージを処理するために syslogd がコ マンドを起動すると、タイムアウト時間 ( 60 秒 ) を過ぎる かコマンドが終了しないかぎり、次のメッセージも同じプ ロセスに渡されます。つまり、メッセージが頻繁に発生し ている場合には、 1 度のコマンド起動で複数のメッセージ を処理しなければならなくなることがあります。 以上が syslog. conf の基本的な記法ですが、複数の処理 対象をまとめて諮することもできます。 まず、あるセレクタに複数のアクションを適用したい場 合について考えてみましよう。これは、アクション部を複 数言当できれば実現可能です。しかし、アクションとして コマンド行を指定する場合は行末までがアクションの内容 として扱われるため、 1 行に複数のアクションを言古する ことはできません。複数のアクションを指定したい場合に は、それぞれを別の行に言当します。つまり、 syslog ・ conf ファイルには同じセレクタをもつ行カ夏数存在することに なります。ーヨ殳に、 syslogd は受け取ったメッセージにマ ッチするセレクタカ数ある場合には、それらに指定され ているすべての処理を実行します。セレクタが同一の 2 つ のアクションをそれぞれ別の行に言杢した場合、どちらか にマッチするメッセージはかならずもう一方にもマッチし ますから、両方のアクションが実行されることになります。 これは同一のセレクタが指定された場合にかぎりませ ん。セレクタによっては、異なるセレクタであっても同 ーのメッセージにマッチする場合があります。たとえば、 以下のようにレベルとして info を指定したセレクタと emerg を指定したセレクタがあるとすると、 emerg のほ うにマッチするメッセージはかならず info のほうにもマ ッチすることになります。この場合には、両方のセレクタ に割り当てられているアクションが実行されます。 複数の処理対象の指定 kern . info kern. emerg これにより、 /var/log/kernel. 10g カーネルからのメッセージは debug レベ 71
連載 / ネットワークとセキュリティ ものがあります。なお、オプションが指定されない場合に です。おもなコマンドライン・オプションには次のような sniffdet オプション対象 IP アドレス / ホスト名 す。 -c オプション —i ethO テストバケットを送信するインターフェイスを指定しま -i オプション は言定ファイルの値カ駛われます。 ー I オプション —c /usr/local/etc/sniffdet . conf 場合は /etc/sniffdet. conf カ坏リ用されます 5 設疋ファイルのパス名を指定します。とくに指定しない め、このオプションで明示的にパス名を推定しないかぎり、つねに /etc/ 5 ソースコードで設疋ファイルのパス名がハード・コーディングされているた Sniffdet を実行する際の必顎オプションです。 ト ) 、 latency (Latency テスト ) です。 -t オプションは、 (DNS テスト ) 、 arp (ARP テスト ) 、 icmp (ICMP テス 利用する調査手法を指定します。指定できる値は、 dns -t オプション ファイルの UID オプション、 GID オプションと同等です。 Sniffdet を実行する UID と GID を指定します。設定 -u オプション、 -g オプション gin オプションと同等です。 利用するプラグインを指定します。設定ファイルの plu - -p オプション アドレスを別途指定する必要はありません。 なお、 -f オプションを指定する場合には、検知対象の IP スト数は 1 , 024 ホストです。 ストを一度に調査したい場合に便利です。対応しているホ が 1 行ごとに言古杢されたファイルを指定します。複数のホ スニッファーの検知対象の IP アドレスまたはホスト名 ー f オプション ー 1 sniffdet .10g 指定します。 プログラムの動作に関する出力を保存するファイル名を UNIX MAGAZINE 2005.4 sniffdet. conf を読み込もうとします。 —t dns ー h オプション 利用方法を表示します。ほかのオプションとは併用でき ません。 Sniffdet の各調査手法について Sniffdet は dns 、 arp 、 icmp 、 latency という 4 オ重類 の調査手法に対応しています。ここでは、各手法について 説明します。 DNS テスト DNS テストは、多くのスニッファーがトラフィック中 の IP アドレスの逆引きをおこなう動作をもとに、スニッ ファーの存在を推測する調査手法です。 この手法では、実際には同一セグメント上に存在しない MAC アドレスと IP アドレス宛のトラフィックを発生さ せます。もし、スニッファーが IP アドレスを逆引きして いれば、トラフィックに含まれる実在しないはずの IP ア ドレスを解決するためのバケットが発生するので、スニッ ファーの存在を検知できます ( 図 6 ) 。一方、タイムアウト に設定された時間だけ待っても IP アドレスの逆引きがお こなわれない場合には、スニッファーか存在しないものと して扱います。 この手法のメリットとしてはネットワークや検知対象ホ ストに与える負荷が少ないこと、デメリットとしてはスニ ッファーが IP アドレスの逆引きをおこなっていない場合 には、正しく検知できないことが挙げられます。また、イ ンテリジェントなスイッチングハプの管理用 IP アドレス にテストをおこなったところ、言盟衾知が発生する場合があ りました。 ARP テスト ARP テストは、 NIC が promiscuous モードになって いる可能性のあるホストに ARP 要求を送信し、その応答 をもとにリモートから NIC の状態を推測する手法です。 この手法では、架空の MAC アドレス ( 0 : 0 : 0 : 0 : 0 : 1 ) か ら架空のユニキャスト MAC アドレス宛に、テスト対象の IP アドレスを含む ARP 要求を j 型言した際、架空の MAC アドレス宛に ARP 応があれば、スニッファーか動作し 55
ー 0 連載 / v6 の実装 図 1 有交加 ) 言綻 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1519 1520 1521 1522 1523 1524 if (coa_lifetime く mpfx—>mpfx—vltime) { mbu—>mbu_lifetime coa_lifetime; } else { mbu—>mbu—lifetime = mpfx—>mpfx—vltime ; time_second + mbu—>mbu_lifetime; mbu—>mbu—expire mbu—>mbu—lifetime = mip6ct1—bu-maxIifetime ; mbu—>mbu—lifetime > mip6ctI—bu—max1ifetime) if (mip6ct1—bu—max1ifetime > 0 & & / * sanity check for overflow * / if (mbu—>mbu—expire く time—second) mbu— >mbu_ e xp ire 0x7fffffff; mbu—>mbu_refresh = mbu—>mbu_lifetime ; / * registration. * / mbu—>mbu_coa = *COa; mbu—>mbu—pri—fsm_state : MIP6_BU_PRI_FSM_STATE_IDLE ; ? MIP6_BU_PRI_FSM_STATE_WAITA (mbu—>mbu-flags & IP6MU-HOME) 1525 } 1 , 508 ~ 1 , 509 行目で、引数で推定されたフラグ情報と送 信相手のアドレス情報を設定します。ホームアドレスは、 mpfx で指定されたプレフィックス情報の mpfx-haddr メ ンバー変数としてイ尉寺されているので、その値をコピーし ます ( 1 , 510 行目 ) 。 1 , 511 ~ 1 , 525 行目は気付アドレスと初期状態の設定で す。気付アドレスは、移動ノードの現在位置によって異な る値が設定されます。移動ノードがホーム・ネットワー クに接続していれば、作成される対応付け更新は登金年除 のためのものとなります。登年除の場合、気付アドレス にはホームアドレスと同じアドレスを指定します。また、 mbu-pri-fsm-state は、ホーム登録 (IP6MU-HOME) フラグによって設定される値が異なります。ホーム登録フ ラグが指定されている場合は登金年除の応答待ちを未す る MIP6-BU-PRI-FSM-STATE-WAITD が、ホーム 登録でない場合は初期状態を示す MIP6-BU-PRI-FSM- STATE-IDLE が設定されます。移動ノードが出先ネッ トワークに接続している場合 ( 1 , 519 ~ 1 , 524 行目 ) は、 引数で指定された気付アドレスを設定し、 mbu-pri-fsm- state として登録メッセージの応待ちを示す MIP6-BU- PRI-FSM-STATE-WAITA が指定されます。 1 , 526 ~ 1 , 538 行目 ( 図 1 ) では有効時間を設定します。 mpfx-vltime はホーム・プレフィックスの効時間です。 ホーム・プレフィックスの有効時間よりも気付アドレスの 有効時間が短ければ、気付アドレスの有時間カ対応付け 更新の有効時間として誌定されます。そうでなければ、ホ UN 工 X MAGAZINE 2005.4 ーム・プレフィックス ( = ホームアドレス ) の有効時間が 定されます。 1 , 531 ~ 1 , 533 行目で対応付け更新の有効時間の上限を 設疋します。 mip6ctl-bu-maxlifetime は sysctl コマン ドで設定可能なグローバル変数で、移動ノードが保持する 対応付け更新の最大有効時間を指定します。一般に、アド レスの有効時間はかなり長いので ( 通常は周間程度 ) 、利 用されなくなった対応付け更新の情報が長時間タイムアウ トせずに残ることを避けるために上限を定します。 1 , 534 ~ 1 , 537 行目は有効時間が切れる時刻のオーバー フロー対策です。 mbu-expire は符 - 引寸き 32 ビット整数 ですから、その最大値 0X7 仕仕仕 f を超えると負数になりま す。肩効時刻がオーバーフローした場合は、最大イ直である 0X7 仕仕肝を設定します。 図 2 の 1 , 540 行目で、通し番号 (mbu-seqno) を乱数値 で初期化します。 1 , 541 ~ 1 , 544 行目では、移動ノードが 固定ノードに送信するクッキー値 (mbu-mobile-cookie) を乱数値で初期化します。 arc4random() が生成する乱数 値は 4 バイト整数ですが、クッキー値は 8 バイト長なので、 2 回に分けて初期化しています。 最後に、 1 , 545 行目でホーム・ネットワーク構造体への ポインタを格納します。 1 , 547 行目の mip6-bu-update- firewallstate() は、彳主復糸各確認を開始する牛の初期化 です。この機能は別の機会に解説します。 対応付け更新のリスト操作 mip6-bu 構造体は mip6-bu 」 ist として定義されてい るリスト構造体のエントリです。 KAME では、リスト操 作のためのサービス関数を定義しています。 1552 static int 1553 mip6-bu—1ist-insert (bu_list , mbu) 61
連載 / ネットワークとセキュリティ 表 3 言手法ごとのオプションとデフォルトの言聢値 timeout 不少 ) tries 回 ) interval ( ミリ秒 ) fake-hwaddr 1000 20 1000 20 20 1000 dport s port fake-ipaddr 〇〇〇 10 icmptest 10 arptest dnstest 10 latencytest 300 〇 : 設定可能 x : 言不可ー : 該当譿項目なし * latencytest は、 TCP のバケットをフラッディングしながら ping を送信するため、言寸象は ping となる。 * * ソースコードにハード・コーディングされている。デフォルト値は、 fake_hwaddr が、 ()x 仕 , 0X00 , 0X33 , 0X67 , 0X12 , 0X45 " (src/lib/ latencytests. c の 286 行目 ) 、 fake-ipaddr が 200.185.15.96 ( 同 302 行目 ) 、 sport と dport が 23 番 ( 同 311 、 310 行目 ) 。 に合わせ、 nobody などの Sniffdet を実行するユーザー tries オプションは利用できません。 の UID の値に変更します。 interval オプション テスト用パケットを送信する間隔をミリ秒で指定しま $ id nobody uid=99(nob0dy) gid=99(nob0dy) groups=99(nob0dy) す。 latencytest では ping を j 言する間隔となります。 この例では、 id コマンドで nobody の UID と GID を fake-hwaddr 、 fake-ipaddr オプション 調べるといすれも 99 なので、それぞれの値を以下のよう テスト用パケットの送信先となる架空の MAC アドレス に変更します。 および IP アドレスを指定するオプションです。同一セグ UID = 99 ; メント内に実在しない MAC アドレスおよび IP アドレス GID = 99 ; を指定します。 iface オプション sport 、 dport オプション テストバケットを送信するインターフェイスを指定しま テスト用パケットが TCP の場合の送信元ポート番号、 す。デフォルトの値は eth0 です。 宛先ポート番号を指定するオプションです。テスト用のパ teth0" ・ iface ケットだということが分かるよう、通常は利用しないポー サンプルの設疋ファイルには、ほかに fake-hwaddr オ ト番号のほうがよいでしよう。 プションと fake-ipaddr オプションがありますが、試した 周査手法とオプション かぎりでは実際には動作しませんでした。 各調査手法で指定できるオプションとデフォルトの設疋 調査手法ごとのステートメント 値は表 3 のとおりです。 Sniffdet では、 ICMP を利用した調査手法のパラメー plugins ステートメント タを設疋する、、 icmptest" 、 ARP を利用する、、 arptest" このステートメントからの設定変更に対応しているプラ DNS を利用する、、 dnstest" 、遅延をもとに調べる、、 laten- グインは、いまのところ XML プラグインのみです。 cytest" の、合計 4 種類の調査手法がサポートされていま XML プラグインでは、 xmlplugin-filename オプショ す。ここでは、各調査手法に共通するパラメータを説明し ンを使って出力ファイル名を指定できます。 ます。 "xmloutput . xmlplugin-filename timeout オプション テストがタイムアウトするまでの時間を秒数で指定しま Sni 仕 det のコマンドライン・オプション す。大きな値を指定すると結果が得られるまでの時間が長 Sniffdet は、実在しない MAC アドレスを駆使してス くなります。 ニッファーカ材家動しているホストを検知するため、同一セ tries オプション グメント上のホストのみを検知対象とすることができます。 テスト用パケットを送信する回数を指定します。ただ Sniffdet の基本的な利用方法は、 し、 latencytest ではバケットをフラッディングするため、 〇 〇 1500 * 54 UNIX MAGAZ 工 NE 2005 . 4