旧颜

宝塔LNMP环境 防CC教程
废话开始老被cc的福利来了,直接上教程。本教程只防CC攻击,不能防DDOS,防DDOS请麻溜买高防秒解。实测:1核...
扫描右侧二维码阅读全文
28
2019/07

宝塔LNMP环境 防CC教程

废话开始

老被cc的福利来了,直接上教程。
本教程只防CC攻击,不能防DDOS,防DDOS请麻溜买高防秒解。
实测:1核2G内存撑住800多代理IP持续攻击,屹立不倒。
本教程借助根据CPU/内存大小 优化LNMP环境配置,且使用了类似cfCDN的防CC攻击特点并做了一些优化。

什么是CC攻击?

以为我要跟你讲?自己不会百度搜索(http://www.baidu.com

你是否受到CC攻击了

1.网站访问缓慢,报503错误(nginx拒绝连接),502错误(php挂逼)
2.服务器CPU 100%;
基本上确诊被C了。

LNMP环境优化

1.nginx优化:nginx没有过多的优化,一般nginx都死被php拖死的。简称:扶不起来
2.宝塔中nginx的过滤器测试效果并不理想,如果各位不打算看接下来的核心内容,可以开启“防CC攻击模块”并设置为频率100,周期60。能有效防止一些恶意访问,比如小学生找不到代理,就几个代理。如果打算支持一下,请直接关掉它。
3.php优化:服务器挂壁基本都是php进程太多导致的了。nginx是个传菜的,php就是真正花时间吃饭的。

4.如图:简单理解,最少15个人在厂里,最多50个人同时干活,如果有35个人以上没干活就开除掉。
5.根据CPU核数设定起始进程数和最小空闲,这样可以发挥正常状态的最大优势,加快处理速度 设置为15*核数 ,即1核15进程,双核30进程。
6.根据内存设置最大进程,防止出现内存爆炸,导致fpm挂起或者mysql等其他服务挂逼。设置为1G*(40-50),即1G内存40-50,2G内存80-100。
7.设置上面两项可以更有效率的使用服务器。
8.如上设置并不能防止CC攻击,但是为我接下来需要说的提供了前提。

redis + 验证码 + 策略 防CC

采用redis高性能数据库,合理的访问策略验证并在超大攻击时开启验证码访问。让网站远离CC
1.安装redis,在宝塔软件管理找到,安装;
2.安装php redis扩展,你用哪个php就安装哪个php的扩展,别装错了;
3.在网站入口,如typecho的index.php 头部加入如下代码:

if (!defined('__TYPECHO_ROOT_DIR__')) exit;  //typecho header.php文件头部
//CC攻击停止后会尽快解除验证码,回到正常状态

//防CC配置
$IPmax = 30; //开启验证码条件 值>=php最大进程数,适当设置更大会降低验证码触发条件,但会增大502错误几率(php挂起) 

$IPfor = 60; //周期 这个值基本不用动

$IPban = 60; //扔入黑名单 60秒内访问超过60次即拉黑IP

$banTime = 3600*24; //黑名单时长 扔小黑屋时长,这种代理IP放一天感觉都少了 = =!

$ip = ip();

//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

//拦截黑名单
if($redis->exists($ip.'ban')){
   exit('您被关进了小黑屋,么么哒!如有疑问,请联系站长');
}

//扔黑名单检测
if($redis->get($ip.'ok') >= $IPban){
   $redis->setex($ip.'ban', $banTime, '1');
}

if($redis->exists($ip.'ok')){
   $redis->incrby($ip.'ok',1); //记录IP 自增1
}else{
   $redis->setex($ip.'ok',$IPfor,1);
}

//按需开启防CC 小黑屋IP不会触发该条件,所以当一段时间以后就会解除验证码。除非攻击者换一批代理继续攻击。如此往复
if(count($redis->keys("*ok")) > $IPmax){
   //验证
   if($_COOKIE['key'] == ''){
       if($_GET['cc']){
           $key = md5($ip.$_GET['cc']);
           setcookie("key",$key);
       }
   }
   //拦截代码
   if($_COOKIE['key'] && $_COOKIE['cc'] && $_COOKIE['key'] == md5($ip.$_COOKIE['cc'])){
       //通过
   }else{
       if($_GET['cc']){
           $key = md5($ip.$_GET['cc']);
           setcookie("key",$key);
       }else{
           $cc = rand(1000,9999);
           setcookie("cc",$cc);
           //这里只是简单的构造了一下验证码,有能力可以自己更改的更安全和完美。
           echo '<!DOCTYPE html>
           <html>
           <body>
           <form action="">请输入:'.$cc.' :<input type="text" name="cc" value=""><input type="submit" value="继续访问"></form> 
           <p>访问异常,请输入验证码。</p>
           </body>
           </html>';
       }
       exit();
   }
}
function ip() {
   if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
       $ip = getenv('HTTP_CLIENT_IP');
   } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
       $ip = getenv('HTTP_X_FORWARDED_FOR');
   } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
       $ip = getenv('REMOTE_ADDR');
   } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
       $ip = $_SERVER['REMOTE_ADDR'];
   }
   $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
   return $res;
}

4.整个教程就完啦~,赶快找个CC软件C自己一波试下吧~

2019/07/29更新一个验证码美化页面

先放图

