sshd防止爆破.sh

最近听说有个同事的云主机被登录,植入了挖矿的代码。恶意暴破,我也遇到过,最多的一次,都有几万次的登录记录,当时也是找了好久的方式,最后发现,使用脚本方式,最稳妥。

以下是我想到的几种安全方式。使用定时脚本,基本上能满足大部分的需求。

脚本方式

效果很好。

/root/addblacklist.sh

#!/bin/bash
#检测用户恶意登入
#2019-10-30
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/black.txt
DEFINE="3"
for i in `cat /root/black.txt`;do
        IP=`echo $i|awk -F= '{print $1}'`
        NUM=`echo $i|awk -F= '{print $2}'`
        if [ $NUM -gt $DEFINE ]
        then
                grep $IP /etc/hosts.deny >/dev/null
                if [ $? -gt 0 ];
                then
                echo "sshd:$IP" >> /etc/hosts.deny
                fi
        fi
done

加入到定时任务中

chmod +x /root/addblacklist.sh 

*/1 * * * * /root/addblacklist.sh 

备注:可以通过back.txt的修改时间,是否变化,来看定时任务是否生效。

另外一个脚本

原理差不多,也是在定时任务中,检测ssh日志

cat auto_deny_ip_login.sh


#!/bin/bash
# Date:20220305
# centos7
# 自动检测IP暴力破解,禁止IP登录SSHD服务

Secure_File="/var/log/secure"
Deny_File="/etc/firewalld/zones/public.xml"
Start_Time=$(date +%Y%m%d%H%M)
IP_List="/tmp/firewalld.txt"

# 匹配IP次数
IPADDR=$(grep -i "failed" /var/log/secure |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" |sort -nr |uniq -c|awk '$1>=5 {print $2}')
[ -f ${IP_List} ] || touch ${IP_List}
for i in $(echo -n ${IPADDR})
do
	# IP失败次数达到5就加入防火墙Firewalld禁止登录ssh服务两个小时
	grep -wq ${i} ${IP_List}
	if [ $? -ne 0 ];then
		firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address="${i}" service name='ssh' drop" --permanent
		firewall-cmd --reload
		echo "${i} #${Start_Time}" >>${IP_List}
	else
		# 查询IP封停时间,大于等于两小时就删除此IP
		End_Time=$(date +%Y%m%d%H%M)
		IP_ADDR=$(egrep -v "^$|^#" ${IP_List} |awk -F'#' '{print $1,$2}' |awk '{if('${End_Time}'>=$2+200) print $1}')
		for j in $(echo -n ${IP_ADDR})
		do
			if [ ! -z ${j} ];then
				firewall-cmd --permanent --remove-rich-rule="rule family=ipv4 source address="${IP_ADDR}" service name='ssh' drop"
				firewall-cmd --reload
				sed -i "/${IP_ADDR}/d" ${IP_List} 
			fi
		done
	fi
done

端口

效果一般。

修改默认的端口,防止被发现,效果一般。但是,需要注意,新的端口一定要能被访问到,否则,有可能导致,无法访问到sshd,导致失联,就得不偿失了。

修改文件 /etc/ssh/sshd_config,在下面位置,添加。

Port 22022

禁止root账号登录

效果较好。

新建一个账号,这个账号名称,最好选择不常用的账号。然后对于黑客来讲,首先要破解账号的名称,然后,才是密码,相当于,增加了很大的难度。

复杂密码

一般的云厂商,都会提示使用复杂的密码。如果密码足够复杂,也会使破解的难度加大。