广告

Ubuntu 上的 Filebeat 如何实现日志传输加密:TLS 配置与证书部署全流程

1. 1. 准备阶段:在 Ubuntu 上建立 TLS 加密的证书体系

1.1 TLS 加密的原理与好处

在 Ubuntu 上的 Filebeat 实现日志传输加密的核心在于使用 TLS,通过对 传输通道进行加密和身份认证,防止日志在传输过程中被窃取或篡改。TLS 能提供端到端的加密,确保 Filebeat 与目标输出(如 Elasticsearch/Logstash)之间的通信可靠且具备完整性校验。本文的全流程将围绕 TLS 配置与证书部署展开,帮助你在 Ubuntu 环境中实现高安全等级的日志传输。

为实现该目标,必须建立一个可信的证书体系并在客户端 Filebeat 与服务端输出组件之间建立双向认证(可选的互信 mTLS),从而确保双方身份的真实性。证书与密钥的正确放置、权限控制和正确的配置项,是保障 TLS 成功建立的关键。下面我们先构建证书体系,再逐步将证书应用到 Filebeat 配置与服务端輸出端。

1.2 自签证书颁发机构(CA)及服务端、客户端证书的生成

在本小节中,我们通过 OpenSSL 构建一个私有的 CA,以及为服务端与客户端生成证书。生成的证书仅用于内部测试或私有环境,正式生产环境建议使用受信任的证书颁发机构。以下步骤包括 CA、服务端证书与客户端证书的完整流程。请确保在受控环境中执行并妥善保存私钥。

# 1) 生成根 CA
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=Filebeat-CA/O=Example/OU=IT"# 2) 生成服务端(Logstash/Elasticsearch)证书及密钥
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=logstash.example.com"# 为服务端证书添加扩展(如 SAN、服务端用途)
cat > server_ext.cnf < client_ext.cnf <

关键要点CA 证书 ca.crt 用于签署服务端证书 server.crt 与客户端证书 client.crt;私钥 文件权限要严格,避免非授权读取;证书的 subjectAltName 或 CN 必须匹配实际域名或 IP,以避免 TLS 验证失败。

2. 2. 证书部署到 Filebeat 与权限设置

2.1 证书目录与权限设定

将 CA 证书、客户端证书和私钥放置在 Filebeat 能访问到的目录,并为文件设置合适的权限,确保 Filebeat 和运行用户(如 filebeat)可以读取,但其他用户不可读取私钥。下面给出一个常见的目录结构与权限分配示例。重要:私钥权限应限制为 600,证书和 CA 证书权限可设为 644。

