#!/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
fi
 if [ $maillog -gt 0 ] ; then
   cat /var/log/maillog >>/var/log/maillog.bak
   >/var/log/maillog
 fi
   sleep $checktime
done
 
 
 
测试,连续输错大于10次的密码/。。