关键在于日志产生后立即不可篡改地同步至可信远程服务器,并通过TLS双向认证、审计专用通道和本地最小化留存构建抗物理破坏防线。

要防止入侵者通过本地物理接触销毁日志证据,关键不是“加密日志文件本身”,而是**让原始日志在产生后极短时间内、不可篡改地同步到可信远程服务器,并确保传输过程无法被监听、伪造或中断**。Rsyslog 本身不加密磁盘日志,但可通过 TLS 加密传输 + 审计专用通道 + 本地最小化留存,构建抗物理破坏的日志防线。
一、强制使用 TLS 双向认证,杜绝中间人与伪造接入
明文 TCP/UDP(如 @@192.168.1.100:514 或 @192.168.1.100:514)等于把日志广播出去。必须启用 TLS 并双向验证:
- 服务端(接收方)安装 rsyslog-gnutls 包(Debian/Ubuntu:apt install rsyslog-gnutls;RHEL/CentOS 7+:dnf install rsyslog-gnutls),运行
rsyslogd -v | grep gnutls确认加载成功 - 用私有 CA 签发服务端证书(
cert.pem)、私钥(key.pem)和根证书(ca.pem),三者属主为syslog,私钥权限严格设为600 - 服务端配置中必须包含:
streamdriver="gtls"、streamdriver.mode="1"(启用 TLS)、streamdriver.authmode="x509/name",并用StreamDriver.PermittedPeer限定仅接受指定 CN 的客户端 - 客户端也需独立证书(不能复用服务端证书),且其 CN 或 SAN 必须匹配服务端白名单,否则连接直接拒绝
二、分离审计源,只传关键日志,减少本地依赖
不转发全部日志,只聚焦高价值审计事件,降低本地日志体积与留存必要性:
- 让 auditd 日志走
local6设施:编辑/etc/audit/auditd.conf,设dispatcher = /sbin/audispd,再启用/etc/audisp/plugins.d/syslog.conf,配置format = syslog、facility = local6 - SSH 登录、sudo、PAM 认证等统一由
authpriv.*承载,无需额外采集 - 客户端 rsyslog 配置只转发这两类:
authpriv.* @@(o)logserver:6514;RSYSLOG_SyslogProtocol23Format和local6.* @@(o)logserver:6514;RSYSLOG_SyslogProtocol23Format - 禁用所有明文协议:注释掉或删除任何
@(UDP)或未带(o)的@@规则
三、服务端强化接收与存储,实现主机级隔离与防篡改
远程服务器不是简单收日志,而要构建可追溯、难抵赖的审计存储体系:
- 监听端口必须是非特权端口(如
6514或10514),禁用514(因 TLS 下 rsyslog 不以 root 运行监听线程) - 用模板按来源 IP 自动分目录:
template(name="ByHostDate" type="string" string="/var/log/audit-remote/%fromhost-ip%/%$year%-%$month%-%$day%/audit.log") - 写入规则绑定模板与设施:
if $syslogfacility-text == 'local6' then ?ByHostDate & stop(& stop防止重复写入默认日志) - 目录权限设为
750,属主root:syslog;日志文件启用chown root:syslog+chmod 640,配合logrotate每日归档并加 SHA256 校验
四、客户端本地策略:最小留存 + 写保护兜底
即使攻击者拿下 root,也要让本地日志难以被静默擦除:
- 缩短本地日志保留周期:在
/etc/logrotate.d/rsyslog中设rotate 3、maxage 3,日志满 3 天自动删除 - 对
/var/log/audit/audit.log启用内核写保护(需 auditd 支持):auditctl -e 2(锁定 audit 规则,阻止运行时修改) - 若硬件支持,将
/var/log挂载为只读或使用chattr +a(仅追加)限制删除与覆盖 - 避免在本地存储加密副本——加密不解决物理删除问题,反而增加管理负担;重点是让远程副本成为唯一权威来源











