TDengine 安全部署配置建议

在这里插入图片描述

背景

TDengine 的分布式、多组件特性导致 TDengine 的安全配置是生产系统中比较关注的问题。本文档旨在对 TDengine 各组件及在不同部署方式下的安全问题进行说明,并提供部署和配置建议,为用户的数据安全提供支持。

安全配置涉及组件

TDengine 包含多个组件,有:

  • taosd:内核组件。
  • taosc:客户端库。
  • taosAdapter:REST API 和 WebSocket 服务。
  • taosKeeper:监控服务组件。
  • taosX:数据管道和备份恢复组件。
  • taosxAgent:外部数据源数据接入辅助组件。
  • taosExplorer:Web 可视化管理界面。

与 TDengine 部署和应用相关,还会存在以下组件:

  • 通过各种连接器接入并使用 TDengine 数据库的应用。
  • 外部数据源:指接入 TDengine 的其他数据源,如 MQTT、OPC、Kafka 等。

各组件关系如下:

在这里插入图片描述

关于各组件的详细介绍,请参考 组件介绍。

TDengine 安全设置

taosd

taosd 集群间使用 TCP 连接基于自有协议进行数据交换,风险较低,但传输过程不是加密的,仍有一定安全风险。

启用压缩可能对 TCP 数据混淆有帮助。

  • compressMsgSize:是否对 RPC 消息进行压缩,整数,可选:-1:所有消息都不压缩;0:所有消息都压缩;N (N>0):只有大于 N 个字节的消息才压缩。

为了保证数据库操作可追溯,建议启用审计功能。

  • audit:审计功能开关,0 为关,1 为开。默认打开。
  • auditInterval:上报间隔,单位为毫秒。默认 5000。
  • auditCreateTable:是否针对创建子表开启申计功能。0 为关,1 为开。默认打开。

为保证数据文件安全,可启用数据库加密。

  • encryptAlgorithm:数据加密算法。
  • encryptScope:数据加密范围。

启用白名单可限制访问地址,进一步增强私密性。

  • enableWhiteList:白名单功能开关,0 为关,1 为开;默认关闭。

taosc

用户和其他组件与 taosd 之间使用原生客户端库(taosc)和自有协议进行连接,数据安全风险较低,但传输过程仍然不是加密的,有一定安全风险。

taosAdapter

taosadapter 与 taosd 之间使用原生客户端库(taosc)和自有协议进行连接,同样支持 RPC 消息压缩,不会造成数据安全问题。

应用和其他组件通过各语言连接器与 taosadapter 进行连接。默认情况下,连接是基于 HTTP 1.1 且不加密的。要保证 taosadapter 与其他组件之间的数据传输安全,需要配置 SSL 加密连接。在 /etc/taos/taosadapter.toml 配置文件中修改如下配置:

[ssl]
enable = true
certFile = "/path/to/certificate-file"
keyFile = "/path/to/private-key"

在连接器中配置 HTTPS/SSL 访问方式,完成加密访问。

为进一步增强安全性,可启用白名单功能,在 taosd 中配置,对 taosdapter 组件同样生效。

taosX

taosX 对外包括 REST API 接口和 gRPC 接口,其中 gRPC 接口用于 taos-agent 连接。

  • REST API 接口是基于 HTTP 1.1 且不加密的,有安全风险。
  • gRPC 接口基于 HTTP 2 且不加密,有安全风险。

为了保证数据安全,建议 taosX API 接口仅限内部访问。在 /etc/taos/taosx.toml 配置文件中修改如下配置:

[serve]
listen = "127.0.0.1:6050"
grpc = "127.0.0.1:6055"

从 TDengine 3.3.6.0 开始,taosX 支持 HTTPS 连接,在 /etc/taos/taosx.toml 文件中添加如下配置:

[serve]
ssl_cert = "/path/to/server.pem"
ssl_key =  "/path/to/server.key"
ssl_ca =   "/path/to/ca.pem"

并在 Explorer 中修改 API 地址为 HTTPS 连接:

# taosX API 本地连接
x_api = "https://127.0.01:6050"
# Public IP 或者域名地址
grpc = "https://public.domain.name:6055"

