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

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

前提条件

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

2.Elastic Stack,Kibana,Filebeat
Elastic Stackをインストール&設定して、Kibana,Filebeatを使用してSURICATAのログを可視化&検索できるようにする

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

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

1.Suricata のインストールと設定

①Suricata のインストール

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

③設定ファイルを編集

④Suricataのルール更新

⑤Suricataの起動

⑥Suricataの起動確認

ログを確認

統計情報を確認するには、stats.log ファイルを確認します(デフォルトで8秒ごとに更新)

より高度な出力であるEVE JSONは、以下のコマンドで生成することができる

2.Suricata のテスト

①curl ユーティリティで ping テストを実行

②指定されたルール番号を使用してログファイルを確認する
Suricataには、デフォルトで有効になっている次の2つのログファイルが付属しています。

/var/log/suricata/fast.log
/var/log/suricata/eve.log
curlリクエストに対応するログエントリーを確認するために、/var/log/suricata/fast.log ログファイルをgrepコマンドを使用してチェックします。2100498 ルール識別子を使用してログエントリーを検索します。(IPv4の場合)

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

jq をインストール

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

3.Suricata Rulesの設定

①Suricataにパッケージされているルールセットの表示

②ルールセットを提供するソースのインデックス一覧

③ソースを有効にする(tgreen/huntingを有効にする場合)

アップデートを実行

Suricata service再起動

4. SuricataをIPSに設定する

悪意のあるネットワーク・トラフィックをドロップするようにSuricataをIPSモードで起動するように設定する

非SSHポートへのSSHトラフィックをスキャンする以下のカスタム署名を作成し、/var/lib/suricata/rules/local.rulesというファイルにインクルードする(SSHポートは22と仮定する)

/etc/suricata/suricata.yaml設定ファイルを編集し、local.rulesをインクルードする

SURICATAの設定を検証

SURICATAの/etc/sysconfig/suricata設定ファイルを編集する

Suricataを再起動

ステータス確認

入ってくるネットワーク・トラフィックをSuricataのNFQUEUEに向ける
Firewalld がインストールされ、有効になっているのでSuricataに必要なルールをFirewalldに追加する(SSHポートは22と仮定する)

SURICATA がトラフィックを正しくドロップしていることを確認
シグネチャのデフォルトアクションをalertやlogからactive dropping trafficに切り替える
/var/lib/suricata/rules/suricata.rulesファイルを開き、sid:2100498に該当するものがあれば コメントアウトする

/var/lib/suricata/rules/local.rulesにsid:2100498として新規作成する

シグネチャを再読み込み

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

jqを使ってeve.logファイルを調べる

"action": "blocked",になっている

ELK StackとSURICATAの統合

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

1. Elasticsearchのインストール

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

1.2 リポジトリ定義を/etc/yum/yum.repos.d ディレクトリに作成

1.3 Elasticsearch インストール

2. Elasticsearch 設定

Elasticsearchはデフォルトでローカル接続のみを受け付けるように設定されています。また、認証が有効になっていないため、Filebeatなどのツールはログを送信できません。今回は、Elasticsearchのネットワーク設定を行い、Elasticsearchに組み込まれているxpackセキュリティモジュールを有効にします。

2.1 Elasticsearchネットワークの設定
ElasticsearchとSURICATAのサーバは別々なので、Elasticsearchがプライベートネットワークインターフェースで接続をリッスンするように設定する必要がある

2.2 Elasticsearch を起動

2.3 elasticとkibana_systemのパスワードを作成
elasticユーザとkibana_systemユーザのパスワードは後で使用するので必ずコピーしておく
kibana_systemユーザはKibanaの設定に使用する
elasticユーザはFilebeat、Auditbeatの設定およびKibanaへのログインに使用する
パスワードを忘れた場合は、再度コマンドを使用してパスワードをリセットできます。

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

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

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

3. Kibana のインストールと設定

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

3.1 Kibanaインストール

3.2 xpackセキュリティモジュールの設定

Kibana の xpack セキュリティ機能を有効にして、Kibana が Elasticsearch にデータを保存するために使用するいくつかの暗号化キーを作成する。
暗号化キーは、/usr/share/kibana/bin ディレクトリに含まれる kibana-encryption-keys ユーティリティを使用して作成する。
作成した3つのキーを安全な場所に保存しておく

これらのキーをKibanaの/etc/kibana/kibana.yml設定ファイルに追加する

3.2 Kibana ネットワークの設定

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

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

ステータス確認

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

Go to http://192.168.11.85:5601/?code=887368 to get started.

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

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

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

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

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

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

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

ログインページに移動します。生成されたElasticユーザー認証情報を使用してログインします。
Username : elastic
Password : わかりやすく再生成したパスワード

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

elasticスーパーユーザーアカウントを使う必要がないように、新しいユーザーアカウントを作成します。
メインメニューを開き、Stack Management >Security> Users

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

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

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

SURICATAサーバにFilebeatをインストール

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

1. Filebeat インストール

1.1 Elastic GPGキーをダウンロード

1.2 /etc/yum/yum.repos.dディレクトリにelasticsearch.repoファイルを以下の内容で、作成

1.3 Filebeatをインストール

1.4 Elasticsearch CA証明書作成
Elasticsearch CA証明書をダウンロードし、任意のディレクトリに保存します(今回は/etc/filebeat/elastic-ca.crtとして保存します)
※第2サーバー(RockyLinux10.0 Elasticsearchを導入したサーバー)で9200ポートを開放しておく

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

1.5 設定ファイルテスト

1.6 Filebeatsの組み込みSuricataモジュールを有効にする

上記コマンドにより /etc/filebeat/modules.d/suricata.yml.disabled が/etc/filebeat/modules.d/suricata.yml になりますが内容は変化しませんので以下のように編集します

1.7 初期環境をセットアップ
Suricataサービスにpipeline
SIEMダッシュボードをElasticsearchにロードします

1.6 Filebeatサービスを開始

2. Kibanaで確認

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

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

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

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

Kibana には、ログを視覚化するためのさまざまな機能とツールがありますのでいろいろと試してください。

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