首席出品| "7"待已久的Proxy高可用及多因子认证详解
本文内容摘自大中华区首席培训师、架构师周松在重庆meetup上的演讲
演讲正文
Zabbix 7.0
Zabbix 7.0 最值得期待的新功能,也是很多用户问的比较多的问题,主要是两个点。第一是多因子的认证,也是很多用户,特别是一些金融,或者说对安全性要求很高的客户特别关注的。第二就是proxy的高可用,因为大家知道Zabbix 其实在早期的版本里面,没有原生的高可用,逐步的在 Zabbix 6.0 有了 Zabbix Server 的高可用,到 7.0 即将有 Zabbix proxy 的高可用。这些都是 Zabbix在整个版本迭代过程中新增的一些能力,proxy 的高可用也是我们非常多的客户很关注的一个功能。
那两点这里面我都带了一些具体的实践操作,如果你们有兴趣的话,到时候 7.0 出来【众所周知Zabbix 7.0已经于2024年6月4日盛大发布,戳这里温习】,你们可以自己动手去操作一下。第一块就是多因子认证,到底为什么要多因子认证?这边写了很多,说到底就是为了安全。因为很多时候我们对于系统的登录都会需要密码,但是很多时候不管你的密码强度如何,对于现在计算机的算力来说,它真的要去破解你的密码其实也是很简单的事情。这个时候特别是我们很多金融客户经常会说,你是不是还有其他的一些辅助的多因子的认证方式,能够同时多路径的认证来满足我安全上的要求?正是基于此,Zabbix 7.0 开始把这块带入到原生的功能里面来。
目前Zabbix支持两种方式,一种是TOTP,这里面写了什么叫TOTP,实际上就是一个一次性的动态密码,但是实际上这种方式有风险,有心之人可以很简单很轻松地破解掉你的密码,这个时候其实我们也可以基于原有的常规密码,生成一个一次性的有一定时效性的密码,双重密码认证来确保你当前的用户认证是可行的。第二种方式是被称之为DUO,这种方式是一种通用的验证方式。
前面这个 TOTP 更多的是一个动态的有时效性的一次性密码,那DUO这种方式相当于什么呢?我不仅限于密码这种方式,可能是你的指纹,可能借助于你的移动终端,如果大家用 iPhone 用的比较多,你会发现 iPhone 有一个新的设备的登录,它会让你在老的设备上要做一个确认的操作,很多时候也有视网膜的认证,当然这就要求你的平台有对应的一些能力。
基于这两种方式我都举了一些例子。这些例子都是基于对应的认证方式的手机APP来做的,这些手机的 APP 都可以下载去尝试。不管你用哪种方式,说到底就是为了让你更安全地登录Zabbix 系统。无论你是用第一个客户端,还是用微软的认证客户端,两种方式都可以,我在这里面都有一些效果,包括登录的效果,包括配置的效果。你也可以用 Google。这两种方式,APP 都可以先下载,如果你真的要做这个操作,有了这些 APP 后就直接上图了,可以看到这就是整个配置过程。Zabbix 7.0 在这一块做了一些变动,特别是导航栏,你可以看得到它不再是以前的monitoring,和 service inventory,现在 configuration 拆分了,针对于认证的一些配置都在 user 认证的选项栏里面,有一个 MFA setting。这其实是我们去尝试配置多因子认证的地方,目前它只支持两种类型。第一个我选择TOTP,就是一次性密码方式做多因子的认证。然后可以取一个名字,你也可以选择你的加密方式,函数的复杂度,然后你可以设置一次性密码的长度, 6 位、8位都可以。配置完成之后,就要设定用户,就是对应设定哪些用户执行这些操作。这些操作都是结合你实际的情况来的,很多时候,你可能会把你的Zabbix 暴露给外网的用户登录使用,这个时候你可以针对于这个用户组下面的用户去做多因子的认证。但是对于内网环境的一些用户,也可以用普通的常规的密码登录。我们先创建了一个叫 MFA group的用户组,然后选择认证方式,只要属于这个用户组的用户登录的时候,除了要输入密码之外,还要通过 APP 扫描它生成的二维码,然后基于这个扫描的二维码,动态地生成一个一次性的密码。然后常规密码加动态密码两种方式同时匹配,才能正常登录。
用户组设置完之后,接下来要创建一个用户,你也可以把现有的某个用户拉到这个用户组里面。我为了演示,特意创建了一个用户叫 MFA user,他的用户组是 MFA group,也就是说这个用户是跟常规的用户配置一样,包括角色、权限。这个组里面的用户都要去执行前面我们设置的这个双因子认证。这些配置完成之后,接下来我们要做的是尝试登录,这个时候输入用户名和密码,点击,然后它会出一个二维码,这个二维码其实就是要去扫描的。这个时候用第一个APP去扫描这个二维码,它会生成对应的一个动态的密码,它是有时效性的,一般都是 30 秒到 1 分钟。一旦这个一次性的密码跟你的常规的密码两者都验证通过了,就可以正常登录Zabbix界面。等到 7.0 真的发布出来的时候,很多新的事情你们自己可以去尝试一下,特别是前端 dashboard 里面增加了很多新的数据展现。
接下来我演示的是另外一种方式。我新建了一个用户叫Microsoft,也是用 MFA 这种方式,只不过我们用的是另外一个微软的认证器去扫描这个二维码生成的一个动态的密码,这个动态密码有效期默认是 30 秒,也就是说 30 秒之内,你把动态密码输进去,匹配到常规密码,实际上也可以正常的用微软的认证器去做这个MFA,这些都是可以的。登录的效果,我是特意做了区分,就是说两种不同的认证器生成的登录的效果我稍微做了一些区别。这个就是基于 TOTP 这种方式去做的认证,很多时候有些用户说,我要重置一下我的token,我要加强函数的算法,那你也可以去RESET, RESET 相当于把刚刚所有的配置重置了一遍,你自己按照同样的步骤再走一遍就 OK 了。
这个做完第二关就是基于 DUO 的通用认证,这种通用验证方式其实也是要借助于 Cisco 的一个安全工具或者机制。你自己可以去注册账号,注册账号之后添加了一个application,这个 application 就是对于 Web 登录的应用,它会自动的帮你生成三个东西,一个叫 Client ID,它也是随机生成的,可以理解成它就相当于是密钥,还有一个叫 API hostname,这些都是基于这个工具或者这个平台自动生成的。为什么是这三个参数呢?因为基于 DUO这种认证, MFA 这种方式,这三者都是要用的。这三者配置完成之后,有 3 个东西, Client ID、 Client secret 、 API host name。这三个东西设置完成之后,下载一个 DUO Mobile APP,基于这个 APP 我也可以把相关的信息输入进去,也可以去自动地生成对应的code,对应的动态密码,我也可以基于你手机APP,这个 APP 可以用手机确认的方式,比如用户要登录,手机弹出一个确认框,你要允许什么用户登录,可以取消可以允许,可以手机允许,也可以用动态密码。
那怎么来配置呢?整个配置操作实际上跟前面添加用户组是一样的,只不过这里面用 Email 这种通用验证方式,这三个参数,API hostname、 Client ID、Client secret,这是前面我们创建的时候生成的三个参数,把这三个参数 copy 进去之后,其他的操作跟前面 MFA 的配置是一样的,再创建用户组合,认证登录。我也是用动态密码的方式,只不过它是基于 Duo 这种通用验证方式生成登录的方式。
Zabbix 7.0另一个新功能是高可用,高可用是社区和很多客户心心念念的功能,因为金融客户对于高可用有明确要求。这种客户会用非常传统的方式,比如借助一些脚本, Keepalived、Pacemaker 或者 virtual machine 这种层面的一些高可用的方式来去做切换,这些方式可以达到你的目的,但是都是借助于一些其他的手段,比如脚本和定制化的方式来实现,对于维护来说它也不够友好,而 Zabbix 原生高可用,说到底就是先创建一个 proxy 的高可用集群,它是一个proxy组,这个组里面至少有两个proxy,到底有多少个取决你自己,它没有限制。如果这个 proxy 集群已经设定好了,所有的监控主机都配了基于这个 proxy 集群来做监控,它会动态的把被监控的对象分配到这些 proxy 上,让它们分别自己各自管理,可以做到压力的分摊。
所以Zabbix proxy 的这个功能不仅限于高可用,它同时还可以做 load balance。这些 proxy 同时在做对应的不同主机的数据采集,大家平摊。假如有台 proxy 挂了,另外几台 proxy 会去计算原来的那台 proxy 上有多少监控设备,大家把工作量分一分,它会全自动去做load balance,这是代码级实现。这也是为什么 Zabbix 7.0这个功能很受用户的欢迎,因为它不需要过多的人工去介入。但是你可能会问,其他的 proxy 如果再挂掉了怎么办?这个时候其实你也可以考虑其他的一些方式,比如说用 Docker 这种方式去快速的拉取proxy 的镜像,去新添一个 proxy 加入到你的 proxy group 里面来满足,或者说保证你的 proxy 高可用还是正常在用的,完全是可以的。这样的话你就不需要再借助于其他的一些脚本定制化的方式去实现高可用,同时因为它是基于原生机制的,它整个高可用的切换实际上是非常快的。
下面我们来看具体的配置,首先我创建了三个proxy,分别是proxy1, proxy2, proxy3,然后它对应的 Server 都是156,也就是说这三个 proxy 构建了一个 proxy group,把它指向到同一个 Zabbix server。配置参数为什么要设定 hostname?如果你用过Zabbix 就知道 Zabbix proxy 的 hostname 跟你在前端配置 proxy 的 hostname 必须一致。接下来是agent 的配置,不管你是 passive agent 还是 active agent,实际上它的指向跟之前 Server 的高可用中 agent 的指向是一样的。对于 passive agent 来说,你要把所有的 Zabbix proxy group 里面的任何一个 proxy 的IP用逗号方式隔开,表示无论哪个 proxy挂掉了,这里面的 IP 都有权限能够访问到你的 passive agent。
反过来如果是 active agent ,那就不一样了, active agent 是要用分号隔开,分号表示这三个 IP 对应的proxy,它是属于一个 proxy group 的,但是你可能会问一个问题,当还要指向某一个特定的proxy,那怎么办?在逗号后再加一个你要单独指向 proxy 的地址就可以了,这就是两者之间的区别。至此agent 的配置也完成了, proxy 的配置也完成了。
再看看前端的配置,前端配置也很简单,都是Zabbix 自身的一些配置管理。在administration,你可以创建一个 proxy group,这个名词你可以自己取好,这边有两个参数, failover 的时间,还有一个是最小的 proxy 的数量。这个 failover 的时间你可以自己设定,它有一个区间范围。最小的 proxy 的数量,正常来说你要做一个集群,至少要两个。OK, proxy group 设定好了,然后我们要创建proxy。proxy name跟 proxy 所有的后台配置文件里面 hostname 保持一致。这里面 active 还是 passive 模式都可以去做配置。这里面你可能会问一个问题,是不是一个 proxy group 里面,有三个proxy,我可以一个 proxy 用主动模式,两个 proxy 用被动模式?是可以的,因为这个跟你的高可用其实没有关系,说到底只是数据采集的问题。这些数据肯定都会采集到,只是谁来优先来发起,这个相当于去谈恋爱,谁先表白一个道理。这些操作做完了之后,你可以看到在到这一步整个 proxy 都配置完成了,就是这么简单。接下来创建主机,其他的都一样,这里面要选择主机到底是由谁来监控?你可以直接用这个 Server 来监控,也可以指定某个特定的proxy,也可以选择 proxy group。
做完了这个操作之后,默认它会检测到我是由 proxy1 这个 proxy 来做数据采集,它会自动去分配。你可以看到 agent 主机已经创建好了之后,在 proxy group可以看到这三个 proxy ,当前 proxy group 的状态是online,然后当前 proxy 数量 3 个,最小是两个。也就是说如果三个 proxy 里面有两个挂掉,这个 proxy group 状态就是offline了,为什么呢?因为要求 proxy 的数量至少要两个。这里面你可以看到这三个 proxy 分别的状态,模式都是主动模式,都没有加密,以及版本。可以看到现在我定义的这台主机,它是基于 proxy1 来监控,它当前的NVPS,当前的监控项的数量是多少,在这个 proxy 上都有显示。我们从后端数据库来看,所有的前端配置,数据也好,包括一些性能数据实际上都是保存在后端数据库。Zabbix 每个版本的数据库的表数量和结构都在发生变化, Zabbix 7.0 由原来 6.0 的 100 多张表,增加了 200 多张表。因为随着功能的增加,很多新的功能是需要新的数据表来支撑的。这里面有几个表,一个叫 proxy group,这里面有几个 proxy group 和你的组ID。也可以去查 proxy 这张表里面当前已经创建的所有 proxy 信息,后端配置文件配置的这些信息都已经同步到数据库里面, proxy 123 对应的 ID ,它们所属的 proxy group。就是这么简单。
至此为止Zabbix 7.0 两个最重要的新功能就讲完了,大家还是要自己下载,多多动手,实践出真知。