服务器拒绝频繁web请求的常用方法

服务器
一般生产环境的web服务器资源,都被视为十分珍贵,总是希望资源都尽可能不浪费地用在服务合法用户。但总会遇到一些恶意的客户端,频繁向web服务器发起嗅探式的请求,无论是恶意攻击或者是想从你的站点上获取到他们需要的数据资源,这些都不是网站管理员希望服务的用户。

 一般生产环境的web服务器资源,都被视为十分珍贵,总是希望资源都尽可能不浪费地用在服务合法用户。但总会遇到一些恶意的客户端,频繁向web服务器发起嗅探式的请求,无论是恶意攻击或者是想从你的站点上获取到他们需要的数据资源,这些都不是网站管理员希望服务的用户。为了降低服务器的负载,更好地服务合法用户的web请求,网站管理员希望将恶意用户封禁在web服务器上游。

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。常见的一些搜索引擎爬虫,同样会给web服务器造成压力。如下图,是从我个人的博客(http://www.thanks.live)nginx服务器的access log里提取到的百度和搜狗搜索引擎爬虫对本站的内容爬取记录:

  1. 123.125.71.87 - - [17/Aug/2017:22:23:49 +0800] "GET /index.php/tag/优化 HTTP/1.1" 200 24218 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"220.181.125.106 - - [17/Aug/2017:23:04:33 +0800] "GET /index.php/feed/post/difference-between-global-and-GLOBALS HTTP/1.1" 200 801 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 

针对因为搜索引擎大量爬取造成的web服务器负载过高,我们可以通过robots.txt控制,但这仅限于遵循Robots协议的搜索引擎,使用方法是在你的web根目录下,创建一个robots.txt文件,文件用法参看百度百科对Robots协议的介绍。值得注意的是,封禁搜索引擎的爬取意味着会对你的站点收录、面向用户曝光产生影响,所以通常来说,会提供专门的供爬虫爬取的服务器。当有访问到达nginx代理层时,由nginx代理识别该访问是正常的用户访问还是爬虫访问,如果是爬虫访问,则反向代理到专门的服务器,如果是正常的用户访问,则负载均衡代理到真正的web服务器。这样既不会破坏搜索引擎对站点的收录,也降低了web服务器不必要的负载。以下是拒绝百度蜘蛛的nginx设置案例:

  1. location / {if ($http_user_agent ~* "Baiduspider"){return 403;}} 

重启nginx,并模拟百度蜘蛛的访问,返回 http 403:

服务器拒绝频繁web请求的常用方法

模拟拒绝百度蜘蛛

如果是恶意用户模拟正常用户发起类DDOS攻击式访问web服务器呢?发现这样的客户端用户,就需要及时封禁IP,以防止给web服务器造成更大的危害。封禁IP,通常使用Linux防火墙-iptables,参考命令如下:

  1. iptables -I INPUT -s 60.206.194.34 -j DROP 

解封禁则使用:

  1. iptables -D INPUT -s 60.206.194.34 -j DROP 

注意:这里顺道也提一下,对于能过xinetd程序启动的网络服务,比如ftp telnet,除了使用iptables设置的办法以外,还可以通过使用TCP_Wrappers(TCP_Wrappers是一个工作在应用层的安全工具),以配置修改/etc/hosts.allow和/etc/hosts.deny文件的方式来实现, 但不是任何服务程序都能使用TCP_wrappers的,使用命令ldd /usr/sbin/sshd,如果输出中有libwrap,则说明可以使用TCP_wrappers, 即该服务可以使用/etc/hosts.allow和/etc/hosts.deny,如果输出没有libwrap则不可使用。但是,TCP_Wrappers 不能解决我们今天主题所讲到的拒绝异常web请求的问题。

以上列举的方法,都是通过手动添加封禁的配置,实际上,在生产环境中,都应该实现自动化配置的方式。iptables的设置更多的是故障发生或者监控发现后,彻底封禁恶意用户的方法。在实际运维场景中,我们更多的是希望根据单个ip的访问频次,来决定是否封禁或者暂时封禁ip。nginx为我们提供了频次控制的Module。限于篇幅长度,关于nginx请求频控,将在下次介绍 使用Nginx实现按连接数限流 和 使用Nginx实现请求限流。

参考文献:

http://blog.csdn.net/qjc_501165091/article/details/51225984

http://www.cnblogs.com/azhqiang/p/5801975.html

http://www.nginx.cn/446.html

责任编辑:武晓燕 来源: 今日头条
相关推荐

2013-09-30 10:18:05

Web服务器宕机诊断

2013-06-21 14:20:00

IISWeb服务器

2019-07-01 08:41:24

Web服务器

2019-07-30 10:51:22

数据库MySQL固态硬盘

2018-02-08 09:22:38

Javaweb服务器

2009-01-10 19:32:36

2009-07-09 10:25:05

Servlet的Web

2017-12-29 09:47:11

Web服务器万维网

2011-07-07 15:43:51

服务器安装

2017-11-10 08:58:49

Web服务器应用程序

2011-07-12 14:36:12

2019-02-26 16:20:52

FTP服务器

2010-05-13 18:32:52

2013-05-24 10:33:01

服务器宕机系统管理员

2013-02-20 09:56:39

Facebook自制服务器定制机

2012-05-10 11:44:41

2012-02-23 10:02:08

Web服务器应用服务器

2009-01-16 14:37:57

TomcatWeb服务器应用服务器

2010-12-28 15:39:38

2018-02-05 10:36:01

APP服务器WEB
点赞
收藏

51CTO技术栈公众号