arpwatch ツールセットにおける bihourly の徹底解説

ネットワーク監視の世界では、ARP (Address Resolution Protocol) の動向を把握することがセキュリティと安定性の維持に不可欠です。arpwatch は、ネットワーク上のイーサネット MAC アドレスと IP アドレスのペアリングを追跡し、変更があった場合に管理者に通知する強力なツールです。この arpwatch ツールセットには、いくつかの補助的なスクリプトやコマンドが含まれており、その中でも bihourly は特定の役割を担っています。

この記事では、bihourly がどのようなツールであり、arpwatch エコシステムの中でどのように機能するのかを詳しく解説していきます。初心者の方にも分かりやすく、具体的な使い方や設定方法にも触れていきます。ネットワーク管理の効率化に役立つ情報をお届けしますので、ぜひ最後までお読みください。

arpwatch とは? その役割の再確認

bihourly の解説に入る前に、まず arpwatch そのものについて簡単に復習しましょう。arpwatch は、指定されたネットワークインターフェースを流れる ARP パケットを監視するデーモン(またはコマンド)です。主な機能は以下の通りです。

  • IP/MAC アドレスペアリングの記録: ネットワーク上で観測された IP アドレスと MAC アドレスの組み合わせをデータベースファイル (通常は arp.dat) に記録します。
  • 変更の検出と通知: 新しいデバイスの出現、既存デバイスの IP アドレスまたは MAC アドレスの変更(”flip flop” と呼ばれることもあります)などを検出し、syslog への記録や管理者へのメール通知を行います。
  • セキュリティ監視: ARP スプーフィングのような不正行為や、ネットワークへの不正な接続試行を検知するのに役立ちます。

arpwatch は、libpcap ライブラリを使用してネットワーク上の ARP パケットをキャプチャし、その情報を元にデータベースを更新、変更を通知するという仕組みで動作します。通常、サービスとしてバックグラウンドで実行されます。

bihourly の登場:arpwatch の仲間たち

arpwatch パッケージには、本体の arpwatch デーモンの他に、いくつかの関連ツールが含まれています。Kali Linux Tools のリストや Alpine Linux のパッケージ情報などを見ると、以下のようなツールが存在することがわかります。

  • arpwatch: メインとなるデーモン/コマンド。
  • arpsnmp: SNMP を使用して ARP 情報を収集し、arpwatch と同様の追跡を行うツール。libpcap に依存しません。
  • arpfetch: arpsnmp が使用するスクリプトで、指定したホスト(通常はルーターやスイッチ)から SNMP を使って ARP テーブルを取得します。
  • arp2ethers: arpwatch が生成した arp.dat ファイルを ethers ファイル形式に変換するツール。
  • massagevendor: イーサネットベンダーコードのマスターリストを arpwatch が利用する形式に変換するスクリプト。
  • bihourly (または bihourly.sh): 本記事の主役。arpsnmp と連携して定期的に ARP 情報を取得するためのスクリプト。

これらのツールは、arpwatch の機能を補完したり、異なる方法で ARP 情報を収集したりするために提供されています。bihourly は、特に arpsnmp を定期的に実行するシナリオで役立ちます。

bihourly の目的と機能

bihourly は、その名前が示す通り、「2時間ごと」に実行されることを想定したシェルスクリプトです。主な目的は、arpsnmp を定期的に実行し、ネットワーク機器(ルーターやスイッチなど)から SNMP を介して ARP テーブル情報を取得し、arpwatch のデータベースを更新することです。

具体的には、以下のような流れで動作します。

  1. 設定ファイル (listcname) を読み込みます。
  2. list ファイルに記載された各ホストに対して、arpfetch スクリプトを実行します。arpfetch は、指定されたホストとコミュニティ名 (cname ファイルから読み込む) を使用して SNMP クエリを発行し、ARP テーブルを取得します。
  3. arpfetch によって取得された ARP 情報(IP/MAC ペアリング)は、一時ファイルに集約されます。
  4. 最後に、集約された ARP 情報を含む一時ファイルを引数として arpsnmp コマンドを実行します。arpsnmp は、この情報と既存のデータベース (arp.dat) を比較し、変更があれば通知を行います(設定による)。

つまり、bihourly は、能動的にネットワーク機器に問い合わせて ARP 情報を収集する arpsnmp のプロセスを自動化・定期実行するためのラッパースクリプトと言えます。これは、ARP パケットを passively(受動的に)監視する arpwatch デーモンとは異なるアプローチです。

