- A+
最近3z学堂服务器遭到了网络攻击,还被黑了一次,还好有整站备份,迅速恢复了,不过也不由得需要重视一下网络安全了,毕竟网络上还是有不怀好意的人,今天3z学堂就给大家介绍下如何利用nginx允许和禁止某个IP或IP段访问,进而实现网站的防采集和防被攻击。
首先我们先简单了解一下Nginx服务器——Nginx是一款轻量级的Web服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型网页服务器中表现较好。
查找需要禁止的IP,具体命令如下:
[root@li576-144 ~]# awk '{print $1}' /usr/local/nginx/logs/access.log |sort |uniq -c|sort -n
access.log 是日志文件,显示结果左侧为访问次数,右侧为访问者IP,访问次数过多,并且IP不是蜘蛛爬虫的IP需要禁止掉,输出结果:
2048 15.138.211.40
2459 5.188.221.39
2655 124.41.74.148
8716 188.167.212.123
2858 5.188.211.32
...
很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,本例当中我们屏蔽掉188.167.212.123,我们先一起来了解下Nginx关于ip的指令。
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中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
一般说来Nginx允许和禁止某个IP或IP段的访问都建立在该访问可以正常通过iptable防火墙。当然,也可以把过滤出的ip直接加到iptables中,彻底拒绝该ip的所有请求,下面3z学堂来给大家举例说明。
如何配置禁用ip或ip段呢?
下面说明假定nginx的目录在/usr/local/nginx/
首先要建一个封ip的配置文件blockips.conf,然后vi blockips.conf编辑此文件,在文件中输入要封的ip。
deny 1.2.3.4; deny 91.212.45.0/24; deny 91.212.65.0/24;
然后保存此文件,在nginx的配置文件nginx.conf中加入如下配置,可以放到http, server, location, limit_except语句块,需要注意相对路径,本例当中nginx.conf,blockips.conf在同一个目录中。
在http配置节内添加下面一行配置:
include blockips.conf;
保存nginx.conf文件,然后测试现在的nginx配置文件是否是合法的:
/usr/local/nginx/sbin/nginx -t
如果配置没有问题,就会输出:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful
如果配置有问题就需要检查下哪儿有语法问题,如果没有问题,需要执行下面命令,让nginx重新载入配置文件,就可以生效了
/usr/local/nginx/sbin/nginx -s reload
如何禁止所有外网ip,仅允许内网ip呢?
如下配置文件
location / { # block one workstation deny 192.168.1.1; # allow anyone in 192.168.1.0/24 allow 192.168.1.0/24; # drop rest of the world deny all; }
上面配置中禁止了192.168.1.1,允许其他内网网段,然后deny all
禁止其他所有ip。
如何格式化nginx的403页面呢?
首先执行下面的命令:
cd /usr/local/nginx/html vi error403.html
然后输入403的文件内容,例如:
<html> <head><title>Error 403 - IP Address Blocked</title></head> <body> Your IP Address is blocked. If you this an error, please contact webmaster with your IP at webmaster@example.com </body> </html>
如果启用了SSI,可以在403中显示被封的客户端ip,如下:
Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.
保存error403文件,然后打开nginx的配置文件vi nginx.conf
,在server配置节内添加下面内容
# redirect server error pages to the static page error_page 403 /error403.html; location = /error403.html { root html; }
然后保存配置文件,通过nginx -t
命令测试配置文件是否正确,若正确通过nginx -s reload
载入配置。
以上内容就是3z学堂给大家的分享,最后再提醒一下,单独网站屏蔽IP的方法,把include blockips.conf; 放到网址对应的在server{}语句块、所有网站屏蔽IP的方法,把include blockips.conf; 放到http {}语句块,希望能帮助到大家。
2019年2月12日 下午1:45 沙发
楼主,又更新了啊
2019年2月13日 下午1:02 1层
@乱翻书 是啊,之前太忙,没怎么顾上更新,有空就更新下,欢迎常来看看!
2019年4月2日 下午5:41 板凳
文章不错非常喜欢
2019年4月14日 上午12:13 1层
@今日新闻 感谢支持,希望对你有帮助!