OpenSearch 3.7.0 单机二进制部署与全链路 TLS 安全加固指南#

适用版本: OpenSearch 3.7.0 & OpenSearch Dashboards 3.7.0

部署模式: 单节点混部(All-in-One)

操作系统: Ubuntu 24.04 LTS

核心特性: 二进制安装、完整 TLS 加密、安全插件配置


一、前言#

适用场景

OpenSearch 是 Amazon 开源的搜索引擎项目,作为 Elasticsearch 和 Kibana 的开源分支,它集成了强大的检索、分析、日志处理及可视化能力,广泛应用于日志管理(Log Analytics)、安全信息事件管理(SIEM)等场景。

端口规划

部署完成后,系统将开放以下核心端口:

端口 协议 服务 说明
9200 HTTPS OpenSearch REST API 搜索引擎 API 接口
9300 TLS OpenSearch Transport 节点间通信(单机仅本机使用)
5601 HTTPS OpenSearch Dashboards Web 可视化界面

本文将详细介绍如何在 Ubuntu 24.04 服务器上,通过 二进制安装包 的方式,独立部署 OpenSearch 引擎与 OpenSearch Dashboards 可视化面板,并完成完整的 TLS 证书加密通信配置,实现全链路安全加固。


二、环境准备#

2.1 系统要求#

资源 最低要求 说明
CPU 4 vCPU 生产环境建议 16 vCPU
内存 16 GB 生产环境建议 64 GB
磁盘 ≥ 100 GB SSD 这里指数据盘,使用XFS文件系统。建议数据盘与系统盘分离
网络 10 Gbps 内部通信网络
操作系统 Ubuntu 24.04 LTS 其他发行版需调整包管理命令

注意: OpenSearch 3.7 内置了 JDK 25,无需手动安装 Java 环境。

2.2 基础系统配置#

修改 Hostname#

# 设置主机名
sudo hostnamectl set-hostname opensearch-singleone

# 修改 /etc/hosts 文件,添加主机名解析
sudo bash -c 'echo "127.0.1.1 opensearch-singleone" >> /etc/hosts'

关闭 SWAP#

OpenSearch 不建议使用交换空间,需永久关闭:

# 临时关闭
sudo swapoff -a

# 永久关闭:注释掉 /etc/fstab 中的 swap 行
sudo cp /etc/fstab /etc/fstab.bak
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 验证
free -h | grep Swap # 预期输出:Swap: 0B 0B 0B

禁用透明大页 (THP)#

透明大页会导致性能抖动,建议禁用:

# 创建并启用服务
sudo tee /etc/systemd/system/disable-thp.service > /dev/null << 'EOF'
[Unit]
Description=Disable Transparent Huge Pages
DefaultDependencies=false
After=sysinit.target local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable disable-thp.service --now

内核参数调优#

sudo tee /etc/sysctl.d/90-opensearch.conf > /dev/null << 'EOF'
# OpenSearch 核心调优
vm.max_map_count=262144
vm.swappiness=1
vm.dirty_background_ratio=5
vm.dirty_ratio=30
vm.dirty_expire_centisecs=500
vm.dirty_writeback_centisecs=100
vm.min_free_kbytes=524288

# 网络队列与连接限制
net.ipv4.tcp_max_syn_backlog=65535
net.core.somaxconn=65535
net.ipv4.tcp_rmem=4096 87380 67108864
net.ipv4.tcp_wmem=4096 65536 67108864
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_time=600
net.ipv4.tcp_keepalive_intvl=60
net.ipv4.tcp_keepalive_probes=5

# 文件句柄数
fs.file-max=655350
EOF

# 使配置生效
sudo sysctl -p /etc/sysctl.d/90-opensearch.conf

创建专用运行用户#

sudo groupadd -r opensearch
sudo useradd -r -s /usr/sbin/nologin -g opensearch opensearch

三、数据盘准备#

在虚拟机环境中,已添加一块虚拟 SSD 数据盘。本节介绍如何使用 LVM 对该磁盘进行分区、格式化并挂载到 /data1/opensearch 目录。

注意: 以下操作中的磁盘设备名(如 /dev/sdb)请根据实际环境替换。执行 lsblkfdisk -l 确认新磁盘的设备名。

3.1 查看磁盘状态#

# 查看磁盘信息及新添加的磁盘
lsblk

