Nginx 封锁恶意 IP,并且定时取消的两种脚本

一、使用nginx封锁

脚本逻辑:两个脚本,一个脚本检索出访问量大于固定值的IP,并把这个IP加入到nginx的封锁配置文件中,使用at任务,定时(如一个小时)启用另一个脚本,实现对封锁IP的解锁。

步骤如下:

1、打开nginx配置文件: vim /usr/local/nginx/conf/nginx.conf #这个配置文件根据自己的路径进行配置

2、在server段加入如下语句: include blockip.conf;

1、封锁ip

#!/bin/bash
max=500    #我们设定的最大值,当访问量大于这个值得时候,封锁
confdir=/usr/local/data/nginx/conf/blockip.conf #nginx封锁配置文件路径
logdir=/usr/local/data/nginx/logs/access_huke88.log  #nginx访问日志文件路径
#检测文件
test -e ${confdir} || touch ${confdir}
drop_ip=""
#循环遍历日志文件取出访问量大于500的ip
for drop_ip  in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn  | awk '{if ($1>500) print $2}')
do
  grep  -q  "${drop_Ip}" ${confdir} && eg=1 || eg=0;
  if (( ${eg}==0 ));then
     echo "deny ${drop_Ip};">>$confdir  #把“deny IP;”语句写入封锁配置文件中
     echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 ->  ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log  #记录log
  fi
done
service nginx reload

2、解锁ip

#!/bin/bash
sed -i 's/^/#&/g' /usr/local/nginx/conf/
blockip.conf  #把nginx封锁配置文件中的内容注释掉
service nginx reload   #重置nginx服务,这样就做到了解锁IP

二、使用iptables封锁

封锁逻辑:两个脚本,一个检索出访问量大于我们设定值得IP,并把这个IP添加到防火墙规则中,实现IP封锁,定时(如一小时)后,使用at服务调用另一个脚本,这个脚本把iptables规则清楚,实现对封锁IP的解锁,脚本如下:

1、封锁IP脚本

#!/bin/bash
max=500    #我们设定的最大值,当访问量大于这个值得时候,封锁
logdir=/usr/local/data/nginx/logs/access_huke88.log  #nginx访问日志文件路径
port=80
drop_ip=""
#循环遍历日志文件取出访问量大于500的ip
for drop_ip  in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn  | awk '{if ($1>500) print $2}')
do
  grep  -q  "${drop_Ip}" ${confdir} && eg=1 || eg=0;
  if (( ${eg}==0 ));then
     iptables -I INPUT -p tcp --dport ${port} -s ${drop_Ip} -j DROP
     echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 ->  ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log  #记录log
  fi
done

加入计划任务每五分钟执行一次

chmod +x /home/scripts/deny_ip.sh
#####nginx封ip######
*/5 * * * * /bin/sh /home/scripts/deny_ip.sh >/dev/null 2>&1

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

BugkuCTF web3

5714
来自专栏开源优测

Python Selenium设计模式-POM

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。...

3815
来自专栏开源优测

Python Selenium设计模式-POM

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。...

3607
来自专栏用户2442861的专栏

工欲善其事,可能会有用的Clion技巧

半年前我开始用 Clion,顺带着写了一篇心得记录使用 CLion 的技巧,没想到发布在简书后浏览量还是挺高的,居然还获得了人生中第一笔真正的打赏,感动之余也...

3622
来自专栏FreeBuf

网站管理软件 – AspxSpy2014 Final

受bin牛委托修改并发布,版权归bin牛所有。 Bug/建议提交:zcgonvh@rootkit.net.cn 祝各位马年大吉,财源滚滚。 免责声明: 本程序只...

2789
来自专栏Charlie's Road

Mac端Wireshark抓包工具使用扩展

关于网络协议和网络分层,本篇文章不做介绍,仅记录使用,可能中间有理解错误的地方,请指正。

912
来自专栏开源优测

Python Selenium设计模式-POM

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。...

2523
来自专栏码洞

不安分的 Go 语言开始入侵 Web 前端领域了

从 Go 语言诞生以来,它就开始不断侵蚀 Java 、C、C++ 语言的领地。今年下半年 Go 语言发布了 1.11 版本,引入了 WebAssembly 技术...

841
来自专栏前端之心

如何优雅地查看 JS 错误堆栈?

在前端,我们经常会通过 window.onerror 事件来捕获未处理的异常。假设捕获了一个异常,上报的堆栈是这个:

3994
来自专栏小程序之家

如何在小程序中实现录像功能

上一篇文章中,我们介绍了如何在小程序中实现拍照功能,有小伙伴询问,能不能在小程序内实现录像功能呢?原来在相机API中,除了takePhotoAPI,还有其他AP...

6635

扫码关注云+社区