GNU/Linux >> Linux の 問題 >  >> Rocky Linux

RockyLinux8にElasticStackと一緒にSuricataIDSをインストールして構成する方法

Suricataは、サーバーを流れるインターネットトラフィックのすべてのパケットを調べて処理するネットワーク監視ツールです。ログイベントを生成し、アラートをトリガーし、疑わしいアクティビティを検出するとトラフィックをドロップできます。

Suricataを単一のマシンにインストールしてトラフィックを監視するか、ゲートウェイホストにデプロイして、接続されている他のサーバーからのすべての着信および発信トラフィックをスキャンすることができます。 SuricataをElasticsearch、Kibana、Filebeatと組み合わせて、セキュリティ情報およびイベント管理(SIEM)ツールを作成できます。

このチュートリアルでは、RockyLinux8サーバーにElasticStackと一緒にSuricataIDSをインストールします。スタックのさまざまなコンポーネントは次のとおりです。

  • Elasticsearch サーバーからのセキュリティイベントを保存、インデックス作成、関連付け、検索します。
  • キバナ Elasticsearchに保存されているログを表示します。
  • ファイルビート Suricataのeve.jsonを解析します ログファイルを作成し、各イベントをElasticsearchに送信して処理します。
  • スリカタ ネットワークトラフィックをスキャンして疑わしいイベントを探し、無効なパケットをドロップします。

チュートリアルは2つのパートに分かれており、最初のパートではSuricataのインストールと構成を扱い、2番目のパートではElasticStackのインストールと構成を扱います。

チュートリアルでは、SuricataとElasticスタックを異なるサーバーにインストールします。

前提条件
  • Elastic StackとSuricataをホストするサーバーには、最低4GBのRAMと2つのCPUコアが必要です。

  • サーバーは、プライベートIPアドレスを使用して相互に通信できる必要があります。

  • サーバーは、root以外のsudoユーザーでRockyLinux8を実行している必要があります。

  • どこからでもKibanaダッシュボードにアクセスする場合は、ドメイン(kibana.example.com)を設定します )Suricataがインストールされるサーバーを指します。

  • 重要なパッケージを両方のサーバーにインストールします。

     $ sudo dnf install yum-utils nano curl 
ファイアウォールの構成 パート1 ステップ1-Suricataをインストールする

Suricataをインストールするには、Open Information Security Foundation(OISF)のパッケージリポジトリをサーバーに追加する必要があります。

 $ sudo dnf install'dnf-command(copr)' $ sudo dnf copr enable @ oisf / suricata-6.0 

