通過一個簡單的日志分析工具,來屏蔽一些操作。
首先,所謂的分析工具,肯定是建立在人為的分析的基礎上的。我們來看一點我的域名運行日志:
78.56.78.115 - - [21/May/2015:16:54:27 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:30 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:32 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 42.159.83.42 - - [21/May/2015:16:54:36 +0800] "HEAD /521php.rar HTTP/1.1" 404 0 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:36 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:38 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:41 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" - 78.56.78.115 - - [21/May/2015:16:54:45 +0800] "POST /wp-login.php HTTP/1.0" 200 3198 "-" "-" -
很明顯可以看到有ip在惡意暴力破解我的登錄信息,還有一個ip在嘗試下載我的網站程序。這樣的ip我們對比正常的訪問日志會發現,他沒有頭信息,即你浏覽器等等的信息,而且一般訪問都是get或者post訪問,而這裡有head訪問。所以我們可以將這樣的ip加入Linux防火牆或者nginx的ip黑名單,當然還可以有其他規則,比較訪問的頻次,404出現的頻次,當然有的訪問你會發現他訪問你的首頁,卻沒有加載你的js,css等,當然這裡也有緩存的影響,但是即使緩存也會發送304的確認信息。當然還有很多其他的惡意訪問行為。
然後,針對這些規則,我們來寫處理邏輯和操作即可,寫這個之前,我們先做一個nginx的ip黑名單。我這裡沒有再使用linux的防火牆,因為防火牆操 作不太方便,頻繁重啟有一定的影響,而nginx的黑名單,是可以平滑重啟的,而且是讓指定ip顯示403錯誤,但是可以訪問的,這樣就給人家一個改過自 新的機會啊是吧,如果人家訪問正常了,就可以將此ip移除黑名單。
配置nginx ip黑名單:
在你的nginx.conf配置文件中,包含一個blocksip.conf;
blocksip.conf 存放黑名單ip;
這樣寫
deny 1.1.1.2; deny 1.1.1.1; deny 1.1.1.4; deny 1.1.3.1; deny http://www.baidu.com;
然後我們寫個shell腳本,自動添加、移除ip,並平滑重啟nginx,並發送郵件通知
editblocksip.sh
#!/bin/sh file="/etc/nginx/conf/blocksip.conf" file2="/etc/nginx/conf/blocksip.bak" v1=$1 v2=$2 if [ $v1 = "add" ] then deny_info=`cat $file | grep $2` if [ -z "$deny_info" ] then `echo "deny $v2;" >> $file` fi else if [ $v1 = "del" ] then `cat $file | grep -v $2 > $file2` `cat $file2 > $file` fi fi `/usr/sbin/nginx -s reload` `cat $file|mail -s "edit blocks list" [email protected] [email protected]` exit 0
使用比較簡單
#添加 sh editblocksip.sh add 1.1.1.1 #移除 sh editblocksip.sh del 1.1.1.1
最後,只需要寫個腳本,來分析nginx日志文件,有符合條件的記錄,來觸發這個shell腳本添加ip黑名單即可
思路是這樣的,首先記錄日志最大行號,然後每次執行分析腳本,從指定行號讀取剩下所有記錄(tail -n +5 file),並再次記錄最大行號(wc),然後使用awk,逐行分析記錄,並切割字符進行匹配判斷,符合條件的,提取ip,加入ip黑名單;
這個分析腳本,可以用crontab 或者 做成守護進程來跑。根據自己網站的運行情況,定義執行頻次,幾秒,幾分鐘等等。
這樣就實現了一個簡單的日志分析工具!