官方博文|Zabbix 5.0在安全性能有哪些改进?

2021-01-29 17:47:38 浏览数 (1)

博文作者Arturs Lontons 将出席2020Zabbix中国峰会,为您直接升级5.0指导排雷!欢迎抢购早鸟票!

博文正文

在Zabbix 5.0中,我们提供了许多安全团队真正需要的功能,这些功能将为安全策略提供更多,特别是对于大型企业环境。

改进内容

01. 支持前端与数据库的通信TLS加密

02. 支持server/proxy与数据库通信TLS加密

03. 可用于密码配置

04. 密文显示宏变量值

05. 前端密码hashing改进

06. 开箱即用的SAML支持

07. Item key的黑名单和白名单

08. ODBC检查支持连接字符串

09. 不支持旧的加密库

10. auditlog.get

11. Http 代理支持Webhooks

12. 数据库字符集检查

01.支持前端与数据库的通信TLS加密

现在Zabbix 前端与数据库的访问支持基于 TLS 证书加密。为什么要加密?您可能担心有人会窥探Zabbix数据库的通信数据。此风险取决于您的网络设置方式、外部用户对网络的可访问性等。若要在 Zabbix 中配置 TLS 加密,应在设置初始配置参数时选中 TLS 加密框。

配置加密

总而言之,在 Zabbix 5.0 中,您可以配置基于 TLS 的证书加密,该加密现在支持 MySQL 和 PostgreSQL。

通过使用 with-host verification选项,可以通过比较证书中指定的主机名与连接到该证书的主机的名称来检查数据库服务器的证书。

如果 TLS 参数指向打开写入的文件,将显示一条警告,指出这些文件应是只读的。

02.支持server/proxy与

数据库通信TLS加密

现在,Zabbix Server与数据库的端到端通信可以进行加密。需要在Zabbix Server配置文件中指定相关的加密参数。

server/proxy与数据库通信的加密

通过身份验证和验证host标识与数据库建立加密连接

  • 如果我们根据需要指定了DBTLSConnect的内容而不指定其他参数内容,那么DB的连接默认使用加密,而不需要进行身份验证或host标识验证。
  • 如果我们将DBTLSConnect设置为verify_full,Zabbix Server与数据库的连接将通过身份验证或者Host标识验证。在这种情况下,还必须指定证书颁发机构文件。

03.可用于密码配置

Zabbix 5.0在自定义加密方式中提供了一些灵活的设置:

  • 支持覆盖内置的密码。
  • 支持覆盖certificates、PSK和组合方式。
  • Zabbix_get和Zabbix_sender的使用支持 “-tls_cipher13”或“–tls_cipher”参数。
  • 能够根据您的安全策略或其他要求选择特定密码。
  • TLS 1.3和TLS 1.2可以单独配置参数。
  • 支持在Zabbix每个组件的传入/传出连接中配置。

新的TLC配置参数

注:加密是一个相当复杂的功能,除非您是高级用户,否则不建议您使用它。

04.密文显示宏变量值

在 Zabbix 5.0 中,现在支持在前端密文显示宏变量。只需通过下拉列表选择"Secret text"类型的宏 。

现在,您可以选择不显示宏变量的值,例如,如果您需要对其他Zabbix管理员隐藏宏变量的值,可以使用该功能。

密文显示敏感的宏值

  • 如果在主机或模板的克隆操作时,该主机或模板使用了"Secret text"类型的宏,那么宏变量的值将被重置,同时可以在前端页面上看到以下警告信息:

克隆时重置密文显示下的宏

  • 导出主机或模板时,不会导出"Secret text"宏的值。

不导出"Secret text"宏的值

一旦定义了"Secret text"类型的宏,宏变量的值就无法编辑-必须完全替换宏值。

未编辑的宏值

05.前端密码hashing改进

在Zabbix 5.0中,我们用bcrypt替换了MD5算法,MD5算法非常旧而且不安全。切换到bcrypt有很多好处:

  • 基于Blowfish算法。
  • 比MD5慢很多:不适用于硬件加速-不容易受到暴力攻击。
  • 初始登录后,旧的MD5hashes将替换为bcrypt hashes。
  • 使用唯一的salt值。
  • 不适用于Rainbow table攻击

06.开箱即用的SAML支持

在Zabbix 5.0中,SAML支持是开箱即用的。您只需在SAML端和前端配置一些参数。

配置与SAML的集成

配置与SAML的集成时,需要注意以下几点:

  • Zabbix中须存在相应的用户,但是不会使用Zabbix密码。
  • 需要预先启用SAML身份验证。
  • 默认私钥和证书的位置:UI/conf/certs/。
  • 在zabbix.conf.php文件需要设置一些参数SP key, SP cert, IDP cert及其他配置。

