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

ArchLinux : Suricata Elasticsearch Kibanaで可視化

前提条件

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

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

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

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

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

①Suricata のインストール

# su - huong
$ yay -S suricata-nfqueue

バージョンチェック
# suricata -V
This is Suricata version 8.0.5 RELEASE

➁必要なカーネルモジュールの確認とロード
NFQUEUEを使用するには、カーネルがnfnetlink_queueをサポートしている必要があります。
モジュールの確認:

# lsmod | grep nfnetlink_queue

上記で何も表示されない場合、モジュールをロードする

# modprobe nfnetlink_queue

再度確認

# lsmod | grep nfnetlink_queue
nfnetlink_queue        36864  0

再起動後も有効にする

# echo "nfnetlink_queue" | tee /etc/modules-load.d/nfqueue.conf

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

# ip --brief add
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens33            UP             192.168.11.83/24 fe80::20c:29ff:fe76:c730/64

④設定ファイルを編集

# vim /etc/suricata/suricata.yaml

18行目 : コメントアウトしてその下に追加(varsセクションで、ネットワークを定義する)
#HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
HOME_NET: "[192.168.11.0/24]"

158行目あたり : 変更
community-id: false → community-id: true

661行目あたり : af-packetセクションのインターフェース名を設定
af-packet:
    - interface: ens33

ディレクトリーの所有権、実行権限を設定

# chown -R root:root /tmp
# chmod 775 /tmp

⑤Suricataの起動

# systemctl daemon-reload
# systemctl start suricata
# systemctl enable suricata
Created symlink /etc/systemd/system/multiuser.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service.

⑥Suricataの起動確認

# systemctl status suricata

● suricata.service - Suricata IDS/IPS daemon
     Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; preset: disabled)
     Active: active (running) since Fri 2026-09-25 09:11:36 JST; 36s ago
 Invocation: da54dc8b4bfd4cbd98cc8dc6982d534f
   Main PID: 30302 (Suricata-Main)
      Tasks: 10 (limit: 4599)
     Memory: 52.8M (peak: 53.1M)
        CPU: 268ms
     CGroup: /system.slice/suricata.service
             mq30302 /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata/suricata.pid -q 0

Sep 25 09:11:36 lepard systemd[1]: Started Suricata IDS/IPS daemon.
Sep 25 09:11:36 lepard suricata[30302]: Info: conf-yaml-loader: Including configuration file local.yaml.
Sep 25 09:11:36 lepard suricata[30302]: i: suricata: This is Suricata version 8.0.5 RELEASE running in SYSTEM mode
Sep 25 09:11:36 lepard suricata[30302]: W: detect: No rule files match the pattern /var/lib/suricata/rules/suricata.rules
Sep 25 09:11:36 lepard suricata[30302]: W: detect: 2 rule files specified, but no rules were loaded!
Sep 25 09:11:36 lepard suricata[30302]: i: threads: Threads created -> RX: 1 W: 2 TX: 1 FM: 1 FR: 1   Engine started.

ログを確認

# tail /var/log/suricata/suricata.log

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

# tail -f /var/log/suricata/stats.log

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

# tail -f /var/log/suricata/eve.json

2.Suricata Rulesの設定

①suricata rulesを取得

# suricata-update

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

# ls -al /var/lib/suricata/rules/
total 8
drwxr-x--- 2 suricata suricata 4096 Sep 25 09:05 .
drwxr-x--- 5 suricata suricata 4096 Sep 25 09:11 ..
-rw-r----- 1 suricata suricata    0 Sep 25 09:05  suricata.rules

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

# suricata-update list-sources

Name: abuse.ch/feodotracker
  Vendor: Abuse.ch
  Summary: Abuse.ch Feodo Tracker Botnet C2 IP ruleset
  License: CC0-1.0
Name: abuse.ch/sslbl-blacklist
  Vendor: Abuse.ch
  Summary: Abuse.ch SSL Blacklist
  License: CC0-1.0
  Replaces: sslbl/ssl-fp-blacklist
Name: abuse.ch/sslbl-c2
  Vendor: Abuse.ch
  Summary: Abuse.ch Suricata Botnet C2 IP Ruleset
  License: CC0-1.0
Name: abuse.ch/sslbl-ja3
  Vendor: Abuse.ch
  Summary: Abuse.ch Suricata JA3 Fingerprint Ruleset
  License: CC0-1.0
  Replaces: sslbl/ja3-fingerprints
