900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 将SSH多次登录失败的IP加入黑名单

将SSH多次登录失败的IP加入黑名单

时间:2022-04-24 17:32:43

相关推荐

将SSH多次登录失败的IP加入黑名单

更多文章请移步:www.yanjun.pro

最近发现有人经常尝试使用SSH登录我的服务器,但是由于种种原因,只有自己想办法来阻止非法访问,最简单的方法就是通过系统自带的黑名单机制,将登录失败次数达到设定值的主机IP加入黑名单,以此来防止非法登录。

解决思路

创建一个定时任务,定时执行脚本文件,以此来检查登录失败主机列表,并将达到登录失败次数的主机IP地址加入到黑名单

【-08-09 】经过一段时间的观察,使用现有的脚本虽然能防止非法 SSH 访问,但是在阻止访问后,一方面在系统安全日志中会记录每一条访问记录,这样会导致日志中大量记录非法访问的主机的 IP 地址,将其他的信息淹没在无用的信息中,不便于查询其他日志记录;另一方面,在将非法主机写入文件后,如果该主机继续访问,那么 sshd 服务还得去查询记录文件,来一条查一次,这样会导致 sshd 服务异常繁忙,可能会影响到正常业务访问。

为了解决以上问题,现将脚本进行了优化,在原有脚本的基础上,添加了系统防火墙联动机制(仅限于使用firewalld防火墙,其他如:Ubuntu的UFW防火墙请参考本脚本自行修改),将登录失败次数超过限定次数的主机 IP 地址,一方面写入hosts.deny文件外,同时将该 IP 地址添加到防火墙策略中,将其的数据包在到达主机时,直接丢弃,这样就不需要再通过 sshd 服务处理,一方面可以减轻 sshd 服务的压力;另一方面,因为不需要 sshd 服务的干预,所以也就没有相关日志的记录,不会将其他信息覆盖。

脚本文件

最新脚本文件:ssh_login_failed_host_deny_v0.2.sh

#!/usr/bin/bash# -*- coding:UTF-8 -*-############################################################# file name: ssh_login_failed_host_deny ## description: 将SSH多次登录失败的IP加入黑名单 ## author: oldyan ##version: 0.1 ## date: -04-19############################################################# 通过lastb获取登录失败的IP及登录失败的次数lastb | awk '{print $3}' | grep ^[0-9] | sort | uniq -c | awk '{print $1"\t"$2}' > /tmp/host_listlist=`cat /tmp/host_list`line=`wc -l /tmp/host_list | awk '{print $1}'`count=1# 如果/tmp/host_list中有数据,循环至少需要执行一次while [[ "$line" -ge "$count" ]]; doip_add=`echo $list | awk '{FS="\t"} {print $2}'`num=`echo $list | awk '{FS="\t"} {print $1}'`# 登录失败达到5次就将该IP写入文件if [[ "$num" -ge 5 ]]; thengrep "$ip_add" /etc/hosts.deny &> /dev/nullif [[ "$?" -gt 0 ]]; then# --------> 此处添加当前系统时间,请根据实际情况定义日期格式echo "# $(date +%F' '%H:%M:%S)" >> /etc/hosts.denyecho "sshd:$ip_add" >> /etc/hosts.denyfifilet count+=1# 删除已经写入文件的IPsed -i '1d' /tmp/host_list# 修改$list变量list=`cat /tmp/host_list`done# 清空临时文件echo '' > /tmp/host_listexit 0

创建定时任务

[root@localhost ~]# crontab -e# 每分钟执行一次* * * * * /hone/user/ssh_login_failed_host_deny.sh

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。