阅读量:0
使用Nginx日志监控恶意访问可以通过以下几种方法实现:
1. 使用Nginx的limit_req模块限制访问频率
Nginx提供了limit_req模块,可以限制同一IP在一段时间内的访问总次数或并发请求次数。例如,可以配置每分钟请求不超过20次,超过则返回503错误。
http {
limit_req_zone $binary_remote_addr zone=onelimit:10m rate=20r/m;
server {
...
location / {
limit_req zone=onelimit burst=5 nodelay;
limit_req_log_level warn;
}
}
}
2. 使用Nginx的deny模块禁止频繁访问的IP
对于limit_req模块无法控制的瞬时高请求次数,可以使用deny模块来禁止一天内访问次数超过指定次数的IP。需要编写一个监控脚本,定时更新禁止IP列表。
示例配置和脚本
- 创建
blocksip.conf文件,包含需要屏蔽的IP。 - 编写监控脚本(如PHP脚本
blocksip.php),定时分析Nginx访问日志,更新blocksip.conf文件,并重新加载Nginx配置。
$blockFile = "/etc/nginx/blocksip.conf";
$logs = ["/var/log/nginx/access-site1.log", "/var/log/nginx/access-site2.log"];
$blocks = file_get_contents($blockFile);
$n = 0;
foreach($logs as $log) {
$data = shell_exec("cat $log | awk -F ' ' '{print $1}' | sort | uniq -c | sort -n -r | head -n 20");
$lines = explode("\n", $data);
foreach($lines as $line) {
list($ip, $count) = explode(" ", $line);
if ($count > 10) {
file_put_contents($blockFile, "deny $ip;\n", FILE_APPEND);
}
}
}
?>
3. 使用日志分析工具
可以使用一些日志分析工具来更方便地监控和分析Nginx日志。
示例工具
- GoAccess:一个开源的实时日志分析工具,支持多种格式,包括Nginx日志。
- ELK Stack(Elasticsearch, Logstash, Kibana):通过Logstash将Nginx日志数据传输到Elasticsearch中,并使用Kibana进行可视化和监控。
- Fluentd:一个开源的数据收集器,可以将Nginx日志推送到监控平台如Prometheus、Grafana等。
4. 编写自定义脚本分析日志并屏蔽恶意IP
可以编写一个Python脚本来分析Nginx访问日志,自动找出频繁访问的IP并屏蔽它们。
示例脚本
#!/bin/bash
DATE=$(date +%d/%b/%Y:%H:%M)
LOG_FILE=/usr/local/nginx/logs/access.log
ABNORMAL_IP=$(tail -n5000 $LOG_FILE | grep $DATE | awk '{a[$1]++} END {for(i in a) if(a[i]>10) print i}')
for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL | grep -c "$IP") -eq 0 ]; then
iptables -I INPUT -s $IP -j DROP
echo "$(date +'%F_%T') $IP" >> /tmp/drop_ip.log
fi
done
总结
通过上述方法,可以有效地利用Nginx日志监控和防范恶意访问。结合使用limit_req、deny模块和日志分析工具,可以更全面地识别和应对各种恶意访问行为。
以上就是关于“如何用Nginx日志监控恶意访问”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm