服务器攻防·禁止穷举邮箱密码

本文节选自《Netkiller Linux 手札》

下面是一个脚本你可以放在crontab中运行,每个一定时间运行一次。

#!/bin/bash
########################################
# Homepage: http://netkiller.github.io
# Author: neo <netkiller@msn.com>
########################################
PIPE=/var/tmp/pipe
pidfile=/var/tmp/$0.pid
BLACKLIST=/var/tmp/black.smtpd.lst
WHITELIST=/var/tmp/white.smtpd.lst

LOGFILE=/var/log/maillog
DAY=5
########################################

if [ -z "$( egrep "CentOS|7." /etc/centos-release)" ]; then
	echo 'Only for CentOS 7.x'
	exit
fi

if [ -f $BLACKLIST ]; then
	find $BLACKLIST -type f -mtime +${DAY} -delete
fi

if [ ! -f ${BLACKLIST} ]; then
    touch ${BLACKLIST}
fi

if [ ! -f ${WHITELIST} ]; then
    touch ${WHITELIST}
fi

for ipaddr in $(grep "too many errors after AUTH from" ${LOGFILE} | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort -r -n | head -n 20| awk '{print $2}')
do

    if [ $(grep -c $ipaddr ${WHITELIST}) -gt 0 ]; then
		continue
    fi

    if [ $(grep -c $ipaddr ${BLACKLIST}) -eq 0 ] ; then
		echo $ipaddr >> ${BLACKLIST}
        iptables -I INPUT -p tcp --dport 25 -s $ipaddr -j DROP
        #iptables -I INPUT -s $ipaddr -j DROP
    fi
done

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2016-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Hadoop+Maven项目打包异常

3777
来自专栏我是攻城师

开源大数据索引项目hive-solr

3657
来自专栏Hongten

python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

====================================================

701
来自专栏北京马哥教育

Linux 中命令链接操作符,让你的代码更简洁!

Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在shell中写短小的shell脚本,并直接在终端中执行。链接...

562
来自专栏码匠的流水账

java9系列(三)模块系统精要

如果A依赖B,B依赖C,B方法返回的类型是C中的类型,那么需要A也可以使用C,则需要在A中声明依赖C。不过这样子非常费劲,所以java9内置了个transiti...

752
来自专栏JMCui

Ant学习笔记

  前言:这段时间在学习Ant,发现这是一个很强大的构建工具。你可能使用了很长一段时间,才发现Ant能做数不完的事。总之,个人觉得,Ant学习门槛低,入门简单...

3285
来自专栏Linux驱动

30.Linux-RTC驱动分析及使用

 linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c....

2398
来自专栏一个爱瞎折腾的程序猿

常用cmd代码片段及.net core打包脚本分享

保存:set currentPath=%cd% 输出:echo %currentPath

533
来自专栏开源优测

[接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我

什么是INI格式 INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中。这种配置...

34612
来自专栏Ryan Miao

plsql修改表报错:ORA-25150

几次通过plsql修改表结构出现这个错误,为人不求甚解真是要不得。我甚至对老大大言不惭的说没有权限,即便是sql语句都不行。结果赤果果地打脸。 最终找到如下原因...

3128

扫描关注云+社区