最初のコマンドは、コミュニティプロジェクトを有効にします(coprdnfの場合 パッケージインストーラー。 2番目のコマンドは、OISFリポジトリを有効にしてシステムに追加します。 suricata-6.0 ソフトウェアの最新の安定バージョンのリポジトリを有効にします。 yを押します およびENTER プロンプトが表示されるたび。

次に、EPELリポジトリを追加します。

 $ sudo dnf install epel-release 

Suricataをインストールします。

 $ sudo dnf install suricata 

Suricataサービスを有効にします。

 $ sudo systemctl enable suricata 
ステップ2-Suricataを構成する

Suricataはその構成を/etc/suricata/suricata.yamlに保存します ファイル。 SuricataのデフォルトモードはIDS(侵入検知システム)モードで、トラフィックはログに記録されるだけで停止されません。 Suricataを初めて使用する場合は、モードを変更しないでおく必要があります。構成して詳細を確認したら、IPS(侵入防止システム)モードをオンにできます。

コミュニティIDを有効にする

コミュニティIDフィールドを使用すると、さまざまな監視ツールによって生成されたレコード間のデータを簡単に関連付けることができます。 ElasticsearchでSuricataを使用するため、コミュニティIDを有効にすると便利です。

ファイル/etc/suricata/suricata.yamlを開きます 編集用。

 $ sudo nano /etc/suricata/suricata.yaml 

# Community Flow IDという行を見つけます 変数community-idの値を設定します trueに 。

。 。 。 #コミュニティフローID#「community_id」フィールドをEVEレコードに追加します。これらは、レコードをZeek(Bro)などの他のツールの出力と一致させるために使用できる予測可能なフローIDを#レコードに与えることを目的としています。 ## IDを予測しにくくするために、センサーとツール間で同じである必要がある「シード」を取得します。 #コミュニティID機能を有効/無効にします。 community-id:true。 。 。

これで、イベントには1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=のようなIDが割り当てられます。 さまざまな監視ツール間でデータセットを照合するために使用できます。

ネットワークインターフェースの選択

デフォルトのSuricata構成ファイルは、eth0のトラフィックを検査します デバイス/ネットワークインターフェース。サーバーが別のネットワークインターフェースを使用している場合は、構成でそれを更新する必要があります。

次のコマンドを使用して、ネットワークインターフェイスのデバイス名を確認します。

 $ ip -p -j route show default 

次のような出力が表示されます。

 [{"dst": "default"、 "gateway": "164.90.192.1"、 "dev": "eth0"、 "protocol": "static"、 "metric":100、 "flags":[ ]}] 

dev 変数はネットワークデバイスを指します。出力では、eth0と表示されています ネットワークデバイスとして。システムによって出力が異なる場合があります。

デバイス名がわかったので、構成ファイルを開きます。

 $ sudo nano /etc/suricata/suricata.yaml 

af-packet:という行を見つけます 行番号580付近。その下に、変数interfaceの値を設定します。 システムのデバイス名に変更します。

#Linux高速キャプチャsupportaf-packet:-interface:eth0#受信スレッドの数。 「auto」はコアの数を使用します#threads:auto#デフォルトのclusterid。 AF_PACKETは、フローに基づいてパケットの負荷を分散します。 cluster-id:99。。 。

インターフェイスを追加する場合は、af-packetの下部に追加します。 650行目あたりのセクション。

新しいインターフェースを追加するには、- interface: defaultのすぐ上に挿入します 以下に示すセクション。

#バイパス、フィルター、負荷分散を含むeBPFとXDPのセットアップについては、#詳細についてdoc / userguide / caption-hardware/ebpf-xdp.rstを参照してください。 --interface:enp0s1 cluster-id:98 ... --interface:default #threads:auto#use-mmap:no#tpacket-v3:yes 

新しいインターフェースenp0s1を追加しました cluster-idの一意の値 この例では変数です。追加するすべてのインターフェースに一意のクラスターIDを含める必要があります。

ライブルールのリロード

ルールを追加、削除、編集するたびに、Suricataを再起動する必要があります。ライブルールを有効にすることで、Suricataは再起動せずにルールの変更を処理できます。

ライブリロードを有効にするには、構成ファイルの下部に次の行を追加します。

。 。 .detect-engine:--rule-reload:true 

ライブリロードを有効にすると、次のコマンドを使用して、Suricataプロセスを再起動せずにルールをリロードできます。

 $ sudo kill -usr2 $(pidof suricata)

$(pidof suricata) フラグは、SuricataプロセスのプロセスIDを特定します。 -usr2 killの一部 コマンドはSIGUSR2を送信します Suricataプロセスへのシグナル。 SIGUSR2 シグナルは、ルールをリロードするようにSuricataで構成されています。

終了したら、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

ディレクトリ権限を構成する

Suricataは、suricataという名前のシステムユーザーとグループを自動的に作成しました インストールプロセス中。インストールが正しく機能するには、適切なディレクトリ権限を付与する必要があります。

次のコマンドを実行して、suricataを設定します Suricataのディレクトリのグループとして。

 $ sudo chgrp -R suricata / etc / suricata $ sudo chgrp -R suricata / var / lib / suricata / rules $ sudo chgrp -R suricata / var / lib / suricata / update $ sudo chgrp -R suricata / var / log / suricata 

読み取りと書き込みのグループ権限を設定します。

 $ sudo chmod -R g + r / etc / suricata / $ sudo chmod -R g + rw / var / lib / suricata / rules $ sudo chmod -R g + rw / var / lib / suricata / update $ sudo chmod -R g + rw / var / log / suricata 

現在のユーザー名をsuricataに追加します sudoを必要とせずに直接操作を実行できるようにグループ化します。

 $ sudo usermod -a -G suricata $ USER 

新しいグループメンバーシップを適用するには、サーバーからログアウトして再度ログインするか、次のように入力します。

 $ su-$ {USER} 

続行するには、ユーザーのパスワードを入力するよう求められます。

ユーザーがsuricataに追加されたことを確認します 次のように入力してグループ化します:

 $ id -nGusername sudo suricata 
ステップ3-Suricataルールを構成する

Suricataは、デフォルトでは、限られたルールセットのみを使用してネットワークトラフィックを検出します。 suricata-updateというツールを使用して、外部プロバイダーからルールセットを追加できます。 。次のコマンドを実行して、追加のルールを含めます。

 $ suricata-update16 /2/2022-07:00:16-<情報>-データディレクトリの使用/var/lib/suricata.16/2/2022-07:00:16-<情報>-Suricata構成を使用する/etc/suricata/suricata.yaml16/2/2022-07:00:16-<情報>-Suricataが提供するルールに/usr/ share / suricata/rulesを使用する...... 16/2/2022-07:00:16-<情報>-ソースが構成されていないため、Emerging Threats Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz'、None、True)16/2/2022-07:00:16-<情報>-チェックhttps://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz.md5.16 /2/2022-07:00:16-<情報>-https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tarを取得しています。 gz。 100%-3162050/3162050 ..... 16/2/2022-07:00:23-<情報>-/var/lib/suricata/rules/suricata.rulesへのルールの書き込み:合計:32004;有効:24611;追加:8; 1を削除しました。変更:121816/2/2022-07:00:23-<情報>-書き込み/var/lib/suricata/rules/classification.config16/2/2022-07:00:23-<情報>- suricataを使用したテスト-T.16/2/2022-07:01:16-<情報>-完了。
ルールセットプロバイダーを追加

プロバイダーを追加することで、Suricataのルールを拡張できます。さまざまな無料および商用プロバイダーからルールを取得できます。

次のコマンドを使用して、デフォルトのプロバイダーリストを一覧表示できます。

$suricata-リストの更新-ソース

たとえば、tgreen/huntingを含める場合 ルールセットの場合、次のコマンドで有効にできます。

 $ suricata-update enable-source tgreen / hunting 

suricata-updateを実行します もう一度コマンドを実行して、新しいルールをダウンロードして更新します。

ステップ4-Suricata構成を検証する

Suricataには、構成ファイルとルールのエラーをチェックするための検証ツールが付属しています。次のコマンドを実行して、検証ツールを実行します。

 $ sudo suricata -T -c /etc/suricata/suricata.yaml -v22 / 2/2022 --23:20:10-<情報>-テストモードでsuricataを実行22/2/2022 --23:20 :10-<通知>-これは、システムモードで実行されているSuricataバージョン6.0.4リリースです22/2/2022 --23:20:10-<情報>-オンラインのCPU /コア:222/2/2022 --23:20 :10-<情報>-メインスレッドのキャップを削除しました22/2/2022 --23:20:10-<情報>-高速出力デバイス(通常)が初期化されました:fast.log22 / 2/2022 --23:20: 10-<情報>-eve-log出力デバイス(通常)が初期化されました:eve.json22 / 2/2022 --23:20:10-<情報>-stats出力デバイス(通常)が初期化されました:stats.log22 / 2/2022 --23:20:21-<情報>-1つのルールファイルが処理されました。 24611ルールが正常にロードされ、0ルールが失敗しました22/2/2022-23:20:21-<情報>-解析されたしきい値構成:0ルールが見つかりました22/2/2022-23:20:21-<情報>- 24614の署名が処理されました。 1216はIPのみのルール、4120はパケットペイロードの検査、19074はアプリケーション層の検査、108はデコーダーイベントのみです22/2/2022 --23:21:02-<通知>-提供された構成は正常にロードされました。 Exiting.22 /2/2022-23:21:03-<情報>-署名のグループ化構造をクリーンアップしています...完了

-T フラグは、Suricataにテストモード-cで実行するように指示します flagは、構成ファイルの場所を構成し、-v flagは、コマンドの詳細な出力を出力します。システム構成と追加されたルールの数によっては、コマンドが完了するまでに数分かかる場合があります。

ステップ5-Suricataの実行

Suricataの構成とセットアップが完了したので、次はアプリケーションを実行します。

 $ sudo systemctl start suricata 

プロセスのステータスを確認してください。

 $ sudo systemctl status suricata 

すべてが正常に機能している場合は、次の出力が表示されます。

? suricata.service-Suricata侵入検知サービスロード済み:ロード済み(/usr/lib/systemd/system/suricata.service;有効、ベンダープリセット:無効)アクティブ:水2022-02-16 07:14:22以降アクティブ(実行中) UTC; 32分前ドキュメント:man:suricata(1)プロセス:1494 ExecStartPre =/ bin / rm -f /var/run/suricata.pid(code =exited、status =0 / SUCCESS)メインPID:1496(Suricata-Main)タスク:8(制限:23479)メモリ:367.5M CGroup:/system.slice/suricata.service ?? 1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid- i eth0 --user suricataFeb 16 07:14:22 suricata systemd [1]:Suricata侵入検知サービスを開始しています...2月16日07:14:22suricata systemd [1]:Suricata侵入検知サービスを開始しました。

このプロセスは、すべてのルールの解析を完了するのに数分かかる場合があります。したがって、上記のステータスチェックは、Suricataが稼働して準備ができているかどうかを完全に示すものではありません。次のコマンドを使用して、ログファイルを監視できます。

 $ sudo tail -f /var/log/suricata/suricata.log 

ログファイルに次の行が表示されている場合は、Suricataが実行中であり、ネットワークトラフィックを監視する準備ができていることを意味します。

16/02/2022-07:18:39-<情報>-すべてのAFPキャプチャスレッドが実行されています。
ステップ6-Suricataルールのテスト

Suricataが不審なトラフィックを検出しているかどうかを確認します。 Suricataガイドでは、ETOpenルール番号2100498をテストすることを推奨しています 次のコマンドを使用します。

 $ curl http://testmynids.org/uid/index.html 

次の応答が返されます。

 uid =0(root)gid =0(root)groups =0(root)

上記のコマンドは、idの出力を返すふりをします 侵害されたシステムで実行できるコマンド。 Suricataがトラフィックを検出したかどうかをテストするには、指定されたルール番号を使用してログファイルを確認する必要があります。

 $ grep 2100498 /var/log/suricata/fast.log 

リクエストでIPv6が使用されている場合は、次の出力が表示されます。

 02/22/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSEidチェックがルートを返しました[**][分類:トラフィックが不良である可能性があります] [優先度:2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80-> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468 

リクエストでIPv4が使用されている場合は、次の出力が表示されます。

 02/22/2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSEidチェックがルートを返しました[**][分類:トラフィックが不良である可能性があります] [優先度:2] {TCP} 204.246.178.81:80-> 164.90.192.1:36364 

Suricataは、イベントを/var/log/suricata/eve.logにも記録します JSON形式を使用したファイル。これらのルールを読んで解釈するには、jqをインストールする必要があります これはこのチュートリアルの範囲外です。

チュートリアルのパート1で、Suricataをインストールしてテストしました。次のパートでは、ELKスタックをインストールし、Suricataとそのログを視覚化するように設定します。チュートリアルのこのパート2は、特に指定がない限り、2番目のサーバーで実行されることになっています。

ステップ7-ElasticsearchとKibanaをインストールします

Elasticsearchをインストールする最初のステップでは、ElasticGPGキーをサーバーに追加します。

 $ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 

ファイル/etc/yum/yum.repos.d/elasticsearch.repoを作成して開くことにより、Elasticsearchパッケージのリポジトリを作成します 編集用。

 $ sudo nano /etc/yum.repos.d/elasticsearch.repo 

次のコードを貼り付けます。

 [elasticsearch] name=7.xパッケージのElasticsearchリポジトリbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- Elasticsearchenabled =0autorefresh =1type =rpm-md 

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

ElasticsearchとKibanaをインストールします。

 $ sudo dnf install --enablerepo =elasticsearch Elasticsearch kibana 

フラグ--enablerepo=elasticsearchを使用する必要があります それ以来、リポジトリはデフォルトで無効になっています。これにより、これらのパッケージが誤ってアップグレードされるのを防ぎます。

次のコマンドを使用して、サーバーのプライベートIPアドレスを見つけます。

 $ ip -brief address showlo UNKNOWN 127.0.0.1/8 ::1 / 128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0 ::fef:b001 / 64 fe80 ::340a: 6eff:fe5c:76ed / 64eth1 UP 10.133.0.3/16 fe80 ::906f:b5ff:fec4:c7b8 / 64 

サーバーのプライベートIP(この場合は10.133.0.3)を書き留めます。これをyour_private_IPと呼びます。 。サーバーのパブリックIPアドレス(164.90.205.77)は、your_public_IPと呼ばれます。 残りのチュートリアルで。また、サーバーのネットワーク名eth1にも注意してください。 。

ステップ8-Elasticsearchを設定する

Elasticsearchはその設定を/etc/elasticsearch/elasticsearch.ymlに保存します ファイル。編集のためにファイルを開きます。

 $ sudo nano /etc/elasticsearch/elasticsearch.yml 

Elasticsearchはデフォルトでローカル接続のみを受け入れます。 KibanaがプライベートIPアドレスを介してアクセスできるように変更する必要があります。

#network.host: 192.168.0.1という行を見つけます 次に示すように、そのすぐ下に次の行を追加します。

#デフォルトでは、Elasticsearchはローカルホストでのみアクセス可能です。ここで別の#アドレスを設定して、ネットワーク上のこのノードを公開します:## network.host:192.168.0.1network.bind_host:["127.0.0.1"、 "your_private_IP"] ##デフォルトでは、Elasticsearchは最初にHTTPトラフィックをリッスンしますit#が9200から始まる空きポートを見つけます。ここで特定のHTTPポートを設定します:

これにより、Elasticは、プライベートIPアドレスを介してKibanaで利用可能でありながら、ローカル接続を引き続き受け入れることができます。

次のステップは、いくつかのセキュリティ機能をオンにして、Elasticが単一ノードで実行されるように構成されていることを確認することです。これを行うには、ファイルの最後に次の行を追加します。

。 。 .discovery.type:single-nodexpack.security.enabled:true 

複数のElasticSearchノードを使用する場合は、最初の行を省略できます。

終了したら、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

ファイアウォールの構成

Elasticsearchに適切なファイアウォールルールを追加して、プライベートネットワーク経由でアクセスできるようにします。

 $ sudo Firewall-cmd --permanent --zone =internal --change-interface =eth1 $ sudo Firewall-cmd --permanent --zone =internal --add-service =elasticsearch $ sudo Firewall-cmd-永続的な--zone=internal --add-service =kibana $ sudo Firewall-cmd --reload 

手順7で取得したものと同様に、最初のコマンドでインターフェイス名を選択してください。上記のコマンドは、ファイアウォールのデフォルトゾーンを内部に変更し、Elasticsearchの場合はポート9200、9300、Kibanaの場合はポート5601を開きます。

Elasticsearchを開始

Elasticsearchを構成したので、次はサービスを開始します。

 $ sudo systemctl start Elasticsearch 
Elasticsearchパスワードを作成

Elasticsearchのセキュリティ設定を有効にした後、次のステップはデフォルトユーザーのパスワードを生成することです。 Elasticsearchには、/usr/share/elasticsearch/bin/elasticsearch-setup-passwordsにパスワード作成ユーティリティが付属しています。 ランダムなパスワードを生成できます。

パスワードを作成します。

 $ cd / usr / share / elasticsearch / bin $ sudo ./elasticsearch-setup-passwords auto 

次のような出力が得られます。 yを押します プロンプトが表示されたら続行します。

予約ユーザーのパスワードの設定を開始しますelastic、apm_system、kibana、kibana_system、logstash_system、beats_system、remote_monitoring_user。パスワードはランダムに生成され、コンソールに出力されます。続行するかどうかを確認してください[y / N]ユーザelasticPASSWORD弾性=bd1YJfhSa8RC8SMvTIwgためyChangedユーザのパスワードapm_systemPASSWORD apm_system =EtwMg8maU67o5tvD5rseChangedパスワードユーザーのkibana_systemPASSWORD kibana_system =dTanR7Q2HtgDtATRvuJvChangedパスワードユーザーのkibanaPASSWORD kibana =dTanR7Q2HtgDtATRvuJvChangedパスワードユーザーのlogstash_systemPASSWORD logstash_system =XGSjxNktuNMWVfGYiboxChangedパスワードユーザーのbeats_systemPASSWORD beats_system =JXTr7CeHkMue608qVTQaChangedユーザのパスワードremote_monitoring_userPASSWORD remote_monitoring_user =Q6JTJNl3lPy0fhy6QuMPChangedパスワード

ユーティリティは1回しか実行できないため、すべてのパスワードを安全な場所に保存してください。

ステップ9-Kibanaを設定する

Kibanaを構成する最初のステップは、xpackを有効にすることです。 秘密鍵を生成することによるセキュリティ機能。 Kibanaはこれらの秘密鍵を使用してElasticsearchにデータを保存します。秘密鍵を生成するユーティリティには、/usr/share/kibana/binからアクセスできます。 ディレクトリ。

 $ cd / usr / share / kibana / bin / $ sudo ./kibana-encryption-keys generate -q --force 

-q フラグはコマンド命令を抑制し、--force フラグは、新しいシークレットが生成されることを保証します。次のような出力が表示されます。

 xpack.encryptedSavedObjects.encryptionKey:0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2a02747bb90fb0f 

出力をコピーします。 /etc/kibana/kibana.ymlにあるKibanaの構成ファイルを開きます 編集用。

 $ sudo nano /etc/kibana/kibana.yml 

前のコマンドのコードをファイルの最後に貼り付けます。

。 。 。#すべてのローカライズ可能な文字列、日付、および数値形式に使用されるロケールを指定します。#サポートされる言語は次のとおりです。英語-en、デフォルトでは中国語-zh-CN。#i18n.locale: "en" xpack.encryptedSavedObjects.encryptionKey :0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2a02747bb90fb0f9a3c267b99ed 
キバナポートを構成する

Kibanaは、サーバーのプライベートIPアドレスでアクセスできるように構成する必要があります。 #server.host: "localhost"という行を見つけます ファイルに追加し、図のようにそのすぐ下に次の行を追加します。

#Kibanaはバックエンドサーバーによって提供されます。この設定は、使用するポートを指定します。#server.port:5601#Kibanaサーバーがバインドするアドレスを指定します。 IPアドレスとホスト名はどちらも有効な値です。#デフォルトは「localhost」です。これは通常、リモートマシンが接続できないことを意味します。#リモートユーザーからの接続を許可するには、このパラメーターを非ループバックアドレスに設定します。#server .host: "localhost" server.host: "your_private_IP" 

終了したら、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

Kibanaアクセスを構成する

次のステップは、Kibanaが認証に使用できるユーザー名とパスワードを作成することです。 Kibanaの構成ファイルを直接編集することでこれを行うことができますが、セキュリティ上の問題が発生する可能性があります。安全な方法には、kibana-keystoreの使用が含まれます アプリケーション。

次のコマンドを実行して、ユーザー名を設定します。 kibana_systemと入力します ユーザー名として。

 $ cd / usr / share / kibana / bin $ sudo./kibana-keystore addelasticsearch.usernameelasticsearch.usernameの値を入力してください:************* 

コマンドを再実行して、パスワードを設定してください。手順8でKibana用に作成したパスワードを使用してください。このチュートリアルでは、パスワードはdTanR7Q2HtgDtATRvuJvです。 。

 $ sudo ./kibana-keystore addelasticsearch.passwordelasticsearch.passwordの値を入力してください:******************** 
Kibanaを開始する

Kibanaの安全なアクセスとネットワークを構成したので、プロセスを開始します。

 $ sudo systemctl start kibana 

ステータスをチェックして、実行されているかどうかを確認します。

 $ sudo systemctl status kibana 
ステップ10-Filebeatのインストールと構成

SuricataサーバーにFilebeatをインストールすることに注意することが重要です。そのため、それに切り替えて、ElasticGPGキーを追加して開始します。

 $ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 

Elasticリポジトリを作成して開きます。

 $ sudo nano /etc/yum.repos.d/elasticsearch.repo 

次のコードを貼り付けます。

 [elasticsearch] name=7.xパッケージのElasticsearchリポジトリbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- Elasticsearchenabled =0autorefresh =1type =rpm-md 

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

Filebeatをインストールします。

 $ sudo dnf install --enablerepo =elasticsearch filebeat 

Filebeatはその構成を/etc/filebeat/filebeat.ymlに保存します ファイル。編集のために開きます。

 $ sudo nano /etc/filebeat/filebeat.yml 

最初に行う必要があるのは、Kibanaのダッシュボードに接続することです。 #host: "localhost:5601"という行を見つけます キバナで セクションを作成し、図のようにそのすぐ下に次の行を追加します。

。 。 。#Beatsバージョン6.0.0以降、ダッシュボードはKibana APIを介してロードされます。#これにはKibanaエンドポイント構成が必要です。setup.kibana:#Kibanaホスト#スキームとポートは省略でき、デフォルトに設定されます( httpおよび5601)#追加のパスを指定する場合は、スキームが必要です。http:// localhost:5601 / path#IPv6アドレスは常に次のように定義する必要があります:https:// [2001:db8 ::1]:5601 #host: "localhost:5601" host: "your_private_IP:5601"。 。 。

次に、Elasticsearchの出力を見つけます ファイルのセクションを作成し、hostsの値を編集します 、username 、およびpassword 以下に示すように。ユーザー名として、elasticを選択します 値として、パスワードとして、このチュートリアルのステップ8で生成された値を使用します。

 output.elasticsearch:#接続するホストの配列。ホスト:["your_private_IP:9200"]#プロトコル- `http`(デフォルト)または`https`のいずれか。 #protocol: "https"#認証資格情報-APIキーまたはユーザー名/パスワードのいずれか。 #api_key: "id:api_key"ユーザー名: "elastic"パスワード:"bd1YJfhSa8RC8SMvTIwg"。 。 。

終了したら、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

次に、Filebeatの組み込みSuricataモジュールを有効にします。

 $sudofilebeatモジュールはsuricataを有効にします

Filebeatを構成する最後のステップは、filebeat setupを使用して、SIEMダッシュボードとパイプラインをElasticsearchにロードすることです。 コマンド。

 $sudofilebeatのセットアップ

コマンドが完了するまでに数分かかる場合があります。完了すると、次の出力が表示されます。

ILMポリシーの上書きは無効になっています。有効にするには、 `setup.ilm.overwrite:true`を設定します。インデックスの設定が完了しました。ダッシュボードの読み込み(Kibanaが実行中で到達可能である必要があります)読み込み済みのダッシュボードsetup--machine-learningを使用したMLの設定は8.0.0で削除されます。代わりにMLアプリを使用してください。詳細:https://www.elastic.co/guide/en/machine-learning/current/index.htmlを使用してElasticsearch8.0.0以降にMLジョブをロードすることはできません。 Beat.Loaded機械学習ジョブ構成LoadedIngestパイプライン

Filebeatサービスを開始します。

 $ sudo systemctl start filebeat 

サービスのステータスを確認してください。

 $ sudo systemctl status filebeat 
ステップ11-Kibanaダッシュボードへのアクセス

KIbanaはプライベートIPアドレスを介してのみElasticsearchにアクセスするように構成されているため、アクセスするには2つのオプションがあります。最初の方法は、PCからElasticsearchサーバーへのSSHトンネルを使用することです。これにより、ポート5601がPCからサーバーのプライベートIPアドレスに転送され、PCからhttp://localhost:5601でKibanaにアクセスできるようになります。 。ただし、この方法では、他の場所からはアクセスできなくなります。

オプションは、SuricataサーバーにNginxをインストールすることです。 プライベートIPアドレスを介してElasticsearchのサーバーにアクセスするためのリバースプロキシとして使用します。両方の方法について説明します。要件に基づいてどちらの方法も選択できます。

SSHローカルトンネルの使用

Windows10またはWindows11を使用している場合は、WindowsPowershellからSSHLocalTunnelを実行できます。 LinuxまたはmacOSでは、ターミナルを使用できます。まだ設定していない場合は、SSHアクセスを設定する必要があります。

コンピューターの端末で次のコマンドを実行して、SSHトンネルを作成します。

 $ ssh -L 5601:your_private_IP:5601 [email protected] _public_IP -N 
  • -L フラグは、PCのポートからサーバーにトラフィックを転送するローカルSSHトンネルを指します。
  • private_IP:5601 サーバー上でトラフィックが転送されるIPアドレスです。この場合は、ElasticsearchサーバーのプライベートIPアドレスに置き換えてください。
  • your_public_IP SSH接続を開くために使用されるElasticsearchサーバーのパブリックIPアドレスです。
  • -N フラグは、OpenSSHにコマンドを実行しないように指示しますが、トンネルが実行されている限り接続を維持します。

トンネルが開いたので、URL http://localhost:5601を開くことでKibanaにアクセスできます。 PCのブラウザで。次の画面が表示されます。

Kibanaにアクセスする必要がある限り、コマンドを実行し続ける必要があります。 Ctrl + Cを押します ターミナルでトンネルを閉じます。

Nginxリバースプロキシの使用

この方法は、世界中のどこからでもダッシュボードにアクセスする場合に最適です。

ファイアウォールの構成

先に進む前に、ファイアウォールでHTTPポートとHTTPSポートを開く必要があります。

 $ sudo Firewall-cmd --permanent --add-service =http $ sudo Firewall-cmd --permanent --add-service =https 

ファイアウォールをリロードして変更を有効にします。

 $ sudo Firewall-cmd --reload 

SSLをインストールして構成する

最初のステップは、Let'sEncryptSSL証明書をインストールすることです。すでにEPELリポジトリを設定しているので、Certbotツールをインストールします。

 $ sudo dnf install certbot 

ドメインkibana.example.comのSSL証明書を生成します 。

 $ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com 

The above command will download a certificate to the /etc/letsencrypt/live/kibana.example.com サーバー上のディレクトリ。

Diffie-Hellmanグループを生成します 証明書。

 $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 

Create a challenge web root directory for Let's Encrypt auto-renewal.

 $ sudo mkdir -p / var / lib /letsencrypt 

Cronジョブを作成してSSLを更新します。証明書を確認し、必要に応じて更新するために毎日実行されます。そのためには、まず、ファイル/etc/cron.daily/certbot-renewを作成します。 開いて編集します。

 $ sudo nano /etc/cron.daily/certbot-renew 

次のコードを貼り付けます。

#!/bin/shcertbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

タスクファイルの権限を変更して実行可能にします。

 $ sudo chmod + x /etc/cron.daily/certbot-renew 

Install and Configure Nginx

Rocket Linux 8.5 ships with the latest stable version of Nginx as a module. Install it using the following command.

$ sudo dnf module install nginx:1.20

You can check the version you want to install using the following command.

$ dnf module list nginxRocky Linux 8 - AppStreamName Stream Profiles Summarynginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverExtra Packages for Enterprise Linux Modular 8 - x86_64Name Stream Profiles Summarynginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver

Confirm the Nginx installation.

$ nginx -vnginx version 1.20.1

Nginxサービスを有効にします。

 $ sudo systemctl enable nginx 

Create and open the Nginx configuration file for Kibana.

$ sudo nano /etc/nginx/conf.d/kibana.conf

Paste the following code in it. Replace the IP address with the private IP address of your Elasticsearch server.

 server {listen 80;聞く[::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com;文字セットutf-8; 443sslhttp2をリッスンします。リッスン[::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; resolver 8.8.8.8; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $ host; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $ schema; }} 

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

ファイル/etc/nginx/nginx.confを開きます 編集用。

 $ sudo nano /etc/nginx/nginx.conf 

include /etc/nginx/conf.d/*.conf;の行の前に次の行を追加します 。

 server_names_hash_bucket_size 64; 

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

Verify the configuration.

$ sudo nginx -tnginx:the configuration file /etc/nginx/nginx.conf syntax is oknginx:configuration file /etc/nginx/nginx.conf test is successful

Start the Nginx service.

 $ sudo systemctl start nginx 

Your Kibana dashboard should be accessible via the URL https://kibana.example.com from anywhere you want.

Step 12 - Managing Kibana Dashboards

Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.

Open Kibana's configuration file.

$ sudo nano /etc/kibana/kibana.yml

Find the commented line #server.publicBaseUrl: "" and change it as follows by removing the hash in front of it.

server.publicBaseUrl:"https://kibana.example.com"

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

Restart the Kibana service.

$ sudo systemctl restart kibana

Wait for a few minutes and load the URL https://kibana.example.com in your browser. Log in with the username elastic and the password you generated before (bd1YJfhSa8RC8SMvTIwg ) and you will get the following screen.

Type type:data suricata in the search box at the top to locate Suricata's information.

Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.

Click on the Events button to view all the logged events.

On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.

You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Click on the Network dashboard from the left hamburger menu, and you will get the following screen.

You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.

結論

This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally.ご不明な点がございましたら、下のコメント欄に投稿してください。


Rocky Linux
  1. RockyLinux8にElasticsearchをインストールして構成する

  2. Rocky Linux /Centos8でdockerをインストールして構成する方法

  3. RockyLinux8およびCentOS8にMonoをインストールして構成する方法

  1. Rocky Linux /CentOS8にAnsibleをインストールして構成する方法

  2. Rocky Linux / AlmaLinux8にHAProxyロードバランサーをインストールして構成する方法

  3. Rocky Linux / AlmaLinux8にMemcachedをインストールして構成する方法

  1. Rocky Linux / AlmaLinux8にSquidProxyをインストールして構成する方法

  2. RockyLinux8にElasticsearchをインストールして設定する方法

  3. RockyLinux8にTensorFlowをインストールして設定する方法