屏蔽CC攻擊

ban特征

需要有tcpdump工具

apt-get install tcpdump
tcpdump -s0 -A -n -i any | grep -o -E '(GET|POST|HEAD).*'
tcpdump -s0 -A -n -i any | grep -o -E '(GET|POST|HEAD|Host).*'

tcpdump還有其他的命令:

tcpdump -s0 -A -n -i any | grep  ^User-Agent
tcpdump -s0 -A -n -i any | grep -o -E '(X-Forwarded-For).*'
tcpdump -s0 -A -n -i any | grep -o -E '(Referer).*'
Paste_Image.png

像這種某一個頁面被重復(fù)請求,并且服務(wù)器CPU和流量大增好港,那肯定是cc了。

我們需要使用nginx來限制訪問頻率米罚,以及ban掉這些特征


limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
        listen   80;
        server_name www.mysite.com;

         #訪問日志
       # access_log /mnt/www/mysite/logs/access.log;
        #error_log /mnt/www/mysite/logs/access.log;

        #靜態(tài)文件直接從目錄返回
        location ^~ /static/ {
                root /mnt/www/mysite/app;
        }

        #搜索頁面判斷來路钧汹,并且設(shè)置
        location ^~ /search {
                #非淘客喵來路全部禁止訪問搜索
                if ($http_referer !~* .*\.mysite.com){
                        return 403;
                }
                #deny all;
                #搜索限制訪問次數(shù)
                limit_conn addr 2;
                limit_req zone=one burst=3 nodelay;
                proxy_pass http://127.0.0.1:8000;
                break;
        }

        #其他頁面
        location / {
                #限制訪問次數(shù)
                limit_conn addr 3;
                limit_req zone=one burst=5;

            proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            #文件不存在則轉(zhuǎn)到gunicorn服務(wù)
            if (!-f $request_filename) {
                proxy_pass http://127.0.0.1:8000;
                break;
            }
        }
    }

BAN IP

用這個命令查看大于并發(fā)大于20的IP,里面有些是服務(wù)器的云盾或者之類的IP段录择,ban掉就無法訪問了

#查詢訪問次數(shù)大于20次的ip
#-c 2000的意思是拔莱,總訪問數(shù)達(dá)到2000次退出并返回結(jié)果
tcpdump -i eth1 -tnn dst port 80 -c 2000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |awk -v str=20 '{if ($1>str){print $1,$3}}'| head -20
Paste_Image.png

監(jiān)聽到有很多ip大量訪問碗降,最前面是訪問次數(shù)。
那么我們可以寫一個腳本利用iptables防火墻ban掉他們塘秦。

cd /root
vi deny.sh

寫入以下腳本

#!/bin/bash
#Author:ZhangGe&Corek
#Desc:Auto Deny Black_IP Script.
#Date:2016-11-16
#從第一個參數(shù)取得限制閾值讼渊,如果未設(shè)置最高并發(fā),將設(shè)置為30
if [[ -z $1 ]];then
        num=30
else
        num=$1
fi
 
#進(jìn)入到腳本所在目錄
cd $(cd $(dirname $BASH_SOURCE) && pwd)
 
#取得當(dāng)前請求大于閾值$num的IP列表
iplist=`tcpdump -i eth1 -tnn dst port 80 -c 5000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |awk -v str=$num '{if ($1>str){print $3}}'`
 
