Rsyslog 环境下的日志加固和加密传输方案

作者:袖梨 2026-07-14
Rsyslog日志加固与加密传输需从源头、传输、存储、留存四环节系统设防:精准归集authpriv.*、auditd(转local6)、用户命令三类关键日志;强制x509/name双向TLS认证,服务端限定PermittedPeer,客户端用@@(o)语法;服务端按IP隔离存储并chattr+ a/+i防护;配套防火墙白名单、磁盘队列、SHA256校验及rsyslog重载验证。

Rsyslog 环境下的日志加固与加密传输,不是加个 TLS 就算完成,而是要从日志源头、传输通道、接收存储到长期留存四个环节系统性设防。核心目标是:防窃听、防篡改、防伪造、防丢失。

精准归集关键日志源

不建议全量转发,既增加带宽负担,又稀释审计价值。应聚焦三类高敏感日志:

  • authpriv.*:SSH 登录、sudo 执行、PAM 认证失败等,路径为 /var/log/secure(RHEL)或 /var/log/auth.log(Debian)
  • auditd 原始日志:通过 imfile 模块实时读取 /var/log/audit/audit.log,避免轮转间隙丢失;更优做法是配置 audispd 插件,将内核审计事件直接打到 local6 设施
  • 用户命令审计(可选):在 /etc/profile 中添加 trap DEBUG + logger -p local6.notice,捕获交互式 bash 命令,统一归口至 local6,便于后续规则过滤

启用双向 TLS 加密传输

单向验证(只验服务端)存在中间人风险,金融级或等保场景必须启用 x509/name 双向认证:

  • 服务端:加载 gtls 模块,配置 StreamDriver.AuthMode="x509/name",并用 StreamDriver.PermittedPeer 明确限定客户端证书 CN(如 web-prod-01.finance.example.com),拒绝未匹配证书连接
  • 客户端:使用 @@(o) 语法(如 local6.* @@(o)logs.example.com:6514),加载 omfwd 和 gtls 模块,指定 client.crt、client.key 和 CA 根证书路径
  • 证书要求:所有证书 CN 必须与主机 FQDN 严格一致,SAN 字段需包含 DNS 名及必要 IP;私钥权限必须为 600,属主为 syslog;安装 rsyslog-gnutls 包后,用 rsyslogd -v | grep gnutls 验证模块可用

服务端隔离存储与写保护

接收端不能把所有日志混存一锅,否则无法溯源、易被批量覆盖:

  • 按来源 IP 或主机名创建独立目录,例如 /var/log/audit-remote/web-prod-01/,权限设为 750,属主 syslog:adm
  • 使用 template 定义动态路径:template(name="AuditByIP" type="string" string="/var/log/audit-remote/%fromhost-ip%/audit.log"),配合 if 判断仅落盘 authpriv 和 local6 日志
  • 对已落盘日志启用文件系统级防护:chattr +a 追加只读(允许写入但禁止覆盖/删除),关键归档日志可 chattr +i(需 root 解锁才可修改)
  • 挂载日志分区时启用 noexec,nosuid,nodev,并配置 logrotate 自动压缩归档,postrotate 触发 rsyslog 重载句柄

配套加固与可观测性

加密和隔离只是基础,还需配套机制保障持续有效:

  • 防火墙仅放行白名单源 IP 对 6514/tcp 的访问,禁用 UDP/514 和明文 TCP/514
  • 客户端启用磁盘队列($ActionQueueType LinkedList、$ActionQueueMaxDiskSpace 1g、$ActionResumeRetryCount -1),断网时不丢日志
  • 定期用 sha256sum 校验归档日志完整性,结合 aide 工具监控 /var/log/audit-remote 目录元数据变更
  • 所有配置变更后执行 sudo systemctl restart rsyslog,并用 journalctl -u rsyslog -n 50 查看启动日志,确认无 permission denied 或 driver not found 报错

相关文章

精彩推荐