26

【Nginx】如何封禁IP和IP段?看完这篇我会了!!

 4 years ago
source link: http://server.51cto.com/sOS-620905.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:https://github.com/sunshinelyz/mykit-delay

写在前面

Nginx不仅仅只是一款反向代理和负载均衡服务器,它还能提供很多强大的功能,例如:限流、缓存、黑白名单和灰度发布等等。在之前的文章中,我们已经介绍了Nginx提供的这些功能。今天,我们来介绍Nginx另一个强大的功能:禁用IP和IP段。

zEbERfz.jpg!web

禁用IP和IP段

Nginx的ngx_http_access_module 模块可以封配置内的ip或者ip段,语法如下:

deny IP; 
deny subnet; 
allow IP; 
allow subnet; 
# block all ips 
deny    all; 
# allow all ips 
allow    all; 

如果规则之间有冲突,会以最前面匹配的规则为准。

配置禁用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.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,仅允许内网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页面

如何格式化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 binghe with your IP at [email protected] 
</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载入配置。

本文转载自微信公众号「冰河技术」,可以通过以下二维码关注。转载本文请联系冰河技术公众号。

YrQBbaF.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK