一、系统:Centos6.9 64位 二、方法:读取/var/log/secure,查找关键字 Failed,(#cat /var/log/secure | grep 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地址,如果次数达到10次(脚本中判断次数字符长度是否大于1)则将该IP写到 /etc/hosts.deny中。 三、步骤: 1、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如: sshd:19.16.18.1:allow sshd:19.16.18.2:allow 由于手机(移动的网络)经常更改IP,但是我还经常需要使用手机来登录去查看一些使用情况,经过查看IP地址发现一直都是某个IP地址段的,所以:sshd:132.213.:allow 2、脚本 /usr/local/bin/secure_ssh.sh #! /bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2'='$1;}' > /usr/local/bin/black.list for i in `cat /usr/local/bin/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 3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。 # crontab -e*/1 * * * * sh /usr/local/bin/secure_ssh.sh 四、测试: 1、原本还想着是不是找个另外的方法测下呢。就在疑问还没有结束的时候,想要不先看看吧,就发现:上个图吧: [root@ ~]# cat /usr/local/bin/black.txt 还逮了个不小的呢!!! 再看看服务器上的hosts.deny[root@ ~]# cat /etc/hosts.deny 2、从另一个终端窗口继续“暴力”连接服务器。 看看服务器上的黑名单文件: [root@ ~]# cat /usr/local/bin/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 事实证明,改了端口后+此自动添加黑名单,暴力破解的ssh连接数锐减~ |
|
来自: 菌心说 > 《编程+、计算机、信息技术》