Maltrail — 数百のフィードで悪性通信をリアルタイム検出するネットワーク脅威監視システム

タグ Maltrailネットワーク脅威検知脅威インテリジェンスオープンソースIDSSIEM連携パケット解析columnコラムlinuxLinuxGitHubstamparmmaltrail
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

Maltrail — 数百のフィードで悪性通信をリアルタイム検出するネットワーク脅威監視システム

ひとことでいうと

Maltrail(マルトレイル) は、ネットワーク上を流れるパケット(データのかたまり)をリアルタイムで見張り、マルウェア(悪意あるプログラム)の通信先や不審なドメイン名を自動で検出・記録するオープンソースのセキュリティツールです。alienvault・blocklist・feodotracker など数百種類の「脅威インテリジェンスフィード(世界中のセキュリティ研究者が公開している悪性IPやドメインのリスト)」を定期的に取得し、常に最新の情報と照合するため、高い検出率を実現しています。パターンに頼らない「ヒューリスティック検知(異常なふるまいのルールで未知の脅威を見つける仕組み)」も備えているため、リストに載っていない新種の攻撃にも対応できます。MIT ライセンスのオープンソースで、FreeBSD・OPNsense・BlackArch Linux・Splunk アドオンなど多数の環境への導入実績があります。セキュリティ担当者から自宅サーバーの管理者まで、幅広い方が手軽に導入できます。


こんな人におすすめ

  1. 社内ネットワークを守りたいセキュリティ担当者
    社内の端末がマルウェアのC&Cサーバー(感染した機器を遠隔操作するサーバー)に通信していないか、Torネットワーク(匿名化通信の仕組み)経由の不審なアクセスが来ていないかを一元管理したい方に最適です。ブラウザで見やすいWebレポート画面が付いており、IP・ドメイン・URLごとのイベントを色分けして確認でき、インシデント発生時の初動調査を素早く行えます。

  2. 自宅サーバーやVPSを運用しているホームラボ愛好家
    自分のサーバーに届く脅威の実態を把握し、どのIPやドメインが既知の悪性リストにヒットしているかをブラウザで確認したい方にぴったりです。サーバーコンポーネント単体でも動かせるため、パケットキャプチャ(ネットワークを流れる通信を記録する技術)が難しい環境でも、ログの蓄積と可視化から始めることができます。

  3. 脅威インテリジェンスを自動化したいセキュリティ研究者・CSIRT
    日々の脅威情報収集を自動化し、SYSLOG_SERVERLOGSTASH_SERVER オプションで既存のSIEM(ログを一元管理して脅威を分析するシステム)と連携したい方にも向いています。fail2ban(不正アクセスを自動でブロックするツール)と組み合わせることで、攻撃者IPの自動ブロックまで一連の流れを構築できます。


インストール・使い方

ターミナルとは、文字を入力してパソコンに命令を送る画面のことです。以下のコマンドはコピー&ペーストで実行してください。

Step 1: 必要なシステムパッケージをインストールする

sudo apt-get install git python3 python3-dev python3-pip python-is-python3 \
  libpcap-dev build-essential procps schedtool

build-essential には C++ コンパイラ(g++)が含まれており、libpcap-dev はパケットキャプチャの開発用ヘッダファイルです。次のステップで Python ライブラリをビルドするために必要なので、先にまとめてインストールしておきます。

Step 2: Python パッケージをインストールする

sudo pip3 install pcapy-ng

pcapy-ng は Python からパケットキャプチャ機能を呼び出すためのライブラリです。古い pcapy は Python 3 環境で問題が報告されているため、必ず pcapy-ng を使ってください。

Step 3: ソースコードをダウンロードする

git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail

git clone はリポジトリ(ソースコードの置き場)をパソコンにコピーするコマンドです。--depth 1 を付けることで、最新版だけを素早く取得できます。

Step 4: サーバーとセンサーを起動する

# サーバー(Web レポート UI)を起動する(管理者権限は不要)
python3 server.py
# 別のターミナルウィンドウでセンサーを起動する(管理者権限が必要)
sudo python3 sensor.py

サーバーとセンサーはそれぞれ別のターミナルウィンドウで起動します。センサーは初回起動時にトレイル(脅威リスト)データを自動でダウンロードします。起動後はブラウザで http://127.0.0.1:8338 にアクセスし、ユーザー名 admin・パスワード changeme! でログインするとWebレポート画面が表示されます。


