有什么方法能网络安全防范方法CC攻击呀?

Nginx通过修改连接简单防御CC攻击的方法_源码_站长之家
Nginx通过修改连接简单防御CC攻击的方法
[摘要]CC攻击可以归为DDoS攻击的一种。他们之间都原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。本文介绍Nginx简单防御CC攻击的两种方法。
  CC攻击可以归为DDoS攻击的一种。他们之间都原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡CC攻击。代理CC攻击是黑客借助代理服务器生成指向受害主机的合法网页请求,实现DOS,和伪装就叫:cc(ChallengeCollapsar)。而肉鸡CC攻击是黑客使用CC攻击软件,控制大量肉鸡,发动攻击,相比来后者比前者更难防御。因为肉鸡可以模拟正常用户访问网站的请求。伪造成合法数据包。防御CC攻击可以通过多种方法,禁止网站代理访问,尽量将网站做成静态页面,限制连接数量等。  Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用。 其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网站服务器中表现较好。  Nginx虽然可以比Apache处理更大的连接数,但是HTTP GET FLOOD针对的不仅仅是WEB服务器,还有数据库服务器。大量HTTP请求产生了大量的数据库查询,可以在几秒之内使数据库停止响应,系统负载升高,最终导致服务器当机。  本文主要介绍Centos+Nginx下如何快速有效得防御CC攻击。至于如何安装Nginx就不详细介绍了,有兴趣的读者可以在Nginx官方网站(http://www.nginx.org/)下载源代码进行编译。如果你使用的是Centos5,也可以使用rpm包进行安装(http://centos.alt.ru/repository/centos/5/i386/nginx-stable-0.7.65-1.el5.i386.rpm)。一、主动抑制方法  为了让Nginx支持更多的并发连接数,根据实际情况对工作线程数和每个工作线程支持的最大连接数进行调整。例如设置&worker_processes 10&和&worker_connections 1024&,那这台服务器支持的最大连接数就是10×。worker_processes 10;events {worker_connections 10240;}  Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule和NginxHttpLimitReqModule。NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。例如可以定义以下代码:http {limit_zone
$binary_remote_addr
10m;server {location /somedir/ {limit_conn
1;}}}  其中&limit_zone my_zone $binary_remote_addr 10m&的意思是定义一个名称为my_zone的存储区域、my_zone中的内容为远程IP地址、my_zone的大小为10M;&location /somedir/&的意思是针对somedir目录应用规则;&limit_conn my_zone 1&的意思是针对上面定义的my_zone记录区记录的IP地址在指定的目录中只能建立一个连接。  Nginx Http Limit Req Module可以根据条件进行请求频率的控制。例如可以定义以下代码:http {limit_req_zone
$binary_remote_addr
zone=my_req_zone:10m
rate=1r/s;...server {...location /somedir/ {limit_req_zone
zone= my_req_zone
burst=2;}  其中&limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s&的意思是定义一个名称为my_req_zone的存储区域,my_req_zone内容为远程IP地址,my_req_zone大小为10M,my_req_zone中的平均请求速率只能为1个每秒;&location /somedir/&的意思是针对somedir目录应用规则;&limit_req_zone zone= my_req_zone burst=2&的意思是针对上面定义的my_req_zone记录区记录的IP地址在请求指定的目录中的内容时最高2个每秒的突发请求速率。  当有连接触发上诉规则时,Nginx会报&503 Service Temporarily Unavailable&的错误,停止用户请求。返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已,相对来说还是很划算的。  为了测试效果,我将以上代码放入Nginx的配置文件,并编写了一个php文件显示phpinfo;另外还写了一个html文件,其中嵌入了多个iframe调用php文件。当我打开这个html文件了,可以看到只有一个iframe中的php文件正常显示了,其他的iframe都显示503错误。应用举例(Discuz!)  Discuz!是使用比较多的一个php论坛程序。以Discuz!7.0为例,程序目录下有比较多的可以直接访问的php文件,但其中最容易受到攻击的一般有index.php(首页)、forumdisplay.php(板块显示)、viewthread.php(帖子显示)。攻击者一般会对这些页面发起大量的请求,导致HTTP服务器连接数耗尽、mysql数据库停止响应,最终导致服务器崩溃。为了防止上述页面被攻击,我们可以设定以下的规则进行防御:http {limit_zone
myzone_bbs
$binary_remote_addr
10m;limit_req_zone $binary_remote_addr zone=bbs:10m rate=1r/s;...server {...location ~ ^/bbs/(index|forumdisplay|viewthread).php$ {limit_conn
myzone_bbs
3;limit_req zone=bbs burst=2fastcgi_pass
unix:/dev/shm/php-cgi.fastcgi_index
index.fastcgi_param
SCRIPT_FILENAME
/usr/share/nginx/html$fastcgi_script_include
fastcgi_}}}  应用这条规则后,bbs目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。虽然这样的规则一般来说对正常的用户不会产生影响(极少有人在1秒内打开3个页面),但是为了防止影响那些手快的用户访问,可以在nginx中自定义503页面,503页面对用户进行提示,然后自动刷新。在Nginx中自定义503页面:error_page
/errpage/503.503页面的源代码:&html&&head&&title&页面即将载入....&/title&&meta http-equiv=content-type c&&META NAME=&ROBOTS& C&&/head&&body bgcolor=&#FFFFFF&&&table cellpadding=&0& cellspacing=&0& border=&0& width=&700& align=&center& height=&85%&&&tr align=&center& valign=&middle&&&td&&table cellpadding=&10& cellspacing=&0& border=&0& width=&80%& align=&center& style=&font-family: Verdana, T color: #666666; font-size: 11px&&&tr&&td valign=&middle& align=&center& bgcolor=&#EBEBEB&&&br /&&b style=&font-size: 16px&&页面即将载入&/b&&br /&&br /&你刷新页面的速度过快。请少安毋躁,页面即将载入...&br /&&br /&[&a href=&javascript:window.location.reload();&&&font color=#666666&立即重新载入&/font&&/a&]&br /&&br /&&/td&&/tr&&/table&&/td&&/tr&&/table&&/body&&/html&&SCRIPT language=javascript&function update(){window.location.reload();}setTimeout(&update()&,2000);&/script&二、被动防御方法  虽然主动防御已经抵挡了大多数HTTP GET FLOOD攻击,但是道高一尺魔高一丈,攻击者会总会找到你薄弱的环节进行攻击。所以我们在这里也要介绍一下被动防御的一些方法。封IP地址  访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问。以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables阻止访问:#!/bin/shstatus=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F &:& -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`NUM=`echo $status|awk '{print $1}'`IP=`echo $status|awk '{print $2}'`result=`echo &$NUM & 150& | bc`if [ $result = 1 ]thenecho IP:$IP is over $NUM, BAN IT!/sbin/iptables -I INPUT -s $IP -j DROPfi运行crontab -e,将上述脚本添加到crontab每分钟自动运行:* * * * * /root/xxxx.sh通过apache自带的ab工具进行服务器压力测试:# ab -n 1000 -c 100 /bbs/index.php测试完成后,我们就可以看到系统中有IP被封的提示:#tail /var/spool/mail/rootContent-Type: text/ charset=ANSI_X3.4-1968Auto-Submitted: auto-generatedX-Cron-Env: &SHELL=/bin/sh&X-Cron-Env: &HOME=/root&X-Cron-Env: &;PATH=/usr/bin:/bin&X-Cron-Env: &LOGNAME=root&X-Cron-Env: &USER=root&IP:58.246.xx.xx is over 1047, BAN IT!至此,又一次HTTP GET FLOOD防御成功。根据特征码屏蔽请求(对CC攻击效果较好)  一般同一种CC攻击工具发起的攻击请求包总是相同的,而且和正常请求有所差异。当服务器遭遇CC攻击时,我们可以快速查看日志,分析其请求的特征,比如User-agent。下面的是某一次CC攻击时的User-agent,Mozilla/4.0 ( MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate几乎没有正常的浏览器会在User-agent中带上&must-revalidate&这样的关键字。所以我们可以以这个为特征进行过滤,将User-agent中带有&must-revalidate&的请求全部拒绝访问:if ($http_user_agent ~ must-revalidate) {return 403;}  本文主要介绍了nginx下的HTTP GET FLOOD防御,如果有不对的地方,希望大家可以向我提出。同时,也希望大家能够举一反三,把这种思路应用到apache、lighttpd等常见的web服务器中。 软件大小:1.23MB 软件类别:国外软件 |
软件语言:英文 运行环境: 软件授权:开源软件 更新时间: 9:57:42 相关链接:
最流行的Web Server Apache发布了一个重大升级版,Apache HTTP Server 2.4的一个重要目标是大幅改进性能。...
热门源码下载推荐
最受关注报导
编辑推荐排行什么是CC攻击,如何防止网站被CC攻击的方法总汇_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
什么是CC攻击,如何防止网站被CC攻击的方法总汇
云客网是SEO优化为切入点提...|
总评分0.0|
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢DDOS 和 CC攻击 防范方案解决方法 - .NET分析设计当前位置:& &&&DDOS 和 CC攻击 防范方案解决方法DDOS 和 CC攻击 防范方案解决方法&&网友分享于:&&浏览:0次DDOS 和 CC攻击 防范方案之前公司网站被DDOS攻击了(另一同事取了个别名叫流量攻击)
刚刚一个朋友的网站(还是个企业级的)也被这样攻击了&聊天中看出很无奈的样子
在这请问下各位有经验的朋友&想这样的DDOS和CC攻击如何防范?
防火墙?代码优化(缓存来存储重复的查询内容)、页面尽可能的使用静态?
限制IP(或IP段)?
服务器升级(这个开销有点大,对于一般网站有些浪费)
之前我也回答过别人的屏蔽来防止攻击,如
http://topic.csdn.net/u//01ed7821-cc2e-4775-abc1-17aa72d675ae.html
但这样的防范能防范多少呢?现在来看有没有有效的防范方案(开销不要无止境的那种)
这儿附上我之前做的一个根据IP拒绝访问的解决方案的部分代码(客户端记录访问,并根据黑白名单是否拒绝请求,服务端分析数据,入库等,并做成WINDOWS服务&ROMOTING通信):
///&&summary&
&&///&名&称:&br&
&&///&&/summary&
&&///&&remarks&
&&///&版&本:1.0&br&
&&///&作&者:****&br&
&&///&创始时间:&17:00:02&br&
&&///&描&述:
&&///&----------修改记录------------&br&
&&///&&/remarks&
&&public&class&WarningHttpModule&:&IHttpModule,&IRequiresSessionState
&&protected&static&readonly&ILog&log&=&LogManager.GetLogger("*******");
&&protected&static&Thread&thread&=&
&&protected&static&IVisitAnalysisHandle&analysisHander&=&
&&protected&static&VisitManager&visitManager&=&VisitManager.GetInstance();
&&private&static&object&LockHelper&=&new&object();
&&static&WarningHttpModule()
&&if&(null&==&thread)
&&lock&(LockHelper)
&&if&(null&==&thread)
&&thread&=&new&Thread(new&ThreadStart(Process));
&&thread.Start();
&&if&(null&==&analysisHander)
&&lock&(LockHelper)
&&if&(null&==&analysisHander)
&&analysisHander&=&(IVisitAnalysisHandle)Activator.GetObject(typeof(IVisitAnalysisHandle),&"tcp://127.0.0.1:6666/GNT");
&&catch&(Exception&ex)
&&throw&new&Exception("注册预警系统信道失败",&ex);&;
&&private&void&Application_BeginRequest(object&sender,&EventArgs&e)
&&HttpApplication&application&=&(HttpApplication)
&&HttpContext&context&=&application.C
&&HttpRequest&request&=&application.R
&&HttpResponse&response&=&application.R
&&string&url&=&request.RawUrl.ToLower();&//获取当前原始请求的url
&&string&ip&=&request.UserHostA
&&string&extension&=&System.IO.Path.GetExtension(url).ToLower();
&&//是需要检测的页面
&&if&(extension&!=&".aspx"&&&&extension&!=&".asmx"&&&&extension&!=&".ashx")
&&//在白名单范围内
&&if&(visitManager.IsInWhiteListIP(ip))
&&//添加到访问记录里面
&&visitManager.AddRequest(DateTime.Now,&ip,&url);
&&//如果是异常ip的请求页
&&if&(url&==&"/visitwarning.aspx")
&&string&userCode&=&string.E
&&string&sessionCode&=&string.E
&&if&(request["AuthCode"]&!=&null)
&&userCode&=&request["AuthCode"].ToString().ToLower();
&&if&(HttpContext.Current.Session&!=&null&&&&HttpContext.Current.Session["visitwarningcode"]&!=&null)
&&sessionCode&=&(context.Session["visitwarningcode"]&as&string).ToLower();
&&if&(userCode&==&sessionCode&&&&!string.IsNullOrEmpty(userCode))
&&visitManager.RemoveBlackListIP(ip);
&&response.Redirect("/Index.aspx");
&&//是否是黑名单
&&if&(visitManager.IsInBlackListIP(ip))
&&response.Redirect("/VisitWarning.aspx");
&&static&void&Process()
&&while&(true)
&&//分析上一分钟的数据
&&DateTime&dt&=&DateTime.Now.AddMinutes(-1);
&&Dictionary&string,&Dictionary&string,&int&&&dic&=&visitManager.GetRequestRecord(dt);
&&//清空数据
&&visitManager.RemoveRequestRecord(dt);
&&List&BlackIP&&blackIP&=&analysisHander.AnalysisVisit(dic);
&&foreach&(BlackIP&ip&in&blackIP)
&&visitManager.AddBlackListIP(ip);
&&catch&(ThreadAbortException&tae) 共&2&页:
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 比特币病毒防范方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信