使用python控制nginx禁封ip

python控制nginx禁封ip

nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢?

测试准备:

  两个tomcat,一个nginx做均衡负载,服务器上装有python3

  python脚本

#服务器每60s循环一次,抓取到超过200次以上的ip地址写入rainbol_ip.conf文件中,重启nginx禁封生效
import time
import datetime
import os
point = 0

while True:
    with open('access.log', encoding='utf-8') as f:
        if f:
            point_action = f.seek(point)
            all_ip = []
            for i in f:
                ip = i.split("-")[0]
                all_ip.append(ip)
            point = f.tell()
            all_ip_set = set(all_ip)
            for i in all_ip_set:
                if all_ip.count(i) > 200:
                    with open('rainbol_ip.conf','a+',encoding='utf-8') as f:
                            f.write("deny " + i + ";   # %s禁封\n" % datetime.datetime.now())
                            os.system("nginx -s reload")
    time.sleep(60)

  新增加一个配置文件(可自定)和nginx.conf放在一个目录下  touch rainbol_ip.conf

  把python脚本放在access.log目录中

  nginx.conf中http{}或者server{}块中加入include rainbol_ip.conf;

测试开始:

  重启nginx  nginx -s reload

  启动python脚本文件后台执行  python3 access.log &

扫描二维码关注公众号,回复: 3498904 查看本文章

  使用jmeter压测,当一段时间后访问页面

  

查看禁封配置日志  cat rainbol_ip.conf 

//屏蔽单个ip访问

deny IP; 

//允许单个ip访问

allow IP; 

//屏蔽所有ip访问

deny all; 

//允许所有ip访问

allow all; 

//屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令

deny 123.0.0.0/8

//屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令

deny 124.45.0.0/16

//屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令

deny 123.45.6.0/24

//如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
//那需要你在guolv_ip.conf中这样写

allow 1.1.1.1; 
allow 1.1.1.2;
deny all; 

参考地址https://blog.csdn.net/u013372487/article/details/51841364/

 版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

猜你喜欢

转载自www.cnblogs.com/RainBol/p/9762176.html
今日推荐