当前位置: 七九推 > IT编程>数据库>MSSQL > Nginx IP封禁及自动封禁IP的实现

Nginx IP封禁及自动封禁IP的实现

2023年01月21日 MSSQL 我要评论
1.在nginx的conf目录下创建一个blockip.conf文件2.里面放需要封禁的ip,格式如下deny 1.2.3.4;3.在nginx的http的配置中添加如下内容include block

1.在nginx的conf目录下创建一个blockip.conf文件

2.里面放需要封禁的ip,格式如下

deny 1.2.3.4;

3.在nginx的http的配置中添加如下内容

include blockips.conf;

在这里插入图片描述

4.重启 nginx 

/usr/local/nginx/sbin/nginx -s reload

然后你就会看到ip被封禁了,你会喜提403;

在这里插入图片描述

7.小思考:如何实现使用nginx自动封禁ip的功能

1.awk统计access.log,记录每分钟访问超过60次的ip,然后配合nginx进行封禁
2.编写shell脚本
3.crontab定时跑脚本

好了上面操作步骤列出来了,那我们先来实现第一个吧

在这里插入图片描述

操作一: awk统计access.log,记录每分钟访问超过60次的ip

awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}'

1. awk '{print $1}' access.log   取出access.log的第一列即为ip。
2. sort | uniq -cd  去重和排序
3. awk '{if($1>60)print $0}' 判断重复的数量是否超过60个,超过60个就展示出来

操作二:编写shell脚本,实现整体功能(写了注释代码)

#不能把别人ip一直封着吧,这里就清除掉了
echo "" > /usr/local/nginx/conf/blockip.conf

#前面最开始编写的统计数据功能
ip_list=$(awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}')

#判断这个变量是否为空
if test -z "$ip_list"
then
        #为空写入 11.log中,并重新启动ngnix
        echo "为空"  >> /usr/local/nginx/logs/11.log

        /usr/local/nginx/sbin/nginx -s reload

else
        #如果不为空 前面加上 deny格式和ip写入blockip.conf中
        echo "deny" $ip_list > /usr/local/nginx/conf/blockip.conf
    
        #因为前面携带了行数,所有我们需要去除掉前面的行数,写入后在读取一次
        ip_list2=$(awk '{print $3}' /usr/local/nginx/conf/blockip.conf)
        
        #最后再把读取出来的值,在次写入到blockip.conf中
        echo "deny" $ip_list2";"> /usr/local/nginx/conf/blockip.conf

        #重启ngnix
        /usr/local/nginx/sbin/nginx -s reload
        #清空之前的日志,从最新的开始截取
        echo "" > /usr/local/nginx/logs/access.log

fi

操作三:使用crontab定时,来实现访问每分钟超过60的

这个crontab 就不多讲的,不会的可以去看看我之前的博客地址如下
https://www.jb51.net/article/144881.htm

直接实操吧:

crontab -e 
* * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh  每一分钟运行一次
systemctl restart crond.service 重启一下配置既可

在这里插入图片描述

到此这篇关于nginx ip封禁及自动封禁ip的实现的文章就介绍到这了,更多相关nginx ip封禁内容请搜索七九推以前的文章或继续浏览下面的相关文章希望大家以后多多支持七九推!

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • Windows系统彻底卸载SQL Server通用方法(推荐!)

    前言无论什么时候,sql server 的安装和卸载都是一件让我们头疼的事情。因为不管是 sql server 还是 mysql 的数据库,当我们在使用数据库时因为未知原因出现问题…

    2023年01月15日 数据库
  • Kotlin关于协程是什么的探究

    Kotlin关于协程是什么的探究

    kotlin协程是什么本文只是自己经过研究后,对 kotlin 协程的理解概括,如有偏差,还请斧正。简要概括:协程是 kotlin 提供的一套线程 api 框架... [阅读全文]
  • sqlserver 合并列数据的实现

    sqlserver 合并列数据的实现

    sql server 递归查询树型结构某节点的所有上级节点,并且把这些所有上级节点多行拼接为一行,即合并列数据with eps_root(pk_eps, pk_... [阅读全文]
  • SQLServer 清理日志的实现

    SQLServer 清理日志的实现

    本文以sql2012为例第一步,(查询日志中文件名和大小):use 数据库名goselect file_id, name,size,* from sys.dat... [阅读全文]
  • Nginx中Location配置超详细讲解

    Nginx中Location配置超详细讲解

    一、语法location 是 nginx 中一个非常核心的配置,关于location,举个简单的配置例子:server { listen 80; s... [阅读全文]
  • SQLserver中的any和all运算符的用法

    SQLserver中的any和all运算符的用法

    一,sql server any 运算符any 是一个逻辑运算符 ,它将值与子查询返回的一组进行比较。any运算符必须要结合比较运算符使用,>,>=... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com