这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.

1 Zabbix 安全配置最佳实践

概述

本节包含为确保Zabbix安全部署而应遵循的最佳实践。

此处列出的实践并非Zabbix运行所必需,但建议采用以增强系统安全性。

访问控制

最小权限原则

Zabbix应始终遵循最小权限原则。 该原则意味着用户账户(在Zabbix前端)或进程用户(对于Zabbix server/proxy或agent)仅拥有执行必要功能所需的权限。换句话说,用户账户应始终以run尽可能少的权限运行。

为'zabbix'用户授予额外权限将允许其访问配置文件并执行execute操作,这可能危及整个基础设施的安全性。

在为用户账户实施最小权限原则时,应考虑Zabbix的frontend user types。需要理解的是,虽然"Admin"用户类型比"Super Admin"用户类型拥有更少的权限,但它仍具有管理配置和执行execute自定义脚本的管理权限。

部分信息对非特权用户也是可见的。 例如,虽然管理脚本对非超级管理员不可见,但通过使用Zabbix API仍可获取脚本内容。应通过限制脚本权限及避免在全局脚本中添加敏感信息(如访问凭证等)来防止敏感信息泄露。

Zabbix agent安全用户

在默认配置中,Zabbix server和Zabbix agent进程 共享一个'zabbix'用户。若需确保agent无法 访问服务器配置中的敏感信息(例如数据库login 信息),应将agent以不同用户身份run运行:

  1. 创建安全用户
  2. 在agent的configuration file中指定该用户('用户'参数)
  3. 使用管理员权限重启agent。权限将自动降级至指定用户。

撤销SSL配置写入权限(Windows)

如果您在Windows上编译了Zabbix agent,且OpenSSL位于未受保护的目录中(例如c:\openssl-64bitC:\OpenSSL-Win64-111-staticC:\dev\openssl),请确保撤销非管理员用户对该目录的写入权限。否则,agent会从可能被非特权用户修改的路径加载SSL设置,从而导致潜在的安全漏洞。

UNC path access on Windows by Zabbix agent

Zabbix agents on Windows follow UNC paths (SMB shares like \\server\share\file.txt) in items like vfs.file.*, vfs.dir.*, and perf_counter*. This can be a security risk in some contexts.

When Windows is asked to access a UNC path, it tries to authenticate on that server. This means that a malicious request to Zabbix agent can expose the NTLM hash to the requesters server. Users can mitigate this with AllowKey, DenyKey configuration parameters if they need to.

密码学

Zabbix 前端 SSL 配置

在基于RHEL的系统上,安装mod_ssl包:

dnf install mod_ssl

为SSL密钥创建目录:

mkdir -p /etc/httpd/ssl/private
       chmod 700 /etc/httpd/ssl/private

创建SSL证书:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/apache-selfsigned.key -out /etc/httpd/ssl/apache-selfsigned.crt

按要求填写提示信息。 最重要的是请求Common Name的那一行。 您需要输入要与服务器关联的域名。 如果没有域名,可以输入公共IP地址代替。

