日期:2014-05-20  浏览次数:20935 次

DDOS 和 CC攻击 防范方案
之前公司网站被DDOS攻击了(另一同事取了个别名叫流量攻击)
刚刚一个朋友的网站(还是个企业级的)也被这样攻击了 聊天中看出很无奈的样子
在这请问下各位有经验的朋友 想这样的DDOS和CC攻击如何防范?
防火墙?代码优化(缓存来存储重复的查询内容)、页面尽可能的使用静态?
限制IP(或IP段)?
服务器升级(这个开销有点大,对于一般网站有些浪费)

之前我也回答过别人的屏蔽来防止攻击,如
http://topic.csdn.net/u/20111116/17/01ed7821-cc2e-4775-abc1-17aa72d675ae.html

但这样的防范能防范多少呢?现在来看有没有有效的防范方案(开销不要无止境的那种)

这儿附上我之前做的一个根据IP拒绝访问的解决方案的部分代码(客户端记录访问,并根据黑白名单是否拒绝请求,服务端分析数据,入库等,并做成WINDOWS服务 ROMOTING通信):



/// <summary>
  /// 名 称:<br>
  /// </summary>
  /// <remarks>
  /// 版 本:1.0<br>
  /// 作 者:****<br>
  /// 创始时间:2011-5-20 17:00:02<br>
  /// 描 述:
  /// ----------修改记录------------<br>
  /// </remarks>
  public class WarningHttpModule : IHttpModule, IRequiresSessionState
  {
  protected static readonly ILog log = LogManager.GetLogger("*******");
  protected static Thread thread = null;
  protected static IVisitAnalysisHandle analysisHander = null;
  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)
  {
  try
  {
  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)sender;
  HttpContext context = application.Context;
  HttpRequest request = application.Request;
  HttpResponse response = application.Response;
  string url = request.RawUrl.ToLower(); //获取当前原始请求的url
  string ip = request.UserHostAddress;
  string extension = System.IO.Path.GetExtension(url).ToLower();
  //是需要检测的页面
  if (extension != ".aspx" && extension != ".asmx" && extension != ".ashx")
  { return; }

  //在白名单范围内
  if (visitManager.IsInWhiteListIP(ip))
  { return; }

  //添加到访问记录里面
  visitManager.AddRequest(DateTime.Now, ip, url);

  //如果是异常ip的请求页
  if (url == "/visitwarning.aspx")