Suricata on Ubuntu — オープンソースIDSでネットワーク侵入を検知

セキュリティ

この記事のポイント

  • Ubuntu 24.04 LTS に apt-get install suricata でバージョン 7.0.3 が入る(22.04 は 6.0.4 と古い)
  • suricata-update で Emerging Threats の無償ルールセットを自動取得できる
  • Snort 互換シグネチャで HTTP / TLS / SSH など 25 種以上のプロトコルを検知
  • -r オプションで既存 PCAP ファイルをオフライン解析できる(自宅環境でも試せる)
  • アラートは fast.log(テキスト)と eve.json(JSON)の 2 形式で記録される

VPS を公開サーバとして運用し始めると、そのうち「本当に不審なアクセスが来ているのか」が気になりだします。Suricata はネットワーク上を流れるパケットをリアルタイムに解析して、既知の攻撃パターンと照合する オープンソースの IDS(侵入検知システム)です。

この記事では Ubuntu 24.04 LTS に Suricata 7.0.3 を実際にインストールして動かし、手製のシグネチャで ICMP パケットを検知するところまでを確認しました。コマンドは全て ubuntu:24.04 Docker イメージで実行しています。

実行環境の仕様(実測): Ubuntu 24.04 + Suricata 7.0.3
実行環境の仕様(実測): Ubuntu 24.04 + Suricata 7.0.3

目次

  1. Suricata とは
  2. インストール手順
  3. suricata-update でルールを最新化する
  4. シグネチャ(ルール)の基本的な書き方
  5. PCAP オフライン解析で動作を確認する(実測)
  6. systemd でサービスとして管理する
  7. ログの読み方
  8. よくあるエラーと解決策
  9. まとめ

Suricata とは

Suricata は OISF(Open Information Security Foundation)が開発するオープンソースの IDS / IPS エンジンです。Snort と互換性のあるシグネチャ形式を採用しているため、Snort 向けに公開されているルールセットをそのまま流用できます。

Suricata IDS の動作フロー(概念図)
Suricata IDS の動作フロー(概念図)

IDS と IPS の違いは「検知するだけか、遮断もするか」です。

モード 動作 典型的な使いどころ
IDS(侵入検知) パケットをコピーして監視。通信は素通り 監視・ログ収集・アラート通知
IPS(侵入防止) NFQueue 経由でパケットを遮断 ファイアウォールと組み合わせた防御

VPS 初心者がまず試すなら IDS モードが無難です。設定ミスで自分のアクセスを遮断するリスクがなく、ログを眺めながら学べます。

インストール手順

手順1:パッケージリストを更新してインストールする

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 では候補バージョンが 6.0.4-3 と古いため、最新機能を使う場合は 24.04 を推奨します。




ubuntu@linuxlab: ~
$ sudo apt-get update
$ sudo apt-get install -y suricata
Setting up suricata (1:7.0.3-1build3) …
Processing triggers for systemd (255.4-1ubuntu8.8) …

手順2:バージョンを確認する




ubuntu@linuxlab: ~
$ suricata -V
This is Suricata version 7.0.3 RELEASE

Ubuntu 24.04 で実行すると 1:7.0.3-1build3 が universe リポジトリからインストールされます。22.04 では 6.0.4-3 が候補になります。

Ubuntu 22.04 vs 24.04 バージョン比較(実測)
Ubuntu 22.04 vs 24.04 バージョン比較(実測)

Suricata 7.x では HTTP/2 の完全解析対応と AF_XDP(高速パケット処理)のサポートが加わっています。24.04 を使うメリットは大きいです。

手順3:設定ファイルを確認する

インストール直後の設定ファイルは /etc/suricata/suricata.yaml に置かれます。まず設定が正常かどうかをチェックします。




ubuntu@linuxlab: ~
$ sudo suricata -c /etc/suricata/suricata.yaml -T
i: suricata: This is Suricata version 7.0.3 RELEASE running in SYSTEM mode
W: detect: No rule files match the pattern /var/lib/suricata/rules/suricata.rules
i: suricata: Configuration provided was successfully loaded. Exiting.

-T フラグは「設定テストモード」です。起動せずに設定ファイルの文法だけを確認します。Configuration provided was successfully loaded. と出れば問題ありません。警告の No rule files match は次の手順で解消します。

suricata-update でルールを最新化する

Suricata 7.0.3 には suricata-update(バージョン 1.3.0)が同梱されています。Emerging Threats(ET)の無償ルールセットを自動でダウンロードして適用するツールです。




ubuntu@linuxlab: ~
$ sudo suricata-update
20/6/2026 — 13:22:31 – <Info> — Using data-directory /var/lib/suricata.
20/6/2026 — 13:22:31 – <Info> — Using Suricata configuration /etc/suricata/suricata.yaml
20/6/2026 — 13:22:31 – <Info> — Using /etc/suricata/enable.conf
20/6/2026 — 13:22:32 – <Info> — Fetching https://rules.emergingthreats.net/open/suricata-7.0.3/emerging.rules.tar.gz.
20/6/2026 — 13:22:45 – <Info> — Writing rules to /var/lib/suricata/rules/suricata.rules: total: 44818

