|
|
|
|
移动端

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

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

作者:简单印象来源:今日头条|2018-01-04 09:44

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


一般生产环境的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

【编辑推荐】

  1. 为什么我们要使用无服务器架构?
  2. Web服务器,世界的窗口
  3. Netcraft 12 月 Web 服务器排名,微软连续暴跌近 20%
  4. 服务器现十大拐点 2017年IT回顾终篇
  5. 罗列常见WEB服务器性能指标
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢

视频课程+更多

热门职位+更多

读 书 +更多

数据库加密——最后的防线

本书是关于如何使用已有的密码技术和算法对数据库中存储的信息进行保护的书,书中所关注的内容主要是如何设计、建立(或者挑选、集成)一套...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