業務用エアコン関連の技術情報、エラーコード、環境問題対策に関する別サイト「エアコンの安全な修理・適切なフロン回収」

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

前提条件

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

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

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

1.Suricata のインストール

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

➁Suricata のインストール

バージョンの確認

システムの再起動時に実行されるように suricata.service を有効にします

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

2.Suricataを構成

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

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

SURICATAはルールのライブリロードをサポートしており、実行中のSURICATAのプロセスを再起動することなく、ルールの追加、削除、編集を行うことができます。ライブリロードオプションを有効にするには、設定ファイルの一番下までスクロールし、以下の行を追加します

detect-engine:
- rule-reload: true

この設定により、実行中のプロセスにSIGUSR2システムシグナルを送ることができ、SURICATAは変更されたルールをメモリに再ロードします。以下のようなコマンドは、プロセスを再起動することなく、SURICATAプロセスにルールセットの再読み込みを通知します:

➁ルールセットを追加
Suricata には suricata-update というツールがあり、外部プロバイダーからルールセットを取得することができます。以下のように実行すると、SURICATAサーバーの最新のルールセットをダウンロードできます

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

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

例として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モードで再起動する

SURICATAはデフォルトではIDSモードで動作し、積極的にネットワークトラフィックをブロックすることはありません。IPSモードに切り替えるには、SURICATAのデフォルト設定を変更する必要がある。

systemctl edit コマンドを使って新しい systemd override ファイルを作成します:

冒頭に下記赤字部分を追加

###Editing /etc/systemd/system/suricata.service.d/override.conf
###Anything between here and the comment below will become the new contents of the file

[Service]
ExecStart=
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid -q 0 -vvv
Type=simple

###Lines below this comment will be discarded

設定をリロードして、suricataを再起動

この変更で、UFWファイアウォールを使ってSuricataにトラフィックを送る準備ができました。

⑥Suricataにトラフィックを送るためのUFWの設定
Suricataに必要なルールをUFWに追加するには、/etc/ufw/before.rulesと/etc/ufw/before6.rulesのファイアウォールファイルを直接編集する必要があります。

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

UFWを再起動

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

シグネチャをリロード

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

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

Elastic stack 9.x インストール

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

①Elastic stack 9.xのリポジトリ署名キーをインストール

➁Elastic Stack 9.xのリポジトリをインストール

update

➂Ubuntu 24.04 に Elasticsearch 9.x をインストール

インストール中、デフォルトでセキュリティ機能が有効になります;

認証と認可が有効になっている。
トランスポート層とHTTP層のTLSが有効化され、設定されます。
Elasticスーパーユーザーアカウント(elastic)とそのパスワードが作成されます。

④Ubuntu 上での Elasticsearch 9.x の設定
今回は基本的なシングルノードのクラスタなので、デフォルトの設定を使用します。

Elasticsearch の設定ファイル /etc/elasticsearch/elasticsearch.yml を確認すると、セキュリティの設定が有効になっていることがわかります

⑤Elasticsearch起動

Elasticsearch を起動し、システム起動時に実行できるようにします

ステータスを確認

curlコマンドを使用してESのステータスを確認することもできます。IPは適宜置き換えてください

プロンプトが表示されたら、Elasticsearchのインストール時に生成されたElasticsearchパスワードを入力します
以下のように出力される

また、HTTPポートとトランスポートポートの両方が開いていることを確認する;

⑥Elasticsearch パスワードのリセット
自動生成されたElasticユーザーパスワードが複雑すぎるので、/usr/share/elasticsearch/bin/elasticsearch-reset-passwordコマンドを使ってリセットする
パスワードをリセットするには、コマンドを実行する

⑦Elasticsearch ログ
Elasticsearchは/var/log/elasticsearchパスにログを書き込みます。Elasticsearch インスタンスに問題がある場合に確認する必要があるログは /var/log/elasticsearch/CLUSTER_NAME.log です。

CLUSTER_NAME は elasticsearch.yaml ファイルの cluster.name オプションの値です。もしこの値を変更しなかった場合、デフォルトは elasticsearch となり、ログファイルは /var/log/elasticsearch/elasticsearch.log となります。

ログ

Kibana 9.x インストール

本セクションは基本的には2台目のUbuntu24.04サーバーで行います

①インストール

➁Kibana 9 を設定
Kibana はデフォルトで localhost:5601 で実行されるように設定されている。外部からのアクセスを許可するには、設定ファイルを編集し、server.hostの値をインターフェイスIPに置き換える。

