debian

如何通过日志排查Nginx攻击

小樊
34
2025-11-06 17:40:06
栏目: 网络安全

一、前期准备:确认日志配置完整性

要有效排查Nginx攻击,首先需确保日志记录足够详细,能覆盖攻击行为的特征。Nginx的核心日志分为两类:

需检查Nginx配置文件(通常为nginx.conf或站点配置文件)中的log_formataccess_log/error_log指令,确保记录关键字段(如$remote_addr$request$status$http_user_agent$http_referer)。例如,自定义日志格式可包含更多上下文信息,便于后续分析。

二、访问日志分析:识别异常访问模式

访问日志是排查攻击的“入口”,需重点关注异常行为指标,通过以下步骤逐步缩小范围:

1. 统计高频访问IP,定位可疑源头

使用命令提取访问日志中的IP地址,按访问次数排序,找出短时间内发起大量请求的IP(如Top 10):

cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

若某IP的访问次数远高于正常用户(如单IP 1分钟内发起1000+次请求),可能是DDoS攻击或暴力破解的源头。

2. 分析状态码分布,识别错误类型

通过状态码判断攻击类型:

统计状态码的命令示例:

# 统计所有状态码分布
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr  
# 筛选特定状态码(如404)
awk '$9 == 404 {print $0}' /var/log/nginx/access.log

3. 检测异常请求路径,识别攻击意图

分析请求路径($request字段),找出非正常业务的路径(如尝试访问/phpmyadmin/api/v1/login等敏感接口,或包含unionselect<script>等关键字的路径):

# 查找包含敏感路径的请求
grep -E '/phpmyadmin|/wp-admin|/api/v1/login' /var/log/nginx/access.log  
# 查找SQL注入关键字
grep -i -E 'union|select|insert|delete|update|drop' /var/log/nginx/access.log  
# 查找XSS攻击关键字
grep -i -E '<script>|javascript:|onerror=|onload=' /var/log/nginx/access.log

4. 分析User-Agent,识别恶意工具

User-Agent字段可反映客户端类型,非主流浏览器或包含“bot”“scan”“curl”等关键词的UA可能是恶意工具(如爬虫、扫描器):

# 统计高频User-Agent
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10  
# 筛选可疑User-Agent(如包含bot)
grep -i 'bot|scan|curl|wget' /var/log/nginx/access.log

三、错误日志分析:定位攻击造成的影响

错误日志能提供攻击的“后果”信息,帮助确认攻击是否成功:

1. 查看404错误详情,确认扫描行为

大量404错误可能意味着攻击者在探测网站结构,可通过时间戳关联访问日志,找出扫描的路径和IP:

# 实时查看错误日志中的404错误
tail -f /var/log/nginx/error.log | grep '404'
# 结合访问日志找出扫描IP
grep '404' /var/log/nginx/error.log | awk '{print $7}' | cut -d'"' -f2 | sort | uniq -c | sort -nr

2. 查看500错误详情,确认漏洞利用

500错误可能是攻击者利用漏洞(如SQL注入、文件上传)导致的,需结合访问日志中的请求路径和参数,确认漏洞类型:

# 查看错误日志中的500错误及对应时间
grep '500' /var/log/nginx/error.log | awk '{print $1, $2, $4, $5}'
# 关联访问日志,找出导致500错误的请求
grep '500' /var/log/nginx/error.log | awk '{print $1, $2}' | xargs -I {} grep {} /var/log/nginx/access.log

四、工具辅助:提升分析效率

手动分析日志适用于小规模数据,大规模场景建议使用工具自动化处理:

1. 日志分析工具

2. 监控告警工具

五、后续行动:阻断攻击与修复漏洞

1. 封锁恶意IP

通过防火墙(如iptables)封锁识别出的攻击IP,阻止其继续访问:

# 封锁单个IP
iptables -A INPUT -s 攻击IP -j DROP  
# 封锁IP段(如192.168.1.0/24)
iptables -A INPUT -s 192.168.1.0/24 -j DROP  
# 保存规则(CentOS 7+)
service iptables save

2. 修复安全漏洞

根据攻击特征修复漏洞:

通过以上步骤,可系统性地通过Nginx日志排查攻击行为,及时阻断威胁并修复漏洞,提升网站安全性。

0
看了该问题的人还看了