MENU

一次网站CC攻击被动防御小记

May 27, 2020 • Read: 1009 • 随心笔记

2020-06-04 10:32:59 星期四
随后几天也陆续还有几次,单纯的利用PHP效果终究有限,有幸搞体验了一下宝塔的Nginx防火墙,再加上CDN自带防C策略,基本能够拦截九成以上的CC攻击,后面的内容大家一笑而过...

2020-05-28 11:26:54 星期四【更新】
后面提到的来源IP都是国外是不对的,应该是套的CDN服务器地址IP。

正文:

朋友一个彩虹系列的小站点,前几天突然招到了大量恶意的CC攻击,于是乎找到希望我能帮他一下,于是便有了此文。

其实已经不是第一次找我,大概一个月前已经遭D,服务器是阿里云轻量应用服务器,还是24块钱一个月最低配那种,完全就是裸奔状态,第一次被D建议他套了一个CDN,emmmm... 消停了一段时间,但不幸的是最近又来了C。

本来其购买的CDN是可以防C,包括他的服务器使用宝塔部署,也有免费防火墙,但是实际情况是,一旦开了这个防C的话,网站就会出现一些不正常的情况,比如支付回调失败,漏单,无法登录等,很影响浏览体验。

本着请我喝一瓶肥宅水,还是得帮他看一下,但其实过往我也并没有什么经验可循(菜菜一枚)。

这里直接说下最后解决方法吧,技术不咋样,废话一堆堆...

第一时间拿到了它的网站日志(这个日志是防御过后的日志):

大致可以发现几个很明显的规律

  • 1、所有入口都是首页,也就是 index.php 文件
  • 2、所有请求都是POST
  • 3、请求头部会出现伪造来源 www.baidu.com,spider 字样
  • 4、所有来源IP均是国外

像这种CC攻击特征非常明显,属于比较容易搞定那种,下面是解决办法,IP来源我们就先不管了,针对前面三个特征入手。

解决思路:把所有非正常请求拦截掉(废话),根据请求头部进行判断是否正常,不正常的返回503,为啥返回503?既然它喜欢攻击,那就让他认为他已经被打死了吧,嘿嘿。

编辑入口文件,上代码:

<?php

$method     = strtolower($_SERVER['REQUEST_METHOD']);
$userAgent  = strtolower($_SERVER['HTTP_USER_AGENT']);
$refer      = strtolower($_SERVER['HTTP_REFERER']);

if ($method == 'post' || mb_strpos($userAgent,'spider')!==false || mb_strpos($refer,'baidu')!==false) {
    header('HTTP/1.1 503 Service Unavailable');
    exit(0);
}

// ==========================================

效果图:



小结:根本点就在于如何判断区分出哪些请求是正常的,判断依据主要是报文头部和来源IP,然后不正常的拦截掉,其实上面这些操作如果配置在nginx配置文件中,或许效果还要更好,毕竟少了一层PHP解析,负载或许更低一点。

Last Modified: July 17, 2020