【ITニュース解説】Como Montar um SIEM Doméstico no Linux com Detecção de Intrusos ARP e Fabricante OUI
2026年10月09日に「Dev.to」が公開したITニュース「Como Montar um SIEM Doméstico no Linux com Detecção de Intrusos ARP e Fabricante OUI」について初心者にもわかりやすく解説しています。
ITニュース概要
Linux上でPythonを使い、家庭や小規模オフィス向けセキュリティ監視システムを構築する。カーネルのARPテーブルから接続中のデバイスをリアルタイムで検知し、MACアドレスでメーカーを特定。未知の機器が接続された際に警告し、ネットワークの安全性を強化する。
ITニュース解説
今日のデジタル化された社会において、インターネット接続はもはや生活に不可欠なインフラである。家庭や小規模オフィスでも、パソコン、スマートフォン、スマート家電など、数多くのデバイスがネットワークに接続されている。しかし、これらのデバイスが自身のネットワークに何が接続されているのか、誰が利用しているのかを正確に把握できている人は少ない。多くの家庭では、通信事業者が提供するルーターに盲目的に頼りがちだが、これらのルーターは通常、リアルタイムの接続ログ、セキュリティ監査機能、または未知のデバイスが接続された際のアラート機能などを提供しない。このような状況では、万が一、悪意のある第三者がネットワークに侵入しても、それに気づくことが非常に困難である。
この問題に対処するため、セキュリティの第一歩として、ネットワークに何が接続されているかを常に「見える化」することが極めて重要である。ここで紹介する記事は、この「見える化」を実現するための具体的な方法として、Linuxベースの簡易的なセキュリティ監視システム、通称「Sentinela Doméstico(家庭の番人)」をPythonプログラミング言語で構築する手順を提案している。これは、セキュリティ情報イベント管理(SIEM)システムの小規模版と捉えることができ、システムエンジニアを目指す人にとって、ネットワークセキュリティの基本と実践を学ぶ良い機会となるだろう。
SIEMとは、様々なシステムやネットワーク機器からログ(記録)やセキュリティイベント(事象)を収集し、それらを分析してセキュリティ上の脅威や異常を検知・管理するためのシステムを指す。この「家庭の番人」は、大規模なSIEMほど多機能ではないが、自宅や小規模オフィス環境に特化し、特定の重要なセキュリティ監視機能に焦点を当てている。具体的には、Linuxカーネルが保持するARP(Address Resolution Protocol)テーブルをリアルタイムで読み取り、ネットワーク上のデバイスを高速にスキャンする「Ping Sweep」を実行し、接続されたデバイスのMACアドレスからそのメーカーを特定し、そして最も重要な点として、ネットワークに新しく接続された未知のデバイスを検知して警告を発する機能を提供する。これにより、不正なデバイスの接続を早期に発見し、迅速な対応を可能にする。
ネットワーク上のデバイスを監視するツールとして、Nmapのような強力なネットワークスキャナーが知られている。Nmapはネットワーク監査には非常に優れているが、常時稼働させてネットワーク全体をスキャンし続けることは、いくつかの課題を引き起こす。例えば、不必要なネットワークトラフィック(通信量)を発生させたり、スマート電球やスマートプラグといった敏感なIoT(Internet of Things)デバイスの動作を不安定にさせたりする可能性がある。また、監視ホスト(監視を実行するコンピューター)のCPUを不必要に消費することにもつながる。
そこで、この記事で提案されているのは、Linuxのカーネル(OSの核となる部分)が動的に管理しているARPテーブルを直接読み取るという方法である。ARPテーブルは、IPアドレスとMACアドレス(ネットワーク機器固有の識別番号)の対応関係を記録しているもので、/proc/net/arpという特殊なファイルとしてアクセスできる。このファイルを直接読み取ることで、ほとんどCPUを消費することなく、ネットワークに接続されているデバイスの情報を取得できるのである。これは、効率的かつ低負荷な監視を実現するための賢いアプローチと言える。
スクリプトはPythonで記述されており、いくつかの重要な部分から構成されている。まず、OUI_DATABASEという辞書型の変数がある。これは、MACアドレスの最初の3バイト(OUI: Organizationally Unique Identifier)と、それに対応するデバイスメーカー名を事前にマッピングしたものである。これにより、外部のAPIに依存することなく、デバイスのメーカーをオフラインで特定できる。例えば、「DC:A6:32」は「Raspberry Pi Trading」を示すといった具合である。resolve_vendor関数はこのデータベースを利用し、MACアドレスからメーカー名を返す。
次に、read_kernel_arp_table関数は、/proc/net/arpファイルを読み込み、そこからIPアドレス、MACアドレス、ネットワークインターフェース、そして先ほどのresolve_vendor関数で特定したメーカー情報を含むデバイスリストを構築する。この際、MACアドレスが「00:00:00:00:00:00」のような無効なエントリや、まだ解決されていないデバイスは除外される。
ping_sweep_subnet関数は、ネットワークのサブネット(例えば「192.168.1」の範囲)内の全IPアドレスに対して非同期(同時に多くの処理を並行して行う)にPingを実行する。Pingは、ネットワーク上のデバイスが応答するかどうかを確認する基本的なコマンドである。この処理は、ネットワークに接続されているがまだARPテーブルに登録されていないデバイスを強制的に認識させ、ARPテーブルを最新の状態に更新するために行われる。非同期処理を用いることで、数百台のデバイスに対しても数秒でスキャンを完了できる。
これらの機能はmain関数によって統合され、まずPing SweepでARPテーブルを更新し、その後更新されたARPテーブルからデバイス情報を読み取り、その情報を画面に整形して表示する。これにより、IPアドレス、MACアドレス、インターフェース、メーカー名が一目でわかる形で出力される。
このPythonスクリプトを継続的に動作させるためには、Linuxのシステムサービスとして登録する必要がある。これはSystemdというLinuxのサービス管理システムを利用して行う。スクリプトを/opt/network_sentry.pyのような場所に保存した後、/etc/systemd/system/network-sentry.serviceという設定ファイルを作成する。このファイルには、サービスの名称、いつ起動するか(ネットワークが利用可能になった後)、どのユーザーで実行するか(ここではroot)、どのコマンドを実行するか、そしてサービスが停止した場合に自動的に再起動するかどうかといった情報が記述される。例えば、「ExecStart=/usr/bin/python3 /opt/network_sentry.py」という行は、Python3インタープリタを使って指定されたスクリプトを実行することを意味する。この設定ファイルを記述した後、sudo systemctl daemon-reloadコマンドでSystemdに新しい設定を読み込ませ、sudo systemctl enable --now network-sentry.serviceコマンドでサービスを有効化し、すぐに起動させる。これにより、システム起動時に自動的に監視が開始され、バックグラウンドで常にネットワークを監視し続けるようになる。
もし、このシステムが許可されていない未知のMACアドレスを持つデバイスを検出した場合、単にアラートを表示するだけでなく、具体的なセキュリティ対策を講じることが推奨される。最も効果的な対策の一つは、デバイスをネットワークから隔離することである。例えば、VLAN(Virtual Local Area Network)という技術を使って、スマート家電などのIoTデバイスを、仕事で使うパソコンとは異なる隔離されたネットワークセグメントに配置できる。これにより、IoTデバイスがセキュリティ上の脆弱性を持っていたとしても、それが他の重要なデバイスに影響を及ぼすリスクを低減できる。また、管理可能なスイッチやルーター(MikroTik, OpenWrt, pfSenseなど)を利用している場合は、そのデバイスに割り当てられたIPアドレスからの通信を、ファイアウォールルールやiptablesというLinuxのパケットフィルタリング機能を使ってブロックし、ネットワークへのアクセスを完全に遮断する「検疫」措置を実施できる。
このように、たった数十行のPythonコードとLinuxの基本的な機能を用いるだけで、家庭のネットワーク環境に強固なセキュリティ基盤を構築できる。レイヤー2(データリンク層)レベルでの詳細な可視性は、あらゆるセキュリティ戦略の基礎であり、この「家庭の番人」は、侵入者や不正なデバイスからネットワークを守るための効果的な「番人」として機能する。システムエンジニアを目指す初心者にとっても、ネットワークの仕組み、Pythonプログラミング、Linuxシステム管理、そしてサイバーセキュリティの基礎を実践的に学ぶための優れたプロジェクトとなるだろう。