自动拒绝恶意IP远程登录Linux服务器脚本

时间:2023-03-09 00:35:00
自动拒绝恶意IP远程登录Linux服务器脚本

当我们已经配置了iptables防火墙,我们允许22端口对外网所有人访问,当然这也是为了方便,我们在任何地方都连接上,没有做VPN,也没有做ssh密钥验证,但是我们的密码设置得非常复杂,大小写、特殊符、数字 32位,连自己都记不住,就别人扫描没有3-5年是无法攻破的哈哈。所以每天看/var/log/secure文件里面,全部是恶意攻击的ip,那怎么拒绝这些ip下次再攻击,或者怎么让这些IP尝试3-4次就拒绝访问22端口了,看代码如下:

#!/bin/sh
#auto drop ssh failed IP address #定义变量
SEC_FILE=/var/log/secure
#如下为截取secure文件恶意ip 远程登录22端口,大于等于4次就写入防火墙,禁止以后再登录服务器的22端口
IP_ADDR=`tail -n /var/log/secure |grep "Failed password"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk ' $1>=4 {print $2}'`
IPTABLE_CONF=/etc/sysconfig/iptables
echo
cat <<EOF
++++++++++++++welcome to use ssh login drop failed ip+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++------------------------------------++++++++++++++++++
EOF
#打印动态滚动条,参照老男孩博客-数组分析文章
echo -n "请等待5秒后开始执行 "
for ((j=;j<=;j++)) ;do echo -n "----------";sleep ;done
echo
for i in `echo $IP_ADDR`
do
#查看iptables配置文件是否含有提取的IP信息
cat $IPTABLE_CONF |grep $i >/dev/null
if
[ $? -ne ];then
#判断iptables配置文件里面是否存在已拒绝的ip,如何不存在就不再添加相应条目
sed -i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp --dport 22 -j DROP" $IPTABLE_CONF
else
#如何存在的话,就打印提示信息即可
echo "This is $i is exist in iptables,please exit ......"
fi
done
#最后重启iptables生效
/etc/init.d/iptables restart

如上脚本编写完毕,如何实现自动添加恶意IP呢,执行如下命令,添加到crontab即可,实现每5分钟自动执行该脚本。

  1. echo  "*/5 * * * *  /bin/sh /data/sh/auto_deny_Login.sh >>/data/logs/login/login.log 2>&1" >>/var/spool/cron/root

过几天观察,我们会发现IPTABLES配置文件里面发生了如下变化:截图如下,全部是恶意攻击的IP:

自动拒绝恶意IP远程登录Linux服务器脚本

以上方法仅供参考,还有另外一种方法也非常不错,通过读取恶意IP登录信息,然后把IP写入/etc/hosts.deny 文件高效,一样可以达到效果。