nginx 设置ip黑名单

前言

前几天服务器流量巨大,被阿里云判定为dos攻击了,然后被打进黑洞中。

后来解封后,查询了下nginx日志,把恶意ip加入了黑名单。记录一下操作。

查找要屏蔽的ip

awk '{print $1}' access.log |sort |uniq -c|sort -n

查询 nginx的访问日志文件,会到如下结果,前面是ip的访问次数,后面是ip.需要把不是蜘蛛的ip屏蔽掉

....
2803 173.231.59.194
4651 106.117.10.79
5541 23.100.232.233
9925 42.236.209.240
15187 119.45.60.237

配置nginx.conf

在nginx.conf 配置屏蔽命令 ,可以放到http, server, location, limit_except语句块 。对应不同的屏蔽策略


server {           
        ....
        deny 119.45.60.237;
     }

如果ip比较多也可以单独一个文件配置这些ip

1. 在nginx的安装目录下面,新建屏蔽blockip.conf文件,内容为需要屏蔽的ip和命令

deny 119.45.60.237;
deny 42.236.209.240;
deny 23.100.232.233;
....

2. 在nginx.conf中引用该配置,需要注意相对路径

vim nginx.conf

http{

    include blockip.conf; # 全局屏蔽
}

3. 重启一下nginx的服务:/usr/local/nginx/nginx -s reload 就可以生效了

高级用法

屏蔽ip的配置文件既可以屏蔽单个ip,也可以屏蔽ip段,或者只允许某个ip或者某个ip段访问。

屏蔽单个ip访问 deny IP;

允许单个ip访问 allow IP;

屏蔽所有ip访问 deny all;

允许所有ip访问 allow all;

屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令 deny 123.0.0.0/8

屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令 deny 124.45.0.0/16

屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令 deny 123.45.6.0/24

如果你想实现这样的应用,除了几个IP外,其他全部拒绝, 那需要你在blockip.conf中这样写

allow 1.1.1.1; 
allow 1.1.1.2;
deny all;

单独网站屏蔽IP的方法,把include blocksip.conf; 放到网址对应的在server{}语句块,

所有网站屏蔽IP的方法,把include blocksip.conf; 放到http {}语句块。


已有 0 条评论

    我有话说: