實現原理
對系統登陸日志文件/var/log/secure,進行數據篩選,查找登陸失敗的ip地址,然后將ip加入到黑名單中。
腳本內容
#!/bin/bash# 獲取登陸失敗的ip地址failed=`cat /var/log/secure|grep "Failed"|awk '{print $11}'|sort|uniq -c|awk '$1>10 {print $2}'`# 將登陸失敗的ip加入黑名單echo "sshd: $failed">>/etc/hosts.deny
腳本解釋?
/var/log/secure:包含驗證和授權方面信息。例如,sshd會將所有信息記錄(其中包括失敗登錄)在這里。
awk '{print $11}':打印第11列
sort:用于對文本文件或標準輸入進行排序
uniq -c:用于檢查和刪除文件中重復出現的行。-c表示把文件中重復出現的行篩選并刪除顯示出現幾次在行首
awk '$1>10 {print $2}':打印第一列數字大于10的第二列。
打印第二列內容賦值給failed變量。
echo "sshd: $failed">>/etc/hosts.deny:把failed變量值追加到/etc/hosts.deny文件中
/etc/hosts.deny:用來定義哪些 IP 地址禁止連接到服務器,可以有效地增強服務器的安全性
使用風險
如果登陸失敗有被禁的風險,因此一般來說還是推薦使用fail2ban來進行ssh服務的防御。