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
Suricataをインストールするには、Open Information Security Foundation(OISF)のパッケージリポジトリをサーバーに追加する必要があります。
$ sudo dnf install'dnf-command(copr)' $ sudo dnf copr enable @ oisf / suricata-6.0
最初のコマンドは、コミュニティプロジェクトを有効にします(copr
)dnf
の場合 パッケージインストーラー。 2番目のコマンドは、OISFリポジトリを有効にしてシステムに追加します。 suricata-6.0
ソフトウェアの最新の安定バージョンのリポジトリを有効にします。 y
を押します およびENTER
プロンプトが表示されるたび。
次に、EPELリポジトリを追加します。
$ sudo dnf install epel-release
Suricataをインストールします。
$ sudo dnf install suricata
Suricataサービスを有効にします。
$ sudo systemctl enable suricata
Suricataはその構成を/etc/suricata/suricata.yaml
に保存します ファイル。 SuricataのデフォルトモードはIDS(侵入検知システム)モードで、トラフィックはログに記録されるだけで停止されません。 Suricataを初めて使用する場合は、モードを変更しないでおく必要があります。構成して詳細を確認したら、IPS(侵入防止システム)モードをオンにできます。
コミュニティ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
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
を実行します もう一度コマンドを実行して、新しいルールをダウンロードして更新します。
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は、コマンドの詳細な出力を出力します。システム構成と追加されたルールの数によっては、コマンドが完了するまでに数分かかる場合があります。
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キャプチャスレッドが実行されています。
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番目のサーバーで実行されることになっています。
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
にも注意してください。 。
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を構成したので、次はサービスを開始します。
$ sudo systemctl start 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回しか実行できないため、すべてのパスワードを安全な場所に保存してください。
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-elasticsearchElasticリポジトリを作成して開きます。
$ 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-mdCtrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
Filebeatをインストールします。
$ sudo dnf install --enablerepo =elasticsearch filebeatFilebeatはその構成を
/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 --reloadSSLをインストールして構成する
最初のステップは、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.comThe 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 2048Create a challenge web root directory for Let's Encrypt auto-renewal.
$ sudo mkdir -p / var / lib /letsencryptCronジョブを作成して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-renewInstall 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.20You 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 webserverConfirm the Nginx installation.
$ nginx -vnginx version 1.20.1Nginxサービスを有効にします。
$ sudo systemctl enable nginxCreate and open the Nginx configuration file for Kibana.
$ sudo nano /etc/nginx/conf.d/kibana.confPaste 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 successfulStart the Nginx service.
$ sudo systemctl start nginxYour 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.ymlFind 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 kibanaWait for a few minutes and load the URL
https://kibana.example.com
in your browser. Log in with the usernameelastic
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