在上班路上,看到手機短信裏面發送報警信息,一臺服務器凌晨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規則恢復.