0x01 前言

我为我的所有虚拟机都配置了zabbix agent以便监控所有信息方便日后的分析。安装配置过程请参考以下链接:

但默认情况下,zabbix是通过不安全的线路进行传输的,有可能造成数据泄露等危险,为此我为我的zabbix服务添加数据证书的配置以便通过加密通道传输数据。

0x02 数字证书

当配置好zabbix服务端和agent后,即可继续配置数字证书的部分,首先需要使用openssl生成数字证书。

我们需要先生成ca证书,然后通过ca证书签发服务器证书与客户端证书。先建立一个文件夹以便存放所有证书文件:

#新建文件夹
[root@web ~]# mkdir zabbix_crt

#进入文件夹
[root@web ~]# cd zabbix_crt

然后使用以下命令建立所需要的证书文件。其中CN部分可以修改为服务器的域名或IP,在实际应用中推荐修改为服务器的域名:

#生成ca私钥
openssl genrsa 2048 > ca.key

#使用ca私钥建立ca证书
openssl req -new -x509 -nodes -days 1000 -key ca.key -subj /CN=Signing\ CA/OU=Development\ group/O=Zabbix\ SIA/DC=zabbix/DC=com > ca.crt

#生成服务器csr证书请求文件
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server.key -subj /CN=server/OU=Development\ group/O=Zabbix\ SIA/DC=zabbix/DC=com > server.csr

#使用ca证书与私钥签发服务器证书
openssl x509 -req -in server.csr -days 1000 -CA ca.crt -CAkey ca.key -set_serial 01 > server.crt

#生成客户端csr证书请求文件
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client.key -subj /CN=client/OU=Development\ group/O=Zabbix\ SIA/DC=zabbix/DC=com > client.csr

#使用ca证书与私钥签发客户端证书
openssl x509 -req -in client.csr -days 1000 -CA ca.crt -CAkey ca.key -set_serial 01 > client.crt

完成后,该目录下一共有8个文件:

[root@web zabbix_crt]# ll
总用量 32
-rw-r--r-- 1 root root 1350 1月   8 21:20 ca.crt
-rw-r--r-- 1 root root 1679 1月   8 21:20 ca.key
-rw-r--r-- 1 root root 1216 1月   8 21:20 client.crt
-rw-r--r-- 1 root root 1013 1月   8 21:20 client.csr
-rw-r--r-- 1 root root 1704 1月   8 21:20 client.key
-rw-r--r-- 1 root root 1216 1月   8 21:20 server.crt
-rw-r--r-- 1 root root 1013 1月   8 21:20 server.csr
-rw-r--r-- 1 root root 1704 1月   8 21:20 server.key

0x03 服务端

现在服务端的zabbix目录建立一个文件夹,并将以下文件复制到该文件夹下:

  • ca.crt
  • server.crt
  • server.key
#新建文件夹
[root@zabbix_crt ~]# mkdir /usr/local/zabbix/zabbix_crt

#复制文件
[root@web zabbix_crt]# cp ca.crt /usr/local/zabbix/zabbix_crt/
[root@web zabbix_crt]# cp server.crt /usr/local/zabbix/zabbix_crt/
[root@web zabbix_crt]# cp server.key /usr/local/zabbix/zabbix_crt/

请注意,如果你通过yum的方式安装zabbix服务端,那么你的zabbix服务端目录应该是:/etc/zabbix。

然后修改配置文件zabbix_server.conf:

#打开文件
[root@web zabbix_crt]# vim /usr/local/zabbix/etc/zabbix_server.conf

#修改TLSCAFile配置
TLSCAFile=/usr/local/zabbix/zabbix_crt/ca.crt

#修改TLSCertFile配置
TLSCertFile=/usr/local/zabbix/zabbix_crt/server.crt

#修改TLSKeyFile配置
TLSKeyFile=/usr/local/zabbix/zabbix_crt/server.key

完成后重启zabbix服务即可:

[root@web zabbix_crt]# systemctl restart zabbix-server

0x04 客户端

客户端和服务端类似,现在agent目录建立一个文件夹,然后将以下文件复制到该文件夹中:

  • ca.crt
  • client.crt
  • client.key
#新建文件夹
[root@zabbix_crt ~]# mkdir /etc/zabbix/zabbix_crt/

#复制文件
[root@web zabbix_crt]# cp ca.crt /etc/zabbix/zabbix_crt/
[root@web zabbix_crt]# cp server.crt /etc/zabbix/zabbix_crt/
[root@web zabbix_crt]# cp server.key /etc/zabbix/zabbix_crt/

然后打开agent配置文件修改以下内容:

#打开文件
[root@web zabbix_crt]# vim /etc/zabbix/zabbix_agentd.conf

#修改agent连接模式
TLSConnect=cert

#修改传入数据连接模式
TLSAccept=cert

#修改TLSCAFile配置
TLSCAFile=/etc/zabbix/zabbix_crt/ca.crt

#修改TLSCertFile配置
TLSCertFile=/etc/zabbix/zabbix_crt/client.crt

#修改TLSKeyFile配置
TLSKeyFile=/etc/zabbix/zabbix_crt/client.key

完成后重启agent即可:

[root@web zabbix_crt]# systemctl restart zabbix-agent

0x05 监控点

最后在监控点配置中启用数字证书加密连接即可:

修改完成后稍等1分钟即可看到连接状态:

0x06 结语

如果对安全性有更高要求,还可以使用商业数字证书或免费的数字证书(例如:为strongswan配置Encryption Everywhere项目的证书)替换掉自签发的数字证书。

0x07 更新

0x07.1 2017-10-12

因为zabbix官方编译的agent不包含TLS模块,所以windows系统使用官方编译的agent并启用TLS时会无法启动服务,这时候需要手动编译。以下是相关流程: