linux配置rsyslog使用tcp协议安全传输日志的核心是启用tcp通信并强制tls加密:服务端需加载imtcp和gtls模块,配置证书及6514端口监听,客户端通过omfwd+gtls模块连接服务端,确保机密性、完整性与身份认证。

Linux 配置 rsyslog 使用 TCP 协议安全传输日志,核心是启用 TCP 通信 + TLS 加密,避免明文传输带来的泄露风险。单纯用 @@ 发送日志虽走 TCP,但默认不加密;要真正“安全”,必须启用 TLS 模块并配置证书。
服务端:启用 TCP 接收并加载 TLS 模块
在中心日志服务器(如 192.168.1.100)上操作:
- 安装必要模块(多数新版 rsyslog 已内置
imtcp和gtls,确认存在):rsyslogd -v | grep -i tls—— 输出含gtls表示支持 - 准备证书文件(必须):
– 服务器私钥:/etc/rsyslog.d/keys/server-key.pem(权限600)
– 服务器证书:/etc/rsyslog.d/keys/server-cert.pem
– 可选:CA 证书(用于验证客户端):/etc/rsyslog.d/keys/ca.pem - 编辑
/etc/rsyslog.d/50-tls-server.conf,添加以下内容:
# 启用 TCP 和 TLS 模块 module(load="imtcp") module(load="gtls") <h1>配置 TLS 全局参数</h1><p>global( DefaultNetstreamDriver="gtls" DefaultNetstreamDriverCAFile="/etc/rsyslog.d/keys/ca.pem" DefaultNetstreamDriverCertFile="/etc/rsyslog.d/keys/server-cert.pem" DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/keys/server-key.pem" )</p><h1>启动 TLS TCP 监听(推荐换用非 514 端口,如 6514,避免与传统 syslog 冲突)</h1><p>input(type="imtcp" port="6514" ruleset="remote-tls" StreamDriver.Name="gtls" StreamDriver.Mode="1" StreamDriver.AuthMode="x509/name" PermittedPeer="*.example.com")</p>
- 定义接收模板并隔离存储(例如按主机名+日期):
$template TlsRemote,"/var/log/remote-tls/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log"<br> ruleset(name="remote-tls") {<br> action(type="omfile" template="TlsRemote")<br> & ~<br> } - 重启服务:
systemctl restart rsyslog,检查监听:ss -tlnp | grep :6514
客户端:配置 TLS 加密发送
在每台被审计主机上操作:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 确保已部署服务端 CA 证书(用于验证服务器身份):
cp ca.pem /etc/rsyslog.d/keys/,权限设为644 - 编辑
/etc/rsyslog.d/50-tls-client.conf:
# 启用 TLS 模块 module(load="omfwd") module(load="gtls") <h1>全局 TLS 设置</h1><p>global( DefaultNetstreamDriver="gtls" DefaultNetstreamDriverCAFile="/etc/rsyslog.d/keys/ca.pem" )</p><h1>转发规则:使用 TLS 连接服务端</h1><p><em>.</em> action( type="omfwd" protocol="tcp" target="192.168.1.100" port="6514" template="RSYSLOG_SyslogProtocol23Format" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name" )</p>
- 可选增强:限制仅发送特定日志(如只传 authpriv 和 kern):
authpriv.*;kern.* action(...) - 重启客户端 rsyslog:
systemctl restart rsyslog
验证与排错要点
安全传输是否生效,不能只看端口通不通,关键看加密链路是否建立:
- 服务端查日志:
journalctl -u rsyslog | grep -i "tls\|gtls",应有gtls: session established类提示 - 客户端抓包验证(临时):
tcpdump -i any port 6514 -w tls-test.pcap,用 Wireshark 打开 —— 应看不到明文日志,只有 TLS 记录层数据 - 常见失败原因:
– 证书路径错误或权限不对(私钥必须600)
– 主机名不匹配(PermittedPeer或证书 CN/SAN 不符)
– 时间不同步(TLS 依赖系统时间,误差 >5 分钟会拒绝握手)
为什么不用 UDP 或裸 TCP?
UDP 易丢包、无连接,不适合审计场景;裸 TCP(@@host:514)虽可靠但日志明文传输,中间网络节点可直接读取用户登录、命令、错误详情等敏感内容。TLS 是当前 rsyslog 生产环境唯一推荐的安全方案,它保障机密性、完整性与服务端身份认证,满足等保和合规基本要求。










