前言

在工作中为了防止一些恶意访问的行为,例如不断的请求刷流量,通过实时过滤Nginx访问日志,将单位时间内访问次数达到指定阀值的来源ip及时的通知系统管理员,这里通过邮件的方式通知。
监控脚本
vim /opt/nginx/sbin/nginx_log_monitor.sh
#!/bin/bash
#日志文件
logfile=/opt/nginx/logs/www
#开始时间
start_time=`date -d"$last_minutes minutes ago" +"%H:%M:%S"`
#结束时间
stop_time=`date +"%H:%M:%S"`
#过滤出单位之间内的日志并统计最高ip数
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,RSTART+14,21);if(t>=st && t<=et) {print $0}}' \
| awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10
ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
# 单位时间[1分钟]内单ip访问次数超过200次,则触发邮件报警
if [[ $ip_top -gt 200 ]];then
/usr/bin/python /opt/tools/send_mail.py &
fi
chmod +x /opt/nginx/sbin/nginx_log_monitor.sh
定时任务
如上脚本监控一分钟内的日志,因此每分钟执行一次:
# crontab -e */1 * * * * /bin/bash /opt/nginx/sbin/nginx_log_monitor.sh
邮件告警
这里通过python实现发送邮件
# vim /opt/tools/send_mail.py
# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from datetime import datetime
import os
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 邮箱定义
smtp_server = 'smtp.exmail.qq.com'
smtp_port = 465
from_addr = 'chenqingkang@qiniu.com'
password = os.environ.get('MAIL_PASSWD')
to_addr = ['810959120@qq.com']
# 邮件对象
msg = MIMEMultipart()
msg['From'] = _format_addr('发件人 <%s>' % from_addr)
msg['To'] = _format_addr('收件人 <%s>' % to_addr)
msg['Subject'] = Header('Warning:单ip请求次数异常', 'utf-8').encode()
# 获取系统中要发送的文本内容
with open('/opt/nginx/logs/log_ip_top10', 'r') as f:
line = f.readline().strip()
line = line.split(" ")
print(line)
# 邮件正文是MIMEText:
html = '<html><body><h2>一分钟内单ip请求次数超过阀值</h2>' + \
'<p>ip:%s 请求次数/min:%s</p>' % (line[1],line[0]) + \
'</body></html>'
msg.attach(MIMEText(html, 'html', 'utf-8'))
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
示例
写个脚本不停curl请求资源触发报警:
# vim curl.sh
#!/bin/bash
#example:curl.sh http://www.qingkang.me 100
usage()
{
echo "usage: `basename $0` url count"
}
if [ $# -ne 2 ]; then
usage
exit 1
fi
for i in `seq 1 $2`;do
http_code=`curl -o /dev/null -s -w %{http_code} $1`
echo $1 $http_code
done
# bash curl.sh http://qingkang.me/ 5 http://qingkang.me/ 200 http://qingkang.me/ 200 http://qingkang.me/ 200 http://qingkang.me/ 200 http://qingkang.me/ 200
调低阀值触发告警:
一分钟内单ip请求次数超过阀值 ip:115.231.182.82 请求次数/min:27
完善
这里仅实现了邮件告警功能,实际上还可以实现自动屏蔽恶意访问的ip。可以通过Nginx deny来实现,也可以iptables -I INPUT -s x.x.x.x -j DROP通过iptables屏蔽。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家能有一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# nginx
# 访问日志
# 日志
# ginx
# 日志分析
# 利用nginx访问日志如何记录mysql中的用户id详解
# Nginx自定义访问日志的配置方式
# centos中nginx按日期自动分割访问日志的方法
# Nginx实现浏览器可实时查看访问日志的步骤详解
# Nginx屏蔽F5心跳日志、指定IP访问日志
# nginx访问日志并删除指定天数前的日志记录配置方法
# Python 分析Nginx访问日志并保存到MySQL数据库实例
# shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)
# Nginx访问日志及错误日志参数说明
# 一分钟内
# 还可以
# 有一定
# 时间内
# 可以通过
# 这篇文章
# 谢谢大家
# 来实现
# 每分钟
# 在工作中
# 为了防止
# 中要
# 大家能
# 发送邮件
# 调低
# 实现了
# 结束时间
# 有疑问
# cat
# ip_top
相关文章:
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
香港服务器如何优化才能显著提升网站加载速度?
建站主机系统SEO优化与智能配置核心关键词操作指南
建设网站制作价格,怎样建立自己的公司网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
已有域名和空间如何搭建网站?
如何获取PHP WAP自助建站系统源码?
如何配置FTP站点权限与安全设置?
常州企业建站如何选择最佳模板?
专业公司网站制作公司,用什么语言做企业网站比较好?
建站之星安装需要哪些步骤及注意事项?
建站之星后台管理:高效配置与模板优化提升用户体验
如何确保西部建站助手FTP传输的安全性?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何选择高效响应式自助建站源码系统?
想学网站制作怎么学,建立一个网站要花费多少?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在IIS中新建站点并配置端口与IP地址?
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何通过VPS建站实现广告与增值服务盈利?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何快速上传自定义模板至建站之星?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星导航菜单设置与功能模块配置全攻略
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何快速搭建自助建站会员专属系统?
如何通过万网虚拟主机快速搭建网站?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
高防服务器租用首荐平台,企业级优惠套餐快速部署
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
linux top下的 minerd 木马清除方法
安徽网站建设与外贸建站服务专业定制方案
如何在云主机上快速搭建网站?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何用已有域名快速搭建网站?
PHP 500报错的快速解决方法
建站之星代理平台如何选择最佳方案?
深圳网站制作的公司有哪些,dido官方网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
宝塔Windows建站如何避免显示默认IIS页面?
建站之星2.7模板快速切换与批量管理功能操作指南
c# 在高并发下使用反射发射(Reflection.Emit)的性能
Android使用GridView实现日历的简单功能
如何在建站宝盒中设置产品搜索功能?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何制作算命网站,怎么注册算命网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。