站长们经常遇到服务器被批量扫描或者被恶意抓取的状况,将异常IP添加到黑名单阻止访问是一个常用的手段,下面本教程将指引Nginx新手如何制作IP黑名单限制访问。
语法规则:
Nginx的ngx_http_access_module模块(默认该模块启用)可以控制配置内的ip或者ip段的访问,语法如下:
#拒绝指定精确IP连接 deny IP地址; #拒绝指定范围IP网络段连接 deny IP地址/网段; #拒绝所有IP地址连接,仅本机访问模式 deny all; #仅允许指定精确IP连接 allow IP地址; #仅允许指定范围IP网络段连接 allow IP地址/网段; #允许所有IP地址连接,Nginx默认模式 allow all;
以上规则遵循“匹配即停止”原则,如果规则之间有冲突,会以最前面匹配的规则为准。
使用方法:
在Nginx的conf目录下面建立blockip.conf文件(名称可以随意没有限制,叫“王大锤.haha”都可以),把想要屏蔽的IP加入这个文本文件即可,格式参见上面的“语法规则”。
再此我们做个演示:
#编译安装后配置文件路径参考如下
vim /usr/local/nginx/conf/blockip.conf
#yum或apt安装后配置文件路径参考如下
vim /etc/nginx/conf/blockip.conf
#屏蔽wordpress恶意扫描器网段
deny 222.186.0.0/16;
deny 66.240.0.0/16;
deny 112.114.0.0/16;
#以上千万别忘了每行末尾有个;号,不添加的话nginx重载规则会出错!
一行添加一个规则,注意考虑“匹配即停止”原则,添加完成后保存(以上千万别忘了每行末尾有个;号,不添加的话nginx重载规则会出错!)。
然后在Nginx的主配置文件nginx.conf(也有可能是其他.conf文件名) 按照相应格式加入代码如下,建议使用绝对路径不会出错。
#编译安装后配置文件路径参考如下
vim /usr/local/nginx/conf/nginx.conf
#yum或apt安装后配置文件路径参考如下
vim /etc/nginx/conf/nginx.conf
#在HTTP段落 或者 Server段落添加如下引用
include /usr/local/nginx/conf/blockip.conf;
#以上千万别忘了行末尾有个;号,不添加的话nginx重载规则会出错!
**提示:单个网站屏蔽IP的方法:把include blockip.conf;放到网址对应的在server { }段落块;
**提示:多个网站统一屏蔽IP的方法:把include blockip.conf;放到http { }段落块。
写入配置并保存后,执行Nginx重载入配置命令:
#编译安装Nginx的重载入指令
/usr/local/nginx/sbin/nginx -s reload
#yum或apt安装Nginx的重载入指令
systemctl reload nginx
#旧版本Linux使用yum与apt安装Nginx的重载入指令
service nginx restart
若没有任何报错,那么你写入的规则就生效了;
若有报错,请参考上面的提示,可能是没写;号或者写入include不在指定段落引起的。
使用案例:
设置黑名单,屏蔽指定IP:
deny 222.186.43.125;
设置黑名单,屏蔽指定IP范围段:
#精确屏蔽112.114.102.1地址 deny 112.114.102.1; #屏蔽111.82.99.1到111.82.99.254的地址 deny 111.82.99.0/24; #屏蔽从222.186.0.1到222.186.255.254的地址(推荐,效果好) deny 222.186.0.0/16; #屏蔽从66.0.0.1到66.255.255.254的地址(慎用,屏蔽范围过大可能会误屏蔽很多IP) deny 66.0.0.0/8;
设置白名单,仅允许指定IP访问:
#仅允许指定几个IP地址访问 allow 192.168.0.15; allow 117.15.189.2; allow 10.10.10.178; deny all; #仅允许指定内网IP段访问 allow 192.168.0.0/16; allow 10.0.0.0/8; deny all;
AndyX:当然会有更高级的玩法,比如根据某些异常规则自动将IP添加到黑名单,或者根据日志分析使用web管理界面一键添加黑名单,下次我们在进行讨论吧。
若恶意访问的目标带有明显固定标记的话(固定的引用来源或者是User-Agent标记),也可以设置Nginx规则直接拒绝链接:
(END)
若需转载本文,请标注来源与链接:原创内容AndyX.Net版权所有 https://andyx.net/how_to_use_nginx_to_simply_set_ip_block_list/