欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx日志實(shí)現(xiàn)訪問(wèn)異常報(bào)警詳解

 更新時(shí)間:2017年03月04日 10:45:49   作者:LoyaChen  
Nginx把遇到的不同級(jí)別的問(wèn)題信息寫到錯(cuò)誤日志。error_log 指令配置記錄到特定的文件,stderr,或者syslog,配置寫到日志的最低級(jí)別信息。下面這篇文章主要介紹了利用Nginx日志實(shí)現(xiàn)訪問(wèn)異常報(bào)警的相關(guān)資料,需要的朋友可以參考下。

前言

在工作中為了防止一些惡意訪問(wèn)的行為,例如不斷的請(qǐng)求刷流量,通過(guò)實(shí)時(shí)過(guò)濾Nginx訪問(wèn)日志,將單位時(shí)間內(nèi)訪問(wèn)次數(shù)達(dá)到指定閥值的來(lái)源ip及時(shí)的通知系統(tǒng)管理員,這里通過(guò)郵件的方式通知。

監(jiān)控腳本

vim /opt/nginx/sbin/nginx_log_monitor.sh
#!/bin/bash
#日志文件
logfile=/opt/nginx/logs/www
 
#開始時(shí)間
start_time=`date -d"$last_minutes minutes ago" +"%H:%M:%S"`
 
#結(jié)束時(shí)間
stop_time=`date +"%H:%M:%S"`
 
#過(guò)濾出單位之間內(nèi)的日志并統(tǒng)計(jì)最高ip數(shù)
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}'`
# 單位時(shí)間[1分鐘]內(nèi)單ip訪問(wèn)次數(shù)超過(guò)200次,則觸發(fā)郵件報(bào)警
if [[ $ip_top -gt 200 ]];then
 /usr/bin/python /opt/tools/send_mail.py &
fi
chmod +x /opt/nginx/sbin/nginx_log_monitor.sh

定時(shí)任務(wù)

如上腳本監(jiān)控一分鐘內(nèi)的日志,因此每分鐘執(zhí)行一次:

# crontab -e
*/1 * * * * /bin/bash /opt/nginx/sbin/nginx_log_monitor.sh

郵件告警

這里通過(guò)python實(shí)現(xiàn)發(fā)送郵件

# 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']
# 郵件對(duì)象
msg = MIMEMultipart()
msg['From'] = _format_addr('發(fā)件人 <%s>' % from_addr)
msg['To'] = _format_addr('收件人 <%s>' % to_addr)
msg['Subject'] = Header('Warning:單ip請(qǐng)求次數(shù)異常', 'utf-8').encode()
# 獲取系統(tǒng)中要發(fā)送的文本內(nèi)容
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>一分鐘內(nèi)單ip請(qǐng)求次數(shù)超過(guò)閥值</h2>' + \
 '<p>ip:%s  請(qǐng)求次數(shù)/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()

示例

寫個(gè)腳本不停curl請(qǐng)求資源觸發(fā)報(bào)警:

# 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

調(diào)低閥值觸發(fā)告警:

一分鐘內(nèi)單ip請(qǐng)求次數(shù)超過(guò)閥值
ip:115.231.182.82 請(qǐng)求次數(shù)/min:27

完善

這里僅實(shí)現(xiàn)了郵件告警功能,實(shí)際上還可以實(shí)現(xiàn)自動(dòng)屏蔽惡意訪問(wèn)的ip。可以通過(guò)Nginx deny來(lái)實(shí)現(xiàn),也可以iptables -I INPUT -s x.x.x.x -j DROP通過(guò)iptables屏蔽。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家能有一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Nginx中root和alias指令的使用與區(qū)別

    Nginx中root和alias指令的使用與區(qū)別

    root和alias是兩個(gè)重要但經(jīng)常令人混淆的指令,尤其用于指定資源在服務(wù)器文件系統(tǒng)中的位置,本文就來(lái)介紹一下兩個(gè)指令的使用與區(qū)別,感興趣的可以了解一下
    2024-08-08
  • 定期刪除OpenResty/Nginx大日志文件的方法

    定期刪除OpenResty/Nginx大日志文件的方法

    這篇文章主要介紹了定期刪除OpenResty/Nginx大日志文件的方法,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • nginx配置PC站手機(jī)站分離實(shí)現(xiàn)重定向

    nginx配置PC站手機(jī)站分離實(shí)現(xiàn)重定向

    這篇文章主要介紹了nginx配置PC站手機(jī)站分離實(shí)現(xiàn)重定向,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Nginx部署SpringBoot項(xiàng)目的實(shí)現(xiàn)

    Nginx部署SpringBoot項(xiàng)目的實(shí)現(xiàn)

    本文主要介紹了Nginx部署SpringBoot項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Nginx+ModSecurity安全模塊部署的實(shí)現(xiàn)

    Nginx+ModSecurity安全模塊部署的實(shí)現(xiàn)

    本文主要介紹了Nginx+ModSecurity安全模塊部署的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 實(shí)例詳解SpringBoot+nginx實(shí)現(xiàn)資源上傳功能

    實(shí)例詳解SpringBoot+nginx實(shí)現(xiàn)資源上傳功能

    這篇文章主要介紹了SpringBoot+nginx實(shí)現(xiàn)資源上傳功能,由于小編最近在使用nginx放置靜態(tài)資源問(wèn)題,遇到很多干貨,特此分享到腳本之家平臺(tái),供大家參考,需要的朋友可以參考下
    2019-10-10
  • Nginx源碼安裝的方法步驟

    Nginx源碼安裝的方法步驟

    這篇文章主要介紹了Nginx源碼安裝的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解

    Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解

    nginx(engine x) 是一個(gè) 高性能 的 HTTP 和 反向代理 服務(wù)器、郵件代理服務(wù)器以及通用的 TCP/UDP 代理服務(wù)器。這篇文章主要介紹了Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解,需要的朋友可以參考下
    2019-07-07
  • nginx模塊stream配置的具體使用

    nginx模塊stream配置的具體使用

    stream模塊一般用于tcp/UDP數(shù)據(jù)流的代理和負(fù)載均衡,可以通過(guò)stream模塊代理轉(zhuǎn)發(fā)TCP消息,本文主要介紹了nginx模塊stream配置的具體使用,感興趣的可以了解一下
    2023-10-10
  • Nginx中配置過(guò)濾爬蟲的User-Agent的簡(jiǎn)單方法

    Nginx中配置過(guò)濾爬蟲的User-Agent的簡(jiǎn)單方法

    這篇文章主要介紹了Nginx中配置過(guò)濾爬蟲的User-Agent的簡(jiǎn)單方法,文中羅列了一些常用搜索引擎的爬蟲名稱以免造成不必要的過(guò)濾,需要的朋友可以參考下
    2016-01-01

最新評(píng)論