由于设备都在混合云,所以不少数据传输是通过公网,这样极大的增加了危险性,所以在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. Android Studio出现:Cause: unable to find valid certification path to requested target问题解决

    Android Studio , Flutter , IDEA 工程报错 unable to find valid certification path to requested target 最新解 ...

  2. 二叉查找树、平衡二叉树(AVLTree)、平衡多路查找树(B-Tree),B+树

    B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引. B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的. 在 ...

  3. JavaWeb网上图书商城完整项目--day02-5.ajax校验功能之服务器端三层实现

    regist.jsp页面中有异步请求服务器来对表单进行校验: l  校验登录名是否已注册过: l  校验Email是否已注册过: l  校验验证码是否正确. 这说明在UserServlet中需要提供相 ...

  4. 阿里巴巴--mysql中Mysql模糊查询like效率,以及更高效的写法

    在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...

  5. Netdiscover

    Netdiscover不仅支持主动arp检测,还支持被动的arp检测,即把网卡设置为混杂模式,收取所有局域网内的arp广播数据包,从而判断活着的ip. 主动发现命令格式:netdiscover  -i ...

  6. JavaScript基础对象创建模式之对象的常量(028)

    虽然许多编程语言提供了const关键字来支持常量的声明,但JavaScript里没有表示常量的语义.我们可以用全大写的方式来声明变量,表明它实际上是个常量: Math.PI; // 3.1415926 ...

  7. RabbitMQ(dotnet基本使用

    前言 RabbitMQ环境环境搭建及基本配置,在此不讨论.网上一大堆. NET环境下,Rabbit库可以在官网或NUGET上查找得到. 生产者 static void Main(string[] ar ...

  8. EOS基础全家桶(十四)智能合约进阶

    简介 通过上一期的学习,大家应该能写一些简单的功能了,但是在实际生产中的功能需求往往要复杂很多,今天我就继续和大家分享下智能合约中的一些高级用法和功能. 使用docker编译 如果你需要使用不同版本的 ...

  9. https http 混合访问_https 页面中引入 http 资源的解决方式

    解决android 5.0 webview不能加载http与https混合内容的问题 在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问 ...

  10. BZOJ1294 洛谷P2566 状态压缩DP 围豆豆

    传送门 题目描述 是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗豆子,每颗豆有不同的分值 ...