このスクリプトは、cron ジョブとして設定され、定期的に(例えば2時間ごとに)実行されることが一般的です。これにより、ネットワーク機器が保持している最新の ARP テーブル情報を定期的に arpwatch の監視システムに取り込むことができます。

bihourly の設定方法

bihourly スクリプトを使用するには、いくつかの設定ファイルが必要です。通常、以下の2つのファイルを作成する必要があります。

  • list ファイル: SNMP で ARP テーブルを取得したいネットワーク機器(ルーター、スイッチなど)のホスト名または IP アドレスを1行に1つずつ記述します。
  • cname ファイル: SNMP クエリで使用するコミュニティ名(通常は読み取り専用)を記述します。このファイルにはコミュニティ名が1行だけ含まれます。

これらのファイルは、bihourly スクリプトが実行されるディレクトリ、またはスクリプト内で指定されたパスに配置する必要があります。具体的なパスはディストリビューションや設定によって異なる場合がありますが、多くの場合、arpwatch の設定ディレクトリ (例: /etc/arpwatch/) や実行ユーザーのホームディレクトリなどが考えられます。

例えば、list ファイルの内容は以下のようになります。

router1.example.com
192.168.1.254
core-switch

そして、cname ファイルには SNMP コミュニティ名を記述します。

public

注意: SNMP コミュニティ名(特に書き込み権限を持つもの)の管理には十分注意してください。public のようなデフォルトのコミュニティ名はセキュリティリスクとなるため、推測されにくい複雑なコミュニティ名を使用し、アクセス制御リスト (ACL) などで SNMP アクセスを適切に制限することが強く推奨されます。

これらの設定ファイルを作成したら、bihourly スクリプトを実行する準備が整います。

bihourly の実行方法

bihourly は通常、直接コマンドラインから実行するよりも、cron を使って定期的に自動実行するように設定します。

手動でテスト実行する場合は、ターミナルからスクリプトを実行します。スクリプトのパスは環境によって異なりますが、例えば /usr/sbin/bihourly/usr/local/sbin/bihourly などにある可能性があります。Debian 系のシステムでは、/usr/share/doc/arpwatch/examples/bihourly.sh にサンプルとして配置されていることもあります。

# スクリプトの場所を確認して実行 (パスは環境に合わせて変更)
/usr/sbin/bihourly

実行すると、bihourly は設定ファイル (list, cname) を読み込み、arpfetch を経由して SNMP クエリを実行し、最終的に arpsnmp を呼び出して結果を処理します。エラーが発生した場合や、arpsnmp が変更を検出した場合は、syslog やメール(設定による)で通知される可能性があります。

Kali Linux Tools の情報によると、bihourly -h を実行しようとすると、設定ファイルが見つからないというエラーと共に、内部で使用している arpsnmp の使用法が表示されるようです。これは、bihourly 自体にヘルプオプションがないことを示唆しています。

root@kali:~# bihourly -h
cat: list: No such file or directory
cat: cname: No such file or directory
WARNING: tempfile is deprecated; consider using mktemp instead.
Version 2.1a15 usage: arpsnmp [-d] [-m addr ] [-f datafile] [-s sendmail_path] file [...]

cron による定期実行

bihourly の本来の目的である定期実行は、cron を使って設定します。例えば、2時間ごとに実行する場合は、crontab -e コマンドで cron テーブルを編集し、以下のような行を追加します。

# 2時間ごとに bihourly を実行 (スクリプトのパスと実行ユーザーは環境に合わせて調整)
0 */2 * * * /usr/sbin/bihourly

これにより、システムは自動的に2時間ごとに bihourly スクリプトを実行し、arpsnmp を介してネットワーク機器から ARP 情報を収集し続けます。

Debian のパッケージ情報では、bihourly.sh がサンプルとして提供されていることが示唆されており、cron で使用する際にはこのサンプルを適切な場所にコピーして設定する必要があるかもしれません。

arpwatch デーモンと bihourly/arpsnmp の使い分け

arpwatch デーモンと bihourly (および arpsnmp) は、どちらもネットワーク上の IP/MAC アドレスペアリングを監視するという目的は共通していますが、そのアプローチが異なります。

