6 与前端的安全连接

概述

本节提供 Zabbix 前端 与 Zabbix 服务器 之间建立安全 TLS 连接的 Zabbix 设置步骤和配置示例。

配置

默认情况下,Zabbix 前端与 Zabbix 服务器之间的通信未加密。 为提高安全性,请在两端启用 TLS。 下面是实现此目的的最简单方法示例。

1. 生成证书和密钥。

创建工作目录:

sudo mkdir -p /etc/zabbix/ssl && cd /etc/zabbix/ssl

创建 CA 证书(调整 MyZabbixCA 值,使其与实际的通用名称匹配):

sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyZabbixCA/"

为 Zabbix 服务器生成私钥和证书(调整 zabbix-server.example.com 值,使其与实际的通用名称匹配):

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr -subj "/CN=zabbix-server.example.com/"
sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out server.crt

为 Zabbix 前端生成私钥和证书(调整 zabbix-frontend-node 值,使其与实际的通用名称匹配):

sudo openssl genrsa -out frontend.key 2048
sudo openssl req -new -key frontend.key -out frontend.csr -subj "/CN=zabbix-frontend-node/"
sudo openssl x509 -req -days 365 -in frontend.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out frontend.crt

2. 设置适当的权限。

对于 Zabbix 服务器(根据您的发行版中 Zabbix 服务器守护进程用户调整所有者/组):

sudo chown root:zabbix /etc/zabbix/ssl/server.{crt,key} /etc/zabbix/ssl/ca.crt
sudo chmod 640 /etc/zabbix/ssl/server.key
sudo chmod 644 /etc/zabbix/ssl/server.crt /etc/zabbix/ssl/ca.crt

对于前端(根据您的发行版中的 Web 服务器用户调整所有者/组):

sudo chown root:www-data /etc/zabbix/ssl/frontend.{crt,key}
sudo chmod 640 /etc/zabbix/ssl/frontend.key
sudo chmod 644 /etc/zabbix/ssl/frontend.crt

3. 配置 Zabbix 服务器。

zabbix_server.conf 中添加:

TLSFrontendAccept=cert
TLSCertFile=/etc/zabbix/ssl/server.crt
TLSKeyFile=/etc/zabbix/ssl/server.key
TLSCAFile=/etc/zabbix/ssl/ca.crt
# 可选:
# TLSFrontendCertIssuer=CN=MyZabbixCA
# TLSFrontendCertSubject=CN=zabbix-frontend-node

然后重启服务器:

sudo systemctl restart zabbix-server

4. 配置 Zabbix 前端。

安装 Web 界面期间,启用 Encrypt connections from Web interface 选项(如有必要,同时启用 Verify server certificate issuer and subject 选项),并填写 TLS CA fileTLS key fileTLS certificate file 字段(如有必要,同时填写 Server TLS certificate issuerServer TLS certificate subject 字段):

Parameter Description
TLS CA file 指定用于验证服务器证书的证书颁发机构(CA)证书文件的完整路径。
TLS key file 指定与客户端证书对应的客户端私钥文件的完整路径。
TLS certificate file 如果需要双向 TLS 身份验证,请指定客户端证书文件的完整路径。
Server TLS certificate issuer 指定要与服务器证书匹配的颁发者可分辨名称(DN)。
Server TLS certificate subject 指定要与服务器证书匹配的使用者可分辨名称(DN)。

对于现有安装,请编辑 zabbix.conf.php 中的以下字段:

$ZBX_SERVER_TLS['ACTIVE'] = '1';
$ZBX_SERVER_TLS['CA_FILE'] = '/etc/zabbix/ssl/ca.crt';
$ZBX_SERVER_TLS['KEY_FILE'] = '/etc/zabbix/ssl/frontend.key';
$ZBX_SERVER_TLS['CERT_FILE'] = '/etc/zabbix/ssl/frontend.crt';
// 可选:
// $ZBX_SERVER_TLS['CERTIFICATE_ISSUER']  = 'CN=MyZabbixCA';
// $ZBX_SERVER_TLS['CERTIFICATE_SUBJECT'] = 'CN=zabbix-server.example.com';

5. 通过确认 Zabbix 前端或 Zabbix 服务器日志文件中没有错误消息来验证加密:

tail -f /var/log/zabbix/zabbix_server.log

故障排除

不正确或不完整的 TLS 配置可能会导致 Zabbix 前端出现错误,或表明 Zabbix 服务器正在运行,但连接未能成功建立:

