由于设备都在混合云,所以不少数据传输是通过公网,这样极大的增加了危险性,所以在Zabbix数据传输这块则进行PSK安全认证,由proxy主动收集agent数据后统一发送给server,这样只需要对proxy到server之间的数据进行加密即可。

Zabbix从3.0开始支持传输层安全性(TLS)协议v.1.2加密,在Zabbix服务器,Zabbix代理,Zabbix代理,zabbix_sender和zabbix_get实用程序之间进行加密通信,支持基于证书PSA和基于预共享密钥PSK的加密。

加密对于各个组件是可选配置,Zabbix_Proxy到Zabbix Server之间可以基于证书加密或者基于预共享密钥加密。

Zabbix守护程序将一个侦听端口用于加密和未加密的传入连接。添加加密不需要在防火墙上打开新端口。

加密的局限性

•在启动期间,私钥以纯文本格式存储在Zabbix组件可读的文件中。

•预共享密钥在Zabbix前端中输入,并以纯文本格式存储在Zabbix数据库中。

•内置加密不能保护通信:

•在运行Zabbix前端的Web服务器和用户Web浏览器之间,

•在Zabbix前端和Zabbix服务器之间,

•在Zabbix服务器(代理)和Zabbix数据库之间。

•当前,每个加密的连接均以完整的TLS握手打开,未实现会话缓存和票证。

•添加加密会增加检查和操作的时间,具体取决于网络延迟。

•例如,如果数据包延迟为100毫秒,则打开TCP连接并发送未加密的请求大约需要200毫秒。

•通过加密,大约增加了1000 ms来建立TLS连接。

•可能需要增加超时,否则某些在代理上运行远程脚本的项目和操作可能会与未加密的连接一起工作,但会因加密而超时而失败。

•网络发现不支持加密。由网络发现执行的Zabbix代理检查将不加密,并且如果Zabbix代理配置为拒绝未加密的连接,则此类检查将不会成功

加密方式

Zabbix支持的加密方式有两种:

1.基于证书PSA的加密(常用与Zabbix_Proxy但不局限于Proxy)

2.基于预共享密钥PSK的加密(常用与Zabbix_Agent但不局限于Agent)

支持的加密库

Zabbix支持以下四种加密库,不同的加密库有不同的功能

GnuTls:如果要使用GnuTLS方式加密,则GnuTLS版本必须高于或者等于3.1.18版本(支持基于证书PSA以及基于预共享密钥PSK两种加密方式)

OpenSSL:支持版本(1.0.1、1.0.2c、1.1.0),OpenSSL1.1.1版本仅支持Zabbix3.0.23、3.4.15和4.0.1,但是OpenSSL1.0.1、1.0.2c版本在PSK加密方式中并不能完美支持保密性(OpenSSL加密库支持基于证书以及基于预共享密钥PSK两种加密方式)

LibreSSL:LibreSSL为OpenSSL的替代品,在2014年OpenSSL被爆出心脏漏洞后,OpenSSL成立了LibreSSL重构了OpenSSL加密库的代码,并从2.0版本起跳,官方目前称不支持LibreSSL2.6x版本,通过了(LibreSSL2.7.4、2.8.2版本的测试),(LibreSSl不支持PSK的加密方式,只支持基于证书方式)

mbed TLS:mbed TLS以前被称为PolarSSL,支持mbed TLS1.3.9版本和的1.3.9x,目前不支持mbed TLS 2版本,它不是1.3分支的完全替代,Zabbix不会用mbed TLS 2.x编译。(支持基于证书以及基于预共享密钥PSK两种加密方式)

配置方式: 在编译部署zabbix时添加以下参数 GnuTls: --with-gnutls[=DIR] OpenSSL: --with-openssl[=DIR] LibreSSL: --with-openssl[=DIR],因为LibreSSL基于OpenSSL所以Libre SSL也使用 --with-openssl选项 mbed TLS: --with-mbedtls[=DIR]

加密参数

TLSConnect 这个参数在Zabbix Server/Zabbix Proxy/Zabbix Agent配置文件中都存在,值有以下三个:unencrypted:不加密 PSK:PSK方式加密 cert:PSA方式加密 此参数仅用于在Zabbix_Proxy或者Zabbix_Agent在主动模式下到服务器的连接。

TLSAccept 这个参数同样在Zabbix Server/Zabbix Proxy/Zabbix Agent配置文件中都存在,值也有以下三个:unencrypted:不加密 PSK:PSK方式加密 cert:PSA方式加密 此参数仅用于在Zabbix_Proxy或者Zabbix_Agent在被动模式指定来自服务器的连接。

