使用python控制nginx禁封ip

Posted rainbol

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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禁封
" % 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 

技术分享图片

 

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




以上是关于使用python控制nginx禁封ip的主要内容,如果未能解决你的问题,请参考以下文章

python分析apache和nginx日志文件输出访客ip列表的代码

scrapy按顺序启动多个爬虫代码片段(python3)

用python零基础写爬虫--编写第一个网络爬虫 -2 设置用户代理

nginx.conf 忽略了 nginx-ingress 配置映射片段

linux学习:Nginx--常见功能配置片段与优化-06

JMeter接口测试-模块控制器