サイバー犯罪の増加に伴い、企業がハッカーからのより良い保護を必要としています。 侵入防止システム(IPS) はコンピュータ攻撃に対抗する最良の方法の1つです。しかし、IPSをインターネットで検索する前に、Suricata を試してみてください。
このチュートリアルでは、Linuxサーバーに完全機能のSuricata IPSを構成して、オンラインの脅威からネットワークを保護する方法を学びます。
準備ができましたか? 続けて、ネットワークを保護しましょう!
必要条件
このチュートリアルは実演形式です。一緒に進める場合は、次のものが必要です:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- ネットワーク構成やSuricataの使用方法に応じて、サーバーに必要なCPUとRAMは異なります。一般的に、検査するトラフィックが多いほど、Suricataに割り当てるリソースも多くなります。開発環境では、少なくとも2つのCPUと8GBのRAMを使用して開始し、Suricataが全ユーザーのサービス品質を損なうことなくタスクを実行できるようにしてください。
SuricataのインストールとPPAリポジトリの追加
SuricataはUbuntuにデフォルトでインストールされていませんが、Suricataをインストールする方法は、システムに他のパッケージをインストールする方法と似ています。
1. システムで利用可能なパッケージを更新するには、apt update
コマンドを実行します。

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

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

5. システムにsuricataをインストール
するには、次のコマンドを実行します。

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

Suricataの設定
Suricataパッケージには、/etc/suricataディレクトリにあるsuricata.yamlという名前の設定ファイルが付属しています。この設定ファイルには、さまざまな使用事例のためのさまざまな設定が含まれています。ただし、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
フラグは JSON 出力を表示します。
Suricata はデフォルトで利用可能なすべてのネットワーク インターフェイスからパケットをスニッフィングするように構成されています。 ただし、Suricata が開始するときに Suricata がリッスンするインターフェイスを指定してこの動作を変更できます。
下記のように、dev パラメータは Suricata がパケットをスニッフィングするのに使用するインターフェイスを指定します。 このデモでは、インターフェイスは eth0 ですが、インターフェイスは tun0、wlan0 など異なる場合があります。

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

ライブ ルール再読み込み機能の設定
以下は、Suricataを構成しましたが、これはネットワークを保護するための始まりに過ぎません。通常、即座にルールを追加し、ルールを自動的に再読み込みしたいと考えるでしょう。Suricataのライブルール再読み込み機能により、ルールをリアルタイムで更新できます。その結果、新しいルールが有効になるためにSuricataを手動で再起動する必要はありません。
次のディレクティブをファイルの内容の末尾にコピー/貼り付けて変更を保存します。これらのディレクティブを使用すると、ライブルールの再読み込み機能を有効にできます。
この設定を行うと、ルールセットを編集/更新すると、Suricataサービスを再起動せずに変更が反映されます。

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

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

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

3. 以下のコマンドを実行して、Suricataルールにet/open
ルールセットを取得して含めます(enable-source
)。

最後に、suricata-update
コマンドを再実行して、新しく選択されたルールセットをロードします。
Suricata構成の検証
Suricataを構成し、ルールセットを追加したら、変更内容を検証し、すべてが期待どおりに動作することを確認する時が来ました。Suricataパッケージには、現在の構成からの逸脱を見ることができる組み込みの検証サービスがあります。
以下のsuricata
コマンドを実行して、Suricata構成ファイル(-c /etc/suricata/suricata.yaml
)の変更内容を検証します。このコマンドはすべての検証メッセージも表示します(-v
)。
-T
フラグは、Suricataが「テストモード」および「トップダウンモード」で実行されるように指示します。両方のモードはパケットの一致に対してより厳密なルールを持ち、誤検知が起こりにくいです。
Suricataは高度に設定可能なファイアウォールなので、テストには数分かかる場合があります。エラーがない場合、次のような出力が表示され、完了メッセージが表示されます。

構成ファイルに次のようなエラーがある場合、Suricataはそれぞれのエラーを印刷し、問題を引き起こしている特定の行を示します。これらのエラーが発生した場合は、検証が成功するまで各構成の問題を1つずつ修正してください。

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

次に、以下のgrep
コマンドを実行して、fast.log
ファイルを/var/log/suricata/ディレクトリで調査し、一致するアラートメッセージ2100498
を確認します。このコマンドは、ユーザーアラートのためにログファイルを確認します。
fast.log ファイル以外にも、同じディレクトリにある eve.log ファイルもチェックする必要があります。
以下は、システムの公開IPv4アドレスを示す出力例です。

3. 次に、以下の jq
コマンドを実行して eve.log ファイルを調べます。 eve.log ファイルもイベントのログ記録に使用されますが、JSON形式で記録されます(/var/log/suricata/eve.json
)。怪しいトラフィックやブロックされた試行に関しては、eve.json ファイルと fast.log ファイルを参照します。見つかった場合は、必要な対策を取ります。
以下の出力には、コマンドで指定したアラートシグネチャIDである “signature_id”: 2100498 が表示されています。
また、出力には “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” が表示されています。これは、/etc/suricata/suricata.yaml ファイルで設定した Community Flow ID です。
この community_id は、SuricataをElasticsearchなどの他のツールと組み合わせて使用する際に便利で、比較的低コストで完全な「セキュリティモニタリングスタック」を実現できます。

結論
このチュートリアルでは、ネットワークを保護するためにSuricataをインストールして設定する方法を学びました。また、ネットワークでトラフィックを生成してルールセットが動作しているかをテストしました。
この時点で、カスタムルールセットを使用してSuricataがネットワーク上の怪しい活動/トラフィックを検出するために完璧に動作しています。
今、なぜこの新しい知識を活用しないのですか?おそらく、Suricata、Zeek、Elasticsearchスタックのインストールと設定から始めて、完全な「セキュリティモニタリングスタック」をセットアップするのはどうでしょうか?