サイバー犯罪の増加に伴い、企業はハッカーからの保護を強化することが急務となっています。侵入防止システム (IPS) は、コンピューター攻撃を防御する最良の方法の 1 つです。しかし、インターネットで IPS を探し回る前に、Suricata を試してみてください。
このチュートリアルでは、Linux サーバー上で完全に機能する Suricata IPS を構成して、ネットワークをオンラインの脅威から保護する方法を学習します。
準備?読み進めて、ネットワークの保護を開始してください!
前提条件
このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次のものが揃っていることを確認してください:
- Linux サーバー – このデモでは Ubuntu 20.04 LTS を使用していますが、どの Linux ディストリビューションでも動作します。
- sudo 権限を持つ root 以外のユーザー
- ネットワーク構成と Suricata の使用方法によっては、サーバーに必要な CPU と RAM の量が増減する場合があります。一般に、検査する予定のトラフィックが多いほど、Suricata に割り当てるリソースが多くなります。開発者環境では、すべてのユーザーのサービス品質を損なうことなく Suricata がタスクを実行できるように、最初から少なくとも 2 つの CPU と 8 GB の RAM を使用することを計画してください。
Suricata のインストールと追加 PPA リポジトリ
Suricata はデフォルトでは Ubuntu にインストールされていませんが、Suricata のインストールは、システムに他のパッケージをインストールする方法と似ています。
1. apt update
を実行します コマンドを使用して、システムで利用可能なパッケージを更新します。
sudo apt update -y

2. 次に、add-apt-repository
を実行します。 コマンドを使用して、Open Information Security Foundation (OISF) によって管理されている PPA リポジトリを追加します。 PPA リポジトリを追加することで、Suricata の最新かつ安定したバージョン (ppa:oisf/suricata-stable
) を取得できます。 )。
sudo add-apt-repository ppa:oisf/suricata-stable

3. sudo apt update
を再実行します コマンドを実行して、新しく追加された Suricata リポジトリをシステムのパッケージ インデックスに読み込みます。
sudo apt update -y
4. sudo apt policy
を実行します。 コマンドを実行して、Suricata PPA が正しく追加されたことを確認します。 Suricata をインストールする前に、以下に示すようにリストに Suricata PPA が表示されていることを確認してください
sudo apt policy

5. 次のコマンドを install suricata
に対して実行します。 あなたのシステムで。
sudo apt install suricata -y

6. インストールが完了したら、systemctl status
を実行します。 以下のコマンドで suricata
を確認します サービス status
.
sudo systemctl status suricata
以下では、Suricata サービスがアクティブ (実行中) であることを確認できます。

Suricata の設定
Suricata パッケージには、suricata.yaml という名前の構成ファイルが付属しています /etc/suricata にあります ディレクトリ。この構成ファイルには、他の多くのユースケース向けのさまざまな設定が含まれています。ただし、デフォルトの構成ファイルには、Suricata を使用する前に微調整する必要がある設定がいくつかあることに注意してください。
Suricata のデフォルト モードは侵入検知 (IDS) モードで、ログに記録しますが、トラフィックはドロップしません。このモードは、Suricata を構成して理解するときに使用されます。 Suricata に慣れ、Suricata が警告するトラフィックの種類をよく理解したら、IPS モードをオンにすることを選択できます。
Suricata は、フィールドを JSON 形式 (コミュニティ フロー ID) で追加します。コミュニティ フロー ID は、他のツールによって生成されたレコードを関連付けることができる 8 バイトのフィールドです。この機能は、Suricata を Bro や Elasticsearch などの他のツールと組み合わせて使用する場合に便利です。
1. /etc/suricata/suricata.yaml を開きます お気に入りのテキスト エディターでファイルします。
2. community-id:false という行を見つけます community-id:true に変更します .変更を保存して、テキスト エディターを終了します。
イベントを調べるたびに、JSON 出力にコミュニティ フロー ID が表示されます。

次に、次のコマンドを実行して、システム上のデフォルト ルート (route show default
) を持つデバイスを見つけます。 )。 -p
フラグは ip
を伝えます 人間が読める方法でデバイスを印刷するコマンド、 -j
flag は JSON 出力を出力します。
Suricata は、デフォルトで、使用可能なネットワーク インターフェイスからのパケットを盗聴するように構成されています。ただし、この動作を変更して、Suricata が起動時にリッスンするインターフェイスを指定できます。
ip -p -j route show default
以下に示すように、dev パラメータは、Suricata がパケットのスニッフィングに使用するインターフェイスを指定します。このデモでは、インターフェースは eth0 です ですが、tun0、wlan0 など、インターフェイスは異なる場合があります。