# 预期输出示例:
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
fd0                 2:0    1    4K  0 disk 
sda                 8:0    0  100G  0 disk 
├─sda1              8:1    0    1M  0 part 
├─sda2              8:2    0    5G  0 part 
├─sda3              8:3    0    1G  0 part /boot
└─sda4              8:4    0   94G  0 part 
sdb                 8:16   0  500G  0 disk # <-- 新添加的虚拟 SSD 磁盘

3.2 创建物理卷(PV)#

# 对新磁盘创建物理卷
sudo pvcreate /dev/sdb

# 验证 PV 创建成功
sudo pvs
sudo pvdisplay /dev/sdb

3.3 创建卷组(VG)#

# 创建卷组 datavg,使用 /dev/sdb 作为物理卷
sudo vgcreate datavg /dev/sdb

# 验证 VG 创建成功
sudo vgs
sudo vgdisplay datavg

3.4 创建逻辑卷(LV)#

# 将卷组中全部空间分配给逻辑卷 datalv
sudo lvcreate -l 100%FREE -n datalv datavg

# 验证 LV 创建成功
sudo lvs
sudo lvdisplay datavg/datalv

3.5 格式化为 XFS 文件系统#

# 使用 mkfs.xfs 格式化逻辑卷
sudo mkfs.xfs -f /dev/datavg/datalv

# 验证文件系统类型
sudo blkid /dev/datavg/datalv
# 预期输出中包含 type="xfs"

3.6 挂载数据盘#

# 创建挂载点目录
sudo mkdir -p /data1/opensearch

# 临时挂载
sudo mount /dev/datavg/datalv /data1/opensearch

# 验证挂载状态
df -hT /data1/opensearch
# 预期输出:文件系统类型 xfs,容量为磁盘总容量

3.7 配置开机自动挂载#

# 获取逻辑卷的 UUID
sudo blkid /dev/datavg/datalv
# 预期输出示例:
# /dev/datavg/datalv: UUID="372c6321-4b47-473a-817c-9ded36403168" TYPE="xfs"

sudo cp /etc/fstab /etc/fstab.bak
# 将挂载信息写入 /etc/fstab(使用 UUID 方式,更安全可靠)
echo 'UUID=372c6321-4b47-473a-817c-9ded36403168 /data1/opensearch xfs defaults,noatime 0 0' | sudo tee -a /etc/fstab

# 验证 /etc/fstab 配置
cat /etc/fstab

# 测试挂载配置是否正确(不会实际挂载)
sudo mount -o remount /data1/opensearch
systemctl daemon-reload

提示: 如果使用 defaults,noatime 参数,可以减少磁盘 I/O 提升性能。noatime 表示不记录文件的访问时间戳。

3.8 设置目录权限#

# 设置 OpenSearch 数据目录所有者和权限
sudo chown -R opensearch:opensearch /data1/opensearch
sudo chmod -R 755 /data1/opensearch

# 验证权限
ls -ld /data1/opensearch

四、下载与安装#

4.1 目录结构规划#

# 创建安装根目录
sudo mkdir -p /opt/soft/opensearch

# 创建数据和日志目录
sudo mkdir -p /data1/opensearch
sudo mkdir -p /var/log/opensearch

# 创建配置目录
sudo mkdir -p /etc/opensearch
sudo mkdir -p /etc/opensearch-dashboards

4.2 软件下载与解压#

cd /tmp

# 下载 OpenSearch
curl -LO https://artifacts.opensearch.org/releases/bundle/opensearch/3.7.0/opensearch-3.7.0-linux-x64.tar.gz

# 下载 OpenSearch Dashboards
curl -LO https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.7.0/opensearch-dashboards-3.7.0-linux-x64.tar.gz

# 解压到安装目录
tar -xzf opensearch-3.7.0-linux-x64.tar.gz -C /opt/soft/opensearch
tar -xzf opensearch-dashboards-3.7.0-linux-x64.tar.gz -C /opt/soft/opensearch

# 创建符号链接(便于版本升级)
ln -snf opensearch-3.7.0 /opt/soft/opensearch/opensearch
ln -snf opensearch-dashboards-3.7.0 /opt/soft/opensearch/opensearch-dashboards

4.3 初始化配置文件#

