原创

详解Nginx允许和屏蔽单个IP或IP段访问配置方案

        首先简单了解一下Nginx服务器。Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。本文主要介绍如何利用nginx允许和禁止某个IP或IP段访问,来实现防止采集和防止被攻击操作。


查找需要禁止的IP,具体命令如下:

[root@iZ256w2hluuZ ~]# awk '{print $1}' /usr/local/nginx/logs/access.log |sort |uniq -c|sort -n

access.log 是日志文件,显示结果左侧为访问次数,右侧为访问者IP,访问次数过多,并且IP不是蜘蛛爬虫的IP需要禁止掉,输出结果:

2048 5.188.211.40
2459 5.188.211.39
2655 121.41.74.148
2716 188.165.222.123
2858 5.188.211.62
...

   

nginx指令:

allow 语法:allow address | CIDR | unix: | all;

配置段:http, server, location, limit_except

允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。


deny 语法:deny address | CIDR | unix: | all;

配置段:http, server, location, limit_except

禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。


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

deny IP;  # 屏蔽单个ip访问

allow IP; # 允许单个ip访问

deny all; # 屏蔽所有ip访问

allow all; # 允许所有ip访问

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

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

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


allow和deny使用简单实例代码如下:

location / {
deny  192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny  all;
}

上述实例只允许IPV4的10.1.1.0/16和192.168.1.0/24中出去192.168.1.1及IPV6中的2001:0db8::/32来访问,其他的客户端ip访问都是不允许的。简单屏蔽nginx.conf文件配置参考图:

$2GA3LCM@KA8U_}SL6`%)`C.png


以文件的是形式允许或禁止某个IP或者IP段,新建blocksip.conf文件,增加如下内容:

allow 192.168.1.1;
deny all;

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

所有网站屏蔽IP的方法,把include blocksip.conf; 内容放到nginx配置对应的在http {}语句块。


屏蔽访问过于频繁的IP,编写脚本需要根据实际的nginx服务器log日志,取出访问IP和User-Agent,在nginx配置nginx.conf文件中添加内容:

include ./vhost/blocksip.conf;


编写脚本内容如下:

#!/bin/bash
nginx_home=/usr/local/nginx
log_path=/usr/local/nginx/logs
tail -n50000 /usr/local/nginx/logs/access.log \
|awk '{print $1,$12}' \
|grep -i -v -E "google|baidu|qq|so|sogou" \
|awk '{print $1}'|sort|uniq -c|sort -rn \
|awk '{if($1>1000)print "deny "$2";"}' >$nginx_home/conf/vhost/blocksip.conf
/usr/local/nginx/sbin/nginx -s reload

nginx允许和禁止某个IP或IP段的访问都建立在该访问可以正常通过iptable防火墙。当然,也可以把过滤出的ip直接加到iptables中,彻底拒绝该ip的所有请求。

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信