Linux查看防火墙拦截记录的核心是定位内核Netfilter生成的DROP/REJECT日志,它们通过kmsg通道落盘至/var/log/messages(RHEL)或/var/log/kern.log(Debian),或由journalctl -k实时捕获;前提是firewalld需启用--set-log-denied=all,iptables需在DROP前插入LOG规则。

Linux 查看防火墙拦截记录的内核安全日志,核心是定位被 DROP 或 REJECT 的包所触发的内核日志条目——它们不来自应用层服务(如 sshd),而是由 Netfilter 在内核网络栈中生成,统一走 kmsg 通道,最终落盘到系统日志文件或 journald 缓冲区。
确认日志来源与路径
防火墙拦截动作(iptables/firewalld/nftables)本身不写独立日志文件,而是通过内核 printk() 输出到 kernel ring buffer,再由 rsyslog 或 journald 捕获。具体落点取决于发行版和日志配置:
- RHEL/CentOS/Fedora:默认写入
/var/log/messages - Debian/Ubuntu:默认写入
/var/log/kern.log(部分版本也进/var/log/syslog) - 启用 systemd 的所有现代发行版:可通过
journalctl -k直接读取内核日志流,无需依赖文件落盘
实时查看拦截日志(推荐)
用 journalctl 过滤内核日志中最常见的拦截标识,响应快、无延迟、支持结构化字段:
- 监控所有被拒绝连接:
sudo journalctl -k -f | grep -i "drop\|reject\|_DROP\|_REJECT" - 只看 firewalld 生成的日志:
sudo journalctl -u firewalld -f | grep -E "(DROP|REJECT)" - 聚焦 iptables LOG 规则前缀(如你设了
--log-prefix "BLOCK-SSH: "):sudo journalctl -k -f | grep "BLOCK-SSH"
查历史拦截记录(文件方式)
若需分析过去一段时间的拦截行为,直接读取对应日志文件并过滤关键字段:
- CentOS/RHEL:
sudo grep -i "DROP\|REJECT" /var/log/messages | tail -50 - Ubuntu/Debian:
sudo grep -i "DROP\|REJECT" /var/log/kern.log | tail -50 - 提取源 IP 和目标端口(便于溯源):
sudo awk '/DROP/ && /SRC=/ {print $10, $12}' /var/log/messages | head -20
确保日志能被记录的前提
如果查不到拦截日志,大概率是未启用日志开关:
-
firewalld:运行
sudo firewall-cmd --permanent --set-log-denied=all && sudo firewall-cmd --reload,再验证firewall-cmd --get-log-denied返回all -
iptables:必须在
DROP/REJECT规则前插入LOG规则,例如:sudo iptables -I INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-DENY: " -
nftables:类似,需显式添加
log prefix "NFT-DROP: "后接drop
不复杂但容易忽略:日志存在与否,取决于是否主动开启记录开关,而不是防火墙本身是否在运行。


















