今天小编在群里闲扯,有几位小伙伴就提到了 CC 攻击,正好 www.weixiaoduo.com 也很久没更新了,借此水一篇教程~大多数新人在初期建站时使用的都是虚拟主机,环境都是由 IDC 预先配置好的,所以,遇到小规模的 CC 攻击也许感觉不到什么,但是由于是虚拟主机的可定制性太差了,正好建站一段时间,网站也渐渐有了起色,流量也多,换个小内存 vps 用用也挺爽的,谷歌百度一下找个教程依葫芦画瓢把 VPS 环境一装好就屁颠屁颠的给网站搬家了。可是没过几天,却发现访问网站频繁的出错、访问超时、甚至无法访问,顿时就觉得被 IDC 坑了,立马找客服理论去。结果 IDC 直接调出网站日志,留下一句 「网站被 CC 了」 就再也不答理你了。哈哈~貌似撤的有点多啊,不过当年小编还在读高一的时候,自己建立的第一个网站就是这样被毁了的,所以唠嗑有点多啊,直接步入正题:
nginx 下防 cc 方法, 利用 ngx_http_limit_conn_module 模块限制连接数:
http { limit_conn_zone $binary_remote_addr zone=addr:10m; ... server { ... location /download/ { limit_conn addr 1; }
语法: | limit_conn |
默认值: | — |
上下文: | http , server , location |
指定一块已经设定的共享内存空间,以及每个给定键值的最大连接数。当连接数超过最大连接数时,服务器将会返回 503 (Service Temporarily Unavailable) 错误。比如,如下配置
limit_conn_zone $binary_remote_addr zone=addr:10m; server { location /download/ { limit_conn addr 1; }
表示,同一 IP 同一时间只允许有一个连接,具体参考 nginx 官方帮助文档:http://nginx.org/cn/docs/http/ngx_http_limit_conn_module.html
WordPress 防 cc 代码:
//防止 CC 攻击 session_start(); //开启 session $timestamp = time(); $ll_nowtime = $timestamp ; //判断 session 是否存在 如果存在从 session 取值,如果不存在进行初始化赋值 if ($_SESSION){ $ll_lasttime = $_SESSION['ll_lasttime']; $ll_times = $_SESSION['ll_times'] + 1; $_SESSION['ll_times'] = $ll_times; }else{ $ll_lasttime = $ll_nowtime; $ll_times = 1; $_SESSION['ll_times'] = $ll_times; $_SESSION['ll_lasttime'] = $ll_lasttime; } //现在时间-开始登录时间 来进行判断 如果登录频繁 跳转 否则对 session 进行赋值 if(($ll_nowtime - $ll_lasttime) < 3){ if ($ll_times>=5){ header("location:http://127.0.0.1"); exit; } }else{ $ll_times = 0; $_SESSION['ll_lasttime'] = $ll_nowtime; $_SESSION['ll_times'] = $ll_times; }
以上代码直接丢到主题的 functions.php 文件即可。 (PS:以上代码来自 90blog)