ブラウザで試す

センサーとサーバーをフルセットで用意しなくても、ブラウザ上でトレイル検索とログ行パーサーを試せる公式デモが用意されています。サンプルデータを使って Maltrail の検出ロジックや CSV ログ形式を体験でき、実際に照合しているフィード一覧も確認できます。まずは動作イメージを掴みたい方はデモから試してみるのがおすすめです。


動かしてみた

リポジトリのクローンは問題なく完了し、sensor.pyserver.pycore/plugins/ など主要ファイルがすべて揃っていることを確認しました。Python 3.12 環境でも Maltrail の対応バージョン範囲(Python 2.6 / 2.7 / 3.x)に含まれており、互換性の問題はありませんでした。

確認したファイル構成は以下のとおりです。

./sensor.py        # センサーコンポーネント本体
./server.py        # サーバー・Web レポートコンポーネント
./maltrail.conf    # センサー・サーバー共通の設定ファイル
./core/            # 共通ライブラリ群(設定・ログ・ネットワーク処理など)
./plugins/         # プラグイン(peek.py, strings.py)
./docker/          # Docker 関連ファイル(Dockerfile, docker-compose.yml)

サーバーコンポーネント(server.py)はパケットキャプチャライブラリがなくても単独で起動できます。センサーを動かす場合は build-essentiallibpcap-dev を事前に入れておくことで pcapy-ng のビルドが完了し、フルセット構成で稼働します。

試す前に知っておくとよいこと

  • センサーを快適に動かすには RAM 1GB 以上が推奨されています(シングルプロセスモードの場合)。
  • マルチプロセスモード(USE_MULTIPROCESSING=true)を使うと複数の CPU コアを活用でき、大量パケットを処理する環境でもスループットが向上します。
  • 対応 OS は Linux・macOS・BSD 系・Windows(一部制限あり)で、Python 2.6 以降が動けば基本的に動作します。
  • Docker イメージ(ghcr.io/stamparm/maltrail:latest)も公開されており、環境を汚さずにサーバーコンポーネントをすぐに試せます。

サーバーとセンサーが起動した状態で、以下のコマンドで検出の動作確認ができます。

# 既知の悪性 IP への ping でセンサーが反応するか確認する
ping -c 1 136.161.101.53
cat /var/log/maltrail/$(date +"%Y-%m-%d").log

# 悪性ドメインの DNS 解決でセンサーが反応するか確認する
nslookup morphed.ru
cat /var/log/maltrail/$(date +"%Y-%m-%d").log

ログは CSV 形式で /var/log/maltrail/ に日付ごとのファイルとして保存されます。

"2015-10-19 15:48:41.152513" beast 192.168.5.33 32985 8.8.8.8 53 UDP DNS morphed.ru andromeda_(malware) (static)

各フィールドの順番は「時刻・センサー名・送信元IP・送信元ポート・宛先IP・宛先ポート・プロトコル・トレイル種別・トレイル・脅威情報・参照元」です。同じ情報は Web レポート画面でもテーブル形式で確認でき、マウスオーバーで WHOIS 情報や脅威の追加情報も表示されます。


はじめの一歩:実践のコツ

  • まずサーバーだけ起動する: server.py はパケットキャプチャなしで動くため、最初は python3 server.py だけ実行してブラウザ画面の感触を掴むのがおすすめです。
  • Docker を使うとすぐ試せる: docker/ フォルダの docker-compose.yml を使えば、依存パッケージのインストールなしにサーバーコンポーネントを数分で起動できます。
  • デフォルトのパスワードは必ず変更する: 初期パスワード changeme! のまま外部に公開するのは危険です。maltrail.confHTTP_DEFAULT_PASSWORD を必ず書き換えてください。
  • カスタムトレイルは .txt ファイルで追加できる: 組織独自のブラックリストを CUSTOM_TRAILS_DIR に置くだけで標準フィードと組み合わせて使えます。書式は「1行1エントリ」でシンプルです。
  • フィードは1日1回自動更新される: センサーが起動中は設定に従って外部フィードを定期取得します。初回起動後しばらく待つと検出精度が上がります。
  • ログが増えてきたら Web 画面のフィルタを活用する: 送信元 IP・トレイル種別・日付でイベントを絞り込めるため、調査したいアラートをすぐに探せます。

