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 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  • 相关阅读:
    mysql数据库基本类型
    常用辅助类【转】
    Java 并发笔记】并发机制底层实现整理[转发]
    关于PROPAGATION_NESTED的理解
    线程数设置
    c# Expression 扩展[转]
    Net定时器 【转载】
    【转】高可用设计-58沈剑
    【转】委托的三种调用示例(同步调用 异步调用 异步回调)
    [coursera OA] acme match
  • 原文地址:https://www.cnblogs.com/RainBol/p/9762176.html
Copyright © 2011-2022 走看看