Nginx 动态添加IP黑名单

timo-nbktp 1年前 ⋅ 847 阅读

防止程序被频繁调用,原理:查看日志5W条记录,对单个IP访问量进行统计并记数超过1000视为黑名单IP,每半小时检查执行一次脚本。

一、黑名单配置

在http模块最后加上配置

 #黑名单设置     
   include /usr/local/nginx/conf/blockip.conf;

二、创建脚本

#!/bin/bash
#取最近5w条数据
tail -n50000 /usr/local/nginx/logs/access.log \
#过滤需要的信息行ip等
|awk '{print $1,$12}' \
#过滤爬虫
|grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou|360|bing|soso|403|admin" \
#统计
|awk '{print $1}'|sort|uniq -c|sort -rn \
#超过1000加入黑名单
|awk '{if($1>1000)print "deny "$2";"}' >> /usr/local/nginx/conf/blockip.conf
#重启nginx生效
/usr/local/nginx/sbin/nginx -s reload

三、制定执行计划

*/30 * * * * . /etc/profile;/bin/sh /root/project/nginx_blockip_task/blockip.sh

四、加入任务

crontab -e

五、其他方案

https://www.jb51.net/article/168907.htm

六、其他

屏蔽ip的配置文件既可以屏蔽单个ip,也可以屏蔽ip段,或者只允许某个ip或者某个ip段访问。

# 屏蔽单个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

deny 123.0.0.0/8;    // 封 123.0.0.1~123.255.255.254 这个段的ip
deny 123.123.0.0/16;   // 封 123.123.0.1~123.123.255.254 这个段的ip
deny 123.123.123.0/24;   // 封 123.123.123.1~123.123.123.254 这个段的ip
deny all;  // 封所有ip

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

allow 1.1.1.1;

allow 1.1.1.2;

deny all;

单独网站屏蔽IP的方法,把include blocksip.conf; 放到网址对应的在server{}语句块,
所有网站屏蔽IP的方法,把include blocksip.conf; 放到http {}语句块。

 

--end--

 

 

版权 本着开源共享、共同学习的精神,本文转载自 https://blog.csdn.net/u012965203/article/details/108983589,https://blog.51cto.com/felixzhang/1878487 , 如果侵权之处,请联系博主进行删除,谢谢~