一聚教程网:一个值得你收藏的教程网站

热门教程

怎样通过日志排查Nginx攻击

时间:2026-07-29 09:39:07 编辑:袖梨 来源:一聚教程网

一、前期准备:检查日志配置是否完整

排查Nginx攻击时,日志必须详细到足以呈现攻击行为特征。为此应先检查记录情况,而Nginx核心日志包含以下两类:

  • 访问日志(Access Log):识别攻击主要依靠它,因为客户端每次请求的IP、时间、请求方法/路径、状态码、User-Agent等详细信息都会被记录;
  • 错误日志(Error Log):攻击造成的影响可借此辅助定位,其中保存了Nginx服务运行时出现的后端连接失败、权限问题以及404/500错误等信息。

需检查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

DDoS攻击或暴力破解可能来自访问次数异常高的某IP,典型情形是单IP在1分钟内发出1000+次请求,远超正常用户。

2. 检查状态码分布,判断错误类型

依据状态码识别攻击类型:

  • 大量404错误:网站目录结构可能正被攻击者扫描(如尝试访问/admin/wp-login.php等并不存在的路径);
  • 出现大量500错误:攻击者可能利用SQL注入、文件包含等漏洞,引发服务器内部错误;
  • 大量403错误:未授权目录或文件可能正遭攻击者访问(如/etc/passwd)。

状态码统计命令示例:

# 统计所有状态码分布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字段能够体现客户端类型。非主流浏览器,或UA中带有“bot”“scan”“curl”等关键词的客户端,可能属于爬虫、扫描器等恶意工具:

# 统计高频User-Agentawk -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'# 结合访问日志找出扫描IPgrep '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. 日志分析类工具

  • ELK Stack(Elasticsearch+Logstash+Kibana):异常趋势可在Dashboard中展示(如404错误率飙升、高频IP分布),其基础是对日志进行集中存储、实时分析与可视化;
  • GoAccess:访问量、状态码分布、高频路径等信息会直观呈现在HTML报告中,该报告由访问日志的实时分析生成。

2. 监控和告警类工具

  • Prometheus+Grafana:在收集请求速率、错误率、响应时间等Nginx指标后,可设定阈值触发告警(如5分钟内的404错误超过100次);
  • Fail2Ban:针对短时间发出大量404/500请求的IP等恶意IP,可通过配置实现自动封锁jail.local文件开启Nginx日志监控。

五、后续处理:阻止攻击并修复漏洞

1. 屏蔽恶意IP

利用iptables等防火墙封锁已经识别的攻击IP,使其无法继续访问:

# 封锁单个IPiptables -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. 修补安全漏洞

按照攻击特征处理漏洞:

  • 若发现SQL注入,应过滤用户输入,例如采用预编译语句,避免对SQL进行直接拼接;
  • 如有目录扫描行为,可让Nginx通过返回403等方式隐藏敏感目录:
    location ~ ^/(admin|wp-login.php) {deny all;return 403;}
  • 文件上传漏洞存在时,上传目录应设为不可执行,同时把上传文件限制为指定类型(如仅允许图片)。

依照以上步骤分析Nginx日志,可以系统识别攻击行为、及时阻断威胁并修补漏洞,从而增强网站安全性。

热门栏目