如果将Zabbix_Proxy或者Zabbix_Agent配置为PSA证书加密方式,那么Zabbix Proxy或者Zabbix_Agent只能配置为主动模式,来主动提交数据到Server,agent(active) or zabbix trapper

密码套件

在Zabbix启动期间内部配置了密码套件,并且依赖于加密库,目前它们不是用户可配置的。

按照从高到低顺序的库类型配置密码:

密码套件使用证书:

密码套件使用PSK:

使用PSK共享密钥加密

使用PSK共享密钥加密可以使用四种加密库,如上文所述,但文本只介绍常用的两种方式:GnuTLS进行PSK加密与OpenSSL进行PSK加密 Zabbix中的每个预共享密钥(PSK)实际上都是一对:

•非秘密PSK identity(共享密钥一致性)字符串,

•秘密PSK字符串值。

1)PSK身份字符串是非空的UTF-8字符串。例如,“代理的PSK ID 001 Zabbix”。这是Zabbix组件引用此特定PSK的唯一名称。请勿将敏感信息放在PSK身份字符串中-它将未经加密地通过网络传输。PSK值是很难猜测的十六进制数字字符串,例如“ e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”。

注:Zabbix Web界面允许配置多达128个字符长的PSK身份字符串和2048位长的PSK,而与所使用的加密库无关。如果某些Zabbix组件支持较低限制,则用户有责任为这些组件配置PSK标识和值以及允许的长度,超过长度限制会导致Zabbix组件之间的通信失败

2)在Zabbix服务器使用PSK连接到代理之前,服务器会在数据库中(实际上是在配置缓存中)查找为该代理配置的PSK身份和PSK值。收到连接后,代理将使用其配置文件中的PSK标识和PSK值。如果双方具有相同的PSK标识字符串和PSK值,则连接可能会成功。用户有责任确保不存在两个具有相同标识字符串但值不同的PSK。否则,可能会导致使用带有此PSK标识字符串的PSK的Zabbix组件之间的通信意外中断。

GnuTLS基于PSK加密

1) 安装GnuTLS加密库 GnuTls加密库版本必须大于或者等于3.1.18

yum install gnutls.x86_64 gnutls-c++.x86_64 gnutls-dane.x86_64  gnutls-devel.x86_64 gnutls-utils.x86_64 -y

gnutls-cli --version
gnutls-cli 3.3.

2) 编译部署Zabbix_Proxy

./configure --prefix=/usr/local/zabbix \
--enable-proxy \
--enable-agent \
--enable-ipv6 \
--enable-java \
--with-sqlite3 \
--with-net-snmp \
--with-libcurl \
--with-libxml2 \
--with-zlib \
--with-libevent \
--with-libpcre \
--with-iconv \
--with-openipmi \
--with-gnutls \
--with-ssh2

3)生成密钥并设置权限

psktool -u psk_identity -p database.psk -s
Generating a random key for user 'psk_identity'
Key stored to database.psk echo '5a504503a51fb29bfea62e4576808dd4258c5f8cd03928c90a04704464bbbbd8' > /usr/local/zabbix/etc/zabbix_agentd.conf.d/.zabbix_agentd.psk chown -Rf zabbix.zabbix /usr/local/zabbix/etc/zabbix_proxy.conf.d/.zabbix_proxy.psk chmod /usr/local/zabbix/etc/zabbix_proxy.conf.d/.zabbix_proxy.psk

4)修改proxy配置

vim /usr/local/zabbix/etc/zabbix_proxy.conf
TLSConnect=psk #在proxy主动模式下指定加密方式
TLSPSKFile=/usr/local/zabbix/etc/zabbix_proxy.conf.d/.zabbix_proxy.psk #指定PSK文件
TLSPSKIdentity=xxxxxxx #指定PSK名称,可自定义

5)在Zabbix Web界面添加 选中proxy后选择加密方式,填入信息

6)配置agent加密 agent加密与上述一致,除了web界面配置如下

OpenSSL基于PSK加密

以下只介绍OpenSSL与GnuTLS配置不一样的地方 1)编译配置

./configure --prefix=/usr/local/zabbix \
--enable-proxy \
--enable-agent \
--enable-ipv6 \
--enable-java \
--with-sqlite3 \
--with-net-snmp \
--with-libcurl \
--with-libxml2 \
--with-zlib \
--with-libevent \
--with-libpcre \
--with-iconv \
--with-openipmi \
--with-openssl= \ #指定加密库为Openssl,如果默认加密库版本不符合Zabbix要求,则安装符合要求的加密库后进行配置
--with-ssh2

2)生成密钥

openssl rand -hex
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429

