寶塔LNMP環境-防CC教程

老被cc的福利來了,群里一些朋友天天被攻擊,老夫也遭殃,坐不住了,直接上教程。

本教程只防CC攻擊,不能防DDOS,防DDOS請麻溜買高防秒解。

實測:1核1G內存撐住700多代理IP持續攻擊,屹立不倒,且CPU在45%左右徘徊。

本教程借助根據CPU/內存大小 優化LNMP環境配置,且使用了類似cfCDN的防CC攻擊特點并做了一些優化

什么是CC攻擊

以為我要跟你講?自己不會百度搜索

你是否受到了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.在網站入口,index.php 頭部加入如下代碼:

//找到你主題的head原有代碼,復制下列代碼放在下面
 
//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('您被關進了小黑屋,么么噠!如有疑問,請聯系站長QQ86512');
}
 
//扔黑名單檢測
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;
}
------本頁內容已結束,喜歡請分享------
溫馨提示:由于項目或工具都有失效性,如遇到不能做的項目或不能使用的工具,可以根據關鍵詞在站點搜索相關內容,查看最近更新的或者在網頁底部給我們留言反饋。
? 版權聲明
THE END
喜歡就支持一下吧
點贊4120 分享
評論 搶沙發

請登錄后發表評論

    暫無評論內容