zoukankan      html  css  js  c++  java
  • 使用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
    
    WENJIAN='/etc/nginx/rainbol_ip.conf'
    point = 0
    os.system("nginx -s reload")
    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(WENJIAN, encoding='utf-8') as f1:
                            des = f1.read().split()
                            if not des or i in des:
                                with open(WENJIAN, 'a+', encoding='utf-8') as f2:
                                    f2.write("deny " + i + ";   # %s禁封
    " % 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 &

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

      

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

    nginx禁封规则:

    //屏蔽单个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允许条件一定要写在deny前面不然不生效,之后重启nginx即可
    
    allow 1.1.1.1; 
    allow 1.1.1.2;
    deny all; 

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

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

  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/RainBol/p/9762176.html
Copyright © 2011-2022 走看看