Country Name (2 letter code) [XX]:
       State or Province Name (full name) []:
       Locality Name (eg, city) [Default City]:
       Organization Name (eg, company) [Default Company Ltd]:
       Organizational Unit Name (eg, section) []:
       Common Name (eg, your name or your server's hostname) []:example.com
       Email Address []:

编辑Apache SSL配置文件file (/etc/httpd/conf.d/ssl.conf):

DocumentRoot "/usr/share/zabbix"
       ServerName example.com:443
       SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
       SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key

重启Apache服务以应用更改:

systemctl restart httpd.service

Web 服务器加固

在URL根目录启用Zabbix

在基于RHEL的系统上,向Apache配置(/etc/httpd/conf/httpd.conf)添加虚拟主机,并为文档根目录设置永久重定向到Zabbix SSL URL。 注意example.com应替换为服务器的实际名称。

# Add lines:
       
       <VirtualHost *:*>
           ServerName example.com
           Redirect permanent / https://example.com
       </VirtualHost>

重启Apache服务以应用更改:

systemctl restart httpd.service

启用HTTP严格传输安全(HSTS)

为防范协议降级攻击,建议在Web服务器上启用HSTS策略以保护Zabbix前端。

在Apache配置中为Zabbix前端启用HSTS策略,请按以下步骤操作:

1. 定位虚拟主机的配置file:

  • RHEL系系统:/etc/httpd/conf/httpd.conf
  • Debian/Ubuntu系统:/etc/apache2/sites-available/000-default.conf

2. 在虚拟主机的配置file中添加以下指令:

<VirtualHost *:*>
           Header set Strict-Transport-Security "max-age=31536000"
       </VirtualHost>

3. 重启Apache服务使配置生效:

# On RHEL-based systems:
       systemctl restart httpd.service
       
       # On Debian/Ubuntu
       systemctl restart apache2.service

强制安全与SameSite会话Cookie

在配置Zabbix时,必须为会话cookie强制执行Secure和SameSite属性以增强安全性并防止跨站请求伪造(CSRF)攻击。然而,强制执行SameSite=Strict可能导致问题,例如:

  • 当嵌入同域iframe时,仪表板URL小部件显示"用户未登录"
  • 通过HTTP而非HTTPS访问仪表板的用户可能遇到login 问题
  • 无法共享指向特定Zabbix菜单部分或主机的URL

为缓解这些问题,用户应能调整SameSite策略。

1. 安全cookie

设置secure flag可确保cookie仅通过HTTPS传输,防止在未加密连接中暴露。

要在Zabbix中启用安全cookie,需在Web服务器配置中添加或修改以下设置:

Apache配置:

Header always edit Set-Cookie ^(.*)$ $1;Secure

对于nginx:

proxy_cookie_path / "/; Secure";

确保通过HTTPS访问Zabbix前端,否则带有Secure flag的cookie将不会被发送。

2. 配置SameSite属性

Web服务器设置也可强制执行SameSite属性:

Apache配置:

<IfModule mod_headers.c>
           Header onsuccess edit Set-Cookie (.*) "$1; SameSite=Strict"
       </IfModule>

对于nginx (version 1.19.3+):

proxy_cookie_flags ~ samesite=Strict; # 将~替换为'zbx_session'以指定特定cookie

启用内容安全策略(CSP)

为保护Zabbix前端免受跨站脚本(XSS)、数据注入及类似攻击,我们建议在Web服务器上启用内容安全策略。 为此,需配置Web服务器返回HTTP header

以下CSP头部配置仅适用于默认Zabbix前端安装,且所有内容源自站点主域名(不含子域名)的情况。 若需配置URL部件显示子域名/外部域名内容、从OpenStreetMap切换至其他地图引擎、或添加外部CSS/部件时,可能需要不同的CSP头部配置。

在Apache配置中为Zabbix前端启用CSP的步骤如下:

1. 定位虚拟主机的配置file:

  • RHEL系系统:/etc/httpd/conf/httpd.conf
  • Debian/Ubuntu系统:/etc/apache2/sites-available/000-default.conf

2. 在虚拟主机的配置file中添加以下指令:

<VirtualHost *:*>
           Header set Content-Security-Policy: "default-src 'self' *.openstreetmap.org; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: *.openstreetmap.org; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self';"
       </VirtualHost>

3. 重启Apache服务使更改生效:

# On RHEL-based systems:
       systemctl restart httpd.service
       
       # On Debian/Ubuntu
       systemctl restart apache2.service

禁用Web服务器信息暴露

建议在Web服务器加固过程中禁用所有Web服务器签名。默认情况下Web服务器会暴露软件签名:

可以通过在Apache(示例)配置文件file中添加以下两行来禁用签名:

ServerSignature Off
       ServerTokens Prod

PHP签名(X-Powered-By HTTP头)可以通过修改php.ini配置文件file来禁用(默认情况下签名已禁用):

expose_php = Off

需要重启Web服务器才能使配置文件file的更改生效。

通过使用Apache的mod_security模块(包libapache2-mod-security2)可以实现额外的安全级别。mod_security允许完全移除服务器签名,而不仅仅是移除version服务器签名部分。安装mod_security后,可以通过修改"SecServerSignature"为任意值来更改签名显示内容。

请参考您的Web服务器文档以获取关于如何移除/更改软件签名的帮助。

禁用默认 Web 服务器错误页面

建议禁用默认错误页面以避免信息泄露。默认情况下,Web服务器使用内置错误页面:

作为Web服务器加固流程的一部分,应替换/移除默认错误页面。对于Apache Web服务器(示例),可使用"ErrorDocument"指令定义自定义错误页面/文本。

请参阅您的Web服务器文档,获取有关如何替换/移除默认错误页面的帮助。

移除Web服务器测试页

建议移除Web服务器测试页面以避免信息泄露。默认情况下,Web服务器的webroot目录包含一个名为index.html的测试页面(以Ubuntu上的Apache2为例):

作为Web服务器加固流程的一部分,应移除该测试页面或使其不可访问。

设置X-Frame-Options响应头

默认情况下,Zabbix配置了X-Frame-Options HTTP头部*设置为SAMEORIGIN。 这意味着内容只能在与页面本身同源的框架中加载。

从外部URL拉取内容的Zabbix前端元素(即URL dashboard widget)会在启用所有沙盒限制的沙盒中显示检索到的内容。

这些设置增强了Zabbix前端的安全性,并提供了针对XSS和点击劫持攻击的保护。 超级管理员用户可以根据需要安全使用iframe沙盒使用X-Frame-Options HTTP头部参数。 在更改默认设置之前,请仔细权衡风险和收益。 完全不启用iframe沙盒或X-Frame-Options HTTP头部是不推荐的。

隐藏常用密码列表文件

为提高密码暴力破解攻击的复杂度,建议通过修改Web服务器配置来限制对file ui/data/top_passwords.txt的访问。该file包含最常见和上下文相关的密码列表,当内部认证中的避免使用易猜测密码参数启用时,用于防止用户设置此类密码。

例如,在nginx上,可通过使用location指令限制file访问:

location = /data/top_passwords.txt {
           deny all;
           return 404;
       }

在Apache上,可通过使用.htaccess file实现:

<Files "top_passwords.txt">
           Order Allow,Deny
           Deny from all
       </Files>

UTF-8 编码

UTF-8是Zabbix唯一支持的编码格式。该编码已被证实不存在任何安全漏洞。用户需注意,若使用其他某些编码可能存在已知的问题安全隐患。

Windows 安装程序路径

在使用Windows安装程序时,建议使用安装程序提供的默认路径,因为使用没有适当权限的自定义路径可能会危及安装的安全性。

Zabbix 安全公告与 CVE 数据库

参见Zabbix Security Advisories and CVE database.