4. 最後に、/etc/suricata/suricata.yaml を開きます 構成ファイルで、インターフェースを見つけます af-packet の下のパラメータ セクションを変更し、それに応じて変更します。このデモでは、eth0 パケットをスニッフィングするためのインターフェイスとして使用されます。
変更を保存しますが、ここではテキスト エディターを開いたままにします。

ライブ ルール リロード機能の設定
これで Suricata の構成が完了しましたが、これはネットワークの保護の始まりに過ぎません。通常、その場でルールを追加し、ルールを自動的にリロードします。どのように? Suricata のライブ ルール リロード機能を使用すると、その場でルールを更新できます。そのため、新しいルールを有効にするために Suricata を手動で再起動する必要はありません。
/etc/suricata/suricata.yaml を開く ファイルを開き、次のディレクティブをコピーしてファイルの内容の一番下に貼り付け、変更を保存します。これらのディレクティブを使用すると、ライブ ルールのリロード機能を有効にできます。
この設定を行うと、ルール セットを編集/更新するときに、Suricata サービスを再起動しなくても変更が有効になります。
detect-engine:
- rule-reload: true

kill
を実行します 以下のコマンドで Suricata プロセスに通知します ($(pidof suricata)
) 再起動せずにルールを更新します。
このコマンドは、ユーザー定義のシグナルを送信します (-usr2
) を指定されたプロセス ID に追加すると、Suricata は以下を自動的に実行します:
- 新しい構成をロードして、ルールの変数と値を更新します。
- 新しいルールを読み込む
- 新しい検出エンジンの構築
- 古い検出エンジンと新しい検出エンジンを入れ替える
- すべてのスレッドが更新されていることを確認してください
- 古い検出エンジンを解放する
sudo kill -usr2 $(pidof suricata)
Suricata ルールセットの更新
ライブ ルールのリロード機能は準備ができていますが、ルールセットを更新しない限り目的を果たしません。デフォルトでは、Suricata パッケージには、/etc/suricata/rules にある最も一般的なインターネット プロトコルのみを検出する限定的なルールセットがあります。 ディレクトリ。
この時点で、No rule files match the pattern が表示されます。 Suricata サービスを開始して使用しようとすると、次のようなエラー メッセージが表示されます。このエラー メッセージは、Suricata が使用するルールセットがないことを示しています。

このエラーを修正するには、ルールセット ファイルを Suricata インスタンスに提供します。幸いなことに、Suricata には suricata-update
という名前のツールがあります。 これにより、サードパーティ プロバイダからより多くのルールセットを取得するのに役立ちます。
1. 以下のコマンドを実行して、Suricata インスタンスの更新を取得します。
sudo suricata-update
以下に示すように、出力は suricata-update
を示しています。 コマンドは、https://rules.emergingthreats.net/open/ に接続してルールを取得しました。このコマンドは、新しいルールを /var/lib/suricata/rules/ ディレクトリに保存します .
出力には以下も出力されます:
- 総数(31737 ) のルールセット
- 有効なルールの数 (24355 )
- 追加された数 (31737 )/削除された(0 ).

次に、以下のコマンドを実行して、すべてのルールセット プロバイダーを一覧表示します (list-sources
)。
suricata-update
コマンドは、無料および商用プロバイダーを含む多くのプロバイダーからルールセットをフェッチします。
sudo suricata-update list-sources
以下に、リストの一部を示します。 Suricata が特にルールセットをフェッチするルールセット名に注意してください。このチュートリアルでは、et/open を取得します デモンストレーション用のルールセット (ステップ 3)。

3. 以下のコマンドを実行して、取得してインクルードします (enable-source
) et/open
ルールセットを Suricata ルールに追加します。
sudo suricata-update enable-source et/open

