ネットワーク監視の世界では、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 のデータベースを更新することです。
具体的には、以下のような流れで動作します。
- 設定ファイル (
list
とcname
) を読み込みます。 list
ファイルに記載された各ホストに対して、arpfetch
スクリプトを実行します。arpfetch
は、指定されたホストとコミュニティ名 (cname
ファイルから読み込む) を使用して SNMP クエリを発行し、ARP テーブルを取得します。arpfetch
によって取得された ARP 情報(IP/MAC ペアリング)は、一時ファイルに集約されます。- 最後に、集約された 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 テーブル |
依存ライブラリ | libpcap | SNMP ライブラリ (内部で 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 ファイルのアクセス権:
arpsnmp
がarp.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
を適切に使い分ける、あるいは組み合わせて利用することを検討してみてください。🛡️
コメント