rsyslog远程日志同步必须启用TLS双向认证并配合IP白名单、证书校验、本地存储加固及内核审计等措施才能实现安全审计。

rsyslog 远程日志同步本身不提供加密和强认证,直接裸传存在明文泄露、中间人篡改或伪造日志的风险。要真正实现安全的远程审计存储,必须叠加传输层加密(如 TLS)与服务端准入控制,并配合本地日志保护策略。
启用 TLS 加密传输(服务端+客户端双向验证)
仅用 UDP/TCP 明文转发等同于公开广播日志。生产环境必须启用 TLS,并推荐启用双向证书验证,防止未授权设备冒充客户端上报日志。
- 服务端(接收端)生成 CA 证书、服务器证书及私钥;客户端(发送端)各自签发独立客户端证书
- rsyslog 配置中加载 imtcp 模块并启用 TLS:设置 StreamDriver.Name="gtls"、StreamDriver.Mode="1"(认证模式),指定 CA 证书路径与服务端证书/私钥
- 客户端配置 omfwd 或 omrelp,启用 TLS 并加载客户端证书与私钥,同时校验服务端证书指纹或 CA 签名
- 禁用旧版 SSLv3 及弱密码套件(如在 gnutlsPriority 中明确排除 SECURE256:-VERS-SSL3.0:-ARCFOUR-128)
限制日志接入来源与协议行为
即使启用 TLS,若不限制接入主体和行为,仍可能被滥用或耗尽资源。
- 使用 $InputTCPServerStreamDriverAuthMode "x509/certvalid" 强制证书有效性检查,拒绝无证书或过期证书连接
- 通过 $AllowedSender(旧版)或 ruleset + if $fromhost-ip == ... then ...(新版 RainerScript)白名单限定可信 IP 段
- 为不同业务系统分配独立 TLS 证书 + 独立 ruleset,按证书 CN 或 subjectAltName 做路由,便于隔离与审计溯源
- 配置 $MaxSessions 和 $MaxOpenFiles 防止连接数泛滥导致服务僵死
加固本地日志存储与保留策略
远程同步只是传输环节,服务端本地存储同样关键——若磁盘被删、权限失控或日志轮转失效,审计链就断裂了。
- 将日志写入专用分区(如 /var/log/remote),挂载时启用 noexec,nosuid,nodev,并设为只允许 syslog 组写入
- 启用 logrotate 并配置 create 640 syslog:adm、sharedscripts 与 postrotate ... systemctl kill --signal=USR1 rsyslog ... 确保轮转后 rsyslog 重载文件句柄
- 对归档日志启用 chattr +a(追加只读)或更严格的 +i(需 root 解锁),防止非授权覆盖或删除
- 定期用 aide 或 tripwire 校验日志目录完整性,监控 /var/log/remote 下文件哈希与元数据变更
补充审计增强手段(非 rsyslog 原生但强推荐)
rsyslog 专注日志转发,深度行为审计需结合其他机制形成纵深。
- 开启内核审计子系统(auditd),记录 execve、setuid、capability 使用等敏感调用,输出经 rsyslog 转发至远程 TLS 端点
- 对关键账户(如 root、admin)启用 PAM module pam_tty_audit.so,记录其完整终端会话(需 rsyslog 支持 imjournal 或 imuxsock 采集 journal 日志)
- 部署 syslog-ng 或 fluentd 作为前置网关,做字段解析、脱敏(如过滤密码字段)、速率限流与异常 IP 封禁,再转给 rsyslog 服务端
- 所有日志时间戳强制同步 NTP(建议 chrony + makestep),并在 rsyslog 中启用 $ActionFileDefaultTemplate RSYSLOG_FileFormat 确保 ISO8601 时间格式统一