# 拷贝配置文件到 /etc/
cp -r /opt/soft/opensearch/opensearch/config/* /etc/opensearch/
cp -r /opt/soft/opensearch/opensearch-dashboards/config/* /etc/opensearch-dashboards/

# 设置目录权限
sudo chown -R opensearch:opensearch /opt/soft/opensearch
sudo chown -R opensearch:opensearch /etc/opensearch
sudo chown -R opensearch:opensearch /etc/opensearch-dashboards
sudo chown -R opensearch:opensearch /var/log/opensearch
sudo chown -R opensearch:opensearch /data1/opensearch

五、Systemd 服务配置#

在软件安装完成后,创建 systemd 服务单元文件,使 OpenSearch 和 OpenSearch Dashboards 可以作为系统服务运行,并支持开机自启动。

重要说明: 本节仅创建服务单元文件,不要立即启动服务。OpenSearch 和 Dashboards 的服务需要在完成所有配置文件(包括 opensearch.yml、TLS 证书、安全插件配置等)之后才能正常启动。

5.1 OpenSearch 服务#

创建 /etc/systemd/system/opensearch.service

[Unit]
Description=OpenSearch
Documentation=https://opensearch.org/

Wants=network-online.target
After=network-online.target

[Service]
Type=notify
RuntimeDirectory=opensearch
PrivateTmp=true
ExecStartPre=/usr/bin/mkdir -p /var/run/opensearch
ExecStartPre=/usr/bin/chown -R opensearch:opensearch /var/run/opensearch
ExecStartPre=/usr/bin/chmod 755 /var/run/opensearch
Environment="OPENSEARCH_HOME=/opt/soft/opensearch/opensearch"
Environment="LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/soft/opensearch/opensearch/plugins/opensearch-knn/lib"
Environment="OPENSEARCH_JAVA_HOME=/opt/soft/opensearch/opensearch/jdk"
Environment="OPENSEARCH_PATH_CONF=/etc/opensearch"
Environment="PID_DIR=/var/run/opensearch"
Environment="OPENSEARCH_STARTUP_SLEEP_TIME=5"
Environment="OPENSEARCH_SD_NOTIFY=true"
WorkingDirectory=/opt/soft/opensearch/opensearch
User=opensearch
Group=opensearch
ExecStart=/opt/soft/opensearch/opensearch/bin/opensearch -p ${PID_DIR}/opensearch.pid

# StandardOutput is configured to redirect to journalctl since
# some error messages may be logged in standard output before
# opensearch logging system is initialized. OpenSearch
# stores its logs in /var/log/opensearch and does not use
# journalctl by default. If you also want to enable journalctl
# logging, you can simply remove the "quiet" option from ExecStart.
StandardOutput=journal
StandardError=inherit

LimitNOFILE=262144
LimitMEMLOCK=infinity
LimitCORE=1879040192

# Specifies the maximum number of processes
LimitNPROC=64133

# Specifies the maximum size of virtual memory
LimitAS=infinity

# Specifies the maximum file size
LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group
KillMode=process

# Java process is never killed
SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143

TimeoutStartSec=75


[Install]
WantedBy=multi-user.target

5.2 OpenSearch Dashboards 服务#

创建 /etc/systemd/system/opensearch-dashboards.service

[Unit]
Description=opensearch-dashboards
Wants=network-online.target
After=network-online.target

[Service]
RuntimeDirectory=opensearch-dashboards
PrivateTmp=true
Environment="OSD_PATH_CONF=/etc/opensearch-dashboards"
WorkingDirectory=/opt/soft/opensearch/opensearch-dashboards
User=opensearch
Group=opensearch
ExecStart=/opt/soft/opensearch/opensearch-dashboards/bin/opensearch-dashboards
Restart=always
StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of processes
LimitNPROC=4096

# Specifies the maximum size of virtual memory
LimitAS=infinity

# Specifies the maximum file size
LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group
KillMode=process

# Java process is never killed
SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

5.3 设置开机自启#

注意: 这里千万不要立即启动服务,等到后续章节配置完成后才启动。

创建或修改服务文件后,重新加载 systemd 配置并启用服务:

# 重新加载 systemd 配置(任何时候修改服务文件后都应执行)
sudo systemctl daemon-reload

# 启用服务(开机自启动)
sudo systemctl enable opensearch opensearch-dashboards

六、OpenSearch 基础配置#

6.1 JVM 内存配置#

  • 我这里的机器内存为64GB,所以将堆大小设置为 24G。其他根据实际情况设置

编辑 /etc/opensearch/jvm.options,根据服务器内存调整堆大小。

-Xms24g
-Xmx24g
-XX:HeapDumpPath=/var/log/opensearch
-XX:ErrorFile=/var/log/opensearch/hs_err_pid%p.log

6.2 主配置文件 (opensearch.yml)#

编辑 /etc/opensearch/opensearch.yml

# ======================== OpenSearch Configuration =========================

# ---------------------------------- Cluster -----------------------------------
cluster.name: opensearch-singleone

# ------------------------------------ Node ------------------------------------
node.name: opensearch-singleone
node.roles: [ cluster_manager, data, ingest ]

# ------------------------------------ Paths -----------------------------------
path.data: /data1/opensearch
path.logs: /var/log/opensearch

# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true
bootstrap.system_call_filter: true

# ---------------------------------- Network -----------------------------------
network.bind_host: [ "127.0.0.1", "本机IP" ]
network.publish_host: "本机IP"
http.port: 9200
transport.port: 9300

# --------------------------------- Discovery ----------------------------------
discovery.type: single-node

七、TLS 证书生成与配置#

7.1 证书架构设计#

在部署前,请理解以下证书层级关系:

          ┌─────────────────────────┐
          │     Root CA (根证书)     │
          │       ROOT-CA (自签)   │
          └────────────┬────────────┘
                       │ 签名
       ┌──────────────┼──────────────┐
       ▼              ▼              ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│  Node 证书  │ │ Admin 证书  │ │ Dashboard证书│
│ (节点通信)  │ │  (管理员)   │ │  (客户端)   │
└─────────────┘ └─────────────┘ └─────────────┘

关键概念

  • Root CA:信任链的根源。
  • SAN (Subject Alternative Name):必须包含主机名和 IP,Java 安全插件会严格校验。

7.2 生成 Root CA 证书#

mkdir -p /root/opensearch_pki && cd /root/opensearch_pki

# 生成 CA 私钥
openssl genrsa -out root-ca-key.pem 2048

# 生成自签名 Root CA 证书 (有效期 3 年)
openssl req -new -x509 -sha256 -key root-ca-key.pem -out root-ca.pem -days 1095 \
  -subj "/C=CN/ST=SC/L=CD/O=OS/OU=SEC/CN=OS-ROOT-CA"

7.3 生成节点证书 (带 SAN)#

HOSTNAME=$(hostname)
NODE_IP="本机IP"

# 1. 创建 SAN 扩展配置文件
cat <<EOF > node_ext.cnf
authorityKeyIdentifier=keyid,issuer
basicConstraints=critical,CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = ${HOSTNAME}
IP.1 = 127.0.0.1
IP.2 = ${NODE_IP}
EOF

# 2. 生成私钥 (PKCS#8 格式)
openssl genrsa -out ${HOSTNAME}-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in ${HOSTNAME}-key-temp.pem -topk8 -nocrypt -out ${HOSTNAME}-key.pem
rm -f ${HOSTNAME}-key-temp.pem

# 3. 生成 CSR 并签署
openssl req -new -key ${HOSTNAME}-key.pem -out ${HOSTNAME}.csr \
  -subj "/C=CN/ST=SC/L=CD/O=OS/OU=SEC/CN=${HOSTNAME}"

openssl x509 -req -in ${HOSTNAME}.csr -CA root-ca.pem -CAkey root-ca-key.pem \
  -CAcreateserial -sha256 -out ${HOSTNAME}.pem -days 1095 -extfile node_ext.cnf

# 4. 清理
rm -f ${HOSTNAME}.csr node_ext.cnf

7.4 生成 Admin 管理员证书#

# 生成 Admin 私钥
openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -out admin-key.pem
rm -f admin-key-temp.pem

# 生成 CSR 并签署
openssl req -new -key admin-key.pem -out admin.csr \
  -subj "/C=CN/ST=SC/L=CD/O=OS/OU=SEC/CN=ADMIN"

openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem \
  -CAcreateserial -sha256 -out admin.pem -days 1095

rm -f admin.csr

7.5 生成 Dashboard 客户端证书#

# 1. 创建客户端 SAN 配置
cat <<EOF > client-san.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CN
ST = BJ
L = BJ
O = SIEM
OU = SEC
CN = opensearch-dashboard-client
[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = ${HOSTNAME}
IP.1 = 127.0.0.1
IP.2 = ${NODE_IP}
EOF

# 2. 生成证书
openssl genrsa -out client-san-key.pem 2048
openssl req -new -key client-san-key.pem -out client-san.csr -config client-san.cnf
openssl x509 -req -in client-san.csr -CA root-ca.pem -CAkey root-ca-key.pem \
  -CAcreateserial -sha256 -out client-san.pem -days 1095 -extensions v3_req -extfile client-san.cnf

# 3. 清理
rm -f client-san.csr client-san.cnf

7.6 证书分发与权限设置#

cd /root/opensearch_pki

# 分发到 OpenSearch 目录
sudo cp root-ca.pem /etc/opensearch/
sudo cp ${HOSTNAME}.pem /etc/opensearch/siem-mon-opensearch.pem
sudo cp ${HOSTNAME}-key.pem /etc/opensearch/siem-mon-opensearch-key.pem
sudo cp admin.pem /etc/opensearch/
sudo cp admin-key.pem /etc/opensearch/

# 设置权限 (OpenSearch)
sudo chown opensearch:opensearch /etc/opensearch/*.pem
sudo chmod 644 /etc/opensearch/root-ca.pem /etc/opensearch/admin.pem
sudo chmod 600 /etc/opensearch/siem-mon-opensearch-key.pem /etc/opensearch/admin-key.pem

# 分发到 Dashboard 目录
sudo cp root-ca.pem /etc/opensearch-dashboards/
sudo cp client-san.pem /etc/opensearch-dashboards/dashboard.pem
sudo cp client-san-key.pem /etc/opensearch-dashboards/dashboard-key.pem
sudo cp client-san.pem /etc/opensearch-dashboards/client-san.pem
sudo cp client-san-key.pem /etc/opensearch-dashboards/client-san-key.pem

# 设置权限 (Dashboard)
sudo chown opensearch:opensearch /etc/opensearch-dashboards/*.pem
sudo chmod 644 /etc/opensearch-dashboards/root-ca.pem /etc/opensearch-dashboards/dashboard.pem
sudo chmod 600 /etc/opensearch-dashboards/dashboard-key.pem /etc/opensearch-dashboards/client-san-key.pem

八、OpenSearch 安全插件配置#

8.1 配置 opensearch.yml#

在文件末尾追加以下内容:

# ====================================================================
# OpenSearch 安全插件 TLS 配置
# ====================================================================

# 激活安全插件
plugins.security.disabled: false

# Transport 层 TLS (9300 端口)
transport.ssl.enforce_hostname_verification: true
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem
plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/siem-mon-opensearch.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/siem-mon-opensearch-key.pem

# HTTP 层 TLS (9200 端口)
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem
plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/siem-mon-opensearch.pem
plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/siem-mon-opensearch-key.pem

# 初始化安全索引
plugins.security.allow_default_init_securityindex: true

# Admin 管理员 DN 白名单
plugins.security.authcz.admin_dn:
  - "CN=ADMIN,OU=SEC,O=OS,L=CD,ST=SC,C=CN"

# 节点 DN 白名单
plugins.security.nodes_dn:
  - "CN=${HOSTNAME}*,OU=SEC,O=OS,L=CD,ST=SC,C=CN"

# 其他安全配置
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: [ "all_access", "security_rest_api_access" ]

8.2 配置管理员密码#

8.2.1 生成管理员密码 Hash#

使用 OpenSearch 提供的 hash.sh 工具生成 BCrypt 密码哈希值:

# 1. 给 hash.sh 添加执行权限
chmod 755 /opt/soft/opensearch/opensearch/plugins/opensearch-security/tools/*.sh

# 2. 设置 JAVA_HOME
export OPENSEARCH_JAVA_HOME=/opt/soft/opensearch/opensearch/jdk

# 3. 生成密码 Hash(-p 指定密码)
/opt/soft/opensearch/opensearch/plugins/opensearch-security/tools/hash.sh \
  -p 'Admin@123!Secure'

预期输出示例:

$2y$12$HC83sXHQ6JGFsQ20BCkChOzbdt0dn0N7wyYAnJDFJwc59X/L9B5x.

提示: 请将上述命令中的 Admin@123!Secure 替换为您自己设置的强密码。生成的 Hash 值将用于配置管理员账户。

8.2.2 配置 internal_users.yml#

编辑 /etc/opensearch/opensearch-security/internal_users.yml 文件:

sudo vim /etc/opensearch/opensearch-security/internal_users.yml

配置管理员账户(将下面的 <your_generated_hash> 替换为上一步生成的 Hash 值):

---
admin:
  hash: "<your_generated_hash>"
  reserved: true
  backend_roles:
    - "admin"
  description: "Super Admin User"

配置说明:

字段 说明
hash BCrypt 格式的密码哈希值
reserved: true 保留账户。所有 reserved: true 的用户都需要在 internal_users.yml 中配置密码哈希值
backend_roles 关联的后端角色,admin 拥有最高权限
description 账户描述信息

注意: 修改配置文件后,需要执行 8.3 节securityadmin.sh 初始化安全索引,使配置生效。执行此步骤前必须先启动 OpenSearch 服务。

8.3 初始化安全索引#

securityadmin.sh 需要通过 HTTPS 连接到 OpenSearch 来刷入安全配置,因此必须先启动 OpenSearch 服务

# 1. 启动 OpenSearch 服务
sudo systemctl start opensearch

# 2. 检查服务状态,确保启动成功
sudo systemctl status opensearch

# 3. 等待 OpenSearch 完全启动(约 30-60 秒)
sleep 60

# 4. 确认 9200 端口已监听
ss -tlnp | grep 9200

# 5. 设置 JAVA_HOME
export OPENSEARCH_JAVA_HOME=/opt/soft/opensearch/opensearch/jdk

# 6. 执行安全配置初始化
/opt/soft/opensearch/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
  -cd /etc/opensearch/opensearch-security \
  -icl -nhnv \
  -cacert /etc/opensearch/root-ca.pem \
  -cert /etc/opensearch/admin.pem \
  -key /etc/opensearch/admin-key.pem \
  -h localhost

# 7. 确认初始化成功(输出中出现 Done with success 字样)
Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
...
Done with success

# 8. 重启 OpenSearch 使安全配置生效
sudo systemctl restart opensearch

# 9. 确认服务重启成功
sudo systemctl status opensearch

# 10. 等待服务完全启动
sleep 30

注意:

  • 如果初始化失败,请检查 OpenSearch 日志 /var/log/opensearch/opensearch-singleone.log
  • 初始化成功后必须重启 OpenSearch 服务,使安全配置完全生效
  • 执行完本章后,服务保持运行状态,继续完成后续 Dashboard 配置章节

九、Dashboard 配置#

9.1 配置 opensearch_dashboards.yml#

编辑 /etc/opensearch-dashboards/opensearch_dashboards.yml

# ======================== OpenSearch Dashboards Configuration =========================

# Server
server.host: "0.0.0.0"
server.port: 5601
#server.name: "siem-mon-opensearch"
server.name: "opensearch-singleone"

# kibanaserver 的密码也需要在 internal_users.yml 中配置
opensearch.username: "kibanaserver"
opensearch.password: "**********"

server.ssl.enabled: true
server.ssl.certificate: /etc/opensearch-dashboards/dashboard.pem
server.ssl.key: /etc/opensearch-dashboards/dashboard-key.pem

# OpenSearch 连接配置
opensearch.hosts: [ "https://localhost:9200" ]
opensearch.ssl.certificate: /etc/opensearch-dashboards/client-san.pem
opensearch.ssl.key: /etc/opensearch-dashboards/client-san-key.pem
opensearch.ssl.certificateAuthorities: [ "/etc/opensearch-dashboards/root-ca.pem" ]
opensearch.ssl.verificationMode: full
opensearch.requestHeadersWhitelist: [ authorization ]

# Use this setting if you are running opensearch-dashboards without https
opensearch_security.cookie.secure: true
# Set the value to true to disable the welcome screen
home.disableWelcomeScreen: true
# 推荐开启 Workspaces 模式
workspace.enabled: true
opensearch_security.multitenancy.enabled: false
# 开启数据源管理 (如果你的集群涉及跨集群查询)
data_source.enabled: true
explore.enabled: true
explore.discoverMetrics.enabled: true
# 防止大查询导致的内存溢出
opensearch.memoryCircuitBreaker.enabled: true
opensearch.memoryCircuitBreaker.maxPercentage: 0.9
# 请求超时设置 (对于大数据量查询,适当调大,默认 30s 可能不够)
opensearch.requestTimeout: 60000
# 开启压缩请求,减少网络 IO
opensearch.requestCompression: true
# Set the value to true to enable Ui Metric Collectors in Usage Collector
# This publishes the Application Usage and UI Metrics into the saved object, which can be accessed by /api/stats?extended=true&legacy=true&exclude_usage=false
usageCollection.uiMetric.enabled: true

十、服务启动与验证#

提示: 完成第九章 Dashboard 配置后,执行以下步骤启动 Dashboards 并验证整体部署。

注意: OpenSearch 服务已在 8.3 节 中启动,本章仅启动 Dashboards 并做最终验证。

10.1 启动 OpenSearch Dashboards#

# 重新加载 systemd 配置(如修改过服务文件)
sudo systemctl daemon-reload

# 启用服务(开机自启动)
sudo systemctl enable opensearch opensearch-dashboards

# 确认 OpenSearch 服务正在运行
sudo systemctl status opensearch

# 启动 OpenSearch Dashboards 服务
sudo systemctl start opensearch-dashboards

# 检查 Dashboards 服务状态
sudo systemctl status opensearch-dashboards

# 查看 Dashboards 启动日志
sudo journalctl -u opensearch-dashboards -n 50 --no-pager

10.2 验证服务状态#

检查服务状态#

# 检查所有相关服务状态
sudo systemctl status opensearch
sudo systemctl status opensearch-dashboards

检查端口监听#

# 确认端口监听状态
ss -tlnp | grep -E '9200|9300|5601'

# 预期输出:
# LISTEN  0  4096  0.0.0.0:9200  0.0.0.0:*  users:(("java",pid=XXX,fd=XXX))
# LISTEN  0  4096  0.0.0.0:9300  0.0.0.0:*  users:(("java",pid=XXX,fd=XXX))
# LISTEN  0  4096  0.0.0.0:5601  0.0.0.0:*  users:(("node",pid=XXX,fd=XXX))

检查日志#

# 查看 OpenSearch 日志
sudo tail -f /var/log/opensearch/opensearch-singleone.log

# 查看 Dashboards 日志
sudo journalctl -u opensearch-dashboards -f

# 查看所有 systemd 服务日志
sudo journalctl -u opensearch -u opensearch-dashboards -f

10.3 验证 API 连接#

# 验证 OpenSearch API(使用 admin 证书)
curl --cacert /etc/opensearch/root-ca.pem \
  --cert /etc/opensearch/admin.pem \
  --key /etc/opensearch/admin-key.pem \
  https://localhost:9200/

# 预期输出包含集群信息:
# {
#   "name" : "opensearch-singleone",
#   "cluster_name" : "opensearch-singleone",
#   "cluster_uuid" : "xxxxx",
#   "version" : {
#     "number" : "3.7.0",
#     ...
#   },
#   "tagline" : "You Know, for Search"
# }

# 验证 OpenSearch 健康状态
curl --cacert /etc/opensearch/root-ca.pem \
  --cert /etc/opensearch/admin.pem \
  --key /etc/opensearch/admin-key.pem \
  -u "admin:Admin@123!Secure" \
  https://localhost:9200/_cluster/health?pretty

# 预期输出:
# {
#   "cluster_name" : "opensearch-singleone",
#   "status" : "green",
#   "number_of_nodes" : 1,
#   ...
# }

10.4 访问 Web 界面#

  1. 打开浏览器,访问 https://<服务器IP>:5601
  2. 浏览器会提示证书不安全,选择继续访问
  3. 使用管理员账号登录:
    • 用户名:admin
    • 密码:Admin@123!Secure

img.png

img.png

10.5 防火墙配置(如有)#

如果服务器启用了防火墙,需开放相应端口

10.6 常见问题排查#

问题 可能原因 解决方法
OpenSearch 启动失败 JVM 堆内存设置过大 检查 jvm.options 中的堆大小,确保不超过物理内存的 50%
OpenSearch 启动失败 文件句柄数不足 检查 ulimit -n,确保 ≥ 65535
OpenSearch 启动失败 虚拟内存映射数不足 检查 vm.max_map_count,确保 ≥ 262144
TLS 握手失败 证书配置错误 检查 opensearch.yml 中的证书路径是否正确
Dashboards 无法连接 OpenSearch 未启动 先确认 OpenSearch 正常运行
Dashboards 白屏 证书不被浏览器信任 使用 https:// 访问,接受浏览器证书警告