ufw日志分析需三步法:过滤可疑连接(如高频reject、异常端口/源ip)、还原上下文(时间关联、服务验证、登录日志比对)、自动化闭环响应(脚本分析+一键封禁+规则优化)。

UFW(Uncomplicated Firewall)日志是排查网络异常连接的重要线索,但原始日志(如 /var/log/ufw.log)时间戳混乱、条目冗长、协议和端口信息分散,人工筛查效率低且易遗漏关键行为。要快速定位异常,需结合过滤、聚合与上下文还原三步法。
精准提取可疑连接事件
异常连接常表现为高频拒绝(REJECT)、非预期端口访问、或来自非常用IP的ACCEPT。建议优先用以下命令聚焦关键字段:
-
按目标端口筛选:如发现大量对 22、3306、6379 的拒绝记录,可能遭遇暴力扫描——
grep "DPT=22" /var/log/ufw.log | grep "REJECT" | tail -50 -
按源IP聚合频次:统计单IP请求次数,识别扫描行为——
awk '/REJECT/ {print $NF}' /var/log/ufw.log | cut -d',' -f2 | sort | uniq -c | sort -nr | head -10($NF取最后一列,cut 提取 SRC= 后IP) -
标记 ACCEPT 中的异常组合:例如非办公网段访问数据库端口——
awk '/ACCEPT.*DPT=3306/ && !/SRC=192\.168\.10\./' /var/log/ufw.log
还原连接上下文,区分误报与真实威胁
单条日志无法判断是否恶意,需关联时间窗口、协议特征及服务状态:
-
检查前后5秒内同IP行为:使用
sed -n '/2024-06-15T14:22:30/,+5p' /var/log/ufw.log | grep "SRC=1.2.3.4"查看是否连续尝试多端口 -
验证目标端口是否真有服务监听:运行
ss -tuln | grep ':22'确认SSH是否启用;若日志显示 DPT=8080 但无进程监听,可能是探测而非攻击 -
比对系统登录日志:对疑似SSH爆破的IP,执行
lastb | grep "1.2.3.4"查失败登录记录,双重印证
自动化辅助:轻量脚本快速生成分析报告
避免每次手动敲命令,可用 Bash 脚本整合核心逻辑,输出可读摘要:
- 保存为
ufw-analyze.sh,赋予执行权限后运行:sudo ./ufw-analyze.sh --top-ips 5 --scan-port 22,443,3306 - 脚本自动完成:提取最近24小时日志 → 按端口分组统计拒绝数 → 输出TOP 5高频源IP及对应端口分布 → 标记跨端口扫描(如1小时内访问≥3个不同端口)
- 关键输出示例:
[SCAN ALERT] 203.0.113.55 accessed DPT=22,443,3306 in 47s — likely port scan
联动UFW规则实现闭环响应
分析结果需立即转化为防护动作,避免重复分析:
-
一键封禁高危IP:脚本中加入
ufw deny from ${IP},并记录到/etc/ufw/blocked-by-analysis备查 -
限制敏感端口访问范围:如仅允许运维网段连SSH——
ufw delete allow 22 && ufw allow from 192.168.10.0/24 to any port 22 -
开启日志详细模式(可选):在
/etc/ufw/before.rules中添加-j LOG --log-prefix "UFW-DETAILED: ",捕获TCP标志位(SYN/FIN/RST),便于识别隐蔽连接