特徴arpwatch デーモンbihourly / arpsnmp
監視方法パッシブ(受動的): ネットワークを流れる ARP パケットをリッスンアクティブ(能動的): SNMP を使用してネットワーク機器に問い合わせ
情報源ローカルネットワークセグメント上の ARP ブロードキャスト/リクエスト/リプライSNMP 対応機器(ルーター、スイッチ等)の ARP テーブル
依存ライブラリlibpcapSNMP ライブラリ (内部で snmpwalk などを使用)
リアルタイム性比較的高い(ARP パケットが発生すれば即座に検知可能)低い(bihourly の実行間隔に依存)
カバー範囲arpwatch が動作しているマシンが接続されているネットワークセグメントSNMP で情報を取得できる範囲(複数のセグメントにまたがる可能性あり)
主な用途直接接続されたセグメントのリアルタイム監視、ARP スプーフィング検出広範囲のネットワーク機器から定期的に ARP 情報を収集、大規模ネットワークでの利用

どちらか一方だけを使うのではなく、両方を組み合わせて使用することも有効です。例えば、各セグメントに arpwatch デーモンを配置してリアルタイムの異常を監視しつつ、bihourly を使ってコアスイッチやルーターから定期的に全体の ARP 情報を収集するといった運用が考えられます。

注意点とトラブルシューティング

bihourly を使用する際には、いくつかの注意点があります。

  • SNMP の設定: 対象となるネットワーク機器で SNMP が有効になっており、bihourly を実行するマシンからのクエリが許可されている必要があります。また、正しいコミュニティ名を使用しているか確認してください。
  • 設定ファイルの権限: list および cname ファイルは、bihourly スクリプトを実行するユーザー(cron で実行する場合はそのユーザー)が読み取り可能である必要があります。
  • スクリプトのパス: bihourly スクリプトや、それが内部で呼び出す arpfetch, arpsnmp, snmpwalk などのコマンドへのパスが正しく通っているか確認してください。環境変数 PATH の設定や、スクリプト内でのフルパス指定が必要になる場合があります。
  • arp.dat ファイルのアクセス権: arpsnmparp.dat ファイルに書き込む権限を持っている必要があります。通常、arpwatch パッケージのインストール時に適切な権限が設定されますが、手動で設定を変更した場合は注意が必要です。
  • 一時ファイルの生成: bihourly は一時ファイルを作成して使用します。一時ファイルを作成するディレクトリ(通常は /tmp)への書き込み権限が必要です。
  • 大量のメール通知: 初めて bihourly を実行したり、長期間停止していた後に再開したりすると、arpsnmp が多数の変更を検出し、大量の通知メールが送信される可能性があります。初期設定時やテスト時には、arpsnmp のオプション(例: -d デバッグモード)やメール送信設定を調整することを検討してください。
  • tempfile の警告: Kali Linux での実行例に見られるように、古いバージョンのスクリプトでは tempfile コマンドを使用している可能性があり、非推奨である旨の警告が表示されることがあります。可能であれば mktemp を使用するようにスクリプトを修正することが望ましいです。

問題が発生した場合は、まず bihourly スクリプトを手動で実行し、エラーメッセージを確認します。また、syslog (/var/log/syslog/var/log/messages など) に関連するログが出力されていないか確認することも重要です。

まとめ

bihourly は、arpwatch ツールセットの一部として提供されるシェルスクリプトであり、主に arpsnmp と連携して動作します。その役割は、SNMP を利用してネットワーク機器から定期的に ARP テーブル情報を取得し、arpwatch のデータベースを更新することです。

パッシブに ARP パケットを監視する arpwatch デーモンとは異なり、bihourly はアクティブに情報を収集するため、異なるネットワークセグメントの情報や、ARP パケットが直接届かない範囲の情報も取得できる可能性があります。cron ジョブとして設定することで、ネットワーク全体の ARP 情報を定期的にスナップショットとして取得し、arpwatch システムに取り込むことができます。

設定には list (対象ホストリスト) と cname (SNMP コミュニティ名) ファイルが必要であり、SNMP の設定やファイル権限に注意が必要です。

bihourly を理解し、適切に活用することで、arpwatch によるネットワーク監視をより広範囲かつ効果的に行うための一助となるでしょう。ネットワークの状況に合わせて、arpwatch デーモンと bihourly/arpsnmp を適切に使い分ける、あるいは組み合わせて利用することを検討してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です