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)请根据实际环境替换。执行lsblk或fdisk -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/sdb3.3 创建卷组(VG)#
# 创建卷组 datavg,使用 /dev/sdb 作为物理卷
sudo vgcreate datavg /dev/sdb
# 验证 VG 创建成功
sudo vgs
sudo vgdisplay datavg3.4 创建逻辑卷(LV)#
# 将卷组中全部空间分配给逻辑卷 datalv
sudo lvcreate -l 100%FREE -n datalv datavg
# 验证 LV 创建成功
sudo lvs
sudo lvdisplay datavg/datalv3.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-dashboards4.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-dashboards4.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.target5.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.target5.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.log6.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.cnf7.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.csr7.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.cnf7.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-pager10.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 -f10.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 界面#
- 打开浏览器,访问
https://<服务器IP>:5601 - 浏览器会提示证书不安全,选择继续访问
- 使用管理员账号登录:
- 用户名:
admin - 密码:
Admin@123!Secure
- 用户名:


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:// 访问,接受浏览器证书警告 |