#!/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次的密码/。。