sudo mkdir -p /etc/filebeat/certs
sudo cp ca.crt server.crt client.crt /etc/filebeat/certs/
sudo cp server.key client.key /etc/filebeat/certs/# 设置权限
sudo chmod 644 /etc/filebeat/certs/ca.crt /etc/filebeat/certs/server.crt /etc/filebeat/certs/client.crt
sudo chmod 600 /etc/filebeat/certs/server.key /etc/filebeat/certs/client.key
sudo chown root:root /etc/filebeat/certs/*.crt /etc/filebeat/certs/*.key

如果你采用 mutual TLS(双向认证),请确认服务器端也配置了对客户端证书的校验,且 Filebeat 使用 client.key 与 client.crt 进行身份认证。以下段落将给出 Filebeat 的 TLS 配置及服务端的对应设置示例。

2.2 Filebeat YAML TLS 配置模板

在 Filebeat 的配置文件 filebeat.yml 中,开启 TLS,并指定证书、私钥和 CA 证书的位置。以下示例展示了与 Elasticsearch 以及与 Logstash 两种输出的 TLS 配置方式。核心点在于将证书路径、密钥路径和 CA 路径正确指向 /etc/filebeat/certs/ 下的文件,并启用证书校验。

Ubuntu 上的 Filebeat 如何实现日志传输加密:TLS 配置与证书部署全流程

# 1) 输出到 Elasticsearch 的 TLS 配置
output.elasticsearch:hosts: ["https://elasticsearch.example.com:9200"]username: "elastic"password: "你的密码"ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]ssl.certificate: "/etc/filebeat/certs/filebeat.crt"  # 如果你使用的是 Filebeat 客户端证书ssl.key: "/etc/filebeat/certs/filebeat.key"          # 如果使用客户端证书ssl.verification_mode: "full"# 2) 输出到 Logstash 的 TLS 配置(Beats Input 需要启用 TLS)
# 修改为实际 Beasts Input 的地址和端口
# 如你在 Logstash 配置了 Beats input:
output.logstash:hosts: ["logstash.example.com:5044"]ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]ssl.certificate: "/etc/filebeat/certs/filebeat.crt"ssl.key: "/etc/filebeat/certs/filebeat.key"ssl.verification_mode: "certificate"

注意点:如果你使用的是非对称架构(无客户端证书,只有服务端证书的自签或受信 CA 证书),可以只配置 ssl.certificate_authorities,而不配置 ssl.certificate 与 ssl.key。若开启 mutual TLS,则两端都需要证书及私钥。

3. 3. 服务端 TLS 配置:Elasticsearch/Logstash 端的 TLS 设置

3.1 Elasticsearch 的 HTTP TLS 配置要点

在 Elasticsearch 端,为了支持 Filebeat 通过 HTTPS 进行数据传输,需开启 HTTP TLS 并提供服务器证书与私钥,以及 CA 证书供客户端校验。以下要点应在 Elasticsearch 的配置文件(通常是 /etc/elasticsearch/elasticsearch.yml)中确认:xpack.security.http.ssl.enabledxpack.security.http.ssl.certificatexpack.security.http.ssl.key、以及 xpack.security.http.ssl.certificate_authorities。这些设置可以让 Filebeat 通过 HTTPS 将日志传输到 Elasticsearch,同时对证书实现互信。示例要点如下:

# Elasticsearch HTTP TLS 配置要点(示例)
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/server.crt
xpack.security.http.ssl.key: /etc/elasticsearch/certs/server.key
xpack.security.http.ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]

要点解释证书所在路径需要与你在 Filebeat 中配置的 ssl.certificate 和 ssl.certificate_authorities 相匹配;verification_mode 设置为 certificate(仅验证证书)或 full(完整校验包括主机名)。时间同步与证书有效期是常见的生产性问题,需要确保 NTP 已启用。

3.2 Logstash Beats input 的 TLS 配置要点

如果你选择使用 Logstash 作为日志聚合入口,Beats input 需要开启 TLS,并配置服务器证书、私钥以及 CA 证书,以实现 Filebeat 与 Logstash 之间的加密传输与认证。下面给出典型的 Logstash 配置要点:

input {beats {port => 5044ssl => truessl_certificate => "/etc/logstash/certs/server.crt"ssl_key => "/etc/logstash/certs/server.key"ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"]}
}

要点提示:确保 Logstash 的证书路径密钥路径 与 Filebeat 端一致;如果使用双向认证,需要 Filebeat 同样提供 client.crt 与 client.key,并在 Logstash 中校验 client 证书。

4. 4. 全流程验证与排错

4.1 连接测试与持续监控

完成上述证书部署与 TLS 配置后,进行连接测试是关键步骤。可以通过 Filebeat 自带的测试命令验证与输出目标的连通性。Filebeat test output 可以快速检测 TLS 连接是否能够建立并认证证书有效性。若测试通过,后续需要监控日志通道的传输情况,以确保日志稳定性。

# 测试 Filebeat 与输出端的连接
sudo filebeat test output

此外,针对 Elasticsearch/Logstash 端,可以使用简单的查询或健康检查来验证 TLS 通道是否可用。以下示例展示了对 Elasticsearch 的简单健康检查,要求使用 TLS 端口和正确的凭据:curl 命令需带上 TLS 证书参数。

# 使用证书进行 TLS 连接测试
curl -u elastic:你的密码 --cacert /etc/filebeat/certs/ca.crt \https://elasticsearch.example.com:9200/_cat/indices?v

常见排错要点证书链不完整CN 与域名不匹配私钥权限不足、时间偏差导致证书无效、以及输出端口未开放等问题都是 TLS 传输中常见原因。请逐项排查并确保环境的一致性。

本全流程以 Ubuntu 为基础,围绕 Filebeat 的日志传输加密实现,覆盖了从证书体系搭建、文件部署、到输出端 TLS 设置、以及最终的验证与排错步骤。通过遵循上述步骤,可以在 Ubuntu 环境中实现稳定且安全的日志传输,加密传输内容、并确保日志数据在传输过程中的完整性与机密性。上述内容紧密围绕标题中的核心主题,即“Ubuntu 上的 Filebeat 如何实现日志传输加密:TLS 配置与证书部署全流程”。