Nginx如何自动封禁可疑Ip

 更新时间:2025年06月17日 09:06:44   作者:魅Lemon  
这篇文章主要介绍了Nginx如何自动封禁可疑Ip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、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中,并重新启动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

2.3 crontab定时

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx虚拟主机的配置实现

    Nginx虚拟主机的配置实现

    虚拟主机指的就是一个独立的站点配置,是nginx默认支持的一个功能,本文主要介绍了Nginx虚拟主机的配置实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • nginx部署项目刷新404问题及解决过程

    nginx部署项目刷新404问题及解决过程

    在nginx配置中,通过在server的location下添加`try_files $uri $uri/ /index.html;`来解决刷新页面出现404的问题,这种方法简单有效
    2025-11-11
  • Nginx一键安装部署静态网页的过程详解

    Nginx一键安装部署静态网页的过程详解

    这篇文章主要介绍了Nginx一键安装部署静态网页,主要介绍nginx安装和部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-06-06
  • nginx安装到指定目录的方法示例

    nginx安装到指定目录的方法示例

    这篇文章主要介绍了nginx安装到指定目录的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • SQL操作Pandas DataFrame的三种方式示例详解

    SQL操作Pandas DataFrame的三种方式示例详解

    这篇文章主要为大家介绍了SQL操作Pandas DataFrame的三种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • nginx反向代理jupyter实践

    nginx反向代理jupyter实践

    文章讲述了如何配置Jupyter Notebook,包括打开配置文件和设置反向代理,反向代理配置中提到,指定HTTP版本为1.1是必要的,因为如果不加,Notebook将无法连接到内核并一直显示断开,此外,还提到了资源和浏览器禁止下载的问题
    2026-03-03
  • Nginx禁止ip访问或非法域名访问

    Nginx禁止ip访问或非法域名访问

    这篇文章主要介绍了Nginx禁止ip访问或非法域名访问,需要的朋友可以参考下
    2022-04-04
  • 学习nginx基础知识

    学习nginx基础知识

    这篇文章主要介绍了nginx基础知识,文中运用了大量的图片和代码进行讲解,对相关知识感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09
  • 详解Nginx反向代理跨域基本配置与常见误区

    详解Nginx反向代理跨域基本配置与常见误区

    这篇文章主要介绍了详解Nginx反向代理跨域基本配置与常见误区,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Nginx设置HTTPS的方法步骤

    Nginx设置HTTPS的方法步骤

    本文主要介绍了NGINX设置HTTPS的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论