详解Nginx允许和屏蔽单个IP或IP段访问

  • 4
  • 1,978 views
  • A+
所属分类:网络维护
摘要

对于网站来说,有些访问请求其实是不坏好意的,毕竟网络上还是有不怀好意的人,今天3z学堂就给大家介绍下如何利用nginx允许和禁止某个IP或IP段访问,进而实现网站的防采集和防被攻击。

最近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 {}语句块,希望能帮助到大家。

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  4   博主  0

    • 乱翻书 乱翻书 3

      楼主,又更新了啊

        • 勇之助 勇之助 4

          @乱翻书 是啊,之前太忙,没怎么顾上更新,有空就更新下,欢迎常来看看!

        • 今日新闻 今日新闻 1

          文章不错非常喜欢

            • 勇之助 勇之助 4

              @今日新闻 感谢支持,希望对你有帮助!