CentOS上保障Filebeat日志安全的实用清单
一 身份与访问控制
- 以最小权限运行Filebeat:创建专用系统用户(如filebeat),禁止以root运行;仅授予其对日志目录与自身配置/密钥的读权限。
- 保护配置文件与密钥:设置严格的文件权限与属主,例如:
- /etc/filebeat/filebeat.yml:600,属主root:filebeat
- /etc/filebeat/certs/:750,私钥(如client.key)600,证书(如ca.crt/client.crt)644
- 启用Elasticsearch安全特性(如X-Pack Security):为Filebeat创建最小权限的专用用户,仅授予写入目标索引与必要监控的权限;在Kibana通过RBAC按索引前缀隔离各业务线访问。
- 网络最小暴露:仅开放必要端口(如到Logstash 5044/TCP 或到Elasticsearch 9200/TCP),并限制来源网段。
二 传输加密与认证
- 到Elasticsearch直连场景:启用TLS/HTTPS,配置CA与客户端证书,开启服务端与客户端证书校验。示例要点:
- output.elasticsearch.hosts 使用 https://
- 配置 ssl.certificate_authorities、ssl.certificate、ssl.key
- 建议设置 ssl.verification_mode: certificate 或更高
- 经Logstash中转场景:在Logstash的Beats输入启用SSL,并配置服务器证书与CA,要求客户端提供证书实现双向认证(mTLS):
- input.beats 中启用 ssl => true
- 设置 ssl_certificate_authorities(信任Filebeat证书)、ssl_certificate/ssl_key(服务器证书与密钥)
- 设置 ssl_verify_mode: force_peer(强制校验客户端证书)
- 证书管理:优先使用受信任CA签发证书;自签名证书需在所有端正确部署信任链;定期轮换证书与密钥。
三 系统与网络安全配置
- 防火墙:仅放行必要端口(示例)
- firewall-cmd --permanent --add-port=5044/tcp(Logstash)
- firewall-cmd --permanent --add-port=9200/tcp(Elasticsearch)
- firewall-cmd --reload
- SELinux:优先采用“最小改动”原则,使用semanage fcontext/restorecon为日志路径与证书目录设置合适类型,而非直接关闭SELinux。
- 网络隔离:将采集侧与存储/可视化侧置于受控网段/VPC,通过安全组或ACL限制来源IP。
四 日志与运行监控
- 启用Filebeat自身日志:在filebeat.yml中配置logging.level: info(或debug用于排障),输出至**/var/log/filebeat/filebeat.log**;设置日志轮转(如logrotate)避免磁盘被占满。
- 运行监控与自检:
- 使用 systemd 监控服务状态:systemctl status/start/enable filebeat
- 定期查看服务日志与连接状态,确认无异常重启与认证失败告警
- 指标与告警:开启xpack.monitoring(或Metricbeat采集Filebeat指标),对连接失败、TLS握手失败、丢事件等设定阈值告警。
五 配置与维护最佳实践
- 配置最小化:仅启用必要的inputs/modules,禁用不需要的模块与处理器,减少攻击面。
- 密钥与凭据治理:私钥文件600且仅属主可读;避免在配置中明文写入凭据,优先使用密钥库/凭据管理或在受控目录部署。
- 持续更新与补丁:及时升级Filebeat与依赖组件,修复已知漏洞。
- 审计与复盘:定期审计filebeat.yml变更、证书有效期、用户权限与访问日志,形成变更记录与回滚预案。
附 关键配置示例
- 直连Elasticsearch(TLS + 认证)
- filebeat.inputs:
- type: log
enabled: true
paths:
- 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/client.crt”
ssl.key: “/etc/filebeat/certs/client.key”
username: “filebeat_writer”
password: “<strong_password>”
- xpack.monitoring.enabled: true
- xpack.monitoring.elasticsearch.hosts: [“https://es.example.com:9200”]
- 经Logstash(TLS + mTLS)
- filebeat.inputs:
- type: log
enabled: true
paths:
- output.logstash:
hosts: [“logstash.example.com:5044”]
ssl.enabled: true
ssl.certificate_authorities: [“/etc/filebeat/certs/logstash-ca.crt”]
ssl.certificate: “/etc/filebeat/certs/filebeat.crt”
ssl.key: “/etc/filebeat/certs/filebeat.key”
- 文件权限示例
- chown -R root:filebeat /etc/filebeat
- chmod 600 /etc/filebeat/filebeat.yml
- chmod 750 /etc/filebeat/certs
- chmod 600 /etc/filebeat/certs/*.key
- chmod 644 /etc/filebeat/certs/*.crt