Name: abuse.ch/urlhaus
  Vendor: abuse.ch
  Summary: Abuse.ch URLhaus Suricata Rules
  License: CC0-1.0
Name: aleksibovellan/nmap
  Vendor: aleksibovellan
  Summary: Suricata IDS/IPS Detection Rules Against NMAP Scans
  License: MIT
Name: et/open
  Vendor: Proofpoint
  Summary: Emerging Threats Open Ruleset
  License: MIT
Name: et/pro
  Vendor: Proofpoint
  Summary: Emerging Threats Pro Ruleset
  License: Commercial
  Replaces: et/open
  Parameters: secret-code
  Subscription: https://www.proofpoint.com/us/threat-insight/et-pro-ruleset
Name: etnetera/aggressive
  Vendor: Etnetera a.s.
  Summary: Etnetera aggressive IP blacklist
  License: MIT
Name: oisf/trafficid
  Vendor: OISF
  Summary: Suricata Traffic ID ruleset
  License: MIT
Name: pawpatrules
  Vendor: pawpatrules
  Summary: PAW Patrules is a collection of rules for IDPS / NSM Suricata engine
  License: CC-BY-SA-4.0
Name: ptrules/open
  Vendor: Positive Technologies
  Summary: Positive Technologies Open Ruleset
  License: Custom
Name: scwx/enhanced
  Vendor: Secureworks
  Summary: Secureworks suricata-enhanced ruleset
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures)
Name: scwx/malware
  Vendor: Secureworks
  Summary: Secureworks suricata-malware ruleset
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures)
Name: scwx/security
  Vendor: Secureworks
  Summary: Secureworks suricata-security ruleset
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures)
Name: stamus/lateral
  Vendor: Stamus Networks
  Summary: Lateral movement rules
  License: GPL-3.0-only
Name: stamus/nrd-14-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 14 day list, complete
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: stamus/nrd-30-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 30 day list, complete
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: stamus/nrd-entropy-14-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 14 day list, high entropy
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: stamus/nrd-entropy-30-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 30 day list, high entropy
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: stamus/nrd-phishing-14-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 14 day list, phishing
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: stamus/nrd-phishing-30-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 30 day list, phishing
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: tgreen/hunting
  Vendor: tgreen
  Summary: Threat hunting rules
  License: GPLv3

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

# suricata-update enable-source tgreen/hunting

25/9/2026 -- 09:19:18 - <Info> -- Using data-directory /var/lib/suricata.
25/9/2026 -- 09:19:18 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
25/9/2026 -- 09:19:18 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules.
25/9/2026 -- 09:19:18 - <Info> -- Found Suricata version 8.0.5 at /usr/bin/suricata.
25/9/2026 -- 09:19:18 - <Warning> -- Source index does not exist, will use bundled one.
25/9/2026 -- 09:19:18 - <Warning> -- Please run suricata-update update-sources.
25/9/2026 -- 09:19:18 - <Info> -- Creating directory /var/lib/suricata/update/sources
25/9/2026 -- 09:19:18 - <Info> -- Enabling default source et/open
25/9/2026 -- 09:19:18 - <Info> -- Source tgreen/hunting enabled

アップデートを実行

# suricata-update  update-sources

Suricata service再起動

# systemctl restart suricata

3. SuricataをIPSに設定する

①nfqueueモードにする

# vim /usr/lib/systemd/system/suricata.service

12行目 : コメント解除
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata/suricata.pid -q 0

13行目 : コメント
#ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata/suricata.pid -i ens33 --user suricata

SURICATAの設定を検証

# suricata -T -c /etc/suricata/suricata.yaml -v
--------------------------------------------------------------------------------------------------
Info: detect: 53245 signatures processed. 1231 are IP-only rules, 4652 are inspecting packet payload, 47126 inspect application layer, 110 are decoder event only
Notice: suricata: Configuration provided was successfully loaded. Exiting.

Suricataを再起動

# systemctl daemon-reload
# systemctl restart suricata

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

# vim /etc/ufw/before.rules

18行目当たりに追加
# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
 
## Start Suricata NFQUEUE rules
-I INPUT 1 -p tcp --dport 22 -j NFQUEUE --queue-bypass
-I OUTPUT 1 -p tcp --sport 22 -j NFQUEUE --queue-bypass
-I FORWARD -j NFQUEUE
-I INPUT 2 -j NFQUEUE
-I OUTPUT 2 -j NFQUEUE
## End Suricata NFQUEUE rules

同様に/etc/ufw/before6.rulesも編集する