如果喜欢替换上面代码的第55行<!DOCTYPE html>至61行</html>代码即可!

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta charset="UTF-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="renderer" content="webkit"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>访问异常</title>
</head>
<body>
    <div class="main">
        <img class="alert" alt="访问异常" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIoAAACACAMAAADjwgEwAAAAOVBMVEUAAAD5dBr7dRj4dBn/cBD5cxr4cxn6chj7dBj/cBj5cxr5dBn6cxn4dBn5cxr6dRX5cxr5cxr5dBoQJfbPAAAAEnRSTlMAgD/AEPDgYEAgoLCQcFAw0J/MNdW8AAADg0lEQVR42s3b7W7iMBSEYWftxA75At//xW7VZRWnQ3WkvOKE+VmJMtjxg8Ek4Iy5e8zdmsLFSXmoz8QSrsw61CZxDJdlrsf0OVyUR5WALrDJh3SZ68uswT1rfZ3e/dpNff0lMTjnVr/yEVO01SZdWae6Z/CFNzYXxxa+kttqwTHl2ORHl95zWBrvl/BMM0e34JZ8XC+6phwWtD7ptv95uWBBdzIVMm0luGTshVYB+B5ccvt12Ubnt8Xt91Vb3JyzX/rk5Jy+cr2M3Jyzl8nMnOO6Bewc103TMee4btw5rpsmA+e4bm7O2boh57huS9twyaODc7Zu43fBR3J1bni1q0/Pv0bgHNNNl3cGzgHdyouhmqBzXLf9SZ2c01HXKsA5pptWcXJOV6hWAc5R3bQKcI7qplUcnLs3uhlV1Ln5bboZVd7rXGqdMKuoQ9ObdDOqAOeAbkYVY0fOdTOqAOeAblLFEOAdutlVbOe4bmYV4BzQzahiOId104DPrVw3uwp3zv5fdhXgHNDNqAKcs3Sbw4kqhnNAN7vK25yLhlFGFcM5pJtdBTtn65ZPVDGcY7rZVbhzpgmgitgEdQNV5DUx3UAV5pxebaCKOMd0A1WYcyoTqKJWIt1AFeSczi6rou+rQDdQBTmnEoAqzLn9cfvjYBXdmQLdQBXgnOrGq+j7PNANVAHOiW6gCnBO2idQBTunuvEqtnPoxE2rgJXJdNMqyCt8OqsnH8A5NoZ6HgScoyf5+ykZ+raGr7f97PCWwD4I6iYnquCbPa4b/0aA6OZwgo9/NwV2IEC3950YeP7GTp1DuhkBzpkDx2M7x3XTAOfMRWZn7OJwn5YETjCQbjqtw8qc47o95GHAOaTbUptswDmkm/6aPwLnsG65HpKQc/rqtvP3fRTgHNUt1kM67tx49u6RqR6SgXNIt30097mlzpXT5G+1zQD2c3zvFmV+kHM6aedgieDBz2GZyN5t2+87TGQ/131PGdu7pa7/Hs/M9nPDD2i3cCqllA3s5/bnjqKbY4bDDLXFQOiwxJaGe/BP2gcihCLQuiZKlV1f58zNDmr9lNtLSyg+C8jeKrSXbX/pCqqHxdyvwTO6j53qnvu8/nFLfgz1uGXJ9SMy/sP3A3J7fhq7Pv34f21fnkUWt3eUtDTVSzPL1u6SKGfjrV6TvtM98bhccMlMOYWXSWXpHJNLaPMXZ8oyOMxlLIsAAAAASUVORK5CYII=">
        <form action="" class="mk-side-form">
            <h2 class="pw-tip">访问异常!</h2>
            <input type="text" name="cc" placeholder="请输入'.$cc.'查看" required><button type="submit">继续访问</button>
        </form>
        <a href="http://wpa.qq.com/msgrd?v=3&uin=2191511855&site=qq&menu=yes" class="return-home" title="如有疑问欢迎联系我!">- 联系我 - </a>
    </div>
    <style type="text/css">
    *{font-family:"Microsoft Yahei",微软雅黑,"Helvetica Neue",Helvetica,"Hiragino Sans GB","WenQuanYi Micro Hei",sans-serif;box-sizing:border-box;margin:0px;padding:0px;font-size:14px;-webkit-transition:.2s;-moz-transition:.2s;-ms-transition:.2s;-o-transition:.2s;transition:.2s}
    html,body{width:100%;height:100%}
    body{background-color:#F4F6F9;color:#768093}
    input,button{font-size:1em;border-radius:3px;-webkit-appearance:none}
    input{width:100%;padding:5px;box-sizing:border-box;border:1px solid #e5e9ef;background-color:#f4f5f7;resize:vertical}
    input:focus{background-color:#fff;outline:none}
    button{border:0;background:#6abd09;color:#fff;cursor:pointer;opacity:1;user-select:none}
    button:hover,button:focus{opacity:.9}
    button:active{opacity:1}
    .main{width:100%;max-width:500px;height:300px;padding:30px;background-color:#fff;border-radius:2px;box-shadow:0 10px 60px 0 rgba(29,29,31,0.09);transition:all .12s ease-out;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto;text-align:center}
    .alert{width:80px}
    .mk-side-form{margin-bottom:28px}
    .mk-side-form input{float:left;padding:2px 10px;width:77%;height:37px;border:1px solid #ebebeb;border-right-color:transparent;border-radius:2px 0 0 2px;line-height:37px}
    .mk-side-form button{position:relative;overflow:visible;width:23%;height:37px;border-radius:0 2px 2px 0;text-transform:uppercase}
    .pw-tip{font-weight:normal;font-size:26px;text-align:center;margin:25px auto}
    #pw-error {color: red;margin-top: 15px;margin-bottom: -20px;}
    .return-home{text-decoration:none;color:#b1b1b1;font-size:16px}
    .return-home:hover{color:#1E9FFF;letter-spacing:5px}
    </style>
</body>
</html>
最后修改:2019 年 09 月 11 日 11 : 43 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论