ダウンロード完了後、ルールは /var/lib/suricata/rules/suricata.rules に書き出されます。Emerging Threats open の無償版で 44,000 件超のシグネチャが使えます。

著者アイコン
著者アイコン

suricata-update は cron で定期実行するのが定番です。0 4 * * * root suricata-update && systemctl reload suricata/etc/cron.d/suricata-update に書いておくと毎朝 4 時に自動更新されます。

利用可能なルールソース一覧




ubuntu@linuxlab: ~
$ sudo suricata-update list-sources
Name: et/open
Vendor: Proofpoint
Summary: Emerging Threats Open Ruleset
License: MIT
Name: oisf/trafficid
Vendor: OISF
Summary: Suricata Traffic ID ruleset
License: MIT

et/open(Emerging Threats Open)が無償で使えるメインセットです。有料の et/pro はリリース 30 日先行版で更新頻度が高いですが、個人学習なら et/open で十分試せます。

シグネチャ(ルール)の基本的な書き方

Suricata のシグネチャは Snort と互換性があり、1 行で書けます。構造を覚えておくと独自ルールを書けるようになります。




ubuntu@linuxlab: ~
# 書式:
# <アクション> <プロトコル> <送信元IP> <ポート> -> <宛先IP> <ポート> (オプション群)
 
# ICMP Ping を検知する例
alert icmp any any -> any any (msg:”ICMP Ping Detected”; itype:8; sid:1000001; rev:1;)
 
# HTTP GET リクエストを検知する例
alert http any any -> any any (msg:”HTTP GET”; content:”GET”; http_method; sid:1000002; rev:1;)
 
# SSH ポートへの接続試行を検知する例
alert tcp any any -> $HOME_NET 22 (msg:”SSH Connection Attempt”; flow:to_server; sid:1000003; rev:1;)
フィールド 説明
msg アラートメッセージ(ログに残る) "ICMP Ping Detected"
sid シグネチャ ID(ユニークな数値) 1000001〜 は自作ルール用
rev リビジョン番号 変更のたびにインクリメント
content ペイロードの検索文字列 "User-Agent: curl"
$HOME_NET 自分のネットワーク(設定ファイルで定義) デフォルト: [192.168.0.0/16]

自作ルールは sid を 1,000,000 以上にするのが慣例です。Emerging Threats の公式ルールとの衝突を避けられます。

PCAP オフライン解析で動作を確認する(実測)

本番環境に適用する前に、既存の PCAP ファイルでオフライン検証できます。-r でファイルを指定するだけです。




ubuntu@linuxlab: ~
$ cat /tmp/test.rules
alert icmp any any -> any any (msg:”ICMP Ping Detected – LinuxLab Test”; itype:8; sid:1000001; rev:1;)
$ suricata -r /tmp/test.pcap -S /tmp/test.rules -l /tmp/suricata_logs
i: suricata: This is Suricata version 7.0.3 RELEASE running in USER mode
i: threads: Threads created -> RX: 1 W: 32 FM: 1 FR: 1 Engine started.
i: suricata: Signal Received. Stopping engine.
i: pcap: read 1 file, 1 packets, 42 bytes
$ cat /tmp/suricata_logs/fast.log
06/20/2025-06:13:20.000000 [**] [1:1000001:1] ICMP Ping Detected – LinuxLab Test [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.1.1:8 -> 8.8.8.8:0
Suricata ICMP 検知アラート(実測)
Suricata ICMP 検知アラート(実測)

ICMP type:8(エコーリクエスト、いわゆる ping)を 1 パケット入れた PCAP を渡したところ、fast.log に想定通りのアラートが出力されました。-S は「このルールファイルだけを使う」指定で、-s(小文字)の「設定に追加する」とは動作が異なります。ここがちょっとした罠で、最初迷いました。

-l で指定したディレクトリには以下の 4 ファイルが生成されます。

ファイル 内容 用途
fast.log アラートの 1 行テキスト 目視確認・リアルタイム監視
eve.json 全イベントの JSON 形式 Elasticsearch / Kibana との連携
stats.log パケット処理統計 パフォーマンスチューニング
suricata.log Suricata 自身の動作ログ デバッグ

systemd でサービスとして管理する

VPS で常駐させるには systemd サービスとして起動します。インストール時に /usr/lib/systemd/system/suricata.service が自動で配置されます。

手順1:監視するネットワークインターフェースを設定する




ubuntu@linuxlab: ~
$ ip link show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
link/ether 56:00:04:aa:bb:cc brd ff:ff:ff:ff:ff:ff
$ sudo nano /etc/default/suricata
# IFACE=eth0 ← 監視対象のNIC名を設定

手順2:起動・有効化




ubuntu@linuxlab: ~
$ sudo systemctl start suricata
$ sudo systemctl enable suricata
Created symlink /etc/systemd/system/multi-user.target.wants/suricata.service
$ sudo systemctl status suricata
● suricata.service – Suricata IDS/IDP daemon
Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled)
Active: active (running) since Fri 2026-06-20 13:22:45 UTC; 1min ago
Main PID: 2847 (Suricata-Main)
Tasks: 34 (limit: 4915)
Memory: 448.5 MB

