当前位置: 首页 > news >正文

Nginx自动封禁可疑Ip

文章目录

  • 一、Nginx封禁ip
    • 1、简介
    • 2、nignx 禁止IP访问
      • 2.1 方法一
      • 2.2 方法二
    • 3、关于 deny 的使用
  • 二、脚本自动封禁Ip
    • 1、流程介绍
    • 2、脚本实战
      • 2.1 核心脚本解释
      • 2.2 编写shell脚本
      • 2.3 crontab定时

一、Nginx封禁ip

1、简介

在网站维护过程中,有时候我们需要对一些IP地址或是一些IP段进行封锁拉黑,使其不能访问网站。 如果你的网站服务器的网站运行环境是由nginx搭建的,那么nginx中禁止ip的方法可以有效的防止网站被黑。

2、nignx 禁止IP访问

2.1 方法一

  • 在 nginx 的安装目录中(一般在/etc/nginx/),找到 nginx.conf 文件(可以看一下access.log日志在哪,后面脚本要用),并在当前目录创建 blocksip.conf 文件
  • 编辑 blocksip.conf 文件,并加入以下代码
deny 127.0.0.1;
# 127.0.0.1 为要封禁的 IP 地址
  • 编辑 nginx.conf 文件,在ngnix的HTTP的配置中添加如下内容
# 根据自己实际需求修改实际路径,这里暂时是当前目录
include blocksip.conf; 
  • 重启 nginx 即可,然后你就会看到IP被封禁了,喜提403
/usr/local/nginx/sbin/nginx -s reload

2.2 方法二

编辑 配置目录下的 nginx.conf 文件,在** http{} 或 server{}** 中添加以下代码

deny 127.0.0.1;
# 127.0.0.1:为要封禁的 IP 地址
# 单个网站屏蔽IP的方法,放到网址对应的server{}模块
# 所有网站屏蔽IP的方法,放到http {}模块

最后重启 nginx 即可

3、关于 deny 的使用

# nginx封锁禁止单个IP
deny 127.0.0.1;
# nginx 封锁禁止多个IP,多个IP地址由空格分开
deny 127.0.0.1 196.0.0.1;
# nginx封整个段即从127.0.0.1到127.255.255.254的命令
deny 127.0.0.0/8;
# nginx 封IP段即从127.255.0.1到127.255.255.254的命令
deny 127.255.0.0/16
# nginx 封IP段即从127.255.255.1到127.255.255.254的命令是
deny 127.255.255.0/24
# 屏蔽所有ip访问
deny all;# 允许单个ip访问,和上面同理
allow IP; 
# 允许所有ip访问
allow all; 

二、脚本自动封禁Ip

1、流程介绍

  • AWK统计access.log(/var/log/nginx/),记录每分钟访问超过60次的ip,然后配合nginx进行封禁
  • 编写shell脚本
  • crontab定时跑脚本

2、脚本实战

2.1 核心脚本解释

awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}'  
  • AWK统计access.log,记录每分钟访问超过60次的ip
  • awk '{print $1}' access.log 取出access.log的第一列即为ip
  • sort | uniq -cd 去重和排序
  • awk '{if($1>60)print $0}' 判断重复的数量是否超过60个,超过60个就展示出来

2.2 编写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中,并重新启动ngnixecho "为空"  >> /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.logfi

2.3 crontab定时

crontab -e 
* * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh  #每一分钟运行一次
systemctl restart crond.service #重启一下配置既可
http://www.lryc.cn/news/12274.html

相关文章:

  • 分布式事务--理论基础
  • Matlab数学建模常用算法及论文插图绘制模板资源合集
  • C语言【动态内存管理 后篇】
  • 四大步骤,教你彻底关闭Win10自动更新
  • 通信算法之一百零四:QPSK完整收发仿真链路
  • 时间复杂度(超详解+例题)
  • 【Java面试总结】Maven篇
  • 【每日一题Day123】LC1792最大平均通过率 | 堆
  • [安装之5] Mac pro更换大内存固态硬盘实践教程
  • 04 Python变量的声明与使用
  • LeetCode 2418. 按身高排序
  • 一文了解Hotspot虚拟机下JAVA对象从创建到回收的生命周期
  • 【Java基础】Java对象创建的几种方式
  • 社保缴费满15年就可以不缴了?6个很多人最关心的问题权威解答来了
  • 关于HDFS
  • C++入门:类 对象
  • Python生日系统
  • < CSDN周赛解析:第 28 期 >
  • 【题外话】如何拯救小米11Pro这款工业垃圾
  • Python中有哪些常用操作?这20个你都会吗
  • 【LeetCode】剑指 Offer(4)
  • 庄懂的TA笔记(十二)<>
  • 学分绩点(2023寒假每日一题 5)
  • Framework学习之旅:Zygote进程
  • HTTP基础知识
  • Delphi 10.4.2使用传统代码提示方案(auto complete)(转)
  • 存储类别、链接与内存管理(三)
  • Java:Linux(CentOS)安装、配置及相关命令
  • Linux 操作系统原理 — 多任务优先级调度策略
  • 链表学习之找到两个链表相交的第一个节点