要有效排查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 -10
若某IP的访问次数远高于正常用户(如单IP 1分钟内发起1000+次请求),可能是DDoS攻击或暴力破解的源头。
通过状态码判断攻击类型:
/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.log
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
错误日志能提供攻击的“后果”信息,帮助确认攻击是否成功:
大量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
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
手动分析日志适用于小规模数据,大规模场景建议使用工具自动化处理:
jail.local文件启用Nginx日志监控。通过防火墙(如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
根据攻击特征修复漏洞:
location ~ ^/(admin|wp-login\.php) {
deny all;
return 403;
}
通过以上步骤,可系统性地通过Nginx日志排查攻击行为,及时阻断威胁并修复漏洞,提升网站安全性。