要确定确切的配置问题,请将 Zabbix 服务器日志级别设置为 4,在前端中重现该错误,然后检查 Zabbix 服务器日志中对应的错误消息。

以下情况介绍了常见错误及其可能原因。

不允许前端 IP 地址

Zabbix 服务器日志中包含类似以下错误:

54283:20260819:105926.400 frontend connection from "127.0.0.1" is not allowed by FrontendAllowedIP

由于前端 IP 地址未获授权,连接会在 TCP 握手后被丢弃。

将前端 IP 地址添加到 zabbix_server.conf 中的 FrontendAllowedIP 参数,然后重启 Zabbix 服务器。

不允许未加密连接

Zabbix 服务器日志中包含类似以下错误:

56884:20260819:111154.285 frontend connection of type "unencrypted" is not allowed by TLSFrontendAccept

Zabbix 服务器配置为仅接受 TLS 连接,例如设置了 TLSFrontendAccept=cert,但前端尝试在未加密的情况下进行连接。

启用前端加密,并在 zabbix.conf.php 中配置所需的 TLS 文件,具体说明请参见配置中的第 4 步。

前端尝试使用 TLS,而服务器要求未加密

Zabbix 服务器日志中包含类似以下的错误:

61091:20260819:115916.019 End of zbx_tls_accept():FAIL error:'TLS handshake set result code to 1: file ../ssl/record/rec_layer_s3.c line 317 func ssl3_read_n: error:0A000126:SSL routines::unexpected eof while reading: TLS write fatal alert "decode error"'

具体错误消息取决于 OpenSSL 版本。

Zabbix 服务器配置为仅接受未加密连接,例如设置了 TLSFrontendAccept=unencrypted,而前端尝试建立 TLS 连接。

通过设置 TLSFrontendAccept=cert,并在 zabbix_server.conf 中定义 TLSCertFileTLSKeyFile,将 Zabbix 服务器配置为接受 TLS 连接。
或者,在 zabbix.conf.php 中禁用前端加密。

前端证书不受信任

Zabbix 服务器日志中包含类似以下错误:

62248:20260819:124203.812 End of zbx_tls_accept():FAIL error:'self-signed certificate: TLS handshake set result code to 1: file ../ssl/statem/statem_srvr.c line 3522 func tls_process_client_certificate: error:0A000086:SSL routines::certificate verify failed: TLS write fatal alert "unknown CA"'

前端提供了一个证书,但 Zabbix 服务器不信任签署该证书的证书颁发机构(CA)。

同样的问题也可能显示在前端的系统信息中:

fread(): SSL operation failed with code 1. OpenSSL Error messages:

error:0A000418:SSL routines::tlsv1 alert unknown ca [zabbix.php:17 → require_once() → ZBase->run() → ZBase->processRequest() → CController->run() → Widgets\SystemInfo\Actions\WidgetView->doAction() → CSystemInfoHelper::getData() → CSystemInfoHelper::getServerStatus() → CZabbixServer->getStatus() → CZabbixServer->request() → fread() → CConfigFile->{closure:/user/share/conf/zabbix.conf.php:89}() in conf/zabbix.conf.php:95]

前端还可能显示“从 Zabbix 服务器“localhost”收到的响应不正确”。

请确认前端证书由 zabbix_server.confTLSCAFile 指定的 CA 签署。

TLS 密钥文件不可读

前端可能会显示“TLS 密钥文件:文件不可读”。

也可能会显示“由于 TLS 设置,无法连接到 Zabbix 服务器。 部分功能不可用。”。

web 服务器用户没有足够的权限读取 zabbix.conf.php 中配置的一个或多个证书、密钥或 CA 文件。 当证书文件存储在受限目录(例如 /root/ 或用户的主目录)中时,可能会出现此问题。

将证书文件移动到 web 服务器可访问的目录,并按照配置第 2 步中的说明设置适当的权限。

TLS 文件无效或已损坏

前端可能会显示“由于 TLS 设置,无法连接到 Zabbix 服务器。 某些功能不可用。”。

当配置的证书或密钥文件存在且可读取,但其内容为空、已损坏或以其他方式无效时,可能会发生这种情况。 在此情况下,前端不会与 Zabbix 服务器建立连接,并且 Zabbix 服务器日志中不会出现相应的连接尝试记录。

请验证证书和密钥文件包含有效且格式正确的数据,并确认私钥与证书相匹配。