ルールセットを更新した後はプロセスを再起動せずにリロードできます。




ubuntu@linuxlab: ~
$ sudo kill -USR2 $(pidof Suricata-Main)
# または
$ sudo systemctl reload suricata
著者アイコン
著者アイコン

Memory が 448 MB と表示されましたが、これはルールセットをメモリに展開している分が大きい。44,000 件以上のシグネチャをロードすれば当然です。1 GB プランの VPS だと少し苦しいので、使わないルールは disable.conf で無効化するとメモリを節約できます。

Suricata systemd サービス起動・アラート監視ターミナル
Suricata systemd サービス起動・アラート監視ターミナル

ログの読み方

fast.log:リアルタイム確認に便利




ubuntu@linuxlab: ~
$ sudo tail -f /var/log/suricata/fast.log
06/20/2026-13:23:11.422183 [**] [1:2101411:13] GPL ICMP_INFO PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} 203.0.113.5 -> 192.168.1.10
06/20/2026-13:23:15.887340 [**] [1:2002910:6] ET SCAN Nmap -sS window 1024 [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 203.0.113.5:55234 -> 192.168.1.10:80

1 行の構造は次のとおりです。

  • [1:2002910:6][gid:sid:rev] 形式。2002910 は ET SCAN カテゴリの番号
  • ET SCAN Nmap -sS window 1024:ルールの msg フィールド
  • {TCP}:プロトコル
  • 203.0.113.5:55234 -> 192.168.1.10:80:送信元→宛先(IP:ポート)

eve.json:SIEM 連携・詳細分析に




ubuntu@linuxlab: ~
$ sudo cat /var/log/suricata/eve.json | python3 -m json.tool | head -30
{
“timestamp”: “2026-06-20T13:23:11.422183+0000”,
“flow_id”: 1234567890,
“in_iface”: “eth0”,
“event_type”: “alert”,
“src_ip”: “203.0.113.5”,
“dest_ip”: “192.168.1.10”,
“proto”: “ICMP”,
“alert”: {
“action”: “allowed”,
“gid”: 1,
“signature_id”: 2101411,
“rev”: 13,
“signature”: “GPL ICMP_INFO PING”,
“category”: “Misc activity”,
“severity”: 3
}
}

eve.json は 1 イベント 1 行の NDJSON 形式です。Elasticsearch や Wazuh SIEM にそのまま流し込めます。セキュリティ情報を長期保存して検索・可視化したい場合は を参考にしてください。

よくあるエラーと解決策

①「No rule files match the pattern」が出る




ubuntu@linuxlab: ~
W: detect: No rule files match the pattern /var/lib/suricata/rules/suricata.rules

sudo suricata-update を実行してルールファイルをダウンロードすると解消します。初回インストール直後はルールが存在しないため、この警告が出るのは正常です。

②「Failed to create AF_PACKET socket」が出る




ubuntu@linuxlab: ~
E: af-packet: Failed to create AF_PACKET socket, error: Permission denied

sudo を付けずに Suricata を起動すると出ます。AF_PACKET ソケットには CAP_NET_RAW 権限が必要なので、sudo suricata か systemd 経由で起動してください。

③メモリ不足で Suricata が落ちる

1 GB プランの VPS では全ルールをロードするのが厳しい場合があります。使わないカテゴリを無効化します。




ubuntu@linuxlab: ~
$ sudo nano /etc/suricata/disable.conf
# 不要なカテゴリを # なしで 1 行 1 エントリで列挙
group:emerging-p2p.rules
group:emerging-games.rules
$ sudo suricata-update
$ sudo systemctl reload suricata

まとめ

Ubuntu 24.04 LTS での Suricata 7.0.3 セットアップのポイントを整理します。

  • apt-get install suricata だけでバージョン 7.0.3 が入る。22.04 は 6.0.4 と古いので 24.04 を使う
  • suricata-update で Emerging Threats の無償ルールセット(44,000 件超)を即座に取得できる
  • -r オプションで PCAP をオフライン解析できる。本番 NIC に触れる前に動作確認できるのが安心
  • アラートは fast.log(目視用)と eve.json(SIEM 連携用)の 2 本柱
  • 1 GB VPS では disable.conf でルールを絞るとメモリに余裕が出る

IDS を入れたら次は ufwfail2ban と組み合わせて防御層を厚くするのが自然な流れです。VPS のセキュリティ強化を本格的に進めるなら も参考にしてください。

コメント

タイトルとURLをコピーしました