本节包含为确保Zabbix安全部署而应遵循的最佳实践。
此处列出的实践并非Zabbix运行所必需,但建议采用以增强系统安全性。
Zabbix应始终遵循最小权限原则。 该原则意味着用户账户(在Zabbix前端)或进程用户(对于Zabbix server/proxy或agent)仅拥有执行必要功能所需的权限。换句话说,用户账户应始终以run尽可能少的权限运行。
为'zabbix'用户授予额外权限将允许其访问配置文件并执行execute操作,这可能危及整个基础设施的安全性。
在为用户账户实施最小权限原则时,应考虑Zabbix的frontend user types。需要理解的是,虽然"Admin"用户类型比"Super Admin"用户类型拥有更少的权限,但它仍具有管理配置和执行execute自定义脚本的管理权限。
部分信息对非特权用户也是可见的。 例如,虽然管理→脚本对非超级管理员不可见,但通过使用Zabbix API仍可获取脚本内容。应通过限制脚本权限及避免在全局脚本中添加敏感信息(如访问凭证等)来防止敏感信息泄露。
在默认配置中,Zabbix server和Zabbix agent进程 共享一个'zabbix'用户。若需确保agent无法 访问服务器配置中的敏感信息(例如数据库login 信息),应将agent以不同用户身份run运行:
如果您在Windows上编译了Zabbix agent,且OpenSSL位于未受保护的目录中(例如c:\openssl-64bit
、C:\OpenSSL-Win64-111-static
或C:\dev\openssl
),请确保撤销非管理员用户对该目录的写入权限。否则,agent会从可能被非特权用户修改的路径加载SSL设置,从而导致潜在的安全漏洞。
在基于RHEL的系统上,安装mod_ssl
包:
为SSL密钥创建目录:
创建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服务以应用更改:
在基于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服务以应用更改:
为防范协议降级攻击,建议在Web服务器上启用HSTS策略以保护Zabbix前端。
在Apache配置中为Zabbix前端启用HSTS策略,请按以下步骤操作:
1. 定位虚拟主机的配置file:
/etc/httpd/conf/httpd.conf
/etc/apache2/sites-available/000-default.conf
2. 在虚拟主机的配置file中添加以下指令:
3. 重启Apache服务使配置生效:
# On RHEL-based systems:
systemctl restart httpd.service
# On Debian/Ubuntu
systemctl restart apache2.service
在配置Zabbix时,必须为会话cookie强制执行Secure和SameSite属性以增强安全性并防止跨站请求伪造(CSRF)攻击。然而,强制执行SameSite=Strict
可能导致问题,例如:
为缓解这些问题,用户应能调整SameSite策略。
1. 安全cookie
设置secure
flag可确保cookie仅通过HTTPS传输,防止在未加密连接中暴露。
要在Zabbix中启用安全cookie,需在Web服务器配置中添加或修改以下设置:
Apache配置:
对于nginx:
确保通过HTTPS访问Zabbix前端,否则带有Secure
flag的cookie将不会被发送。
2. 配置SameSite属性
Web服务器设置也可强制执行SameSite属性:
Apache配置:
对于nginx (version 1.19.3+):
proxy_cookie_flags ~ samesite=Strict; # 将~替换为'zbx_session'以指定特定cookie
为保护Zabbix前端免受跨站脚本(XSS)、数据注入及类似攻击,我们建议在Web服务器上启用内容安全策略。 为此,需配置Web服务器返回HTTP header。
以下CSP头部配置仅适用于默认Zabbix前端安装,且所有内容源自站点主域名(不含子域名)的情况。 若需配置URL部件显示子域名/外部域名内容、从OpenStreetMap切换至其他地图引擎、或添加外部CSS/部件时,可能需要不同的CSP头部配置。
在Apache配置中为Zabbix前端启用CSP的步骤如下:
1. 定位虚拟主机的配置file:
/etc/httpd/conf/httpd.conf
/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服务器会暴露软件签名:
可以通过在Apache(示例)配置文件file中添加以下两行来禁用签名:
PHP签名(X-Powered-By HTTP头)可以通过修改php.ini配置文件file来禁用(默认情况下签名已禁用):
需要重启Web服务器才能使配置文件file的更改生效。
通过使用Apache的mod_security模块(包libapache2-mod-security2)可以实现额外的安全级别。mod_security允许完全移除服务器签名,而不仅仅是移除version服务器签名部分。安装mod_security后,可以通过修改"SecServerSignature"为任意值来更改签名显示内容。
请参考您的Web服务器文档以获取关于如何移除/更改软件签名的帮助。
建议禁用默认错误页面以避免信息泄露。默认情况下,Web服务器使用内置错误页面:
作为Web服务器加固流程的一部分,应替换/移除默认错误页面。对于Apache Web服务器(示例),可使用"ErrorDocument"指令定义自定义错误页面/文本。
请参阅您的Web服务器文档,获取有关如何替换/移除默认错误页面的帮助。
建议移除Web服务器测试页面以避免信息泄露。默认情况下,Web服务器的webroot目录包含一个名为index.html的测试页面(以Ubuntu上的Apache2为例):
作为Web服务器加固流程的一部分,应移除该测试页面或使其不可访问。
默认情况下,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访问:
在Apache上,可通过使用.htaccess
file实现:
UTF-8是Zabbix唯一支持的编码格式。该编码已被证实不存在任何安全漏洞。用户需注意,若使用其他某些编码可能存在已知的问题安全隐患。
在使用Windows安装程序时,建议使用安装程序提供的默认路径,因为使用没有适当权限的自定义路径可能会危及安装的安全性。