# vim /etc/ufw/before6.rules

Firewallルールを反映

# ufw reload

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

# vim /var/lib/suricata/rules/suricata.rules
#alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)


/var/lib/suricata/rules/local.rulesファイルを作成しルールsid:2100498として記述する

# vim /var/lib/suricata/rules/local.rules

drop ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)

SURICATA設定ファイルを編集しカスタムルールのパスを定義する

# vim /etc/suricata/suricata.yaml

2327行目 : 追加
rule-files:
  - suricata.rules
  - local.rules

suricata再起動

# systemctl restart suricata

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

# curl --max-time 5 http://testmynids.org/uid/index.html
curl: (6) Could not resolve host: testmynids.org

今回の作業時点では上記のようにホストが見つからないと表示されるので、下記の通りgit hubからスクリプトをダウンロードし、実行しました

# curl -sSL https://raw.githubusercontent.com/3CORESec/testmynids.org/master/tmNIDS -o /tmp/tmNIDS && chmod +x /tmp/tmNIDS && /tmp/tmNIDS

jqを使ってeve.logファイルを調べる
jq をインストール

# pacman -S jq
# jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
{
  "timestamp": "2026-09-25T10:08:54.302742+0900",
  "flow_id": 1409022830884306,
  "event_type": "alert",
  "src_ip": "217.160.0.187",
  "src_port": 80,
  "dest_ip": "192.168.11.83",
  "dest_port": 46282,
  "proto": "TCP",
  "ip_v": 4,
  "pkt_src": "wire/pcap",
  "community_id": "1:fDwcunrjTZ1tMh4aUPKQxx0W3bs=",
  "alert": {
    "action": "blocked",
    "gid": 1,
    "signature_id": 2100498,
    "rev": 7,
    "signature": "GPL ATTACK_RESPONSE id check returned root",
    "category": "Potentially Bad Traffic",
    "severity": 2,
    "metadata": {
      "confidence": [
        "Medium"
      ],
      "created_at": [
        "2010_09_23"
      ],
      "signature_severity": [
        "Informational"
      ],
      "updated_at": [
        "2019_07_26"
      ]
    }
  },

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

Elasticsearch

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

1. Elasticsearchのインストール

今回はElasticsearch8.xを公式ページよりarchiveをダウンロードしてインストールします。
Elasticsearch8.xにはJava実行環境(JVM)が同梱されているため、システムへのJavaの事前インストールは必要ありません

1.1 アーカイブのダウンロード

# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.19.22-linux-x86_64.tar.gz

1.2 アーカイブの解凍と配置
/opt ディレクトリに配置する

# tar -xzf elasticsearch-8.19.22-linux-x86_64.tar.gz
# mv elasticsearch-8.19.22 /opt/elasticsearch

2. 専用ユーザーの作成と権限設定

Elasticsearchはセキュリティ上の理由から、rootユーザーでの起動が禁止されています。専用のユーザーとグループを作成し、ディレクトリの所有権を変更します。

専用グループとユーザーの作成
# groupadd elasticsearch
# useradd -r -g elasticsearch -d /opt/elasticsearch -s /sbin/nologin elasticsearch

所有権の変更
# chown -R elasticsearch:elasticsearch /opt/elasticsearch

3. 初期設定と初回起動

Elasticsearch 8は、初回起動時にセキュリティ機能が自動で有効化されます。このとき、コンソール画面に elastic ユーザーの初期パスワードやトークンが表示されるため、必ずメモを取ってください。

作成した専用ユーザーに切り替えて、起動スクリプトを実行

# sudo -u elasticsearch /opt/elasticsearch/bin/elasticsearch

コンソール画面に下記のように表示されるため、必ずメモを取ってください。
・Password for the elastic user: (管理者の初期パスワード)
・HTTP CA certificate SHA-256 fingerprint: (証明書のフィンガープリント)
・Configure Kibana to use this cluster: (Kibana連携用トークン)

Elasticsearch security features have been automatically configured!
Authentication is enabled and cluster connections are encrypted.

ℹ️ Password for the elastic user (reset with bin/elasticsearch-reset-password -u elastic):
kYaEN_HCJnTiq*hb1_o-

ℹ️ HTTP CA certificate SHA-256 fingerprint:
9adec632194076852b831ad4d251e806c4bec21ecd81d1b85af4ee25d6122682

ℹ️ Configure Kibana to use this cluster:
~ Run Kibana and click the configuration link in the terminal when Kibana starts.
~ Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4xMS44NTo5MjAwIl0sImZnciI6IjlhZGVjNjMyMTk0MDc2ODUyYjgzMWFkNGQyNTFlODA2YzRiZWMyMWVjZDgxZDFiODVhZjRlZTI1ZDYxMjI2ODIiLCJrZXkiOiJBZlh0N3FBQjQzb05YYVZLXzdBMjpXOElxMUFsVWlpT1pDQlZNZk5yVWFnIn0=

ℹ️ Configure other nodes to join this cluster:
~ On this node:
⁃ Create an enrollment token with bin/elasticsearch-create-enrollment-token -s node.
⁃ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
⁃ Restart Elasticsearch.
~ On other nodes:
⁃ Start Elasticsearch with bin/elasticsearch --enrollment-token <token>, using the enrollment token that you generated.

4. Elasticsearch 設定

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

# vim /opt/elasticsearch/config/elasticsearch.yml

17行目 : コメント解除
cluster.name: my-application

23行目 : コメント解除
node.name: node-1

57行目 : Elasticsearch serverのローカルアドレス追加外部からのアクセスを許可する場合(すべて許可は 0.0.0.0)
#network.host: 192.168.0.1
network.host: 192.168.11.85

62行目コメント解除
http.port: 9200

5. systemdのサービスファイルを作成

# vim  /etc/systemd/system/elasticsearch.service

下記内容を記述
[Unit]
Description=Elasticsearch
Documentation=https://elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/opt/elasticsearch
Environment=ES_PATH_CONF=/opt/elasticsearch/config
ExecStart=/opt/elasticsearch/bin/elasticsearch
User=elasticsearch
Group=elasticsearch
LimitNOFILE=65535
LimitNPROC=4096
LimitMEMLOCK=infinity
LimitFSIZE=infinity
TimeoutStopSec=20

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service

6. 動作確認

パスワードを入力し、以下のようなJSONが返ってくればインストール成功です。

# curl --cacert /opt/elasticsearch/config/certs/http_ca.crt -u elastic https://192.168.11.85:9200

Enter host password for user 'elastic':
{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "HDvKpWVFSyqCCUbiWME0NQ",
  "version" : {
    "number" : "8.19.22",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "3b2a41103de35e0af4064d647974032fcc1bcde9",
    "build_date" : "2026-09-18T10:10:07.018982263Z",
    "build_snapshot" : false,
    "lucene_version" : "9.12.2",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

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

# /opt/elasticsearch/bin/elasticsearch-reset-password -u elastic -i

This tool will reset the password of the [elastic] user.
You will be prompted to enter the password.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]:
Re-enter password for [elastic]: 
Password for the [elastic] user successfully reset.

3. Kibana

本セクションは2台目のArchLinuxサーバーで行います

前提条件の確認

  • 事前に同じバージョンの Elasticsearch 8 がインストールされ、起動している必要がある
  • 外部(ブラウザ)からアクセスさせる場合、事前にサーバー側で TCPポート 5601 を開放しておく

3.1 Kibanaインストール

アーカイブをダウンロードし/opt ディレクトリーに展開する

# cd /opt
# wget https://artifacts.elastic.co/downloads/kibana/kibana-8.19.22-linux-x86_64.tar.gz
# tar -xzf kibana-8.19.22-linux-x86_64.tar.gz
# mv kibana-8.19.22 kibana
# rm kibana-8.19.22-linux-x86_64.tar.gz

3.2 実行ユーザーの作成と権限設定

# useradd -r -s /bin/false kibana
# chown -R kibana:kibana /opt/kibana

3.3 初期設定とElasticsearchとの連携

Kibana 8からは、初回起動時に生成される Enrollment Token(登録トークン) を使って、Elasticsearchとの暗号化通信(TLS/SSL)や認証設定を自動的に行うのが最も簡単です。

① Elasticsearch側でトークンを発行する
Elascsearchをインストールした際kibana用トークンが発行されましたが有効時間が30分で時間切れの場合次のコマンドで再発行します

# /opt/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTkyLjE2OC4xMS44NTo5MjAwIl0sImZnciI6Ijc2NjllYzAwY2RhY2JiZDk4NGZkYWI3ZWFkZDg3YjNiZDQ2OWUzMjM2NGUyOTJmMzhjMDk0ZjI1OTBmMTAyZmQiLCJrZXkiOiIzZUtkNWFBQlBrMFNUX2RFeGd0dDpGenlmSUw4YUc3Q0MyOXdXSEVBbGRBIn0=

➁Kibanaの設定ファイル編集

# vim /opt/kibana/config/kibana.yml
 
6行目 : コメント解除
server.port: 5601

12行目 : 追記
server.host: "192.168.11.85"

3.4 systemd によるkibanaサービス作成

# vim  /etc/systemd/system/kibana.service

下記内容を記述
[Unit]
Description=Kibana
After=network.target

[Service]
Type=simple
User=kibana
Group=kibana
WorkingDirectory=/opt/kibana
ExecStart=/opt/kibana/bin/kibana --config /opt/kibana/config/kibana.yml
Restart=always
StandardOutput=journal
StandardError=journal
ProtectSystem=full

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable kibana.service
# systemctl start kibana.service

3.5 kibanaダッシュボードにログイン

kibanaへアクセスし、設定する
 kibana ユーザーでKibanaを起動し、コンソールに表示されるアドレス http://192.168.11.85:5601/code=xxxxxxxにアクセスする

# sudo -u kibana /opt/kibana/bin/kibana

Enrollment Tokenをブラウザのセットアップ画面にペーストすると確認コードを作成し入力を要求される場合は指示通り下記コマンドで確認コードを作成

# cd /opt/kibana/bin
# ./kibana-verification-code
Your verification code is:  xxx xxx

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

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

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

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

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

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

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

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

1.アーカイブをダウンロード、展開、配置

# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.19.22-linux-x86_64.tar.gz
# tar -xvf filebeat-8.19.22-linux-x86_64.tar.gz
# mv filebeat-8.19.22-linux-x86_64 /opt/filebeat

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

# scp root@192.168.11.85:/opt/elasticsearch/config/certs/http_ca.crt /opt/filebeat/

3. シンボリックリンク(bin を PATH に)

# ln -s /opt/filebeat/filebeat /usr/local/bin/filebeat

4. バージョン確認と設定チェック

# filebeat version
filebeat version 8.19.22 (amd64), libbeat 8.19.22 [ada3d02e16d0e102f3a8a6df851b8b382145e02d built 2026-09-18 06:58:39 +0000 UTC] (FIPS-distribution: false)

# filebeat test config -c /opt/filebeat/filebeat.yml
Config OK

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

# vim /opt/filebeat/filebeat.yml

28行目
filebeat.inputs:
 enabled: true

141行目コメントアウトされた#host: "localhost:5601"行の下に、KibanaインスタンスのプライベートIPアドレスとポートを指す行を追加する
host: "http://192.168.11.85:5601"

168行目 : コメントアウト
#hosts: ["localhost:9200"]

169行目 : Elastic Stack のipアドレスとelasticsearchのポート番号を入力
hosts: ["https://192.168.11.85:9200"]

176行目 : コメント解除
protocol: "https"

177行目 : Elasticsearch CA証明書指定
ssl.certificate_authorities: ["/opt/filebeat/elastic-ca.crt"]

180,181行目コメント解除し、[username]はデフォルトのままにし、[password]は[elastic]ユーザーのパスワードを入力する
username: "elastic"
password: “xxxxxxxxx"

6. 設定ファイルテスト

# filebeat test config -c /opt/filebeat/filebeat.yml
Config OK

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

#  filebeat modules enable suricata -c /opt/filebeat/filebeat.yml
Module suricata is already enabled

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

# vim /opt/filebeat/modules.d/suricata.yml

# Module: suricata
# Docs: https://www.elastic.co/guide/en/beats/filebeat/main/filebeat-module-suricata.html

- module: suricata
  # All logs
  eve:
    enabled: true
    var.paths: ["/var/log/suricata/eve.json"]

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

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

# /opt/filebeat/filebeat setup -e -c /opt/filebeat/filebeat.yml

{"log.level":"info","@timestamp":"2026-09-30T15:59:47.996+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-pipeline","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2026-09-30T15:59:47.999+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-dns","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2026-09-30T15:59:48.002+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-dns-answer-v1","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2026-09-30T15:59:48.005+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-dns-answer-v2","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2026-09-30T15:59:48.007+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-tls","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2026-09-30T15:59:48.011+0900","log.logger":"modules","log.origin":{"function":"github.com/elastic/beats/v7/filebeat/fileset.LoadPipeline","file.name":"fileset/pipelines.go","file.line":135},"message":"Elasticsearch pipeline loaded.","service.name":"filebeat","pipeline":"filebeat-8.19.22-suricata-eve-http","ecs.version":"1.6.0"}

以降、下記ページを参照してください