您现在的位置是:首页 >技术教程 >Nginx禁止/屏蔽攻击服务器的IP地址网站首页技术教程

Nginx禁止/屏蔽攻击服务器的IP地址

Jerry 二河小鱼 2024-06-20 00:01:02
简介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.254IP段

在nginx中可以加入下面的命令:

deny 127.0.0.0/8;

第四步,nginx禁止从127.255.0.1到127.255.255.254IP段

在nginx中可以加入下面的命令:

deny 127.255.0.0/16;

第五步,nginx禁止从127.255.255.1到127.255.255.254IP段

在nginx中可以加入下面的命令:

deny 127.255.255.0/24;

第六步,nginx禁止所有IP地址。

在nginx中可以加入下面的命令:

deny all;

步,allow与deny配置相同,如果需要开放某个IP段,只需要把上面的deny改成allow。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。