rsyslog加密传输需用tls替代明文通信,服务端加载gtls模块、配置证书并监听6514端口,客户端配置tls转发及队列防丢,严格校验证书cn、权限与selinux策略,或采用stunnel分层加密替代。

配置 Rsyslog 加密传输,核心是用 TLS 替代明文 TCP/UDP 通信,防止日志在传输中被窃听或篡改。不加密的日志转发(如 @@192.168.1.100:514)本质上是裸奔,尤其当涉及 authpriv、sudo、SSH 登录、审计事件等敏感内容时,必须启用端到端加密。
服务端:监听 TLS 端口并验证身份
日志服务器需加载 gtls 模块,绑定证书,并强制 TLS 模式:
- 安装
rsyslog-gnutls(Ubuntu/Debian:apt install rsyslog-gnutls;RHEL/CentOS:yum install rsyslog-gnutls),运行rsyslogd -v | grep gnutls确认模块可用 - 准备三类文件并设严格权限:
/etc/rsyslog.d/server.crt(服务端证书,644)/etc/rsyslog.d/server.key(私钥,600,属主 syslog)/etc/rsyslog.d/ca.pem(CA 根证书,644) - 新建
/etc/rsyslog.d/50-tls-server.conf,写入:module(load="imtcp")<br>module(load="gtls")<br><br>global(<br> DefaultNetstreamDriver="gtls"<br> DefaultNetstreamDriverCAFile="/etc/rsyslog.d/ca.pem"<br> DefaultNetstreamDriverCertFile="/etc/rsyslog.d/server.crt"<br> DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/server.key"<br>)<br><br>input(type="imtcp" port="6514"<br> StreamDriver.Name="gtls"<br> StreamDriver.Mode="1"<br> StreamDriver.AuthMode="x509/certvalid")
- 防火墙仅放行
6514/tcp(非 514),禁用 UDP 和明文 TCP 监听
客户端:只发关键日志 + 启用 TLS 转发
避免全量转发,聚焦安全类日志(如 local6、authpriv),并确保连接受信:
- 将本地审计日志导向 rsyslog:编辑
/etc/audit/auditd.conf,设log_format = NOLOG和dispatcher = /sbin/audispd;启用/etc/audisp/plugins.d/syslog.conf,设format = syslog、facility = local6 - 在
/etc/rsyslog.d/20-tls-client.conf中配置加密转发:module(load="omfwd")<br>module(load="gtls")<br><br>$DefaultNetstreamDriver gtls<br>$DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.pem<br>$DefaultNetstreamDriverCertFile /etc/rsyslog.d/client.crt<br>$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/client.key<br><br>local6.* @@(o)logs.example.com:6514;RSYSLOG_ForwardFormat
- 添加队列防丢:
$ActionQueueFileName fwdq$ActionQueueMaxDiskSpace 1g$ActionQueueSaveOnShutdown on
证书与加固细节不能跳过
证书不是摆设,错误配置会导致连接失败或失去防护意义:
- CN 必须匹配服务端实际访问域名或 IP(如
CN=logs.example.com),否则客户端拒绝连接 - 所有证书文件统一用 PEM 格式;私钥绝对不可 world-readable;CA 文件需与服务端一致
- SELinux 启用时,执行:
setsebool -P rsyslog_can_network_connect on(RHEL/CentOS) - 验证连通性:
openssl s_client -connect logs.example.com:6514 -quiet,看到Verify return code: 0 (ok)才算就绪
替代方案:Stunnel 分层加密(兼容性更强)
若 rsyslog-gnutls 不稳定或版本老旧,可用 Stunnel 做 TLS 终结:
- 服务端部署 Stunnel 监听
4514,解密后转发至本地127.0.0.1:6514(rsyslog 明文监听) - 客户端只需向
@@logs.example.com:4514发送日志,无需任何证书配置 - Rsyslog 完全不用加载 gnutls,逻辑更清晰,适合混合环境或旧系统











