UFW日志分析,统计防火墙拦截访问来源:UFW日志分析
UFW 是 Ubuntu、Debian 上常用的防火墙管理工具,默认把拦截记录写入系统日志。
想统计防火墙拦截访问来源,核心就是找到 UFW 日志文件,用 grep 和 awk 按 IP、端口分组计数。
本文从开启日志到统计出高频来源 IP,一步步给出可复制的命令,适合刚接触 Linux 服务器的用户。
先确认日志有没有开,以及落在哪个文件
UFW 默认可能没记录日志,先检查状态:
sudo ufw status verbose
输出里如果看到 Logging: on,说明日志已开启;
如果显示 Logging: off,执行:
sudo ufw logging on
日志默认写入 /var/log/ufw.log。
部分系统会同时写入 /var/log/syslog 或 /var/log/kern.log。
确认文件存在:
ls -l /var/log/ufw.log
如果提示文件不存在,可以先触发一次拦截(例如从外部访问一个未开放端口),再看文件是否生成。
UFW 日志的典型格式如下,关键字段是 [UFW BLOCK] 和 SRC=:
Feb 20 10:12:01 server kernel: [UFW BLOCK] IN=eth0 OUT= SRC=203.0.113.10 DST=198.51.100.2 ... DPT=22
判断条件:只要日志行里包含 [UFW BLOCK],就表示这条访问被防火墙拦截了。
统计拦截来源 IP 和端口
先看被拦截次数最多的来源 IP,这是最常用的统计:
sudo grep 'UFW BLOCK' /var/log/ufw.log | grep -oP 'SRC=\K[0-9.]+' | sort | uniq -c | sort -rn | head -20
命令拆解:
grep 'UFW BLOCK':只取被拦截的行;grep -oP 'SRC=\K[0-9.]+':提取SRC=后面的 IP;sort | uniq -c:相同 IP 合并计数;sort -rn:按次数从高到低排序;head -20:只看前 20 个。
如果只想统计被攻击的目标端口,把提取字段换成 DPT:
sudo grep 'UFW BLOCK' /var/log/ufw.log | grep -oP 'DPT=\K[0-9]+' | sort | uniq -c | sort -rn | head -20
结果解读:某个 IP 在短时间内出现几十上百次,通常说明它在扫描或暴力尝试,可以根据实际情况决定是否封禁。
日志太大怎么办:按时间窗口和切割查看
ufw.log 会持续增长,直接全量 grep 可能很慢。
先看某个时间段的记录,例如只统计今天:
today=$(date '+%b %e')
sudo grep "^$today" /var/log/ufw.log | grep 'UFW BLOCK' | grep -oP 'SRC=\K[0-9.]+' | sort | uniq -c | sort -rn | head
长期运行建议配置 logrotate,让日志按天或按大小切割。
可以在 /etc/logrotate.d/ufw 中写入类似内容(具体保留天数按需调整):
/var/log/ufw.log {
weekly
rotate 4
compress
missingok
notifempty
}
保存后可用 sudo logrotate -d /etc/logrotate.d/ufw 做一次调试演练,确认没有语法错误。
注意:日志切割后,历史记录会变成 ufw.log.1.gz 等压缩文件,统计旧数据时需要先 zcat 再 grep。
避免误判和误封
统计出高频 IP 后,不要急着全部拉黑,先确认它是不是正常业务来源。
- 如果你自己或监控系统在频繁探测某个端口,也会出现在拦截记录里,误封可能影响运维;
- 云厂商的健康检查、CDN 回源 IP 属于正常流量,最好先查清归属再判断;
- 封禁前可以用
whois或在线 IP 归属查询做一次核对,避免封掉合作方地址。
临时封禁某个 IP 可以执行:
sudo ufw deny from 203.0.113.10
删除规则用:
sudo ufw status numbered
sudo ufw delete <规则编号>
避坑提醒:UFW 规则过多时,ufw status 会变慢,建议定期清理无用规则,而不是无限叠加 deny 条目。
日常检查清单
把下面几条固化成巡检习惯,能更快发现问题:
- 每天看一次拦截次数前 10 的来源 IP;
- 关注被拦截的目标端口,SSH、数据库端口被高频扫描要重点留意;
- 确认日志切割正常,避免磁盘被日志占满;
- 封禁规则变更后,用
sudo ufw status verbose复核实际生效状态。
只要掌握 UFW BLOCK 加 SRC= 这两个关键点,再配合 grep、sort、uniq -c,就能快速完成 UFW 日志分析和防火墙拦截访问来源统计。
建议先在一台测试机上跑通命令,再放到生产环境做巡检。