您现在的位置是:首页 >技术教程 >Nginx禁止/屏蔽攻击服务器的IP地址网站首页技术教程
Nginx禁止/屏蔽攻击服务器的IP地址
nginx安装在IP为x.x.x.x的服务器上
准备工作
第一步,nginx安装。
第二步,nginx配置。
第三步,nginx启动和访问站点。
第四步,nginx服务关闭和重启。
第五步,新建nginx启动脚本可以不进入nginx根目录即可进行相应的操作,设置服务器重启时nginx会自动启动。
nignx禁止IP地址访问的第一种方法
第一步,在/etc/nginx文件夹中新建blocksip.conf文件。
命令:cd /etc/nginx
vim blocksip.conf
在blocksip.conf文件中添加下面的代码:
allow all;
# 封禁127.0.0.1
deny 127.0.0.1;
第二步,编辑/etc/nginx/nginx.conf文件。
在/etc/nginx/nginx.conf文件中,只需要在http{}中添加下面代码:
include blocksip.conf;
第三步,重启nginx服务。
命令:service nginx reload
nignx禁止IP地址访问的第二种方法
第一步,编辑/etc/nginx/nginx.conf文件。
在/etc/nginx/nginx.conf文件中,只需要在server{}中添加allow和deny的IP地址:
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
allow all;
# 封禁196.0.0.1
deny 196.0.0.1;
root html;
index index.html index.htm;
}
注意:allow必须在deny的前面。
第二步,重启nginx服务。
命令:service nginx reload
实现自动封禁IP地址
第一步,AWK记录access.log文件中每分钟访问超过60次的IP地址。
命令:awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}'
注释:
awk '{print $1}' access.log:取出access.log的第一列即为IP;
sort | uniq -cd:去重和排序;
awk '{if($1>60)print $0}':判断重复的数量是否超过60个,超过60个就展示出来。
第二步,通过编写shell脚本来实现整体功能。
在/usr/local/nginx文件夹中新建ip_test.sh脚本,在脚本文件中添加下面的代码:
#不能把别人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中,并重新启动nginx
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
#重启nginx
/usr/local/nginx/sbin/nginx -s reload
#清空之前的日志,从最新的开始截取
echo "" > /usr/local/nginx/logs/access.log
fi
第三步,使用crontab定时来实现访问每分钟访问超过60次的IP地址。
命令:crontab -e
添加以下代码:
# 每一分钟运行一次
* * * * * sh /usr/local/nginx/ip_test.sh
# 查看是否写入
命令:crontab -l
# 重启一下定时配置
命令:systemctl restart crond.service
关于allow和deny的使用
第一步,nginx禁止单个IP。
在nginx中可以加入下面的命令:
deny 127.0.0.1;
第二步,nginx禁止多个IP。
在nginx中可以加入下面的命令:
deny 127.0.0.1 196.0.0.1;
注意:nginx禁止多个IP地址,多个IP地址由空格分开。
第三步,nginx禁止从127.0.0.1到127.255.255.254的IP段。
在nginx中可以加入下面的命令:
deny 127.0.0.0/8;
第四步,nginx禁止从127.255.0.1到127.255.255.254的IP段。
在nginx中可以加入下面的命令:
deny 127.255.0.0/16;
第五步,nginx禁止从127.255.255.1到127.255.255.254的IP段。
在nginx中可以加入下面的命令:
deny 127.255.255.0/24;
第六步,nginx禁止所有IP地址。
在nginx中可以加入下面的命令:
deny all;
第七步,allow与deny配置相同,如果需要开放某个IP段,只需要把上面的deny改成allow。