别只会tail:用awk五分钟从访问日志揪出异常IP

来源:互联网 时间:2026-08-27

服务器被打了、被采集了、被扫描了,证据全在access.log里躺着。多数人的操作是tail -f盯屏幕,看完一千行记住的没几条。日志分析的正确姿势是聚合统计,awk就是干这个的,装都不用装。

第一件事,统计访问量最高的前二十个IP,看有没有异常大户。

# 取访问量Top20的IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

# 换成按小时统计请求量,看攻击发生在几点
awk '{print substr($4,2,14)}' access.log | sort | uniq -c

第二件事,看这些大户都在请求什么。URL里出现..%2f、union%20select、eval(、base64_decode的,直接坐实是在搞扫描注入。

# 查某个可疑IP都干了什么
awk '$1 == "1.2.3.4" {print $7}' access.log | sort | uniq -c | sort -rn | head -30

# 找疑似SQL注入尝试:URL带select或union的
awk '$7 ~ /select|union|insert|%27/ {print $1, $7}' access.log | head -20

# 统计状态码分布,大量404/500说明在被盲扫
awk '{print $9}' access.log | sort | uniq -c | sort -rn

日志是按$1 IP、$4时间、$7 URL、$9状态码这种字段位置取的,前提是你的日志是默认combined或main格式。自定义过log_format的先对一下字段顺序,别数错列。

拿着统计结果就能动手了:确认是恶意来源,塞进nginx的deny列表,或者limit_req伺候。这套命令建议存成脚本,放crontab里每天跑一次,结果发邮箱——不用盯着,异常自动找上门。日志不出统计,等于白记。

相关文章

标签:

A5创业网 版权所有