强烈推荐:最全的java面试题库
一、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 #重启一下配置既可
感谢阅读,希望对你有所帮助 :) 来源:https://blog.csdn.net/lemon_TT
后端专属技术群 构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
文明发言,以
交流技术
、职位内推
、行业探讨
为主广告人士勿入,切勿轻信私聊,防止被骗
加我好友,拉你进群 原文始发于微信公众号(Java面试题精选):Nginx自动封锁拉黑可疑IP
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141501.html