WEB-DL

SSH多次登录失败后限制IP

本文以Debian系统为例,其他系统只要读取相关安全日志文件内容即可。

一、方法思路

Debian系统读取“/var/log/auth.log”安全日志文件,查找关键字 Failed,查找“Failed password for root”结果惨不忍睹

grep "Failed password for root" /var/log/auth.log

从这些行中提取IP地址,如果次数达到10次(脚本中判断次数字符长度是否大于1)则将该IP写到 /etc/hosts.deny中

二、操作

1、先把始终允许的IP填入 /etc/hosts.allow ,这一步可以避免你自己因错误操作不小登录失败而被限制访问,例如:
sshd:192.168.1.1:allow
sshd:192.168.1.2:allow

2、建立文件保存所有访问失败的ip

touch /home/black.list

3、创建脚本 /home/ssh_secure.sh,内容如下:

#! /bin/bash
cat /var/log/auth.log|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /home/black.list
for i in cat /home/black.list
do
  IP=`echo $i |awk -F= '{print $1}'
  NUM=`echo $i|awk -F= '{print $2}'
  if [ ${#NUM} -gt 1 ]; then
    grep $IP /etc/hosts.deny > /dev/null
    if [ $? -gt 0 ];then
      echo "sshd:$IP:deny" >> /etc/hosts.deny
    fi
  fi
done

4、将ssh_secure.sh脚本放入cron计划任务,每1分钟执行一次。

crontab -e
*/1 * * * * sh /home/ssh_secure.sh

三、测试

1、开两个终端窗口,一个ssh连上服务器,另一个用错误的密码连接服务器几次。

很快,服务器上黑名单文件里已经有记录了:

[root@ ~]# $ cat /home/black.list
13.26.21.27=3

再看看服务器上的hosts.deny

[root@ ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny

2、从另一个终端窗口继续“暴力”连接服务器。

看看服务器上的黑名单文件:

[root@ ~]# cat /home/black.list
13.26.21.27=6

再看看服务器上的hosts.deny

[root@ ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
sshd:13.26.21.27:deny

IP 已经被加入到服务器的hosts.deny,再用正确的密码连接服务器,被拒绝:

$ ssh root@myserver.mydomain.com -p 2333
ssh_exchange_identification: Connection closed by remote host

四、其他方

其他方法我不详细写了,也有第软件如DenyHosts,功能很多,有兴趣可以试试。

码字很辛苦,转载请注明来自非WEB-DL资源站《SSH多次登录失败后限制IP》

评论