檢視Ubuntu登入日誌:
cat /var/log/auth.log
發現我的伺服器被ssh爆破
針對這一現象 我決定構造一個指令碼 來防範這種爆破式攻擊
具體思路就是透過指令碼判定特定IP的登入失敗次數 如果多於兩次 關閉程序 並且ban IP
首先就是將登入失敗的ip單獨拎出來
cat /var/log/auth.log.1 | grep "Failed password" | awk '{match($0,/.*from (.*?) port/,a); print a[1]}'
然後進行去重:
cat /var/log/auth.log.1 | grep "Failed password" | awk '{match($0,/.*from (.*?) port/,a); print a[1]}'|sort|uniq
將這些資訊寫入到檔案中 方便讀取
寫一個shell指令碼對登入嘗試次數進行統計
安裝防火牆服務:
apt install firewalld
使用富命令來ban地址:
firewall-cmd --add-rich-rule="rule family=ipv4 source address= $line drop"
最後檢視 firewalld
以下ip所傳送的包都會被丟棄
整體程式碼:
cat /var/log/auth.log.* | grep "Failed password" | awk '{match($0,/.*from (.*?) port/,a); print a[1]}'|sort | uniq >/ban.txt
while read line
do
try_log=$(grep $line /var/log/auth.log.* | wc -l )
#$num=grep $line /var/log/auth.log.* | wc -l
#echo "$line : $try_log "
if [ $try_log -ge 3 ]; then
firewall-cmd --add-rich-rule="rule family=ipv4 source address=$line drop"
echo "$line 已經被封禁"
fi
done < /ban.txt
最後使用 crontab 重複執行