0x01 前言
因为我极少使用windows系统,所以不知道zabbix agent在windows上存在TLS无法使用的问题,直至网友给我留言,但我找到了解决办法。
0x02 BUG
依照我的文章(windows安装zabbix agents & 添加监控点)安装完zabbix agent后,在不启用TLS的情况下是可以正常启动服务的,可是在启用TLS的情况下(为zabbix服务配置数字证书加密通道),则出现以下错误:
比较坑的是,日志中居然没有任何错误记录。但通过CMD窗口启动则可以发现端倪。打开一个CMD窗口并手动运行zabbix agent:
从上面抛出的错误可以得知,官方预编译的zabbix agent并没有包含TLS相关模块:
Zabbix agent was compiled without TLS support
那么最简单的方法是自行编译适用于windows并启用TLS的zabbix agent。
0x03 准备
我很少接触windows系统,所以对于在windows上编译软件这个工作,我是毫无头绪的。但我从zabbix的support页面中找到编译的过程:
根据这个教程中所描述的过程,我进行了一次实践,确认这个过程可以解决我们的问题,在这里我以64位为代表撰写教程。
在开始编译之前要准备以下内容:
以下是下载好的文件:
VC、openssl和cmake下载后直接安装即可,但在安装cmake的时候要注意选择将path应用到所有用户:
Add CMake to system PATH for all users
而pcre和zabbix源码只用一次,可以解压到任意位置。为了在cmd窗口中输入更少的字符,我放置在以下路径中:
C:\temp
安装完VS后,在开始菜单中找到以下内容:
如果编译32位和64位的应用分别使用以下工具:
- x32:VS2015 x86 Native Tools Command Prompt
- x64:VS2015 x64 Native Tools Command Prompt
在这里我使用64位的工具。
0x04 编译
0x04.1 pcre
先整合pcre,在pcre根目录中新建一个build文件夹并进入:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cd c:\temp\pcre-8.41 c:\temp\pcre-8.41>mkdir build c:\temp\pcre-8.41>cd build
先cmake:
c:\temp\pcre-8.41\build>cmake -G "Visual Studio 14 2015 Win64" -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON -DPCRE_SUPPORT_UTF=ON -DCMAKE_C_FLAGS_RELEASE:string="/MT" ..
然后编译:
c:\temp\pcre-8.41\build>msbuild PCRE.sln /property:Configuration="Release"
最终结果只要没有错误即可,警告信息可以忽略。
0x04.2 修改文件
处理完pcre后进入zabbix源码目录,先修改以下文件:
C:\temp\zabbix-3.4.2\build\win32\project\resource.rc 将内容 #include "afxres.h 修改为 #include "windows.h"
然后修改以下文件:
C:\temp\zabbix-3.4.2\build\win32\project\Makefile_sender_dll 将内容 ..\..\..\src\zabbix_sender\win32\zabbix_sender.o 修改为 ..\..\..\src\zabbix_sender\zabbix_sender.o
0x04.3 编译agent
先进入相关文件夹:
C:\>cd C:\temp\zabbix-3.4.2\build\win32\project
然后运行nmake:
#64位 C:\temp\zabbix-3.4.2\build\win32\project>nmake CPU=AMD64 TLS=openssl TLSINCDIR="C:\OpenSSL-Win64\include" TLSLIBDIR="C:\OpenSSL-Win64\lib" PCREINCDIR="C:\temp\pcre-8.41" PCRELIBDIR="C:\temp\pcre-8.41\build\Release" #32位 C:\temp\zabbix-3.4.2\build\win32\project>nmake CPU=i386 TLS=openssl TLSINCDIR="C:\OpenSSL-Win32\include" TLSLIBDIR="C:\OpenSSL-Win32\lib" PCREINCDIR="C:\temp\pcre-8.41" PCRELIBDIR="C:\temp\pcre-8.41\build\Release"
完成后即可在以下路径找到相关文件:
C:\temp\zabbix-3.4.2\bin\win64
0x04.4 openssl
最后还需要将openssl的几个动态链接库复制到zabbix agent文件目录中:
- C:\OpenSSL-Win64\bin\msvcr120.dll
- C:\OpenSSL-Win64\libcrypto-1_1-x64.dll
- C:\OpenSSL-Win64\libssl-1_1-x64.dll
完成后的文件如下:
至此,所有编译工作均已完成。现在只需要将win64这个文件夹放置需要使用zabbix监控的windows系统中即可。
0x05 使用
首先将win64这个文件夹重命名并放置到适当位置,我选择的路径如下:
#agent路径 C:\zabbix_agents\bin\win64\zabbix_agentd.exe #配置文件路径 C:\zabbix_agents\conf\zabbix_agentd.conf #TLS配置信息 TLSConnect=cert TLSAccept=cert TLSCAFile=C:\zabbix_agents\crt\ca.crt TLSCertFile=C:\zabbix_agents\crt\win10.t.com.crt TLSKeyFile=C:\zabbix_agents\crt\win10.t.com.key
如果你已经安装过zabbix agent服务,那么需要先删除旧的服务。以管理员权限打开CMD窗口并输入以下内容即可删除旧服务:
sc delete "Zabbix Agent"
然后通过以下命令重新安装:
c:\zabbix_agents\bin\win64\zabbix_agentd.exe --config c:\zabbix_agents\conf\zabbix_agentd.conf -i
然后放置数字证书到指定位置,再打开服务窗口启动服务:
0x06 结语
希望zabbix官方在日后预编译时可以添加TLS模块,毕竟网络安全也挺重要的。