最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

監(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"`
 
#過濾出單位之間內(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訪問次數(shù)超過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

郵件告警

這里通過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']
# 郵件對象
msg = MIMEMultipart()
msg['From'] = _format_addr('發(fā)件人 <%s>' % from_addr)
msg['To'] = _format_addr('收件人 <%s>' % to_addr)
msg['Subject'] = Header('Warning:單ip請求次數(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請求次數(shù)超過閥值</h2>' + \
 '<p>ip:%s  請求次數(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請求資源觸發(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請求次數(shù)超過閥值
ip:115.231.182.82 請求次數(shù)/min:27

完善

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

總結(jié)

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

相關(guān)文章

  • k8s部署nginx的三種方式小結(jié)

    k8s部署nginx的三種方式小結(jié)

    本文主要介紹了k8s部署nginx的三種方式小結(jié),主要包括直接部署、使用數(shù)據(jù)卷部署、使用ConfigMap部署,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • nginx 配置location匹配規(guī)則實(shí)例講解

    nginx 配置location匹配規(guī)則實(shí)例講解

    在本篇文章里小編給大家整理的是關(guān)于nginx 配置location匹配規(guī)則實(shí)例講解內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2020-03-03
  • Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻

    Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻

    Nginx?Proxy?Manager是一款功能強(qiáng)大的開源軟件,配置Web應(yīng)用防火墻,可以防止常見的web攻擊,本文就來介紹一下Nginx?Proxy?Manager配置Web?WAF應(yīng)用防火墻,感興趣的可以了解一下
    2025-02-02
  • 小白也可以完成的0基礎(chǔ)部署Nginx服務(wù)

    小白也可以完成的0基礎(chǔ)部署Nginx服務(wù)

    這篇文章主要為大家介紹了0基礎(chǔ)部署Nginx服務(wù)的實(shí)現(xiàn)方式,非常簡單詳細(xì)零基礎(chǔ)小白跟著做也可以完成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • nginx:?[emerg]?unknown?directive報(bào)錯(cuò)誤的問題

    nginx:?[emerg]?unknown?directive報(bào)錯(cuò)誤的問題

    本文主要介紹了nginx:?[emerg]?unknown?directive報(bào)錯(cuò)誤的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 使用nginx+二級域名+https支持

    使用nginx+二級域名+https支持

    這篇文章主要介紹了使用nginx+二級域名+https支持,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Nginx如何配置前端后端服務(wù)

    Nginx如何配置前端后端服務(wù)

    本文介紹了如何配置Nginx作為前端靜態(tài)資源服務(wù)器和反向代理服務(wù)器以連接后端應(yīng)用,配置步驟包括設(shè)置Nginx的基本配置語法和結(jié)構(gòu),配置Nginx作為前端靜態(tài)資源服務(wù)器和反向代理服務(wù)器,測試和優(yōu)化Nginx配置,以及提供了一個(gè)示例配置
    2025-01-01
  • Windows下Nginx安裝配置教程

    Windows下Nginx安裝配置教程

    這篇文章主要為大家介紹了Windows下Nginx安裝配置的詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解Nginx如何代理UDP連接

    詳解Nginx如何代理UDP連接

    這篇文章主要為大家介紹了Nginx如何代理UDP連接的實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Nginx 安裝筆記(含PHP支持、虛擬主機(jī)、反向代理負(fù)載均衡)

    Nginx 安裝筆記(含PHP支持、虛擬主機(jī)、反向代理負(fù)載均衡)

    Nginx安裝簡記(含PHP支持、虛擬主機(jī)、反向代理負(fù)載均衡) Nginx,據(jù)說高性能和穩(wěn)定性比Apache還牛,并發(fā)連接處理能力強(qiáng),低系統(tǒng)資源消耗。目前已有250多萬web站點(diǎn)在使用
    2009-10-10

最新評論

民县| 深泽县| 炎陵县| 肥乡县| 利川市| 新邵县| 稻城县| 洪泽县| 苍南县| 宁安市| 手机| 瑞昌市| 高邮市| 剑川县| 鄂伦春自治旗| 邵阳市| 房产| 新宁县| 丽江市| 买车| 湖口县| 获嘉县| 北京市| 海门市| 霍邱县| 中方县| 随州市| 高雄市| 贺州市| 朝阳县| 仙居县| 婺源县| 南汇区| 巴塘县| 永兴县| 靖远县| 平潭县| 磐石市| 湘阴县| 望奎县| 广饶县|