温馨提示×

Filebeat如何实现日志数据的加密传输

小樊
62
2025-11-16 05:31:05
栏目: 网络安全

Filebeat加密传输实现指南

一、核心思路与前置条件

  • 使用 TLS/SSL 对 Filebeat 与目标端(如 ElasticsearchLogstash)之间的网络链路进行加密,确保数据在传输过程中不被窃听或篡改。
  • 准备证书体系:可使用自签名 CA 或受信任 CA 签发证书;生产环境建议使用受信任 CA 或企业内建 CA,证书包含必要的 SAN(域名/IP) 以便校验证书与主机身份。
  • 目标端需开启 HTTPS/TLS 监听,并正确配置证书与(可选的)客户端证书校验;Filebeat 侧配置 CA 信任链与客户端证书即可完成加密与(可选)双向认证。

二、生成证书与密钥

  • 推荐流程:先创建 CA,再用 CA 分别签发服务器端证书与客户端(Filebeat)证书,证书中包含目标主机 IP/DNSSAN,避免主机名校验失败。
  • 示例命令(可放在任意安全目录执行,示例路径为 /etc/filebeat/certs):
    # 1) 创建CA
    mkdir -p /etc/filebeat/certs
    openssl genrsa -out /etc/filebeat/certs/ca.key 2048
    openssl req -x509 -new -nodes -key /etc/filebeat/certs/ca.key -sha256 -days 3650 \
      -out /etc/filebeat/certs/ca.crt -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=YourCA"
    
    # 2) 生成Filebeat客户端证书(用于双向TLS)
    openssl genrsa -out /etc/filebeat/certs/filebeat.key 2048
    openssl req -new -key /etc/filebeat/certs/filebeat.key -out /etc/filebeat/certs/filebeat.csr \
      -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=filebeat-client"
    # 注意:将ES地址写入SAN,例如DNS:es.example.com,IP:10.0.0.10
    cat > /etc/filebeat/certs/filebeat.cnf <<EOF
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    [v3_req]
    keyUsage = digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = es.example.com
    IP.1 = 10.0.0.10
    EOF
    openssl x509 -req -in /etc/filebeat/certs/filebeat.csr -CA /etc/filebeat/certs/ca.crt -CAkey /etc/filebeat/certs/ca.key \
      -CAcreateserial -out /etc/filebeat/certs/filebeat.crt -days 365 -sha256 -extfile /etc/filebeat/certs/filebeat.cnf
    
    # 3) 生成Elasticsearch服务器证书(示例)
    openssl genrsa -out /etc/filebeat/certs/es.key 2048
    openssl req -new -key /etc/filebeat/certs/es.key -out /etc/filebeat/certs/es.csr \
      -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=es.example.com"
    cat > /etc/filebeat/certs/es.cnf <<EOF
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    [v3_req]
    keyUsage = digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = es.example.com
    IP.1 = 10.0.0.10
    EOF
    openssl x509 -req -in /etc/filebeat/certs/es.csr -CA /etc/filebeat/certs/ca.crt -CAkey /etc/filebeat/certs/ca.key \
      -CAcreateserial -out /etc/filebeat/certs/es.crt -days 365 -sha256 -extfile /etc/filebeat/certs/es.cnf
    
  • 权限建议:私钥设为 600,仅 Filebeat 运行用户可读。

三、Filebeat配置示例

  • 输出到启用 TLS 的 Elasticsearch(单向 TLS,仅验证服务端证书)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
    
    output.elasticsearch:
      hosts: ["https://es.example.com:9200"]
      ssl.enabled: true
      ssl.verification_mode: certificate
      ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
    
  • 输出到启用 TLS 的 Elasticsearch(双向 TLS,客户端也提供证书)
    output.elasticsearch:
      hosts: ["https://es.example.com:9200"]
      ssl.enabled: true
      ssl.verification_mode: certificate
      ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
      ssl.certificate: "/etc/filebeat/certs/filebeat.crt"
      ssl.key: "/etc/filebeat/certs/filebeat.key"
    
  • 输出到 Logstash(TLS 加密)
    output.logstash:
      hosts: ["logstash.example.com:5044"]
      ssl.enabled: true
      ssl.verification_mode: certificate
      ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
      # 如Logstash开启客户端校验
      # ssl.certificate: "/etc/filebeat/certs/filebeat.crt"
      # ssl.key: "/etc/filebeat/certs/filebeat.key"
    
  • 说明:
    • hosts 改为目标端 HTTPS/TLS 地址(如 :9200:5044)。
    • 单向 TLS 只需配置 ssl.certificate_authorities;双向 TLS 额外配置 ssl.certificatessl.key

四、目标端配置要点

  • Elasticsearch(单节点或集群均需开启):
    • 启用安全功能与传输/HTTP 层 TLS(示例为单节点最简配置,生产请按集群实际调整):
      xpack.security.enabled: true
      xpack.security.http.ssl.enabled: true
      xpack.security.http.ssl.keystore.path: /path/to/elastic-certificates.p12
      xpack.security.http.ssl.truststore.path: /path/to/elastic-certificates.p12
      
      # 节点间传输加密(如启用)
      xpack.security.transport.ssl.enabled: true
      xpack.security.transport.ssl.verification_mode: certificate
      xpack.security.transport.ssl.keystore.path: /path/to/elastic-certificates.p12
      xpack.security.transport.ssl.truststore.path: /path/to/elastic-certificates.p12
      
    • 证书可用 elasticsearch-certutil 生成 PKCS#12 密钥库,或按上文 OpenSSL 流程生成并在 ES 配置中指向相应文件。
  • Logstash:
    • logstash.conf 的 input 使用 beats { port => 5044 ssl => true },并配置证书与(可选)客户端 CA 校验,确保与 Filebeat 的 TLS 参数匹配。

五、验证与运维建议

  • 配置校验与启动
    • 先校验配置:filebeat test config -c /etc/filebeat/filebeat.yml
    • 检查输出连通:filebeat test output -c /etc/filebeat/filebeat.yml
    • 重启服务:systemctl restart filebeat,查看日志:journalctl -u filebeat -f
  • 连通性快速测试
    • 使用 curl 验证 ES HTTPS 端点(证书受信任时):curl -vk https://es.example.com:9200
  • 安全与运维要点
    • 证书与私钥权限设为 600,妥善保管,避免泄露。
    • 生产使用受信任 CA 或企业 CA,证书包含正确的 SAN(IP/DNS)
    • 启用 双向 TLS 可同时校验客户端与服务端身份,提升安全性。
    • 制定证书 轮换吊销 流程(如 CRL/OCSP),并在变更窗口内平滑更新。

0