#循環(huán)IP列表進(jìn)行篩選和處理
if [[ ! -z $iplist ]];
then
        for black_ip in $iplist
            do
                #取得IP所在段
                ip_section=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`
                #先檢查白名單中是否存在匹配的IP段(為了支持整段IP為白名單)
                grep -q $ip_section ./white_ip.txt
                if [[ $? -eq 0 ]];then
                        #若發(fā)現(xiàn)black_ip和白名單的一個段匹配尊剔,則寫入到待驗證列表爪幻,并暫時放過
                        echo $black_ip >>./recheck_ip.txt
                else
                        #若不再白名單當(dāng)中,則直接將black_ip加入到防火墻的DROP規(guī)則當(dāng)中须误,并記錄

                        #封單IP
                        #iptables -nL | grep $black_ip || iptables -I INPUT -s $black_ip -j DROP
                        #echo $black_ip >>./black_ip.txt
                        #直接封IP段
                        iptables -nL | grep $ip_section.0/24 || iptables -I INPUT -s $ip_section.0/24 -j DROP
                        echo $ip_section.0/24 >>./black_ip.txt
                fi
           done
fi

保存后挨稿。
我們建立一個白名單txt,把服務(wù)器IP和爬蟲IP以及阿里云云盾的IP段寫進(jìn)去霹期,要是這些IP被ban掉叶组,web就無法訪問了
比如

vi white_ip.txt
#寫入
#服務(wù)器的IP
106.14.30.*
#云盾IP
140.205.16.*

保存。

運行历造,后面的參數(shù)20表示這段結(jié)果中訪問數(shù)大于20的段全部ban掉

nohup ./deny.sh 20

附上iptables的操作

#查看ban掉的IP
iptables -nL
#清空iptables防火墻的記錄
iptables -F
#將某個ip單獨ban
iptables -I INPUT -s 115.219.59.126 -j DROP
#將某個IP取消屏蔽
iptables -D INPUT -s 119.182.160.132 -j DROP
#屏蔽ip段
iptables -I INPUT -s 115.219.59.0/24 -j DROP

2017年8月1日更新

其實最有用的還是屏蔽來路甩十,現(xiàn)在的很多CC都是用腳本嵌套刷,來路都是各種亂七八糟的網(wǎng)頁吭产。

編輯站點nginx配置文件

cd /etc/nginx/sites-available
vi mysite

內(nèi)容如下

server {
        listen   80;
        server_name www.mysite.com;
        #修改最大上傳為10M侣监,默認(rèn)為2M,超出大小出現(xiàn)413 Request Entity Too Large錯誤
        client_max_body_size 10M;
      
         #搜索頁面防CC
        location ^~ /search {
                set $deny 1;
                if ($http_referer ~* .*\.mysite.com){
                        set $deny 0;
                }
                if ($http_referer ~* .*\.baidu.com){
                        set $deny 0;
                }
                if ($http_referer ~* .*\.sogou.com){
                        set $deny 0;
                }
                if ($http_referer = ''){
                        set $deny 0;
                }
                #如果來路驗證不通過臣淤,則拒絕
                if ($deny = 1){
                        rewrite .+ http://www.163.com redirect;
                        #rewrite ^/(.*) http://www.163.com redirect;
                        #return 403;
                }

            #將訪客IP加入headers中橄霉,否則獲取到的將是127.0.0.1
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            #如果請求的文件不存在,則將路由轉(zhuǎn)發(fā)到gunicorn的8000端口
            if (!-f $request_filename) {
                proxy_pass http://127.0.0.1:8000;
                break;
            }

        }

        #默認(rèn)請求邑蒋,nginx反向代理(動態(tài)頁面轉(zhuǎn)發(fā)至gunicorn)
        location / {
            #將訪客IP加入headers中姓蜂,否則獲取到的將是127.0.0.1
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            #如果請求的文件不存在,則將路由轉(zhuǎn)發(fā)到gunicorn的8000端口
            if (!-f $request_filename) {
                proxy_pass http://127.0.0.1:8000;
                break;
            }
        }

        #靜態(tài)文件請求轉(zhuǎn)發(fā)給目錄
        location ^~ /static/ {
                root /var/www/mysite/app;
        }
    }




立竿見影医吊,加上這個nginx配置钱慢,然后重啟nginx。

Paste_Image.png

馬上帶寬就降了卿堂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末束莫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子草描,更是在濱河造成了極大的恐慌览绿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穗慕,死亡現(xiàn)場離奇詭異饿敲,居然都是意外死亡,警方通過查閱死者的電腦和手機逛绵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門诀蓉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栗竖,“玉大人,你說我怎么就攤上這事渠啤『” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵沥曹,是天一觀的道長份名。 經(jīng)常有香客問我,道長妓美,這世上最難降的妖魔是什么僵腺? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮壶栋,結(jié)果婚禮上辰如,老公的妹妹穿的比我還像新娘。我一直安慰自己贵试,他們只是感情好琉兜,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毙玻,像睡著了一般豌蟋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桑滩,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天梧疲,我揣著相機與錄音,去河邊找鬼运准。 笑死幌氮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胁澳。 我是一名探鬼主播该互,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼听哭!你這毒婦竟也來了慢洋?” 一聲冷哼從身側(cè)響起塘雳,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤陆盘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后败明,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隘马,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年妻顶,在試婚紗的時候發(fā)現(xiàn)自己被綠了酸员。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜒车。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幔嗦,靈堂內(nèi)的尸體忽然破棺而出酿愧,到底是詐尸還是另有隱情,我是刑警寧澤邀泉,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布嬉挡,位于F島的核電站,受9級特大地震影響汇恤,放射性物質(zhì)發(fā)生泄漏庞钢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一因谎、第九天 我趴在偏房一處隱蔽的房頂上張望基括。 院中可真熱鬧,春花似錦财岔、人聲如沸风皿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揪阶。三九已至,卻和暖如春患朱,著一層夾襖步出監(jiān)牢的瞬間鲁僚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工裁厅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冰沙,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓执虹,卻偏偏與公主長得像拓挥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袋励,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容