CentOS通过shell脚本防止SSH暴力破解

#!/bin/bash
rm -rf /tmp/ip_list
# cat /var/log/secure | grep "Failed password for" | awk '{print$(NF-3)}' | sort | uniq -c > /tmp/ip_list
cat /var/log/secure | grep "Invalid user" | awk '{print$(NF-0)}' | sort | uniq -c > /tmp/ip_list
# cat /var/log/secure | grep "Received disconnect from " | awk '{print$(NF-4)}' | awk -F: '{print$1}' | sort | uniq -c >> /tmp/ip_list
DEFINE=30
cat /tmp/ip_list | while read line
do
    IP=`echo $line | awk '{print$2}'`
    NUM=`echo $line | awk '{print$1}'`
    if [ $NUM -gt $DEFINE ];    then
        grep $IP /etc/hosts.deny > /dev/null 2>&1
        if [ $? -gt 0 ]; then
            echo "sshd:$IP:deny # ="`date +%s` >> /etc/hosts.deny
        fi
    fi
done

#封禁段时间的IP进行解封,如果解封时间小于日志文件生成周期,会出现重复封禁、解封情况。特别是有的系统不会按指定时间重新生成secure日志文件。暂未解决重复封禁IP问题
rm -rf /tmp/list /tmp/list1     #删除临时文件,如果有的话
TIMES=`date +%s`    #记录当前系统时间,用于跟已经封禁的IP进行对比
cat /etc/hosts.deny | grep "sshd" > /tmp/list   #检查/etc/hosts.deny文件中是否有已经封禁的IP,如果有,则写入/tmp/list文件,以供后面筛选
if [ $? -eq 0 ]     #如果上一条命令执行成功(即有被封禁IP),则执行后面的操作
then
    cat /etc/hosts.deny | awk -F'=' '{print$2}' | sed '/^$/d' > /tmp/list1  #将所有已经封禁的IP信息进行过滤,过滤出时间信息,写入/tmp/list1文件
    cat /tmp/list1 | while read line    #通过while循环,依次读取时间信息
    do
        DATES=$[ TIMES-line ]           #将当前时间跟IP封禁时间进行运算
        if [ $DATES -ge 604800 ]            #如果封禁IP时间大于指定时间(这里是7天转换后的秒数),则继续执行后面的操作
        then
            lines=` head -n 1 /tmp/list `   #将符合解封时间的信息写入变量,方便后面删除
            # sed -i '/'"$line"'/d' /tmp/list1   #删除时间信息临时文件,这条可要可不要,因为前面是通过while 循环依次读取,不会重复读取第一行
            sed -i '/'"$lines"'/d' /etc/hosts.deny /tmp/list    #删除符合解封的IP记录。
        fi
    done
else    #如果检查/etc/hosts.deny文件中没有被封禁的关于SSHD登录IP,则直接执行下面的命令(即退出脚本)。
    echo '没有需要解封的IP'
    exit 0
fi

将以上内容保存为.sh文件,通过crontab设置每分钟执行一次即可实现对SSH暴力破解的IP进行封禁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值