生产环境日志需分传输加密与归档签名两层保障:rsyslog+stunnel或syslog-ng实现TLS加密传输,logrotate配合GPG在postrotate阶段对归档日志生成数字签名,确保端到端可信。

生产环境日志的实时加密传输与归档需分两层实现:传输过程加密(防窃听、防篡改),归档阶段完整性保障(防抵赖、防事后篡改)。logrotate 本身不加密也不签名,但可与 rsyslog/syslog-ng + TLS 和 postrotate 签名机制协同工作,形成端到端可信链。
用 rsyslog + stunnel 实现加密传输
适合轻量级、兼容性要求高的环境,不替换原有 syslog 架构:
- 安装 stunnel4 和 rsyslog:
apt install rsyslog stunnel4 - 生成自签名证书(生产建议用私有 CA):
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \<br> -keyout /etc/ssl/private/stunnel.key \<br> -out /etc/ssl/certs/stunnel.crt
- 配置
/etc/stunnel/stunnel.conf:[syslog-encrypted]<br>accept = 0.0.0.0:6514<br>connect = 127.0.0.1:514<br>cert = /etc/ssl/certs/stunnel.crt<br>key = /etc/ssl/private/stunnel.key
- 修改 rsyslog 配置(如
/etc/rsyslog.d/10-encrypted.conf):*.* @@localhost:6514 # 双@表示使用 TCP+TLS - 确保本地 rsyslog 监听 514(仅限 loopback):
module(load="imudp")<br>input(type="imudp" port="514" address="127.0.0.1")
- 重启服务:
systemctl restart stunnel4 rsyslog
用 syslog-ng 启用原生 TLS 接收
更简洁、更可控,适合新建或重构日志架构的系统:
- 安装 syslog-ng:
apt install syslog-ng-core - 在
/etc/syslog-ng/syslog-ng.conf中添加 TLS 源:@version:3.24<br>options { chain_hostnames(off); use_dns(no); create_dirs(yes); };<br>source s_tls {<br> network(ip(0.0.0.0) port(6514)<br> transport("tls")<br> tls( key_file("/etc/ssl/private/syslog-ng.key")<br> cert_file("/etc/ssl/certs/syslog-ng.crt")<br> ca_dir("/etc/ssl/certs") ) );<br>};<br>destination d_local { file("/var/log/remote/$HOST/$YEAR-$MONTH-$DAY.log"); };<br>log { source(s_tls); destination(d_local); }; - 确保目录可写:
mkdir -p /var/log/remote && chown syslog:adm /var/log/remote - 重启:
systemctl restart syslog-ng
归档阶段加数字签名(postrotate 自动化)
传输加密解决“途中安全”,签名解决“归档后不可否认”——二者缺一不可:
- 在 logrotate 配置中(如
/etc/logrotate.d/remote-logs)启用postrotate:/var/log/remote/**/*.log {<br> daily<br> rotate 30<br> compress<br> delaycompress<br> missingok<br> notifempty<br> create 0640 syslog adm<br> sharedscripts<br> postrotate<br> for f in /var/log/remote/*/*.log.1; do<br> [ -f "$f" ] && gpg --quiet --batch --yes --detach-sign --armor "$f"<br> done<br> endscript<br>} - 确保 GPG 密钥已预置且无密码(便于自动化):
gpg --homedir /etc/gpg-log --gen-key(建议专用密钥环) - 签名文件命名自动为
access.log.1.asc,验证时用:gpg --verify /var/log/remote/example.com/2026-04-29.log.1.asc
关键运维保障点
仅配置不够,必须建立闭环验证习惯:
- 每天抽检至少 1 个归档日志及其签名是否有效;
- 将
/var/lib/logrotate/status和所有.asc文件同步备份至只读存储(如 S3 WORM 或 NAS 快照); - 禁止在日志服务器上长期保留未签名的明文归档;轮转+签名完成后,可设定时任务清理
*.log.2以上未签名旧档; - 所有证书和私钥权限严格限制:
chmod 600 /etc/ssl/private/*.key,属主为 root; - 若审计要求更高,可用 OpenSSL 替代 GPG 签名,但需额外管理密钥生命周期和公钥分发路径。


















