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设置,从而导致潜在的安全漏洞。

密码学

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.