python——ip加入nginx黑名单

需求:因nginx做了防刷机制之后, error.log 会出现ip刷服务器,也被nginx挡掉了,并没有具体刷到后端服务器,但error.log多次出现ip,现计划把出现5次以上的ip写入黑名单。

nginx log日志格式:

2016/09/05 01:11:07 [info] 1354#0: *11981355139 limiting connections by zone "limit", client: 111.164.58.3, server: api.test.cn, request: "GET /test/test?_at=28&_av=103&_avn=1.1.2&_c=%E4%B8%8A%E6%B5%B7&_i=a4fe3bb262c171054f7ca01d8af58337&_la=0&_lo=0&_pm=iPhone&_pv=9.33.2&_pvt=2&_s=2&_sg=FF4C1556E48DBDD8A2&_sh=1136&_sw=6540&_uuid=a4fe3bb262c171054f7c55a01d8af58337&m=2791763&mid=48&pi=1&ps=10&t=1&t2=6Af95DlK55RkmekO-7W8HiTQZysThxEVOE HTTP/1.0", host: "api.test.cn"

写入黑名单文件:

[[email protected] ~]# more /mnt/nginx/conf/refuseip.conf

deny 111.164.58.3;

注:以上日志格式正确,ip和链接有篡改过,无法直接访问。

#!/usr/bin/python

# -*- coding:UTF-8 -*-

import subprocess

import os

IP = ("tail -f /mnt/log/nginx/error.log")

file="/mnt/nginx/conf/refuseip.conf"

child= subprocess.Popen(IP,shell=True,stdout=subprocess.PIPE)

flag=[]

while True:

line = child.stdout.readline()

if line.find("limit") != -1:

j = line.split()[11].split(",")[0]

flag.append(j)

delete=flag[-1]

num=flag.count(delete)

if num>=5:

for i in range(num):

index=flag.index(delete)

del flag[index]

print flag

f=open(file,‘a‘)

f.write("deny " +delete+";"+‘\n‘)

f.close()

时间: 2024-08-06 22:10:39

python——ip加入nginx黑名单的相关文章

python django+uwsgi+nginx 搭建步骤(血一般的教训)

安装Django 没有pip的童鞋可以看http://blog.csdn.net/imphp/article/details/38228619安装python包管理工具pip 先在 https://pypi.python.org/ 上 搜索Django,排在第一的那个就是我们要安装的主要框架Django啦- 点进去可以查找一些相关文档,虽然全部是鸟语花香,不过有翻译.百度.炕忙,就算是菜鸟也成英国鸟了. Django 的官网文档 https://docs.djangoproject.com/en

Nginx限制ip链接数,Nginx如何限制并发数,同1个IP,nginx怎么限制流量/限制带宽?

nginx 限制ip并发数,也是说限制同一个ip同时连接服务器的数量.如何Nginx限制同一个ip的连接数,限制并发数目,限制流量/限制带宽? 通过下面nginx模块的使用,我们可以设置一旦并发链接数超过我们的设置,将返回503错误给对方.这样可以非常有效的防止CC攻击.在配合 iptables防火墙,基本上CC攻击就可以无视了.Nginx限制ip链接数,Nginx如何限制并发数,同1个IP,nginx怎么限制流量/限制带宽?请看下文: nginx 限制ip并发数,nginx限制IP链接数的范例

python IP地址转16进制

python IP地址转16进制 第一种方法: 通过socket.inet_aton实现 import socket from binascii import hexlify ary='192.168.1.1' packed_ip_addr = socket.inet_aton(ary) hexStr=hexlify(packed_ip_addr) print('IP:'+hexStr) 输出: IP:c0a80101 第二种方法: 将字符串分割成数组,在转换成16进制 ary='192.168

快速部署Python应用:Nginx+uWSGI配置详解

快速部署Python应用:Nginx+uWSGI配置详解 相比于PHP,Python应用的部署很麻烦,比较常用的方法有fcgi与wsgi,然而这两种都很让人头痛.文章介绍了Nginx+uwsgi的简便方法,来快速的部署Python应用. AD: 在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便. 反观Py

python写的nginx切割日志脚本

#!/usr/bin/env pthon #_*_coding=utf-8_*_ #python版本(nginx日志切割脚本) import os import datetime #access.log路径 accesslogs_path = "/usr/local/nginx/logs/" #昨天的日期 lastDate = datetime.date.today() - datetime.timedelta(days=1) #备份路径 bak_path = "%s%s/%

一 .linux上安装 python git redis nginx

一     Linux平台上  python  git  redis nginx 源码包安装 下载依赖库 yum -y install gcc gcc-c++ autoconf automake yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel yum -y install gcc automake autoconf libtool make 1. Python安装图解 https://www.cnblogs

python——nagios监控nginx日志 request_time

遇到问题:nginx日志包含非常重要的信息.比如upstream_response_time 和request_time.现需求监控改值. 解决问题:编写python脚本,通过nagios check_nrpe 插件完成监控. 前提了解: nginx日志格式: log_format  main  '$remote_addr |$time_local| $request | $status | $body_byte s_sent | $http_referer | $http_user_agent

python 正则分析nginx日志

有个需求要分析nginx日志,也懒得去研究logstach之类的开源工具,干脆直接写一个脚本,自己根据需求来实现: 先看日志格式:我们跟别人的不太一样,所以没办法了: 12.195.166.35 [10/May/2015:14:38:09 +0800] "list.xxxx.com" "GET /new/10:00/9.html?cat=0,0&sort=price_asc HTTP/1.0" 200 42164 "http://list.zhon

python 分析处理nginx日志

临时帮公司研发同事处理nginx日志,凑合了一个脚本,用着还行,执行效率,还可以吧,一个G的文件,一分钟内就可以处理完成,供大家参考. #!/usr/bin/env python import os import re import fileinput logfile = r"/data/log20140904/nginx/192.168.1.50" #定义正则匹配变量 ip = r"?P<ip>[\d.]*" timeP = r""