环境与前提
系统版本与软件包依赖
在 Debian 下实现 TLS 加密的 Syslog 传输,首先需要确认系统版本以及软件可用性。Debian 稳定版通常兼容 rsyslog 的 TLS 功能,且常用的 TLS 模块为 rsyslog-gnutls(或 rsyslog-gnutls2)。
另外,ca-certificates 包要安装,以便客户端和服务端都能验证对等端证书,网络防火墙也需放行 TLS 端口。
sudo apt-get update
sudo apt-get install -y rsyslog rsyslog-gnutls ca-certificates
安装后的启动与基本检查
安装完成后,确认 rsyslog 服务已启用并能稳定启动,这是后续 TLS 配置的基础。
利用 systemctl 查看状态,并尝试在本地写入一个测试日志以验证基础功能。
sudo systemctl enable rsyslog
sudo systemctl start rsyslog
sudo systemctl status rsyslog
logger "TLS 测试:本机日志"
证书与密钥管理
证书来源与信任链
TLS 加密的 Syslog 传输需要信任链,最常见做法是自建 CA,并签发服务器端与客户端证书。使用自签 CA 时,需把 CA 证书分发给对端以建立信任,也可以使用受信任的公认 CA。
证书应采用 PEM 格式,包含公钥、私钥、以及在服务器端常用的证书链。保护私钥文件权限,避免未授权访问。
# OpenSSL 自建 CA 示例片段
# 生成 CA 私钥
openssl genrsa -out ca.key 4096
# 生成自签名 CA 证书
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.pem -subj "/CN=Syslog TLS CA"
生成与存放位置
服务器端证书与私钥通常放在 /etc/ssl/private,证书公钥放在 /etc/ssl/certs,客户端同样需要 CA 文件用于验证。
为了安全,私钥的权限应设为 600 或 640,仅限 rsyslog 运行用户可访问,证书与 CA 文件可设 640/644,确保系统可读但不被未授权人访问。

# 将证书放置示例
sudo mkdir -p /etc/ssl/private
sudo cp server.key /etc/ssl/private/server.key
sudo cp server.pem /etc/ssl/certs/server.pem
sudo cp ca.pem /etc/ssl/certs/ca.pem# 设置权限
sudo chmod 600 /etc/ssl/private/server.key
sudo chown root:root /etc/ssl/private/server.key
sudo chmod 644 /etc/ssl/certs/server.pem
sudo chmod 644 /etc/ssl/certs/ca.pem
服务端 TLS 配置
配置要点与实现路径
在服务端需要对 rsyslog 进行 TLS 输入的配置,确保 IMTCP 输入端口(如 6514)启用 TLS,并把 CA、服务端证书与私钥写入 rsyslog 的全局 TLS 设置。
同时需要处理防火墙、时钟同步(NTP),以及证书的轮换策略。时钟偏差会导致证书验证失效,因此请确保服务器与对端的系统时间准确。
# /etc/rsyslog.d/60-tls-server.conf
module(load="imtcp")
input(type="imtcp" port="6514" StreamDriver.Name="gtls" StreamDriver.Mode="1" StreamDriver.AuthMode="anon")# TLS 参数
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca.pem
$DefaultNetstreamDriverCertFile /etc/ssl/certs/server.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/private/server.key# 允许来自对端的 TLS 连接
$InputTCPServerRun 6514
实际运行与日志验证
重启 rsyslog 服务以应用 TLS 输入的变更,并在系统日志中确认 TLS 连接已建立。如果 TLS 握手失败,应检查证书链、私钥权限和端口监听情况。
sudo systemctl restart rsyslog
sudo netstat -tulpen | grep 6514
sudo tail -f /var/log/syslog | grep rsyslog
客户端 TLS 配置
客户端证书与身份认证
发送端使用证书进行双向认证时,需要在客户端准备 CA、客户端证书及私钥,并在 rsyslog 客户端配置中指定流驱动参数。正确的认证模式是 x509/name 或 x509/subject,以确保服务器仅接受特定对端的连接。
请确保客户端证书的 CN 与服务端指定的 受信任对端匹配,防止中间人攻击。并且将 CA 文件分发到发送端,以验证服务端证书。
# 客户端证书与私钥放在客户端
sudo mkdir -p /etc/ssl/private
# 将 ca.pem、client.pem、client.key 拷贝至客户端并设权限
sudo cp ca.pem /etc/ssl/certs/ca.pem
sudo cp client.pem /etc/ssl/private/client.pem
sudo cp client.key /etc/ssl/private/client.key
sudo chmod 640 /etc/ssl/private/client.key
omfwd 配置示例(日志发送端)
在客户端新增一个转发规则,使用 gtls 作为传输,开启双向认证并指定对端的名称。
# /etc/rsyslog.d/60-tls-client.conf
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-certificates.crt
$DefaultNetstreamDriverCertFile /etc/ssl/private/client.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/private/client.key
$ActionSendStreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer logserver.example.org*.* action(type="omfwd" Target="logserver.example.org" Port="6514" Protocol="tcp" StreamDriver.Name="gtls")
安全性、维护与故障排除
证书有效期与轮换策略
为避免服务中断,应设定证书有效期,并在到期前完成轮换。自动化轮换流程能降低运维风险,包括定时检查证书到期和更新证书缓存。
将 CA、服务器证书、客户端证书统一管理,保持对等端证书的 一致性与信任链完整性。
# 检查证书有效期(示例:server.pem 与 ca.pem 的到期日)
openssl x509 -enddate -noout -in /etc/ssl/certs/server.pem
openssl x509 -enddate -noout -in /etc/ssl/certs/ca.pem
常见问题排查
若 TLS 握手失败,请先确认 服务器端与客户端的证书链完整性,以及私钥权限是否正确设置。检查 rsyslog 日志中的 TLS 相关条目以定位问题。
# 查看 rsyslog 的调试输出
sudo rsyslogd -d
# 仅显示与 TLS 相关的日志(示例)
sudo journalctl -u rsyslog -b | grep -i tls


