防止SSH和vsftpd暴力破解的shell脚本

发布时间:2020-11-20编辑:脚本学堂
本文介绍下,用于防止ssh与vsftpd暴力破解的shell脚本,供大家学习参考。

环境:
公网服务器,双备份策略,开放有vsftpd的21端口,最近发现有人尝试暴力破解vsftpd和ssh。
经过深入分析/var/log/secure日志显示情况,写了一个shell/ target=_blank class=infotextkey>shell脚本,来防止SSH和vsftpd暴力破解。有需要的朋友,参考下吧。

其中,/var/log/secure日志,显示如下:
 

118.33.110.52=2834
119.145.254.77=37
121.254.179.199=226
121.88.250.243=35
200.29.110.104=168
202.78.173.199=250
222.221.2.210=373
 

除了119.145.254.77和121.88.250.243是正常的外,其它的基本都是恶意IP。

由于服务器是置于LVS集群后面,原来想用iptables的recent模块解决,看来是行不通的。
而且,服务器的系统安装的是centos 5.5 x86_64,iptables还暂时不支持此模块,报错如下:
 

iptables: Unknown error 18446744073709551615
iptables: Unknown error 18446744073709551615

而由于机器已经在跑重要的业务,又不想去升级内核,所以iptables的想法暂时告一段落;
后来又想到用HostsDeny的方法来解决这个问题,不过方法略显繁琐。

于是便有了下面的脚本,自己动手写的:
 

#! /bin/bash
cat /var/log/secure|linuxjishu/13830.html target=_blank class=infotextkey>awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt
DEFINE="100"
for i in `cat /root/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ];
then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];
then
echo "sshd:$IP" >> /etc/hosts.deny
echo "vsftpd:$IP" >> /etc/hosts.deny
fi
fi
done

实现思路:
由于/var/log/secure是以星期为轮询的,所以每次可以查看这个文件,利用SHELL脚本统计出其中访问失败比较频繁的IP,并定义一个阀值为100,如果大于100的话就将其放进
/etc/hosts.deny文件,阻止其继续访问vsftpd和ssh;
然后,将其写进crontab计划列表里,每隔一段时间进行一次排查,如果下次排查的某IP次数又大于100,首先检查它在不在黑名单中,如果在的话就无视过去;
如果不在,就继续添加进/etc/hosts.deny文件。

/etc/crontab文件最后一行为:
 

* */1 * * * root sh /root/hosts_deny.sh
 

每隔1小时就重复执行一次这个脚本。
说明:/var/log/secure是每隔一个星期轮询一次的,这里可以根据服务器的具体情况来配置多少时间执行一次此脚本,暴力破解频繁的机器可适当缩小这个周期。

在我的公网机器运行脚本一段时间后,产生的/etc/hosts.deny文件如下:
 

sshd:119.145.254.77
vsftpd:119.145.254.77
sshd:222.221.2.210
vsftpd:222.221.2.210
sshd:118.218.136.25
vsftpd:118.218.136.25
sshd:118.33.110.52
vsftpd:118.33.110.52
sshd:123.196.113.11
vsftpd:123.196.113.11
sshd:14.140.172.74
vsftpd:14.140.172.74
sshd:200.29.110.104
vsftpd:200.29.110.104
sshd:202.102.89.81
vsftpd:202.102.89.81
sshd:202.78.173.199
vsftpd:202.78.173.199
 

悄悄地把它们给阻止了,哈哈。
建议大家在遇到类似问题的时候,尝试下本文介绍的方法,希望对大家有所帮助。