07.Item key的黑名单和白名单

在Zabbix 5.0中,您可以限制监控项键值的执行,这样可以确保在监控项级别上更安全。现在可以为每个代理的key设置白名单/黑名单,可以指定单个key值或者使用通配符。

如何配置item Key的限制:

  • 启用EnableRemoteCommands仍然是必需的,但在以后的版本中可能会被弃用。
  • 规则检查在第一个匹配成功后停止。
  • 只有指定了DenyKey时才能使用AllowKey。
  • 如果在代理配置中设置了不允许使用特定的item key,则该项将变得不受支持
  • 带有“-print(-p)”命令行选项的Zabbix代理将不显示配置不允许的键。
  • 带有“-test(-t)”命令行选项的Zabbix代理将为配置不允许的键返回“不支持的项密钥”状态。

注:配置顺序在这里很重要,因为它是使用第一个匹配项。例如,如果随后指定Deny Key和Allow Key,AllowKey将优先于DenyKey。

错误的配置顺序

正确的配置顺序

08.ODBC检查支持连接字符串

Zabbix 5.0改进了ODBC checks的功能,现在可以指定一个连接字符串而不是使用dsn参数,并在item key中设置指定ODBC key值。其中dsn参数设为可选。

能够指定连接字符串是一种改进,如:

  • 在某些情况下,用户可能无法访问 odc.ini 文件。
  • 通过在item key中定义连接字符串参数。
  • Item key可以使用dsn参数或连接字符串参数。如果两者都存在,那么dsn 参数将被忽略。
  • 连接字符串可能包含特定的驱动程序参数。

ODBC key改进

这些更改简化了操作,并在 ODBC 检查时实现额外的安全性。

09.不支持旧的加密库

MBED TLS支持已停止,原因如下:

  • 以前的版本支持MBED TLS 1.3.9和更高版本的1.3.x—到目前为止,这些版本的支持已经到达生命周期的末尾
  • 社区缺乏兴趣/使用案例。
  • 节省了开发开销。
  • 更好地专注于支持 OpenSSL 和 GnuTLS。

10.auditlog.get

在Zabbix 5.0中,我们添加了新的审计日志对象和auditlog.get方法,现在可以通过API来获取审核日志。这看起来像是拼图中缺失的一块。

auditlog.get call

您可以使用auditlog.get方法获取监视程序的审核日志更改。当然,也能够让您更进一步进行筛选和排序:

  • 可以按audit IDs与/或user IDs进行筛选。
  • 能够按旧值和新值进行搜索。

对象中包含有关操作类型、资源类型、IP地址、资源ID、名称和其他详细信息。可以用于解析审计数据并在发生关键改变时通知您。

11.Http 代理支持Webhooks

开箱即用集成是Zabbix相对较新的功能。现在我们在http proxy中添加了集成的功能。因此,在Zabbix 5.0中,您可以在定义媒体类型时指定HTTPProxy参数。

语法如下:

[protocol://[username[:password]@]proxy.mycompany.com[:port].

HTTP Proxy 配置webhook

逻辑和语法与HTTP Proxy配置完全相同。

12.数据库字符集检查

通常,在设置 Zabbix 数据库时,需要使用正确的字符集和正确的排序规则。在 Zabbix 5.0 中,我们将在初始设置上检查这些配置,除了将现有实例升级到Zabbix 5.0。

Zabbix 是大小写敏感型的,应该支持具有使用不同的大小写的名称的元素,但如果您不指定正确的字符集及其排序规则,则唯一性检查不起作用。

错误配置示例

在这种情况下,将显示一条错误消息:

初始设置期间显示的消息

如果配置错误,您必须使用社区资源或在Zabbix支持团队的帮助下修复现有实例的此问题。我们目前也在努力为每个需要解决这个问题的人提供一个简单的脚本。

您可以在日志文件中看到有关错误字符集或排序规则的通知。

显示在服务器日志中

需要注意的事项如下:

  • 要确保数据库端知道对象区分大小写。
  • 在 Zabbix 5.0 之前无法检测到此情况,而是从 DB 端查看数据库表结构。
  • 如果未使用utf8_bin排序规则,用户最终可能会遇到重复的 SQL 错误或其他前端的意外行为。

错误配置检测的主要好处:

  • 让用户知道存在数据库配置错误。
  • 最好在数据库的初始设置过程中捕捉并修复这些问题。
  • 用户应避免对 DB 运行任何额外的查询,这些查询的规模随着时间的推移而大幅增长。所以尽快修复这个问题非常重要!

0 人点赞