前言
承接前文《短信發(fā)送接口被惡意訪問的網(wǎng)絡(luò)攻擊事件(二)肉搏戰(zhàn)-阻止惡意請(qǐng)求》,文中有講到一個(gè)定位非法IP的shell腳本,現(xiàn)在就來公布一下吧,并沒有什么技術(shù)難度,只是當(dāng)時(shí)花了些時(shí)間去寫這個(gè)東西,類似于緊急修復(fù)線上bug一樣的趕這個(gè)小腳本,雖然現(xiàn)在看來挺簡單的,但是在當(dāng)時(shí)緊張的情景中,趕這個(gè)小腳本兒的過程確實(shí)是很有趣的。
前一篇文章發(fā)布后,有朋友留言問了一下腳本的事,于是整理了一下。
需求分析
目標(biāo):
通過日志定位并記錄攻擊者的IP,然后封掉此IP的所有請(qǐng)求
借助工具:
shell腳本
日志文件
iptables防火墻
具體步驟:
第一步,首先是獲取請(qǐng)求了被攻擊URL的所有請(qǐng)求中的IP,因?yàn)楸还舻腢RL只有一個(gè),這里的做法是通過grep命令查找請(qǐng)求了此URL的日志行,查找的值為api地址的名稱字段,比如此URL的地址為'/message/send/',而send字段只存在于此URL中,因此在日志文件中查找包含'send'字段的行即可。
第二步是從所有的行中提取出IP列,統(tǒng)計(jì)出所有出現(xiàn)的IP和此IP請(qǐng)求接口URL的次數(shù),存入ip.txt文件。
接著第三步是通過對(duì)ip.txt文件的分析,定位出所有的不正常的IP,分析的比較簡陋,做法是請(qǐng)求超過5次的都視為非法IP,其實(shí)5次已經(jīng)算多的了,應(yīng)該再小一點(diǎn),但是其實(shí)在分析文件ip.txt文件過程中,發(fā)現(xiàn)正常的IP訪問次數(shù)基本為一次、兩次,而非法IP則為百次或千次,因此閾值設(shè)置為5或者3并沒有大的影響,重點(diǎn)是找出訪問量較大的一些IP。
最后一步,得到這些IP值之后,將其加入到iptables的過濾策略中并重啟iptables即可。
腳本代碼
一開始的腳本,能夠根據(jù)需求統(tǒng)計(jì)和記錄出訪問過多的IP地址了:
#! /bin/bash#author:13#date:2017-06#desc:找出攻擊者IPcat /opt/sms-service/log