歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

工作中的一次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並封殺.

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

Copyright © Linux教程網 All Rights Reserved