为何修改rsyslog配置关闭UFW日志后,journalctl仍持续生成[UFW BLOCK]日志?
我来帮你拆解这里的核心问题,先复盘下你的操作和背后的逻辑:
你尝试了这些操作来阻止UFW日志:
- 编辑
/etc/rsyslog.d/20-ufw.conf,取消注释并添加& stop,想让rsyslog停止记录UFW相关日志 - 通过
systemctl edit ufw设置StandardOutput=null,不过你也意识到这可能没用——毕竟UFW的日志不是由ufw服务本身发出的,而是来自内核单元 - 执行了
systemctl daemon-reload、systemctl restart ufw、systemctl restart rsyslog来应用配置
但journalctl里还是不断出现[UFW BLOCK]日志,每隔5-20秒就刷一次,干扰你查看samba相关的关键日志。你提到用grep能过滤,但想搞懂为什么配置没生效,这思路非常对!
关键误区:UFW日志的生成路径和rsyslog的作用范围
你后来的分析其实点中了要害:UFW的日志是直接写入内核日志缓冲区的,而非通过syslog管道传递。
你在rsyslog配置里加的& stop,只是告诉rsyslog:“别把这些UFW日志转发到传统syslog文件(比如ufw.log、syslog)里”——但这完全不影响内核层面生成这些日志记录。而journalctl是直接从内核日志缓冲区或系统日志存储中读取内容的,rsyslog的规则根本管不到journalctl里的这些日志。
简单说:rsyslog只负责“转发/存储日志到文件”,不负责“阻止内核生成日志”。UFW的日志机制是通过内核的netfilter模块直接打日志到内核环缓冲区,所以不管rsyslog怎么配置,这些日志都会出现在journalctl里。
你提到“无法区分kern.log和ufw.log”也源于此:UFW日志本身就是内核日志的一部分,rsyslog只是把它们过滤出来单独存到ufw.log里,内核日志本身依然包含这些内容,所以即使rsyslog不往ufw.log写,kern.log和journalctl里还是会有。
小建议:快速过滤journalctl里的UFW日志
如果想快速在journalctl里查看你关心的samba日志,除了grep,也可以用journalctl自身的过滤参数:
journalctl --grep="UFW BLOCK" --invert-match
或者针对内核日志过滤:
journalctl -u kernel --grep="UFW BLOCK" --invert-match
备注:内容来源于stack exchange,提问作者Jonatan Pipping

