采用nftables log打标+rsyslog tls转发+worm存储实现日志不可删改可溯源:nftables用唯一prefix精准标记拦截事件;rsyslog仅搬运加密转发至远程tls端口;服务端强制双向证书认证、worm落盘、权限隔离与实时刷盘。

核心思路是:用 nftables log 记录拦截动作 → 通过 rsyslog 捕获并转发 → 远程服务器启用 TLS双向认证 + WORM存储,实现日志不可删、不可改、可溯源。
nftables 日志规则精准打标
nftables 的 log 表达式本身不写磁盘,只向内核日志缓冲区(kmsg)推送带前缀的消息。关键在“打标清晰”,便于后续 rsyslog 过滤和路由:
- 为每类拦截规则加唯一
prefix,例如:log prefix "[DROP-SSH] " level info或log prefix "[BLOCK-WG] " level warning - 配合
ip saddr、ip daddr、tcp dport等条件,确保日志含足够上下文,避免模糊匹配 - 建议统一设
level warning或err,方便 rsyslog 按严重性分流,不混入 info 级常规日志 - 避免高频日志泛滥,可在规则前加
limit rate 5/minute burst 10防刷
本地 rsyslog 提取并加密转发
本机 rsyslog 不存盘,只做“搬运工”:从 /proc/kmsg 或 imklog 模块读取 nftables 日志,经 TLS 加密后发往远程服务器:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 加载内核日志模块:
module(load="imklog" permitnonkernelfacility="on") - 写过滤规则,只抓带指定 prefix 的日志:
:msg, contains, "[DROP-" @@192.168.10.50:6514;RSYSLOG_ForwardFormat - 必须用
@@(TCP)而非@(UDP),并指向远程 rsyslog 的 TLS 端口(如 6514) - 启用队列缓存:
$ActionQueueFileName fwd-nft、$ActionQueueMaxDiskSpace 500m、$ActionQueueSaveOnShutdown on,断网时不丢日志
远程 rsyslog 服务端强隔离防护
接收端是防篡改的关键环节,需三重加固:
- TLS 双向认证:服务端配置 CA 证书、服务证书;每个客户端(Nginx / 防火墙主机)持独立客户端证书,rsyslog 验证 CN 或 SAN 字段,拒绝无证或证书过期连接
-
日志落盘即锁定:使用
omfile模块配合 WORM 存储(如 ZFS append-only dataset、AWS S3 Object Lock、或本地 ext4 + chattr +a) -
路径与权限隔离:按源 IP + 设施名分目录,例如
/var/log/firewall/10.121.6.6/nft_drop_202605.log,属主设为root:adm,权限640,禁止普通用户写入或删除 - 禁用日志覆盖:
$ActionFileEnableSync on+$ActionFileForceSync on,确保每次写入立即刷盘
验证与持续防护机制
部署后必须验证链路完整性和防篡改能力:
- 手动触发一条 nftables drop 规则(如阻断某 IP 访问 22 端口),检查远程服务器对应路径下是否 1 分钟内生成新日志条目
- 用
openssl s_client -connect 192.168.10.50:6514 -cert client.pem -key client.key测试 TLS 握手是否成功 - 尝试用未授权证书或伪造 IP 发送日志,确认服务端
rsyslog日志中出现invalid certificate或rejected connection记录 - 定期运行校验脚本:对已归档日志文件计算 SHA256,签名后上链或存入安全存储,供审计时比对原始哈希










