找出sshd认证失败的IP并禁止该IP再次ssh:
有时候每天会有大量的黑客攻击我们的服务器,并尝试通过字典破解我们的密码,如果我们查看服务器的日志就能发现有很多ssh认证失败的IP,那么我们就可以用一条命令禁止他继续SSH爆破我们的服务器密码
下面是命令:
tail -1000 /var/log/secure | grep Failed | awk '{print "sshd:"$11}' |sort |uniq >> /etc/hosts.deny
命令解析:
tail -1000 /var/log/secure 查看最后的1000条
grep Failed | awk '{print "sshd:"$11}' 过滤出失败的IP $11代表从左往右第11行
sort 排序
uniq 去重
>> /etc/hosts.deny 追加到禁止访问的主机列表
"sshd:" 加这个在awk里面是为了追加的时候在前面加上ssh服务,好让hosts.deny文件的ssh服务生效
找出登录失败的IP并按照失败次数进行排序:
tail -1000 /var/log/secure | grep Failed | awk '{print $11}' | sort | uniq -c |sort -n
uniq -c或--count 去重的同时在每列旁边显示该行重复出现的次数。
sort -n 按照数字的从小到大排序
另外附脚本禁止方法:
一、方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减):
Sep 17 09:08:09 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:08:20 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:10:02 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
Sep 17 09:10:14 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
从这些行中提取IP地址,如果次数达到5次则将该IP写到 /etc/hosts.deny中。
二、步骤:
1、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow
2、脚本 /root/secure_ssh.sh
#! /bin/bash
#实现ssh密码验证失败次数达到3次就拒绝该IP的ssh请求的功能,以防止黑客暴力破解ssh登陆密码
#1、查找出ssh登陆失败的IP并把它写入black.list黑名单中
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.list
Failed="3"
for i in `cat /root/black.list`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
#2、如果某一IP的登陆失败次数达到3次
if [ $NUM -ge $Failed ]; then
#3、查看IP是否存在于hosts.deny文件中
grep $IP /etc/hosts.deny > /dev/null
#4、如果返回值不等于0
if [ $? -ne 0 ];then
#5、追加该IP到hosts.deny文件中
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done
3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。
# crontab -e
*/1 * * * * sh /root/secure_ssh.sh
三、测试:
1、开两个终端窗口,一个ssh连上服务器,另一个用错误的密码连接服务器几次。
很快,服务器上黑名单文件里已经有记录了:
[root@ ~]# $ cat /root/black.txt
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 black.txt
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
发表评论