设计思路

  • 最近隐隐感觉服务器正在被攻击,查看下登陆失败记录,果然有几页失败记录,于是查了一晚上资料,写了份实操如下:
  • 防止服务器被暴力破解,给服务器添加脚本:每小时检查是否有登录失败超过10次的ip,如果有就封禁该ip

代码

  • 首先通过以下命令,查看登陆失败超过4次的ip:
sudo lastb |awk '{print $3}'|sort |uniq -c|awk '{if ($1 > 4) print $2}'
  • 将以上的ip添加到ubuntu的ip黑名单下,黑名单文件为hosts.deny/etc目录下
  • 写一个能自动添加ip到黑名单文件的脚本,把脚本放在/home/xxx目录下,脚本代码如下:
#!/bin/bash

#登录失败次数大于10的ip
IP=$(sudo lastb |awk '{print $3}'|sort |uniq -c|awk '{if ($1 > 10) print $2}')
hostdeny=/etc/hosts.deny

for i in $IP
do
	#如果ip不存在黑名单文件中,则写入deny文件,避免重复写入
	if [ ! $(grep $i $hostdeny) ];then 
		echo "ALL: $i" >> $hostdeny
	fi
done
  • 给脚本设置每小时执行一次,在控制台输入代码,如下:
    • 脚本名为ssh_deny.sh,只能用bash运行
    • 注意:xxx为具体用户名
sudo crontab -e
#内容为每1小时执行一次脚本
0 * * * * sudo bash /home/hz/ssh_deny.sh
  • 输入以下代码,查看自动任务是否设置完毕:
sudo crontab -l
# 输出结果:
# #内容为每1小时执行一次脚本
# 0 * * * * sudo bash /home/hz/ssh_deny.sh

注意

  • 如果我们是在windows下编写的.sh文件,那么需要将它转换为linux格式,在控制台输入以下代码:
sudo vim /home/xxx/ssh_deny.sh
  • 打开文件后,按ESC,输入:set ff=unix,敲回车,转换格式
  • 再按ESC,输入:wq!,敲回车,保存文件

参考文献

  1. Linux-----Ubuntu通过shell脚本将SSH多次登录失败的IP自动加入黑名单
  2. 防爆破登录:配置/etc/hosts.deny禁止ip尝试ssh或者telnet操作
  3. 关于Linux服务器.sh文件启动问题
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