源地址: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並封殺.
歡迎各位提出解決方案,或者鏈接