2022 Zabbix中国峰会
2022 Zabbix中国峰会

3 Web 服务器

概述

本节提供安全方式设置 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

在 Web 服务器上启用 HTTP 严格传输安全 (HSTS)

为了保护 Zabbix 前端免受协议降级攻击,我们建议在 Web 服务器上启用 HSTS 策略。

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

1. 找到您的虚拟主机的配置文件:

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

2. 将以下指令添加到虚拟主机的配置文件中:

<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

在 Web 服务器上启用内容安全策略 (CSP)

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

以下 CSP 标头配置仅适用于默认的 Zabbix 前端安装以及所有内容均来自站点域(不包括子域)的情况。如果您要配置 URL 小部件以显示来自站点子域或外部域的内容、从OpenStreetMap切换到另一个地图引擎或添加外部 CSS 或小部件,则可能需要不同的 CSP 标头配置。如果您使用 Duo Universal Prompt 多因素身份认证 方法,请确保将“duo.com”添加到虚拟主机配置文件中的 CSP 指令中。

要在 Apache 配置中为 Zabbix 前端启用 CSP,请按照以下步骤操作:

1. 1找到您的虚拟主机的配置文件:

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

2. 将以下指令添加到虚拟主机的配置文件中:

<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 配置文件中添加以下参数来禁用该签名:

ServerSignature Off
       ServerTokens Prod

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

expose_php = Off

重新启动 Web 服务使能应用配置文件更改。

为了提高安全性,您可以将mod_security工具与 Apache 结合使用(软件包libapache2-mod-security2)。此工具允许删除服务器签名,而不是仅从服务器签名中删除版本。安装mod_security后,可以通过将“SecServerSignature”设置为任何所需值来将服务器签名更改为任何值。

请参阅您的 Web 服务器的文档来获取有关如何删除/更改软件签名的帮助。

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

为了避免信息泄露,建议禁用默认错误页面。

默认情况下,Web 服务器使用内置错误页面:

这些默认错误页面应该被替换/删除。例如,“ErrorDocument”指令可用于为 Apache Web 服务器定义自定义错误页面/文本。

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

删除 Web 服务器测试页面

为了避免信息泄露,建议删除Web服务器测试页面。

默认情况下,Apache Web 服务器的 web根目录 包含index.html测试页面:

请参阅您的 Web 服务器的文档来获取有关如何删除默认测试页面的帮助。

设置 X-Frame-Options HTTP 响应标头

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

从外部 URL 提取内容的 Zabbix 前端元素 (即, URL 仪表盘小部件) 在启用所有沙盒限制的沙盒中显示检索到的内容。

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

使用常用密码列表隐藏文件

为了增加密码暴力破解的复杂性,建议限制对文件ui/data/top_passwords.txt的访问。 此文件包含最常用和上下文特定的密码列表,并阻止用户设置此类密码(如果在密码策略中启用了避免易猜密码参数)。

要限制对该top_passwords.txt文件的访问,请修改您的 Web 服务器配置。

在 Apache 上,可以使用该文件限制文件访问.htaccess

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

在 NGINX 上,可以使用以下指令限制文件访问location

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