以下のように書き換える

➂Kibana-Elasticsearch Enrollment Token の生成
Kibana インスタンスを、セキュリティ機能が有効になっている既存の Elasticsearch クラスタと通信するように設定するには、登録トークンが必要です。Kibana 用の Enrollment Token は以下のコマンドで生成できる

④Kibana 暗号化キーの生成
Kibana は、Kibana 関連インデックスのデータの暗号化からセッション情報の保存まで、いくつかの領域で暗号化キーを使用する。必要なキーは次のとおりです

  • xpack.encryptedSavedObjects.encryptionKey:ダッシュボードやビジュアライゼーションなどの保存されたオブジェクトを暗号化するために使用されます。
  • xpack.reporting.encryptionKey: 保存されたレポートの暗号化に使用
  • xpack.security.encryptionKey: セッション情報の暗号化に使用

これらは以下のコマンドで生成する

次のように出力される

上記ををKibanaの設定ファイルkibana.ymlに挿入する

⑤Kibana の実行
Kibana 9 を起動し、システム起動時に実行できるようにする。

status

出力の最後のほうに以下のように表示される

提供されたKibanaのURL(codeを含む)をコピーしてブラウザで使用し、Kibanaにアクセスしてセットアップを完了する。

同様に、Kibanaのログは/var/log/kibana/kibana.logと/var/log/syslogで利用できる。

⑥Kibana9 ダッシュボードにアクセスする

http://192.168.11.85:5601/?code=561945.にアクセスする
(各自の適切なアドレスをコピー)

UFWが起動している場合は、Kibanaポートを開く

Kibana 9にアクセスすると、ウェルカムページでElasticの設定を求められます。
最初に、生成した登録トークンを入力する。
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana, コマンドを使用して生成された Kibana トークンをコピーし、ボックスに貼り付ける

http://192.168.11.85:5601/?code=561945にアクセス

トークンをペーストすると、Kibana が自動的に Elasticsearch に接続します。
Configure Elastic をクリックします。設定が保存され、Elasticsearch が設定、再起動されます。

ログインページに移動します。生成されたElasticユーザー認証情報を使用してログインします。

ウェルカムページで、「Explore on my own」をクリックしてKibana 9.xダッシュボードに進む。

Filebeat 9のインストール

ELKスタックを使用してDebian12.11からログを収集して監視するには、Filebeatをインストールする必要があります。
本作業は1台目サーバー Debian12.11 IPアドレス(192.168.11.83)で行います。

①Elastic Reposをインストールする
Filebeat 9をインストールするには、Elastic 9.xリポジトリをインストールする必要があります。

update

Filebeat 9をインストール

➁Filebeat Loggingの設定

デフォルトのfilebeat設定ファイル/etc/filebeat/filebeat.ymlです
Filebeatがログを独自のログファイルに書き込むようにするには、設定ファイルに以下の設定を入力する


➂Filebeatをデータ処理系に接続する
Filebeatをデータ処理系に接続するように設定します。今回はElasticsearchです。
ログを直接Elasticsearchに送信するには、Filebeat設定ファイルを編集し、出力設定セクションを更新します。

Elasticsearch 9への接続にはSSLと認証が必要です。
Elasticsearchのポート9200/tcpに接続できることを確認する

④Elasticsearch CA証明書作成
Elasticsearch CA証明書をダウンロードし、任意のディレクトリに保存します(今回は/etc/filebeat/elastic-ca.crtとして保存します)

FilebeatがElasticsearchの認証に使用する認証情報を取得します。今回は、デフォルトのスーパー管理者、Elasticユーザの認証情報を使用します。

⑤設定ファイルテスト

⑥Filebeatの出力接続をテスト

⑦FilebeatのSuricataモジュールを有効にする
modules.d/suricata.ymlを下記のように変更する

FilebeatのSuricataモジュールを有効にします

初期環境をセットアップ
SIEMダッシュボードとパイプラインをElasticsearchにロードします
filebeat setupコマンドを実行

⑨Filebeatサービスを開始

⑩Kibanaで確認

Kibanaにログインし直します。http://192.168.11.85:5601にアクセスします。

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

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

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

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

「security」「Users」選択

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

新規ユーザー情報を入力し、Privilegesでkibana_admin、kibana_system、monitoring_user、editorのロールを割り当て、最後に[Create user]をクリック

現在のプロファイルからログアウトし、新しく作成したユーザーアカウントでログインできることを確認する。

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