拿到Openssl生成的密钥后,下面的配置则与GnuTLS一致

使用PSA基于证书加密

证书加密非常复杂,需要去申请CA证书、签名证书以及密钥等,如果想了解证书加密请见官方:https://www.zabbix.com/documentation/current/manual/encryption/using_certificates

识别下方二维码,学习更多Zabbix相关知识!

Zabbix4.x如何安全传输数据的更多相关文章

  1. Flash跨域传输数据 crossdomain.xml

    一.概述位于www.a.com域中的SWF文件要访问www.163.com的文件时,SWF首先会检查163服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功:若crossdo ...

  2. MVC 前台向后台传输数据

    今天,我们一起来学习下.MVC如何在前台给后台传输数据 (1)前台传输数据到后台 具体思路:前台拼凑json字符串,然后通过 get 或 post 方式,传递到后台 Action 方法中 我现在前台展 ...

  3. [转载]JavaEE学习篇之——网络传输数据中的密码学知识以及Tomcat中配置数字证书EE

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/21716557 今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一 ...

  4. php中curl模拟浏览器来传输数据

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...

  5. cdoj 1143 传输数据 最大流

    传输数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1143 Descri ...

  6. vsftp实现ftps加密传输数据

    FTP明文传输数据,不太安全,ftp+ssl可以实现传输加密=ftps 01.创建FTP用户 user -d /ftp_www  -s /sbin/nologin mvpbang echo " ...

  7. C#中thrift 中THttpHandler 传输数据 慢 slow 解决办法

    1. 在用c# 写thrift的服务端,来相应http请求,在用结构体传输时,会遇到一个问题,就是(在用网络)传输数据特别慢, 这是由于在发生数据是用的TStreamTransport 导致每传一个数 ...

  8. WIFI(1)WIFI直连 + socket 可以用来实现类似蓝牙传输数据的功能

    WIFI 直连简介 从Android4.0(API Level=14)开始,允许通过Wi-Fi模块在两个移动设备之间建立直接连接(这种技术称为Wi-Fi Direct),这种连接不需要无线路由作为中介 ...

  9. 蓝牙(3)如何通过蓝牙传输数据及UUID详介

    如何通过蓝牙传输数据 通过蓝牙传输数据与Socket类似.在网络中使用Socket和ServerSocket控制客户端和服务端的数据读写.而蓝牙通讯也由客户端和服务端Socket来完成.蓝牙客户端So ...

随机推荐

  1. 【Flutter实战】定位装饰权重组件及柱状图案例

    老孟导读:Flutter中有这么一类组件,用于定位.装饰.控制子组件,比如 Container (定位.装饰).Expanded (扩展).SizedBox (固定尺寸).AspectRatio (宽 ...

  2. JavaWeb网上图书商城完整项目--12.项目所需jquery函数介绍之ajax

    jquery中使用ajax发送异步请求 下面的一个案例在input输入框失去焦点的时候发送一个异步的请求: 我们来看程序的案例: 这里要强调的是返回值最好选择是json,json对应的就是对象,Jav ...

  3. Python 简明教程 ---10,Python 列表

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...

  4. Python自学——pygame安装

    本片文章介绍pygame的安装方法.一则跟广大初学者分享经历,二则做个自我总结. pygame是python的库文件,跟一般的应用软件安装方法不太一样.我电脑上的python版本是python3.7, ...

  5. HDU 2157 How many ways?【矩阵快速幂】

    题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...

  6. NXP S32V eiq_auto tensorflow offline tool 环境配置

    NXP S32V eiq_auto tensorflow offline tool 环境配置 完成cnn模型eiq移植的第一步 1.安装conda 下载.sh bash Anaconda3-5.3.1 ...

  7. 简易的java爬虫项目

    简易的java爬虫项目 本项目仅供java新手学习交流,由于本人也是一名java初学者,所以项目中也有很多不规范的地方,希望各位高手不吝赐教,在评论区指出我的不足,我会虚心学习: 成果预览: 在开始讲 ...

  8. css重设样式_清除浏览器的默认样式

    由于不同的浏览器默认的样式也不同,所以在网页开发前设置一个公用样式,来清除各个浏览器的默认样式,已达到做的网页在各个浏览器中达到统一. 收集的默认样式的链接地址: 1.eric-meyer-reset ...

  9. Python Java 快速配置环境变量(Path)

    Python Java 快速配置环境变量(Path) 最近系统被重置,清空了C盘中的program等文件夹以及初始化了环境变量. 通常环境下,在windows环境中我们都会打开"环境变量&q ...

  10. 火车运输(最大生成树+lca) 洛谷P1967

    货车运输 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 \(q\) 辆货车 ...