#!/bin/bash
#趙雲,2012年2月3日
#實作如果使用者使用extmail郵件系通如果密碼連續出腳本認為是惡意行為,采用iptables拒絕通路ip位址,或則采用禁用帳号的方式。
#這就是一個想法,差不多可以改改用啦,比較簡單,如果能用的話,自己完善一下。。
#手動添加開機啟動。
#設定拒絕方式, 1 iptables拒絕通路IP位址, 2 禁用登入帳号
mode=2
#設定輸錯幾次拒絕的數量
number=10
#配置檢查間隔時間,多長時間檢查一次,機關秒。
checktime=20
#腳本執行部分。
while true
do
maillog=` grep badlogin /var/log/maillog |awk '{print $6}' |awk -F'=<' '{print $2}' |awk -F'>,' '{print $1}'|uniq -c |awk -vnumber="$number" '$1>number {print $2}' |wc -l `
#拒絕IP位址方式
if [ $mode -eq 1 ] ; then
grep badlogin /var/log/maillog | awk '{print $7} '|awk -F= '{print $2}' |awk -F, '{print $1}' |uniq -c |awk -vnumber="$number" '$1>number {print "iptables -A INPUT -p tcp -s " $2 " --dport 80 -j DROP"}' |bash
fi
#禁用帳号方式
if [ $mode -eq 2 ] ; then
rows=` grep badlogin /var/log/maillog |awk '{print $6}' |awk -F'=<' '{print $2}' |awk -F'>,' '{print $1}'|uniq -c |awk -vnumber="$number" '$1>number {print $2}' |wc -l `
for ((i=1;i<=$rows;i++))
do
user=` grep badlogin /var/log/maillog |awk '{print $6}' |awk -F'=<' '{print $2}' |awk -F'>,' '{print $1}'|uniq -c |awk -vnumber="$number" '$1>number {print $2}' | head -n $i |tail -n1`
mysql -uroot -e " update extmail.mailbox set active=0 where username='$user' ;"
done
if [ $maillog -gt 0 ] ; then
cat /var/log/maillog >>/var/log/maillog.bak
>/var/log/maillog
fi
sleep $checktime
done
測試,連續輸錯大于10次的密碼/。。
本文轉自zhaoyun00 51CTO部落格,原文連結:http://blog.51cto.com/zhaoyun/771366