taosExplorer

taosAdapter 组件相似,taosExplorer 组件提供 HTTP 服务对外访问。在 /etc/taos/explorer.toml 配置文件中修改如下配置:

[ssl]
# SSL certificate file
certificate = "/path/to/ca.file"# SSL certificate private key
certificate_key = "/path/to/key.file"

之后,使用 HTTPS 进行 Explorer 访问,如 https://192.168.12.34 。

taosxAgent

taosX 启用 HTTPS 后,Agent 组件与 taosx 之间使用 HTTP 2 加密连接,使用 Arrow-Flight RPC 进行数据交换,传输内容是二进制格式,且仅注册过的 Agent 连接有效,保障数据安全。

建议在不安全网络或公共网络环境下的 Agent 服务,始终开启 HTTPS 连接。

taosKeeper

taosKeeper 使用 WebSocket 连接与 taosadpater 通信,将其他组件上报的监控信息写入 TDengine。

taosKeeper 当前版本存在安全风险:

  • 监控地址不可限制在本机,默认监控 所有地址的 6043 端口,存在网络攻击风险。使用 Docker 或 Kubernetes 部署不暴露 taosKeeper 端口时,此风险可忽略。
  • 配置文件中配置明文密码,需要降低配置文件可见性。在 /etc/taos/taoskeeper.toml 中存在:
[tdengine]
host = "localhost"
port = 6041
username = "root"
password = "taosdata"
usessl = false

安全增强

我们建议使用在局域网内部使用 TDengine。

如果必须在局域网外部提供访问,请考虑添加以下配置:

负载均衡

使用负载均衡对外提供 taosAdapter 服务。

以 Nginx 为例,配置多节点负载均衡:

