由於機房核心下的客戶眾多,其中不免很多大客戶,正所謂樹大招風,近期機房某些客戶總是被流量攻擊,最行之有效的處理的辦法就是找到具體被攻擊的ip地址,然后在核心帶寬能承受的情況下,在上層核心把該ip配置空路由將攻擊流量攔截在核心層;超過我們核心帶寬承受能力的,將該ip報給運營商封禁處理也能快速的將故障影響時間縮小至最短,以保證其他用戶的正常使用.
之前的處理方式要么是發現故障讓現場技術到核心去抓包(缺點一:從休息室到機房機櫃旁邊並配置好抓包程序的時間延誤;缺點二:也可能抓包的時候攻擊已經停止了,這樣就無法判斷出具體的故障點);要么是核心上提前配置好鏡像端口,將上聯流量鏡像到一台抓包服務器上,並將服務器管理網卡上配置不同核心下地線路ip(以免發生攻擊時無法遠程登錄);發生故障的時候直接遠程登錄tcpdump抓包來分析.
但是有些流量攻擊是在半夜,爬起來去抓包的時候攻擊都已經停止.不要說協助被攻擊的客戶分析解決問題了,甚至連后期的故障說明都沒辦法出;所以為了提高判斷故障的速度和保留客戶被攻擊的數據依據,我在網上找了些資料根據實際設備環境寫了個簡單的自動抓包腳本.
下面是腳本內容和詳細命令說明:
1:抓包腳本 tcpdump.sh
#!/bin/sh while [ 1 ] do STIME=`date +%F"@"%H%M%S` #抓取抓包時間 DATE_DIR=`date +%F` #抓取抓包文件夾日期 if [ ! -d /data/$DATE_DIR ];then mkdir -p /data/$DATE_DIR #判斷目標文件夾下是否有該日期的目錄,有則忽略,無則創建 fi /usr/sbin/tcpdump -i eth1 -c 30000 -w /data/$DATE_DIR/$STIME.pcap > /dev/null 2>&1 & #后台抓包,監控eth1端口,每次自動抓包3w個自動停止並保存到相應目錄,這個值可以根據需要來修改 sleep 1m #抓包后停止1分鍾繼續抓,該值可以根據需要來修改 done
2:監控硬盤使用率腳本 modisk.sh ,由於連續抓包會生成眾多pcap數據文件,非常占用硬盤空間,所以監控硬盤使用率是保證監控腳本健康運行的前提條件,下面寫了個腳本,可以設定計划任務,每6個小時執行一次(可根據需要來修改),監控硬盤使用率大於50%(可以根據情況來修改),則自動篩選出最早的數據文件夾並刪除.
#!/bin/bash FREEDISK=`df -h|grep "/dev/sda1"|awk '{print $5}'|awk -F % '{print $1}'` #抓取磁盤占用百分比 HEADDIR=`ls -l /data|grep ^d|awk '{print $NF}'|sort|head -n 1` #抓取之間最靠前的文件夾名稱 if [ "$FREEDISK" -ge "50" ];then rm -rf /data/"$HEADDIR" #判斷磁盤占用百分比是否超過設定閾值,如果不超過則忽略並退出腳本,超過則執行刪除HEADDIR目錄 fi
3: 監控抓包腳本運行狀態的腳本 motcpdump.sh , 由於機器長期運行,中間又不可能天天登陸服務器去檢查抓包腳本是否在運行中怎么辦? 下面腳本可以實現這個自動巡檢的功能.
#!/bin/bash MOTCPDUMP=`ps -elf|grep tcpdump|grep -v grep` #抓取系統進程中是否有tcpdump進程 if [ ! "$MOTCPDUMP" ];then /bin/bash /home/tcpdump.sh & #判斷有則忽略並退出,沒有則重新后台執行該腳本 fi
將上述腳本按需要加入計划任務即可.
驗證部分:
下面是抓包腳本使用情況的截圖
4:使用wireshark等工具本地分析數據
PS:從以上數據中可以很明顯看到是139.66這個ip遭受到ddos攻擊.
經過幾個月的測試和使用,腳本運行正常並在日常網絡故障判斷中起到了很大作用,現分享出來大家一起學習和研究,共同進步.