ネットワークに何が流れているか、本当に把握できていますか?ファイアウォールやVPNでアクセス制御をしていても、許可した通信の中に攻撃が紛れ込んでいることがあります。「侵入されてから気づく」では、取り返しのつかない被害につながります。
この記事では、オープンソースのIDS/IPS(侵入検知・防御システム)「Suricata」を使って、ネットワークトラフィックをリアルタイムで監視・検知する環境を構築する方法を現場目線で解説します。インストールから基本設定、ルールの管理まで、情シス1人体制でも導入できるレベルで説明します。
Suricataとは?
Suricataは、Open Information Security Foundation(OISF)が開発するオープンソースのネットワーク型IDS/IPSです。商用製品と遜色ない検知能力を持ちながら無料で利用できるため、中小企業から大規模組織まで幅広く採用されています。
主な特徴:
・マルチスレッド処理: 複数のCPUコアを活用し、高速なパケット検査が可能です。高トラフィックな環境でも処理落ちしにくいのが特徴です
・Snortルール互換: 既存のSnortルールをそのまま流用でき、ルール資産の再利用が可能です
・EVEログ(JSON形式): 構造化ログをSIEMやElasticsearchと連携しやすい形式で出力します
・ファイル抽出: 通信中に転送されるファイルを自動的に抽出・保存できます(マルウェア解析に活用可能)
・Luaスクリプト対応: 複雑な検知ロジックをLuaスクリプトで記述できます
従来からのSnortと並んで、現在のオープンソースIDS/IPS市場ではSuricataが事実上のスタンダードになっています。
Suricataのアーキテクチャと3つの動作モード
Suricataは主に3つのモードで動作します。どのモードから始めるかは、運用環境とリスク許容度によって決まります。
| モード | 動作 | 用途 |
|---|---|---|
| IDSモード | 通信を監視して検知のみ。通信は遮断しない | まず可視化から始めたい場合(推奨スタート) |
| IPSモード | 検知した通信を自動的に遮断する | 自動防御を有効にしたい場合(チューニング後) |
| パケットキャプチャ解析 | 保存済みのpcapファイルをオフラインで解析する | インシデント調査や事後分析 |
Suricataはネットワークインターフェースからパケットをキャプチャし、シグネチャ(ルール)とマッチングして脅威を検知します。一致した場合はアラートをEVEログに記録し、IPSモードでは通信を即座にドロップできます。
中小企業では最初はIDSモードで運用し、誤検知の傾向を把握してからIPSモードへ移行するのが現実的です。いきなりIPSモードで動かすと、業務通信が誤って遮断されるリスクがあります。
Suricataのインストール手順
1. Ubuntu/Debian系への導入
公式のPPAリポジトリを使うのが最もシンプルです。常に最新安定版を取得できます。
# PPAリポジトリを追加 sudo add-apt-repository ppa:oisf/suricata-stable sudo apt update # Suricataをインストール sudo apt install suricata # バージョン確認 suricata --build-info | grep "Suricata version"
2. AlmaLinux/Rocky Linux系への導入
EPELリポジトリを有効にすることでインストールできます。
# EPELリポジトリを有効化 sudo dnf install epel-release # Suricataをインストール sudo dnf install suricata # バージョン確認 suricata --build-info | grep "Suricata version"
基本設定(suricata.yaml)
Suricataの設定ファイルは /etc/suricata/suricata.yaml にあります。行数は多いですが、最初に変更すべき箇所は2か所だけです。
3. 監視インターフェースの設定
まず、監視対象のネットワークインターフェース名を確認します。
# インターフェース名を確認 ip link show
suricata.yaml の af-packet セクションでインターフェースを指定します。
# /etc/suricata/suricata.yaml(変更箇所のみ抜粋) af-packet: - interface: eth0 # 実際のインターフェース名に変更(例: ens3, enp0s3など) cluster-id: 99 cluster-type: cluster_flow defrag: yes
4. HOME_NETの設定
自社ネットワークのIPアドレス帯を定義します。これにより「内部から外部への不審な通信」と「外部から内部への攻撃」を正確に区別できるようになります。
# /etc/suricata/suricata.yaml(変更箇所のみ) vars: address-groups: HOME_NET: "[192.168.1.0/24,10.0.0.0/8]" # 自社のネットワーク帯に変更 EXTERNAL_NET: "!$HOME_NET"
ルールセットの管理
Suricataの検知精度はルール(シグネチャ)の品質に依存します。ルールの取得・更新・管理には suricata-update コマンドを使います。
5. Suricata-Updateによるルール更新
# 利用可能なルールソースを確認 sudo suricata-update list-sources # ETオープンルールセット(無料・定評あり)を有効化 sudo suricata-update enable-source et/open # ルールを更新してSuricataに反映 sudo suricata-update sudo systemctl restart suricata
et/open(Emerging Threats Open)はセキュリティコミュニティが継続的にメンテナンスしているルールセットで、マルウェアのC2通信・エクスプロイト・スキャン行為など幅広い脅威をカバーしています。無料で利用できるため、まずこれから始めるのが定石です。
ルール更新はcronで自動化しておきましょう。
# /etc/cron.d/suricata-update(例: 毎日午前2時に更新) 0 2 * * * root /usr/bin/suricata-update && /usr/bin/systemctl reload suricata
6. カスタムルールの書き方
自社環境固有の検知ルールを追加したい場合は、/etc/suricata/rules/local.rules に記述します。
# /etc/suricata/rules/local.rules # 例: 外部から内部への大量ポート接続試行(ポートスキャン)を検知 alert tcp $EXTERNAL_NET any -> $HOME_NET any ( msg:"LOCAL ポートスキャン検知(大量SYN)"; flags:S; threshold: type both, track by_src, count 20, seconds 10; classtype:attempted-recon; sid:9000001; rev:1; )
ルールの基本構文は「アクション プロトコル 送信元IP 送信元ポート → 宛先IP 宛先ポート (オプション)」の形式です。カスタムルールのSIDは9,000,000番以降を使うのが慣習となっています。
作成したルールファイルを設定ファイルに追記します。
# /etc/suricata/suricata.yaml に追記 rule-files: - suricata.rules - local.rules # カスタムルールを追加
起動と動作確認
# 設定ファイルのバリデーション(起動前に必ず実施) sudo suricata -T -c /etc/suricata/suricata.yaml -v # Suricataを起動・自動起動設定 sudo systemctl enable suricata sudo systemctl start suricata # アラートログをリアルタイム確認(jqが必要: sudo apt install jq) sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type == "alert")' # シンプルなテキスト形式のアラートログ sudo tail -f /var/log/suricata/fast.log
-T オプションは設定ファイルの構文チェックのみを行い、Suricataを起動しません。設定変更後は必ずこのコマンドでバリデーションしてから再起動するクセをつけましょう。
中小企業でも今日からできること
「本格的なIDSの導入はハードルが高い」と感じる方も多いですが、Suricataは段階的に始められます。
・まずIDSモードで可視化から: 通信を止めずに監視するだけなので、業務への影響はゼロです。数週間ログを観察して、自社ネットワークの「通常の状態」を把握してから次のステップへ進みましょう
・インターネット境界だけに配置: 最初はゲートウェイサーバーやファイアウォールの近くに1台置くだけで、外部からの攻撃トラフィックの大半を検知できます
・et/openルールだけで十分: 最初から有料ルールセットを購入する必要はありません。無料の et/open でも一般的な攻撃の大半はカバーできます
・アラート通知の自動化: EVEログを監視してメール通知と組み合わせるスクリプトを組むことで、24時間監視体制を人手なしで実現できます
Linuxのログ監視や権限管理については、姉妹サイトLinuxMaster.JPで詳しく解説しています。Suricataのログ分析と合わせてご活用ください。
よくある誤解と注意点
誤解1: IDSを入れれば安全になる
IDSはあくまで「検知」のツールです。攻撃が来たときに気づけるようになりますが、それ自体が攻撃を防ぐわけではありません。防御にはファイアウォール・パッチ管理・最小権限の原則などとの組み合わせが必要です。
誤解2: 大量のアラートはすべて対処が必要
導入直後は誤検知(False Positive)が大量に発生することがあります。内部スキャンツールや監視システムの通信が誤ってアラートになるケースも多いため、ホワイトリスト登録・ルール抑制のチューニングが必要です。急いでIPSモードに切り替えるのは禁物です。
誤解3: TLS暗号化通信は検知できない
TLS通信の内容そのものはデフォルトでは解析できませんが、接続先のSNI(サーバー名)や証明書のCN、接続先IPなどのメタデータは検査できます。SNIベースの検知だけでも、既知の悪性ドメインへの通信を多数検知できます。
注意: IPSモード移行は慎重に
IPSモードに切り替えると、誤検知が業務システムへの接続断に直結します。移行前にはテスト環境での検証と、十分なルールのチューニングを行ってください。
本記事のまとめ
| ステップ | 内容 | 難易度 |
|---|---|---|
| インストール | PPAまたはEPELで2コマンドで完了 | 低 |
| 基本設定 | インターフェース・HOME_NET名の変更のみ | 低 |
| ルール管理 | suricata-updateで自動更新・cron化 | 低 |
| カスタムルール | local.rulesに独自シグネチャを追記 | 中 |
| IPSモードへの移行 | 十分なチューニング後に段階的に実施 | 高 |
Suricataはオープンソースでありながら、商用IDS/IPSと同等の検知能力を持つ優れたツールです。ファイアウォールやVPNと組み合わせることで、多層防御(ディフェンス・イン・デプス)の重要な一要素となります。まずはIDSモードで導入し、自社ネットワークの可視化から始めてみてください。
「ネットワークセキュリティ」の記事を読む
このテーマに関連する解説記事を一覧でまとめています。あわせてご覧ください。