http {server {listen 6041;location / {proxy_pass http://websocket;# Headers for websocket compatibleproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;# Forwarded headersproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Port $server_port;proxy_set_header X-Forwarded-Server $hostname;proxy_set_header X-Real-IP $remote_addr;}}upstream websocket {server 192.168.11.61:6041;server 192.168.11.62:6041;server 192.168.11.63:6041;}
}

如果 taosAdapter 组件未配置 SSL 安全连接,还需要配置 SSL 才能保证安全访问。SSL 可以配置在更上层的 API Gateway,也可以配置在 Nginx 中;如果你对各组件之间的安全性有更强的要求,您可以在所有组件中都配置 SSL。Nginx 配置如下:

http {server {listen 443 ssl;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;}
}

安全网关

在现在互联网生产系统中,安全网关使用也很普遍。traefik 是一个很好的开源选择,我们以 traefik 为例,解释在 API 网关中的安全配置。

Traefik 中通过 middleware 中间件提供多种安全配置,包括:

  1. 认证(Authentication):Traefik 提供 BasicAuth、DigestAuth、自定义认证中间件、OAuth 2.0 等多种认证方式。
  2. IP 白名单(IPWhitelist):限制允许访问的客户端 IP。
  3. 频率限制(RateLimit):控制发送到服务的请求数。
  4. 自定义 Headers:通过自定义 Headers 添加 allowedHosts 等配置,提高安全性。

一个常见的中间件示例如下:

labels:- "traefik.enable=true"- "traefik.http.routers.tdengine.rule=Host(`api.tdengine.example.com`)"- "traefik.http.routers.tdengine.entrypoints=https"- "traefik.http.routers.tdengine.tls.certresolver=default"- "traefik.http.routers.tdengine.service=tdengine"- "traefik.http.services.tdengine.loadbalancer.server.port=6041"- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"- "traefik.http.middlewares.check-header.headers.customrequestheaders.X-Secret-Header=SecretValue"- "traefik.http.middlewares.check-header.headers.customresponseheaders.X-Header-Check=true"- "traefik.http.middlewares.tdengine-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7"- "traefik.http.routers.tdengine.middlewares=redirect-to-https,check-header,tdengine-ipwhitelist"

上面的示例完成以下配置:

  • TLS 认证使用 default 配置,这个配置可使用配置文件或 traefik 启动参数中配置,如下:

    traefik:
    image: "traefik:v2.3.2"
    hostname: "traefik"
    networks:
    - traefik
    command:
    - "--log.level=INFO"
    - "--api.insecure=true"
    - "--providers.docker=true"
    - "--providers.docker.exposedbydefault=false"
    - "--providers.docker.swarmmode=true"
    - "--providers.docker.network=traefik"
    - "--providers.docker.watch=true"
    - "--entrypoints.http.address=:80"
    - "--entrypoints.https.address=:443"
    - "--certificatesresolvers.default.acme.dnschallenge=true"
    - "--certificatesresolvers.default.acme.dnschallenge.provider=alidns"
    - "--certificatesresolvers.default.acme.dnschallenge.resolvers=ns1.alidns.com"
    - "--certificatesresolvers.default.acme.email=linhehuo@gmail.com"
    - "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
    

上面的启动参数配置了 default TSL 证书解析器和自动 acme 认证(自动证书申请和延期)。

  • 中间件 redirect-to-https:配置从 HTTP 到 HTTPS 的转发,强制使用安全连接。

    - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    
  • 中间件 check-header:配置自定义 Headers 检查。外部访问必须添加自定义 Header 并匹配 Header 值,避免非法访问。这在提供 API 访问时是一个非常简单有效的安全机制。

  • 中间件 tdengine-ipwhitelist:配置 IP 白名单。仅允许指定 IP 访问,使用 CIDR 路由规则进行匹配,可以设置内网及外网 IP 地址。

总结

数据安全是 TDengine 产品的一项关键指标,这些措施旨在保护 TDengine 部署免受未经授权的访问和数据泄露,同时保持性能和功能。但 TDengine 自身的安全配置不是生产中的唯一保障,结合用户业务系统制定更加匹配客户需求的解决方案更加重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Cursor中启用WebStorm/IntelliJ风格快捷键

在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一:使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts,选择Preferences: Open Keyboard Shortcuts (JSON) …

python打卡day30@浙大疏锦行

知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 具体操作步骤: 在桌面…

【kafka】基本命令

创建 Kafka Topic 的命令 以下是创建 Kafka Topic 的几种常用方法&#xff1a; 1. 使用 kafka-topics.sh 基础命令&#xff08;Kafka 自带工具&#xff09; bin/kafka-topics.sh --create \--bootstrap-server <broker地址:端口> \--topic <topic名称> \--parti…

编程速递:适用于 Delphi 12.3 的 FMX Linux 现已推出

Embarcadero非常高兴地宣布&#xff0c;用于使用Delphi构建Linux客户端应用程序的FMX Linux UI库再次在RAD Studio 12.3版本以及RAD Studio 12.2版本中提供支持&#xff0c;同时也适用于更早的版本。 作为RAD Studio的一个附加库&#xff0c;FMX Linux为开发面向Linux的图形用…

通过实例讲解螺旋模型

目录 一、螺旋模型的核心概念 二、螺旋模型在电子商城系统开发中的应用示例 第 1 次螺旋:项目启动与风险初探

vue3 vite 路由

如路由是这种格式 http://localhost:7058/admin/product/brand路由配置如下 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue import NProgress from nprogress; import nprogress/nprogress.css; import {errorRour…

【Redis】Hash 存储相比 String 存储的优势

在 Redis 中&#xff0c;Hash 存储相比 String 存储具有以下 优势&#xff0c;特别适用于某些特定场景&#xff1a; ✅ 1. 更节省内存&#xff08;尤其适合存储对象&#xff09; Hash 内部使用压缩列表&#xff08;ziplist&#xff09;或哈希表实现&#xff0c;在数据量较小时…

CSS详解:特性、选择器与优先级

CSS详解&#xff1a;特性、选择器与优先级 目录 CSS详解&#xff1a;特性、选择器与优先级一、CSS的核心特性1. 层叠性&#xff08;Cascading&#xff09;2. 继承性&#xff08;Inheritance&#xff09;3. 优先级&#xff08;Specificity&#xff09;4. 响应式设计5. 动画与过渡…

《算法导论(第4版)》阅读笔记:p86-p90

《算法导论(第4版)》学习第 19 天&#xff0c;p83-p85 总结&#xff0c;总计 3 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1. inkling (1)inkling: inclen(“utter in an undertone&#xff0c;低声说话”) c. a hint(提示)&#xff1b;a slight knowledg…

nginx概念及使用

一、Nginx 核心概念 Nginx&#xff08;发音为 "engine-x"&#xff09;是一个高性能、开源的 Web 服务器和反向代理服务器&#xff0c;由俄罗斯工程师伊戈尔・赛索耶夫&#xff08;Igor Sysoev&#xff09;于 2004 年开发&#xff0c;最初用于解决当时高并发场景下 Ap…

2025蓝桥杯JAVA编程题练习Day8

1. 路径 题目描述 小蓝学习了最短路径之后特别高兴&#xff0c;他定义了一个特别的图&#xff0c;希望找到图 中的最短路径。 小蓝的图由 2021 个结点组成&#xff0c;依次编号 1 至 2021。 对于两个不同的结点 a, b&#xff0c;如果 a 和 b 的差的绝对值大于 21&#xff0…

【赵渝强老师】Memcached的路由算法

Memcached支持两种不同方式的客户端路由算法&#xff0c;即&#xff1a;求余数Hash算法和一致性Hash算法。下面分别进行介绍。 一、 求余数的路由算法 求余数Hash算法的客户端路由是对插入数据的键进行求余数&#xff0c;根据余数来决定存储到哪个Memcached实例。 视频讲解如…

NLP学习路线图(一): 线性代数(矩阵运算、特征值分解等)

引言&#xff1a;语言与矩阵的奇妙邂逅 在自然语言处理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每个词语都像被施了变形术的精灵&#xff0c;在数学的殿堂中翩翩起舞。当我们用"king - man woman queen"这样的向量魔法破解语义密码时&#xff0c;线性…

BUUCTF PWN刷题笔记(持续更新!!)

ciscn_2019_c_1 64位&#xff0c;没有开启保护。点进去没发现明显的漏洞函数&#xff0c;考虑泄露libc基地址的rop构造。先看看有多少gadget 估计也够用了。puts函数只接受一个参数&#xff0c;观看汇编看看用的哪个寄存器传输的参数。 用的是edi。但是我们怎么找到so的版本呢…

Java EE初阶——线程安全

1. 线程的状态 1. 线程状态分类&#xff08;Thread.State 枚举&#xff09; Java 定义了 6 种线程状态&#xff0c;这些状态均由 java.lang.Thread.State 枚举表示&#xff1a; NEW&#xff08;新建&#xff09; 线程对象已创建&#xff0c;但尚未调用 start() 方法。此时线程…

Vue 3.0中响应式依赖和更新

响应式依赖和更新是Vue 3.0中最重要的机制&#xff0c;其核心代码如下&#xff0c;本文将结合代码对这个设计机制作出一些解释。 // 全局依赖存储&#xff1a;WeakMap<target, Map<key, Set<effect>>> const targetMap new WeakMap();// 当前活动的副作用函…

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…

Linux /etc/rc.d/init.d/

在传统的 SysV init 系统中&#xff0c;服务启动脚本通常位于 /etc/rc.d/init.d/ 目录下。这些脚本可以直接执行以启动、停止或重启服务&#xff0c;并且可以接受参数如 start, stop, status 等。 如果你想知道位于 /etc/rc.d/init.d/ 目录下的某个脚本文件实际上指向哪里,如果…

S7 200 smart连接Profinet转ModbusTCP网关与西门子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信进行两台PLC之间的数据交换&#xff0c;由于改造现场不能改动程序&#xff0c;只留出了对应的IQ地址。于是客户决定使用网关进行通讯把数据传到plc。 1、读取服务器端40001~40005地址中的数据&#xff0c;放入到VW200~VW208中&#xff1…

打破传统仓库管理困局:WMS如何重构出入库全流程

引言 在制造业与零售业高速发展的今天&#xff0c;仓库管理仍普遍面临效率低、错发漏发频发、库存数据滞后等痛点。人工登记导致30%的错单率&#xff0c;货位混乱让拣货耗时增加50%&#xff0c;而账实不符引发的二次采购成本更吞噬着企业利润。如何突破传统管理桎梏&#xff1…