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禁封\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 &

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

  使用python控制nginx禁封ip-LMLPHP

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

使用python控制nginx禁封ip-LMLPHP

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

05-11 18:01