前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将恶意ip加入ssh黑名单的自动化shell脚本实现 - wuuconix's blog

将恶意ip加入ssh黑名单的自动化shell脚本实现 - wuuconix's blog

作者头像
wuuconix
发布2023-03-13 17:20:20
7340
发布2023-03-13 17:20:20
举报
文章被收录于专栏:wuuconixwuuconixwuuconix

背景

之前用frp,实现了22端口的内网穿透,在公网可以直接ssh连接我的实验室主机。方便的同时,也带来了非常恐怖的事情。

下面这张图是之前我前天截的。

我们可以看到这个骇客利用某种强悍的技术每秒钟3次甚至有时候每秒6次来试图ssh连接我的实验室机器。使得frps的日志文件里整页都是这些记录,让人看了十分害怕,当时我被迫暂停ssh的内网穿透服务,向这位骇客妥协了。

今天闲来无事,遂决定写一个脚本来自动ban这些恶意连接的ip。

实现过程

经过一些周折之后写完了以下shell脚本

#!/bin/bash

formatip(){
    ip__=$1
    ip_=${ip__%%:*}
    ip=${ip_:1}
    echo $ip
}

time_now=`date '+%Y/%m/%d %H:%M:%S'`
eval $(tail -n 1 /root/frp_0.37.0_linux_386/nohup.out | awk '{printf("time=%s\ %s type=%s ip=%s"), $1, $2, $6, $11}')
difference=$((`date +%s -d "$time_now"`-`date +%s -d "$time"`))
if [ $type == "[ssh]" -a $difference -le 60 ]
then
    ip="$(formatip $ip)"
    echo "`date '+%Y/%m/%d %H:%M:%S'`  倒数第一条发现ssh请求 时间 $time  ip $ip" >> /root/frp_0.37.0_linux_386/autoban.log
    array=($(tail -n 3 /root/frp_0.37.0_linux_386/nohup.out | awk '{print $1, $2, $6, $11}'))
    time2="${array[4]} ${array[5]}" 
    type2=${array[6]}
    ip2="$(formatip ${array[7]})"
    if [ $type2 == "[ssh]" ]
    then
        echo "`date '+%Y/%m/%d %H:%M:%S'`  倒数第二条发现ssh请求 时间 $time2  ip $ip2" >> /root/frp_0.37.0_linux_386/autoban.log
        end=`date +%s -d "$time"`
        start=`date +%s -d "$time2"`
        difference=$(($end-$start))
        if [ $difference -le 5  -a $ip == $ip2 ]
        then
            echo "`date '+%Y/%m/%d %H:%M:%S'`  时间差 $difference s" >> /root/frp_0.37.0_linux_386/autoban.log
            echo "`date '+%Y/%m/%d %H:%M:%S'`  倒数第二条和倒数第一条ssh请求ip一致,请求时间差小于5s" >> /root/frp_0.37.0_linux_386/autoban.log
            echo "`date '+%Y/%m/%d %H:%M:%S'`  发现重大嫌疑目标" >> /root/frp_0.37.0_linux_386/autoban.log
            time3="${array[0]} ${array[1]}" 
            type3=${array[2]}
            ip3="$(formatip ${array[3]})"
            echo "`date '+%Y/%m/%d %H:%M:%S'`  倒数第三条发现ssh请求 时间 $time3  ip $ip3" >> /root/frp_0.37.0_linux_386/autoban.log
            end=`date +%s -d "$time2"`
            start=`date +%s -d "$time3"`
            difference=$(($end-$start))
            if [ $difference -le 5  -a $ip2 == $ip3 ]
            then
                echo "`date '+%Y/%m/%d %H:%M:%S'`  时间差 $difference s" >> /root/frp_0.37.0_linux_386/autoban.log
                echo "`date '+%Y/%m/%d %H:%M:%S'`  倒数第三条和倒数第二条ssh请求ip一致 请求时间差小于5s" >> /root/frp_0.37.0_linux_386/autoban.log
                echo "`date '+%Y/%m/%d %H:%M:%S'`  已经锁定目标ip $ip  准备开ban" >> /root/frp_0.37.0_linux_386/autoban.log
                iptables -I INPUT -p tcp -s $ip3 --dport 8022 -j DROP
                echo "`date '+%Y/%m/%d %H:%M:%S'`  已经成功ban掉ip $ip" >> /root/frp_0.37.0_linux_386/autoban.log
                echo "`date '+%Y/%m/%d %H:%M:%S'`  已经成功ban掉ip $ip" >> /root/frp_0.37.0_linux_386/fruits
            fi
        fi
    fi
else
    echo "`date '+%Y/%m/%d %H:%M:%S'`  1分钟内没有新的请求!" >> /root/frp_0.37.0_linux_386/autoban.log
fi

其实现的主要功能主要是去读取frps的日志文件,查看最后三条记录,看它们是不是都是ssh请求,请求的时间是不是隔的特别近。如果是,就被判定为恶意ip,利用iptables命令进行拉黑操作。

写完了脚本,那我们怎么让它定时自动执行呢?

这里我用到了crontab这个强大的工具。

在Ubuntu Server 20.04 LTS中只需要在/etc/crontab文件中添加一条以下的记录,即可实现每分钟自动运行。

1

* * * * * root bash /root/frp_0.37.0_linux_386/autoban.sh

效果演示

这里是用我的手机做的测试,可以看到手机已经连接不上了。

战术总结

  • 通过这次实践熟悉了shell编程的强大之处、了解iptables命令的基本用法、了解crontab强大的定时执行功能
  • 虽然好像今天没有恶意ip来连接我ssh了,测试都是用的我自己的手机2333。但是这也是好事,以后可以没有后顾之忧地使用ssh内网穿透到我的实验室机器啦!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021年7月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 实现过程
  • 效果演示
  • 战术总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档