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
文件,并加入以下代码
1 | deny 127.0.0.1; |
- 编辑 nginx.conf 文件,在ngnix的HTTP的配置中添加如下内容
1 | # 根据自己实际需求修改实际路径,这里暂时是当前目录 |
- 重启 nginx 即可,然后你就会看到IP被封禁了,喜提403
1 | /usr/local/nginx/sbin/nginx -s reload |
2.2 方法二
编辑 配置目录下的 nginx.conf
文件,在** http{} 或 server{}** 中添加以下代码
1 | deny 127.0.0.1; |
最后重启 nginx 即可
3、关于 deny 的使用
1 | # nginx封锁禁止单个IP |
二、脚本自动封禁Ip
1、流程介绍
- AWK统计
access.log
(/var/log/nginx/),记录每分钟访问超过60次的ip,然后配合nginx进行封禁 - 编写shell脚本
- crontab定时跑脚本
2、脚本实战
2.1 核心脚本解释
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的第一列即为ipsort | uniq -cd
去重和排序awk '{if($1>60)print $0}'
判断重复的数量是否超过60个,超过60个就展示出来
2.2 编写shell脚本
1 | #不能把别人IP一直封着吧,这里就清除掉了 |
2.3 crontab定时
1 | crontab -e |