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}' /var/log/nginx/access.log | sort | uniq -cd | awk '{if($1>60)print $0}'

注释:

awk '{print $1}' /var/log/nginx/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 "" > /etc/nginx/blockip.conf
# 判断重复的数量是否超过60个,超过60个就展示出来
ip_list=$(awk '{print $1}' /var/log/nginx/access.log | sort | uniq -cd | awk '{if($1>60)print $0}')
# 判断变量是否为空
if test -z "$ip_list"
then
        # 若变量为空,则写入11.log中,并重新启动nginx
        echo "为空"  >> /var/log/nginx//11.log
        /usr/sbin/nginx -s reload
else
        # 若变量不为空,则需要在前面加上deny格式,IP写入blockip.conf
        echo "deny" $ip_list > /etc/nginx/blockip.conf
        # 去除掉前面的行数,写入后再读取一次
        ip_list2=$(awk '{print $3}' /etc/nginx/blockip.conf)
        # 把读取出来的值再次写入blockip.conf
        echo "deny" $ip_list2";"> /etc/nginx/blockip.conf
        # 重启nginx
        /usr/sbin/nginx -s reload
        # 清空之前的日志,截取最新的日志
        echo "" > /var/log/nginx/access.log
fi

第三步,使用crontab定时来实现访问每分钟访问超过60次的IP地址。

# 添加执行权限

命令:chmod +x /usr/local/nginx/ip_test.sh

# 添加定时任务(每一分钟运行一次)

命令: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。

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...