活用例

  • 社内セキュリティ監視の強化: 社内ネットワークの出口にセンサーを置き、マルウェア感染端末からの C&C 通信をリアルタイムで検出。SOC(セキュリティ運用センター)のアラート対応に役立てる。
  • fail2ban との連携で攻撃 IP を自動ブロック: Maltrail の /fail2ban エンドポイントから今日の攻撃者 IP を取得し、iptables + ipset でブロックルールを cron(定期実行の仕組み)で自動更新する運用が可能。
  • Splunk・Elastic Stack への統合: SYSLOG_SERVER(CEF 形式)や LOGSTASH_SERVER(JSON 形式)オプションを設定するだけで、既存の SIEM 基盤へリアルタイム転送できる。
  • 複数拠点のマルチセンサー構成: 各拠点にセンサーを置き、LOG_SERVER で UDP 集約するとともに SENSOR_NAME で発生源を識別。本社の管理画面で全拠点の脅威を一元監視できる。
  • ハニーポット(おとりサーバー)のログ分析: 意図的に外部に公開したサーバーへの攻撃通信を Maltrail で記録・分類し、攻撃者の使うツールや手口を調査する。
  • セキュリティ学習・CTF の練習環境: ローカル VM(仮想マシン)で動かしてネットワークトラフィックの分析手順を学ぶ教材として活用できる。検出ロジックのコードも読みやすく、仕組みの理解にも役立つ。

用語とポイント解説

Trail(トレイル)
検出のトリガーとなる識別子のことです。ドメイン名・URL・IP アドレス・User-Agent ヘッダなどが対象になります。かんたんに言うと「悪性通信を見つけるための目印リスト」です。センサーがパケットを見てこのリストと一致したらアラートを記録します。

Sensor(センサー)
ネットワークインターフェース(NIC)からパケットをキャプチャし、トレイルリストと照合するコンポーネントです。動作には root(管理者)権限と libpcap が必要です。かんたんに言うと「通信を見張る監視カメラ役」です。パケットをリアルタイムで解析してサーバーへ報告します。

Server(サーバー)
センサーからイベントログを受け取り、保存・集約してブラウザ向けのWebレポート画面を提供するコンポーネントです。管理者権限は不要で動かせます。かんたんに言うと「監視カメラの録画デッキ&モニター役」で、ブラウザから誰でも確認できます。

Feed(フィード)
alienvault・blocklist・talosintelligence など外部の脅威インテリジェンスソースのことです。デフォルトで1日1回自動更新されます。かんたんに言うと「世界中のセキュリティ専門家が公開している最新の『危険なIPとドメインのリスト』」です。数百種類をまとめて取得することで検出精度を保っています。

Heuristic(ヒューリスティック)
「異常に長いドメイン名」「NXDOMAIN(存在しないドメインへの問い合わせ)が短時間に多発」などのパターンで未知の脅威を検出する機能です。既存のフィードに登録されていない攻撃にも対応できます。かんたんに言うと「リストになくても怪しい動きを察知する直感ルール」です。

pcapy-ng
Python からパケットキャプチャ機能(libpcap)を呼び出すためのライブラリです。センサーの動作に必須で、インストール時にコンパイルが必要です。かんたんに言うと「Python とパケット監視機能をつなぐ橋渡しライブラリ」です。古い pcapy は Python 3 で問題があるため、必ず pcapy-ng を使います。

CAPTURE_BUFFER
マルチプロセスモード時に使うリングバッファ(一定量になると古いデータから上書きされるメモリ領域)のサイズ設定です。バイト数またはメモリ全体に対するパーセンテージで指定できます。かんたんに言うと「パケット処理の一時的な待合室の大きさを決める設定値」です。

LOG_SERVER
センサーが検出イベントをリモートのサーバーへ UDP で転送する際の送信先アドレスを指定する設定です。マルチセンサー構成で複数拠点のログを一か所に集約するときに使います。かんたんに言うと「センサーが報告を送る本部の住所を指定するオプション」です。SENSOR_NAME と組み合わせることで、どのセンサーからのログか識別できます。

MIT ライセンス
著作権表示さえ残せば、商用・非商用を問わず自由に利用・改変・再配布できるオープンソースのライセンスです。かんたんに言うと「ほぼ何でもOKな超ゆるいライセンス」です。企業が自社システムに組み込んで使う場合も費用はかかりません。


ぜひ 社内ネットワークの脅威監視や、ハニーポットの攻撃ログ分析 などに活用してみてはいかがでしょうか。