科普文:软件架构Nginx系列之【nginx日志分析:access_log和error_log提取攻击者IP】
·
1.概叙
科普文:软件架构Nginx系列之【常用shell脚本分析nginx日志】_系统 请求成功率-CSDN博客
科普文:看懂Linux日志分析_linux系统日志分析-CSDN博客
科普文:软件架构Linux系列之【Linux日志和日志分析工具】-CSDN博客
前面文章提到使用命令行工具如awk、grep、sort等来分析Nginx的访问日志access_log,提取高频IP。虽然access_log和error_log结构不同,但处理IP提取的方法有相似之处。在分析nginx日志前我们先来了解一下这两种日志:
access_log:用于记录客户端请求,是行为分析和安全防护的核心依据。-
error_log:用于记录服务端错误,是故障排查和服务健康监控的关键工具。 - 结合使用:通过关联两种日志(例如根据请求ID或时间戳),可精准定位问题根源。
1.1 access_log和error_log主要区别
| 特性 | access_log | error_log |
|---|---|---|
| 记录内容 | 客户端请求的详细信息(请求方法、URL、状态码等) | 服务器处理请求时的错误信息(配置错误、资源未找到等) |
| 主要用途 | 流量分析、用户行为追踪、安全审计 | 故障排查、服务异常监控 |
| 日志级别 | 无级别划分 | 支持级别:debug、info、notice、warn、error、crit等 |
| 默认存储路径 | /var/log/nginx/access.log |
/var/log/nginx/error.log |
1.2 access_log和error_log使用场景对比
| 场景 | access_log | error_log |
|---|---|---|
| 流量统计 | 统计PV/UV、热门页面、访问来源 | 不适用 |
| 安全分析 | 检测异常请求(如SQL注入、暴力破解) | 发现配置错误或资源访问失败(如文件泄露) |
| 性能优化 | 分析响应时间、慢请求 | 定位服务崩溃或连接超时问题 |
| SEO优化 | 监控爬虫行为(如Googlebot) | 不适用 |
2. access_log 详解
2.1 记录内容示例
192.168.1.100 - - [12/Jul/2023:14:28:32 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
- 字段说明:
192.168.1.100:客户端IP[12/Jul/2023:14:28:32 +0800]:请求时间GET /index.html HTTP/1.1:请求方法、路径、协议200:HTTP状态码612:响应体大小(字节)Mozilla/5.0...:User-Agent
2.2 配置方式
在 nginx.conf 或虚拟主机配置中定义:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}
- 参数说明:
log_format:自定义日志格式(如main)。access_log:指定日志路径和格式名称。
3. error_log 详解
3.1 记录内容示例
2023/07/12 14:30:45 [error] 12345#0: *6789 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.1.100, server: localhost, request: "GET /favicon.ico HTTP/1.1"
- 字段说明:
[error]:日志级别12345#0:进程ID和线程ID*6789:请求标识符No such file or directory:具体错误描述client: 192.168.1.100:客户端IP
3.2 配置方式
rror_log /var/log/nginx/error.log warn;
- 日志级别:
debug:调试信息(最详细,适用于开发环境)。warn:警告信息(生产环境推荐)。error:严重错误(默认级别)。
5. 日志管理最佳实践
-
日志切割:使用
logrotate定期切割日志,避免文件过大。/var/log/nginx/*.log { daily rotate 30 compress missingok notifempty sharedscripts postrotate /usr/bin/systemctl reload nginx endscript } -
敏感信息过滤:在
access_log中隐藏敏感字段(如$http_cookie)。log_format filtered '$remote_addr - $remote_user [$time_local] "$request" $status'; -
错误日志监控:通过
grep或日志分析工具(如ELK、Graylog)实时监控error_log:tail -f /var/log/nginx/error.log | grep -E 'error|crit' -
安全加固:在
access_log中记录攻击者IP并封禁:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
看一下服务器上 access_log日志

error_log日志

access日志中的404错误,在error日志中都有对应的记录。

根据错误日志中的client: <IP>字段,以下IP尝试访问敏感路径(如.env、login.rsp、setup-config.php等),疑似恶意扫描或攻击行。

-
攻击特征:
.env文件通常包含敏感配置(如数据库密码),攻击者通过扫描此文件尝试获取系统权限。setup-config.php是WordPress安装配置文件,攻击者可能试图篡改或窃取数据库信息。login.rsp可能是伪造的登录接口,用于爆破或注入攻击。- 高频访问不存在的敏感路径,属于典型自动化扫描行为。
-
IP风险评级:
- 高危:
35.194.89.135、112.74.37.75(直接针对敏感配置文件)。 - 中危:
1.192.195.11(可能为初步扫描或探测)。 - 低危:其他统计次数为1的ip

- 高危:
3.建议防护措施:IP封禁
- 在Nginx配置中屏蔽这些IP:deny
35.194.89.135; - 或在防火墙(如iptables)中直接拦截:iptables -A INPUT -s
35.194.89.135-j DROP
在这里我才用nginx黑名单,来屏蔽这些ip的访问。

更多推荐



所有评论(0)