排查Nginx攻击时,日志必须详细到足以呈现攻击行为特征。为此应先检查记录情况,而Nginx核心日志包含以下两类:
需检查Nginx配置文件(通常为nginx.conf或站点配置文件)中的log_format和access_log/error_log指令,确保记录关键字段(如$remote_addr、$request、$status、$http_user_agent、$http_referer)。例如,自定义日志格式可包含更多上下文信息,便于后续分析。
排查攻击应从访问日志入手,围绕异常行为指标进行分析,并按照以下步骤逐渐缩小范围:
先用命令从访问日志提取IP地址,再依据访问次数排列,即可筛出短时间发出大量请求的IP(如Top 10):
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10DDoS攻击或暴力破解可能来自访问次数异常高的某IP,典型情形是单IP在1分钟内发出1000+次请求,远超正常用户。
依据状态码识别攻击类型:
/admin、/wp-login.php等并不存在的路径);/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分析请求路径($request字段),找出非正常业务的路径(如尝试访问/phpmyadmin、/api/v1/login等敏感接口,或包含union、select、<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.logUser-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错误日志记录着攻击产生的“后果”,可用于协助确认攻击是否已经成功:
网站结构遭到探测时,往往会产生大量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 -nr500错误可能由攻击者利用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小规模数据可以手动分析日志;面对大规模场景,则建议利用工具进行自动化处理:
jail.local文件开启Nginx日志监控。利用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按照攻击特征处理漏洞:
location ~ ^/(admin|wp-login.php) {deny all;return 403;}依照以上步骤分析Nginx日志,可以系统识别攻击行为、及时阻断威胁并修补漏洞,从而增强网站安全性。