Debian12.8 ; Suricata + Elastic Stackでログの可視化とモニタリング

前提条件

今回はSuricata IDS と ElasticStack を 次のサーバーにインストールします
・1台目サーバー Suricata IDS & Filebeat : Debian12.8 IPアドレス(192.168.11.83)
・2台目サーバー ElasticStack & kibana : Ubuntu24.04 IPアドレス(192.168.11.200)
root以外のsudoユーザーで実行する

 1台目サーバー Suricata インストール

SURICATA IDS/IPSはネットワーク上の通信を監視し、不審なトラフィックを検知するオープンソースのIDSです。基本的な仕組みはシグネチャ型であるため、あらかじめ設定した不正な通信を検知できます。また、Suricataは検知だけでなく防御も行えることが特徴です。

1.Suricata のインストール

①必須パッケージをインストール

➁Suricata のインストール

バージョンの確認

Suricataサービスを最初に構成する必要があるため、サービスを停止します。

2.Suricataを構成

①Suricataがネットワークパケットを検査するインターフェースとIPアドレスを決定

/etc/suricata/suricata.yamlファイル編集

➁ルールセットを追加

suricata-updateが無料のEmerging Threats ET Open Rulesを取得し、Suricataの/etc/suricata/rules/suricata.rulesファイルに保存したことを示しています。また、処理されたルールの数を示し、この例では54361が追加され、そのうち40645が有効になりました。

➂ルール・セット・プロバイダーの追加
既定のプロバイダー リストを一覧表示

例としてtgreen/hunting ルールセットを含める場合

アップデートを実行

3.Suricata 構成のテスト

①検証ツールを実行

Suricata service再起動

ログファイルを確認

4.Suricataルールのテスト

①次のコマンドを使用してET Openルール番号2100498をテストする

②指定されたルール番号を使用してログファイルを確認する

 ③/var/log/suricata/eve.log のイベント確認

jq をインストール

2100498シグネチャを検索して、EVEログのイベントをフィルタリング
2100498の値と一致するsignature_idキーを持つalertオブジェクトを表示

④Custom Rulesの作成と適用
非SSHポートへのSSHトラフィックをスキャンするための以下のカスタム署名を作成し、/etc/suricata/rules/local.rulesというファイルにインクルードする(今回はIPv4のみ)

suricata.yamlの編集

SURICATAの設定を検証

先ほどのカスタム署名を編集し、ドロップアクションを使うように変換する

⑤SURICATAを再設定し、IPSモードで再起動する

systemdをリロードして、新しいSuricataの設定を検出するようにする

⑥suricataに必要なルールをUFWに追加
/etc/ufw/before.rulesと/etc/ufw/before6.rulesのファイアウォールファイルを直接編集する

同様に/etc/ufw/before6.rulesも変更する

UFWを再起動

前述のシグネチャsid:2100498に一致するパケットをドロップするようにする

シグネチャをリロード

curlを使ってこのルールをテストする

jqを使ってeve.log確認 "action": "blocked"になっている

ELK StackとSURICATAの統合

Elastic Stackをインストール&設定して、SURICATAのログを可視化&検索できるようにする
本セクションは基本的には2台目のUbuntu22.04サーバーで行います

1. Elasticsearchのインストール

1.1 公開署名キーをダウンロードしてインストール

1.2 リポジトリ定義を/etc/apt/sources.list.d/elastic-8.x.listに保存

1.3 Elasticsearch パッケージをインストール

2. Elasticsearch 設定

2.1 Elasticsearch 設定ファイルを編集

ファイルを保存する

2.2 9200/tcp ホートを開放

2.3 Elasticsearchサービスを有効にして確認

Elasticsearch バージョン8.16.0が稼働している

2.4 Elasticsearch 設定ファイルを再度編集

ファイルを保存し、 elasticsearch.serviceを再起動

2.4 elasticとkibana_systemのパスワードを作成
elasticユーザとkibana_systemユーザのパスワードは後で使用するので必ずコピーしておく
kibana_systemユーザはKibanaの設定に使用する
elasticユーザはFilebeatの設定およびKibanaへのログインに使用する

[elastic] userのパスワード作成

[kibana_system]userのパスワード作成

3. Kibana の設定

Kibana は Elasticsearch をインストールした後にインストールする。
Kibana は Elasticsearch と同じマシンにインストールする

3.1 Kibanaインストール

3.2 xpack.security設定と暗号化キーを作成
暗号化キーをコピーしておく

kibana.yml設定ファイルに暗号化キーを追加する

3.3 その他kibana.yml設定ファイル編集

ファイル保存

3.4 Kibanaサービスを開始

Kibana.serviceのステータスを確認

3.5 http,httpsポート開放

4. Kibanaのウェブページ起動確認

ウェブ・ブラウザにアクセスし、Kibanaが正しく起動していることを確認する。"http://192.168.11.200:5601"と入力してKibanaにアクセスしてみる。ただし、5601ポートを開放しておく

Usernameはelastic、Passwordはelastic用に作成したものでログイン

"Add integrations"選択しEnter

elasticスーパーユーザーアカウントを使う必要がないように、新しいユーザーアカウントを作成します。
左上三本線マークをクリックし、Stack Management を選択

「security」「Users」選択

右上の"Create user"ボタンをクリック

新規ユーザー情報を入力し、Privilegesでkibana_admin、kibana_system、monitoring_user、editorのロールを割り当てる

現在のプロファイルからログアウトし、新しく作成したユーザーアカウントでログインできることを確認する。現在、SURICATAのホストでFilebeatを設定していないため、Kibanaで表示できるデータがありません。

Filebeat インストールと設定

本作業はSuricataをインストールした1台目のDebian12.8サーバーで作業する

1. Filebeat インストール

1.1 パブリック署名キーをダウンロード

1.2 リポジトリ定義を/etc/apt/sources.list.d/elastic-8.x.listに保存

1.3 Filebeatをインストール

1.4 FilebeatをElasticsearchとKibanaに接続するように設定

FilebeatのSuricataモジュールを有効にしますが、Elasticsearch 8.xでは、モジュールのインポートにバグがあるため、.ymlファイルからSuricataモジュールをインポートします

次に、SURICATAモジュールを強制的に実行

1.5 初期環境をセットアップ
SIEMダッシュボードとパイプラインをElasticsearchにロードします
filebeat setupコマンドを実行
suricata-eve-* が表示されていることを確認

1.6 Filebeatサービスを開始

Kibanaで確認

作成したユーザーでKibanaにログインし直します。http://192.168.11.200:5601にアクセスします。

一番上の検索フィールドに「Suricata Events Overview」と入力し、Events Overviewをクリック

過去 15 分間のすべての Suricata イベントが表示されます

悪質なトラフィックのアラートを表示するにはSuricataロゴの横にあるAlertsテキストをクリック

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