工作中的一次linux防範ddos***

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

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

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

進入機器後top等發現機器硬件性能ok,再用iptraf,流量也不高(當然不高,主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

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

[root@localhost logs]# service iptables restart

就可以把iptbales規則恢復.



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