最後に、suricata-update
を再実行します コマンドを使用して、新しく選択したルールセットをロードします。
sudo suricata-update
Suricata 構成の検証
Suricata を構成し、ルールセットを追加したので、変更を検証し、すべてが期待どおりに機能することを確認します。 Suricata パッケージには、現在の構成からの逸脱を確認できる組み込みの検証サービスがあります。
suricata
を実行します 以下のコマンドで、Suricata 構成ファイル (-c /etc/suricata/suricata.yaml
) の変更を検証します。 )。このコマンドは、すべての検証メッセージも表示します (-v
).
-T
flag は Suricata に「テストモード」と「トップダウン」モードで実行するように指示します。どちらのモードも、パケットの照合に関してより厳密なルールを備えており、誤検出の可能性が低くなります。
sudo suricata -T -c /etc/suricata/suricata.yaml -v
Suricata は高度に構成可能なファイアウォールであるため、テストが完了するまでに数分かかる場合があります。エラーがない場合は、完了 を示す以下のような出力が表示されます。 メッセージ。

構成ファイルに以下のようなエラーがある場合、Suricata は各エラーを出力し、問題の原因となっている特定の行を示します。これらのエラーが発生した場合は、検証が成功するまで各構成の問題を 1 つずつ修正してください。

Suricata ルールのテスト
Suricata 構成ファイルが検証されたので、Suricata を実行して、それらが正しく機能していることを確認できます。 Suricata を使用して、curl
で ET Open (2100498) をテストします。 不審なアクティビティ/トラフィックを検出するコマンド。
現在、Suricata インスタンスには、Suricata がさまざまなルールセットから取得した 30,000 を超えるルールがあります。そのため、このチュートリアルでは、すべてのルールとその説明を完全にテストすることはできません.
1. curl
を実行します 以下のコマンドを実行して、TestMyNIDS ウェブサイトからいくつかのトラフィック/HTTP リクエスト/アクティビティを生成します。 TestMyNIDS は、NIDS のテスト、検証、および比較をサポートすることに特化した e ラーニング プロジェクトです。この Web サイトは、NIDS および関連ツールの比較分析のための独自のプラットフォームを提供します。
この Web サイトを使用して、疑わしいアクティビティやトラフィックをテストし、構成したルールセットが期待どおりに機能しているかどうかを確認できます。
curl http://testmynids.org/uid/index.html
応答データは、Linux/Unix の root になりすました偽のアラートをトリガーするように設計されています ユーザー。そしてこのルート ユーザーは侵害された可能性のあるシステムを使用しています。

次に、grep
を実行します 以下のコマンドで fast.log
を調べます /var/log/suricata/ のファイル 一致する警告メッセージのディレクトリ 2100498
.このコマンドは、ユーザー アラートのログ ファイルをチェックします。
fast.log ファイルとは別に、注意すべき別のログ ファイルは、同じディレクトリにある eve.log です。
grep 2100498 /var/log/suricata/fast.log
システムのパブリック IPv4 アドレスを示す以下のような出力が表示されます。

3. jq
を実行します。 以下のコマンドで eve.log を調べます ファイル。 eve.log ファイルはイベントのログ記録にも使用されますが、JSON 形式です (/var/log/suricata/eve.json
)。 eve.json です および fast.log 不審なトラフィックやブロックされた試みについて参照するファイル。見つかったら、必要に応じてアクションを実行します。
jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
以下に、“signature_id”:2100498 が表示されます。 これは、コマンドで指定したアラート シグネチャ ID です。
「community_id」:「1:ETRbv54GHTVCayHTUR5OIovK4gh2=」も表示されます これは、/etc/suricata/suricata.yaml で設定したコミュニティ フロー ID です。 ファイル。
この community_id Suricata を Elasticsearch などの他のツールと組み合わせて使用し、完全な「セキュリティ監視スタック」を合理的な低コストで取得する場合に便利です。

結論
このチュートリアル全体を通して、Suricata をインストールして、ルールセットを使用して構成し、ネットワークを保護する方法を学習しました。また、ネットワーク上でトラフィックを生成して、ルールセットが機能しているかどうかのテストも完了しました。
この時点で、Suricata はカスタム ルールセットで完全に実行され、ネットワーク上の疑わしいアクティビティ/トラフィックを検出します。
では、この新たに発見された知識に基づいて構築してみませんか? Suricata、Zeek、Elasticsearch スタックのインストールと構成から始めて、完全な「セキュリティ監視スタック」をセットアップすることから始めませんか?