工作中的一次linux防範ddos***___轉載

源地址:http://huwei555.blog.51cto.com/1347480/1790185 

在上班路上,看到手機短信裏面發送報警信息,一臺服務器凌晨4點下線了.匆忙到工位,檢查機器果然下線了,報告老闆,然後聯繫機房.大概十分鐘後機房回覆,機器受到***,機房切斷了Ip.

   機器用電信聯通雙網絡,既然電信ip被封,那就用聯通的ip進入機器.

要素一:機器的硬件信息以及Ip信息平時一定要保管好.免得有問題了還要去問機房,白白浪費很多時間.

進入機器後top等發現機器硬件性能ok,再用iptraf,流量也不高(當然不高,主ip都被切了).

機器跑的是網站業務,所以要找問題,去日誌文件裏面找訪問量最高的ip即可.

要素二:找到日誌文件找到***ip,前面爲訪問數量,後面爲訪問ip

[root@localhost logs]# awk '{print $1}' xxx.xxx.com.access.log-20160616| sort | uniq -c | sort -n -k 1 -r | head -n 20

  91653 106.185.53.124

  59492 113.116.56.80

  56556 106.186.18.224

  48629 106.187.45.172

  26962 103.61.136.93

  22825 191.101.1.49

  21068 103.61.136.168

   8947 207.46.13.2

   7508 157.55.39.95

   6392 40.77.167.49

   3673 62.210.247.93

   2827 46.4.94.226

   2670 207.46.13.1

   2576 58.60.220.128

   2402 61.143.205.246

   2035 157.55.39.80

   2029 45.33.44.22

   1953 157.55.39.105

   1872 157.55.39.242

   1862 183.8.3.47

這是我第一次想到的命令,其實在網站訪問日誌裏面應該過濾掉各種蜘蛛爬蟲纔對,封錯了,老闆會跟你急眼.所以,正確的命令應該是:

[root@localhost logs]# cat xxx.xxx.com.access.log-20160616|grep -i -v -E "bing|baidu|google|sougou"|awk '{print $1}'|sort | uniq -c | sort -n -k 1 -r | head -n 20

  91653 106.185.53.124

  59492 113.116.56.80

  56556 106.186.18.224

  48629 106.187.45.172

  26962 103.61.136.93

  22825 191.101.1.49

  21068 103.61.136.168

   3661 62.210.247.93

   2814 46.4.94.226

   2576 58.60.220.128

   2402 61.143.205.246

   2029 45.33.44.22

   1862 183.8.3.47

   1300 103.61.136.164

   1066 218.6.71.194

    880 14.125.142.195

    683 61.158.163.117

    682 61.158.180.226

    680 218.29.54.198

    678 118.212.147.71

把前幾個ip查詢,都是日本,臺灣,德國.再配合訪問日誌,得知是cc***.

先把這幾個Ip用iptables封掉.輸入封殺內容,重啓iptables.

[root@localhost logs]# vim /etc/sysconfig/iptables

-A INPUT -s 106.185.53.124  -p tcp -m state --state NEW -j DROP

[root@localhost logs]# service iptables restart

使用iptables查看就可以看到,很多流量包被丟棄;

[root@localhost logs]# iptables -nvL

Chain INPUT (policy ACCEPT 4045K packets, 604M bytes)

 pkts bytes target     prot opt in     out     source               destination         

    0     0 DROP       tcp  --  *      *       103.61.136.167       0.0.0.0/0           state NEW 

 382K   18M DROP       tcp  --  *      *       106.186.18.85        0.0.0.0/0           state NEW 

   97  4920 DROP       tcp  --  *      *       183.8.3.47           0.0.0.0/0           state NEW 

 380K   18M DROP       tcp  --  *      *       106.187.45.172       0.0.0.0/0           state NEW 

  300 15204 DROP       tcp  --  *      *       46.4.94.226          0.0.0.0/0           state NEW

這個時候機房那邊也解封了電信Ip.觀察一段時間,流量正常.


事後,研究寫過腳本,把訪問量異常的ip獲取然後放在一個文件裏面,使用iptbales封殺.

[root@localhost logs]# cat /sbin/cc.sh 

#!/bin/sh

LOG_FILE=/usr/local/nginx/logs/xxx.xxx.com.access.log   #訪問日誌

IP_FILE=/etc/black       #存放需要禁止的ip文件

NUMBER=2000              #非法訪問量的值

wan0=eth0                #網卡

BACKIP=`cat $IP_FILE`   #每次操作先清空之前的ip

`cat /dev/null > $IP_FILE`

Denyip=`cat $LOG_FILE|grep -i -v -E "bing|baidu|google|sougou"|awk '{print $1}'|sort | uniq -c | sort -n -k 1 -r | head -n 1000000|awk '{if($1>'$NUMBER')print $2}'`

echo $Denyip > $IP_FILE

if [ "$BACKIP" != "" ];then

        for X in $BACKIP

        do

                echo $X ---deny

                iptables -A INPUT -i $wan0 -s $X -p all -j DROP

        done

fi

清空規則很簡單,因爲沒有把規則保存,所以只要用

1

[root@localhost logs]# service iptables restart

就可以把iptbales規則恢復.



反思:1.使用netstat把非法ip列出

           2.不遍歷整個日誌,假設當前被***,列出1小時內訪問異常的Ip並封殺.

歡迎各位提出解決方案,或者鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章