Rocky Linux 8にElastic Stackと共にSuricata IDSをインストールして設定する方法
Rocky Linux 8にElastic Stackと共にSuricata IDSをインストールして設定する方法
このチュートリアルはこれらのOSバージョンのために存在します
- ロッキーリナックス 9
- ロッキー・リナックス 8.4
このページで
- 前提条件
- ファイアウォールを設定する
- パート1
- ステップ1 - Suricataをインストールする
ステップ2 - Suricataを設定する
- コミュニティIDを有効にする
- ネットワークインターフェースを選択
- ライブルールリロード
- ディレクトリの権限を設定する
ステップ3 - Suricataルールの設定
ステップ8 - Elasticsearchを構成する
ステップ9 - Kibanaの設定
ステップ11 - Kibanaダッシュボードにアクセスする
Suricataは、サーバーを通過するインターネットトラフィックのすべてのパケットを検査し処理するネットワーク監視ツールです。それは、ログイベントを生成し、アラートをトリガーし、疑わしい活動を検出した際にトラフィックをドロップできます。
Suricataを単一のマシンにインストールしてそのトラフィックを監視するか、ゲートウェイホストに展開して接続された他のサーバーからのすべての入出力トラフィックをスキャンすることができます。SuricataをElasticsearch、Kibana、Filebeatと組み合わせて、セキュリティ情報およびイベント管理(SIEM)ツールを作成することができます。
このチュートリアルでは、Rocky Linux 8サーバーにSuricata IDSとElasticStackをインストールします。スタックのさまざまなコンポーネントは次のとおりです:
- Elasticsearch は、サーバーからのセキュリティイベントを保存、インデックス作成、相関、検索するために使用されます。
- Kibana はElasticsearchに保存されているログを表示します。
- Filebeat は Suricata の
eve.jsonログファイルをパースし、各イベントを Elasticsearch に送信して処理します。 - スリカータは、ネットワークトラフィックをスキャンして疑わしいイベントを検出し、無効なパケットを削除します。
このチュートリアルは2つの部分に分かれており、最初の部分ではSuricataのインストールと設定について説明し、2番目の部分ではElastic Stackのインストールと設定について説明します。
私たちはチュートリアルのために、異なるサーバーにSuricataとElasticスタックをインストールします。
前提条件
Elastic StackとSuricataをホスティングしているサーバーは、最小限4GBのRAMと2つのCPUコアを持っている必要があります。
サーバーはプライベートIPアドレスを使用して互いに通信できる必要があります。
サーバーは、非ルートのsudoユーザーを持つRocky Linux 8で実行されている必要があります。
どこからでもKibanaダッシュボードにアクセスしたい場合は、Suricataがインストールされるサーバーを指すドメイン(kibana.example.com)を設定してください。
両方のサーバーに必要なパッケージをインストールします。
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
最初のコマンドは、dnf パッケージインストーラー用のコミュニティプロジェクト(copr)を有効にします。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フィールドは、異なる監視ツールによって生成されたレコード間でデータを関連付けるのを容易にします。SuricataをElasticsearchと共に使用するため、コミュニティIDを有効にすることは便利です。
/etc/suricata/suricata.yaml ファイルを編集するために開いてください。
sudo nano /etc/suricata/suricata.yaml
行 # Community Flow ID を見つけて、変数 community-id の値を true に設定してください。
. . .
# Community Flow ID
# Adds a 'community_id' field to EVE records. These are meant to give
# records a predictable flow ID that can be used to match records to
# output of other tools such as Zeek (Bro).
#
# Takes a 'seed' that needs to be same across sensors and tools
# to make the id less predictable.
# enable/disable the community id feature.
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
行番号580前後の行af-packet:を探してください。その下に、変数interfaceの値をあなたのシステムのデバイス名に設定します。
Linux high speed capture support
af-packet:
- interface: eth0
# Number of receive threads. "auto" uses the number of cores
#threads: auto
# Default clusterid. AF_PACKET will load balance packets based on flow.
cluster-id: 99
. . .
追加のインターフェースを追加したい場合は、約650行目のaf-packetセクションの下部に追加することができます。
新しいインターフェースを追加するには、以下のように- interface: defaultセクションのすぐ上に挿入します。
# For eBPF and XDP setup including bypass, filter and load balancing, please
# see doc/userguide/capture-hardware/ebpf-xdp.rst for more info.
- 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 コマンドは、Suricataプロセスに SIGUSR2 信号を送信します。 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 -nG
username sudo suricata
ステップ3 - Suricataルールの設定
Suricataはデフォルトで、ネットワークトラフィックを検出するために限られたルールセットのみを使用します。suricata-updateというツールを使用して、外部のプロバイダーからさらにルールセットを追加できます。追加のルールを含めるには、次のコマンドを実行してください。
suricata-update
16/2/2022 -- 07:00:16 - <Info> -- Using data-directory /var/lib/suricata.
16/2/2022 -- 07:00:16 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
16/2/2022 -- 07:00:16 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules.
.....
16/2/2022 -- 07:00:16 - <Info> -- No sources configured, will use Emerging Threats Open
('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz', None, True)
16/2/2022 -- 07:00:16 - <Info> -- Checking https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.md5.
16/2/2022 -- 07:00:16 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.
100% - 3162050/3162050
.....
16/2/2022 -- 07:00:23 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 32004; enabled: 24611; added: 8; removed 1; modified: 1218
16/2/2022 -- 07:00:23 - <Info> -- Writing /var/lib/suricata/rules/classification.config
16/2/2022 -- 07:00:23 - <Info> -- Testing with suricata -T.
16/2/2022 -- 07:01:16 - <Info> -- Done.
ルールセットプロバイダーを追加する
Suricataのルールは、より多くのプロバイダーを追加することで拡張できます。さまざまな無料および商用のプロバイダーからルールを取得することができます。
次のコマンドを使用して、デフォルトプロバイダーのリストを表示できます。
suricata-update list-sources
例えば、tgreen/hunting ルールセットを含めたい場合は、以下のコマンドで有効にすることができます。
suricata-update enable-source tgreen/hunting
suricata-update コマンドを再度実行して、新しいルールをダウンロードおよび更新します。
ステップ4 - Suricataの設定を検証する
Suricataは、構成ファイルとルールのエラーをチェックするための検証ツールを搭載しています。検証ツールを実行するには、次のコマンドを実行してください。
sudo suricata -T -c /etc/suricata/suricata.yaml -v
22/2/2022 -- 23:20:10 - <Info> - Running suricata under test mode
22/2/2022 -- 23:20:10 - <Notice> - This is Suricata version 6.0.4 RELEASE running in SYSTEM mode
22/2/2022 -- 23:20:10 - <Info> - CPUs/cores online: 2
22/2/2022 -- 23:20:10 - <Info> - dropped the caps for main thread
22/2/2022 -- 23:20:10 - <Info> - fast output device (regular) initialized: fast.log
22/2/2022 -- 23:20:10 - <Info> - eve-log output device (regular) initialized: eve.json
22/2/2022 -- 23:20:10 - <Info> - stats output device (regular) initialized: stats.log
22/2/2022 -- 23:20:21 - <Info> - 1 rule files processed. 24611 rules successfully loaded, 0 rules failed
22/2/2022 -- 23:20:21 - <Info> - Threshold config parsed: 0 rule(s) found
22/2/2022 -- 23:20:21 - <Info> - 24614 signatures processed. 1216 are IP-only rules, 4120 are inspecting packet payload, 19074 inspect application layer, 108 are decoder event only
22/2/2022 -- 23:21:02 - <Notice> - Configuration provided was successfully loaded. Exiting.
22/2/2022 -- 23:21:03 - <Info> - cleaning up signature grouping structure... complete
-T フラグは Suricata をテストモードで実行するよう指示し、-c フラグは設定ファイルの場所を構成し、-v フラグはコマンドの詳細な出力を表示します。システムの構成や追加されたルールの数によって、コマンドの完了までに数分かかることがあります。
ステップ5 - Suricataの実行
Suricataの設定が完了したので、アプリケーションを実行する時が来ました。
sudo systemctl start suricata
プロセスのステータスを確認してください。
sudo systemctl status suricata
すべてが正しく動作している場合、以下の出力が表示されるはずです。
? suricata.service - Suricata Intrusion Detection Service
Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-02-16 07:14:22 UTC; 32min ago
Docs: man:suricata(1)
Process: 1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
Main PID: 1496 (Suricata-Main)
Tasks: 8 (limit: 23479)
Memory: 367.5M
CGroup: /system.slice/suricata.service
??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata
Feb 16 07:14:22 suricata systemd[1]: Starting Suricata Intrusion Detection Service...
Feb 16 07:14:22 suricata systemd[1]: Started Suricata Intrusion Detection Service.
このプロセスは、すべてのルールを解析するのに数分かかることがあります。したがって、上記のステータスチェックはSuricataが起動して準備が整っているかどうかの完全な指標ではありません。そのためには、次のコマンドを使用してログファイルを監視することができます。
sudo tail -f /var/log/suricata/suricata.log
ログファイルに以下の行が表示されている場合、Suricataが実行中であり、ネットワークトラフィックを監視する準備ができていることを意味します。
16/02/2022 -- 07:18:39 - <Info> - All AFP capture threads are running.
ステップ6 - Suricataルールのテスト
私たちはSuricataが疑わしいトラフィックを検出しているかどうかを確認します。Suricataのガイドは、次のコマンドを使用してET Openルール番号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_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 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_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 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をインストールする最初のステップは、Elastic GPG鍵をサーバーに追加することです。
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Elasticsearchパッケージのためにリポジトリを作成し、ファイル/etc/yum/yum.repos.d/elasticsearch.repoを編集のために作成して開きます。
sudo nano /etc/yum.repos.d/elasticsearch.repo
そのコードをそこに貼り付けてください。
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
ElasticsearchとKibanaをインストールします。
sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
毎回、リポジトリがデフォルトで無効になっているため、フラグ --enablerepo=elasticsearch を使用する必要があります。これにより、これらのパッケージの偶発的なアップグレードが防止されます。
次のコマンドを使用して、サーバーのプライベートIPアドレスを見つけてください。
ip -brief address show
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64
eth1 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 を見つけ、そのすぐ下に以下の行を追加します。
By default Elasticsearch is only accessible on localhost. Set a different
address here to expose this node on the network:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_IP"]
#
By default Elasticsearch listens for HTTP traffic on the first free port it
finds starting at 9200. Set a specific HTTP port here:
これにより、Elastic はローカル接続を受け入れることができ、プライベート IP アドレスを介して Kibana にも利用できるようになります。
次のステップは、いくつかのセキュリティ機能をオンにし、Elasticが単一ノードで実行されるように設定されていることを確認することです。それを行うために、ファイルの最後に次の行を追加してください。
. . .
discovery.type: single-node
xpack.security.enabled: true
複数のElastic searchノードを使用する場合は、最初の行を省略できます。
完了したら、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 --permanent --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 を押して続行してください。
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user apm_system
PASSWORD apm_system = EtwMg8maU67o5tvD5rse
Changed password for user kibana_system
PASSWORD kibana_system = dTanR7Q2HtgDtATRvuJv
Changed password for user kibana
PASSWORD kibana = dTanR7Q2HtgDtATRvuJv
Changed password for user logstash_system
PASSWORD logstash_system = XGSjxNktuNMWVfGYibox
Changed password for user beats_system
PASSWORD beats_system = JXTr7CeHkMue608qVTQa
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = Q6JTJNl3lPy0fhy6QuMP
Changed password for user elastic
PASSWORD elastic = bd1YJfhSa8RC8SMvTIwg
ユーティリティは一度しか実行できないので、すべてのパスワードを安全な場所に保存してください。
ステップ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: 0f4e5e1cf8fad1874ffed0faac6be0da
xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5
xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
出力をコピーしてください。編集のためにKibanaの設定ファイルを/etc/kibana/kibana.ymlで開きます。
sudo nano /etc/kibana/kibana.yml
前のコマンドのコードをファイルの最後に貼り付けてください。
. . .
Specifies locale to be used for all localizable strings, dates and number formats.
Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"
xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da
xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5
xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
Kibanaポートを設定する
KibanaはサーバーのプライベートIPアドレスでアクセス可能になるように設定する必要があります。ファイル内の#server.host: "localhost"という行を見つけ、その直下に次の行を追加してください。
Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601
Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
The default is 'localhost', which usually means remote machines will not be able to connect.
To allow connections from remote users, set this parameter to a non-loopback address.
#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 add elasticsearch.username
Enter value for elasticsearch.username: *************
もう一度コマンドを実行してパスワードを設定してください。ステップ8でKibanaのために作成したパスワードを使用することを確認してください。私たちのチュートリアルでは、パスワードはdTanR7Q2HtgDtATRvuJvです。
sudo ./kibana-keystore add elasticsearch.password
Enter value for elasticsearch.password: ********************
Kibanaを起動しています
Kibanaのために安全なアクセスとネットワーキングを設定したので、プロセスを開始してください。
sudo systemctl start kibana
状態を確認して、実行中かどうかを確認してください。
sudo systemctl status kibana
ステップ10 - Filebeatをインストールして構成する
SuricataサーバーにFilebeatをインストールすることが重要です。したがって、Suricataサーバーに戻り、ElasticのGPGキーを追加して始めましょう。
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
弾性リポジトリを作成して開きます。
sudo nano /etc/yum.repos.d/elasticsearch.repo
次のコードを貼り付けてください。
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
Ctrl + X を押してファイルを保存し、プロンプトが表示されたら Y を入力します。
Filebeatをインストールします。
sudo dnf install --enablerepo=elasticsearch filebeat
/etc/filebeat/filebeat.yml ファイルに Filebeat の設定が保存されています。編集のために開いてください。
sudo nano /etc/filebeat/filebeat.yml
最初に行う必要があるのは、Kibanaのダッシュボードに接続することです。Kibanaセクションで、#host: "localhost:5601"の行を見つけ、そのすぐ下に次の行を追加します。
. . .
Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
This requires a Kibana endpoint configuration.
setup.kibana:
# Kibana Host
# Scheme and port can be left out and will be set to the default (http and 5601)
# In case you specify and additional path, the scheme is required: http://localhost:5601/path
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
#host: "localhost:5601"
host: "your_private_IP:5601"
. . .
次に、ファイルの Elasticsearch Output セクションを見つけて、hosts、username、および password の値を以下のように編集してください。ユーザー名には elastic を値として選択し、パスワードにはこのチュートリアルのステップ8で生成された値を使用してください。
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["your_private_IP:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
username: "elastic"
password: "bd1YJfhSa8RC8SMvTIwg"
. . .
完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。
次に、Filebeatの組み込みSuricataモジュールを有効にします。
sudo filebeat modules enable suricata
Filebeatの設定における最終ステップは、filebeat setupコマンドを使用してSIEMダッシュボードとパイプラインをElasticsearchにロードすることです。
sudo filebeat setup
コマンドが終了するまでに数分かかる場合があります。終了すると、次の出力が得られるはずです。
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines
Filebeatサービスを開始します。
sudo systemctl start filebeat
サービスの状態を確認してください。
sudo systemctl status filebeat
ステップ11 - Kibanaダッシュボードにアクセスする
Kibanaは、プライベートIPアドレスを介してのみElasticsearchにアクセスするように設定されているため、アクセスするための2つのオプションがあります。最初の方法は、PCからElasticsearchサーバーへのSSHトンネルを使用することです。これにより、PCのポート5601がサーバーのプライベートIPアドレスに転送され、PCからhttp://localhost:5601でKibanaにアクセスできるようになります。しかし、この方法では、他の場所からはアクセスできなくなります。
選択肢は、SuricataサーバーにNginxをインストールし、ElasticsearchのサーバーにプライベートIPアドレスを介してアクセスするためのリバースプロキシとして使用することです。両方の方法について議論します。あなたの要件に基づいて、どちらかの方法を選ぶことができます。
SSHローカルトンネルの使用
Windows 10 または Windows 11 を使用している場合は、Windows Powershell から SSH LocalTunnel を実行できます。Linux または macOS では、ターミナルを使用できます。まだ設定していない場合は、SSH アクセスを構成する必要があるかもしれません。
コンピュータのターミナルで以下のコマンドを実行してSSHトンネルを作成します。
ssh -L 5601:your_private_IP:5601 navjot@your_public_IP -N
- 「
-L」フラグはローカルSSHトンネルを指し、あなたのPCのポートからサーバーへのトラフィックを転送します。 private_IP:5601は、サーバー上でトラフィックが転送されるIPアドレスです。この場合、ElasticsearchサーバーのプライベートIPアドレスに置き換えてください。- この
your_public_IPは、SSH接続を開くために使用されるElasticsearchサーバーのパブリックIPアドレスです。 -Nフラグは、OpenSSH に対してコマンドを実行せず、トンネルが動作している間は接続を維持するように指示します。
トンネルが開通したので、PCのブラウザでURL http://localhost:5601 を開くことでKibanaにアクセスできます。次の画面が表示されます。
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's Encrypt SSL証明書をインストールすることです。すでに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 -d kibana.example.com
上記のコマンドは、サーバーの/etc/letsencrypt/live/kibana.example.comディレクトリに証明書をダウンロードします。
ディフィー・ヘルマン群証明書を生成します。
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Let's Encryptの自動更新のために、チャレンジ用のWebルートディレクトリを作成します。
sudo mkdir -p /var/lib/letsencrypt
SSLを更新するためにCronジョブを作成します。これは毎日実行され、証明書を確認して必要に応じて更新します。それに先立って、まずはファイル/etc/cron.daily/certbot-renewを作成し、編集のために開きます。
sudo nano /etc/cron.daily/certbot-renew
次のコードを貼り付けてください。
#!/bin/sh
certbot 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
Nginxをインストールして設定する
Rocket Linux 8.5は、最新の安定版Nginxをモジュールとして搭載しています。以下のコマンドを使用してインストールしてください。
sudo dnf module install nginx:1.20
インストールしたいバージョンを確認するには、次のコマンドを使用できます。
dnf module list nginx
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nginx 1.14 [d] common [d] nginx webserver
nginx 1.16 common [d] nginx webserver
nginx 1.18 common [d] nginx webserver
nginx 1.20 [e] common [d] [i] nginx webserver
Extra Packages for Enterprise Linux Modular 8 - x86_64
Name Stream Profiles Summary
nginx mainline common nginx webserver
nginx 1.20 [e] common [d] [i] nginx webserver
Nginxのインストールを確認してください。
nginx -v
nginx version 1.20.1
Nginxサービスを有効にしてください。
sudo systemctl enable nginx
KibanaのためのNginx設定ファイルを作成して開きます。
sudo nano /etc/nginx/conf.d/kibana.conf
以下のコードを貼り付けてください。IPアドレスをElasticsearchサーバーのプライベートIPアドレスに置き換えてください。
server {
listen 80; listen [::]:80;
server_name kibana.example.com;
return 301 https://$host$request_uri;
}
server {
server_name kibana.example.com;
charset utf-8;
listen 443 ssl http2;
listen [::]: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-POLY1305:ECDHE-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 $scheme;
}
}
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と入力します。
構成を確認してください。
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginxサービスを開始してください。
sudo systemctl start nginx
あなたのKibanaダッシュボードは、どこからでもURL https://kibana.example.com でアクセスできるはずです。
ステップ12 - Kibanaダッシュボードの管理
ダッシュボードの管理を進める前に、Kibanaの設定に基本URLフィールドを追加する必要があります。
Kibanaの設定ファイルを開きます。
sudo nano /etc/kibana/kibana.yml
コメントされた行#server.publicBaseUrl: ""を見つけて、その前のハッシュを削除して次のように変更してください。
server.publicBaseUrl: "https://kibana.example.com"
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
Kibanaサービスを再起動します。
sudo systemctl restart kibana
数分待ってから、ブラウザにURL https://kibana.example.com を読み込んでください。ユーザー名 elastic と以前に生成したパスワード(bd1YJfhSa8RC8SMvTIwg)でログインすると、次の画面が表示されます。
検索ボックスにtype:data suricataと入力して、Suricataの情報を見つけてください。
最初の結果([Filebeat Suricata] アラートオーバービュー)をクリックすると、以下のような画面が表示されます。デフォルトでは、過去15分間のエントリーのみが表示されますが、チュートリアルのためにより多くのデータを表示するために、より広い時間範囲で表示しています。
イベントボタンをクリックして、すべての記録されたイベントを表示してください。
イベントおよびアラートページを下にスクロールすると、各イベントおよびアラートをプロトコルの種類、ソースおよび宛先ポート、ソースのIPアドレスによって識別できます。また、トラフィックが発生した国も確認できます。
KibanaとFilebeatを使用して、他のタイプのダッシュボードにアクセスしたり生成したりできます。すぐに利用できる便利なビルトインダッシュボードの一つはセキュリティダッシュボードです。左側のハンバーガーメニューからネットワークダッシュボードをクリックすると、以下の画面が表示されます。
Nginxのようなダッシュボードを追加するには、内蔵のFilebeatモジュールを有効にして設定することができます。
結論
これで、Rocky Linux 8 ベースのサーバーに Suricata IDS をインストールおよび構成するためのチュートリアルが終了します。また、Kibana ダッシュボードに外部からアクセスするために Nginx をリバースプロキシとして構成しました。質問がある場合は、下のコメントに投稿してください。





