天天看點

腳本實作extmail多次登入失敗拒絕登入

#!/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