近期发现很多IP尝试暴力破解我的主机密码,为了降低主机风险,特写了一个脚本,用于自动将风险源IP地址加入系统屏蔽文件中。
如果通过固定IP登录主机,可参照Linux操作系统防SSH暴力破解常见方法的0x03部分,如果您的终端IP是随机的,为了防止把自己列入黑名单,就可以参考如下代码:
#!/bin/bash #待检测日志文件 LOGS_FNAME="/var/log/secure" #每小时检测一次 #CHECK_TIME=$((`date +%s`-3600)) #CHECK_FREQ=`date -d@${CHECK_TIME} +%d\ %H:` #每分钟检测一次 CHECK_TIME=$((`date +%s`-60)) CHECK_FREQ=`date -d@${CHECK_TIME} +%d\ %H:%M:` #检测关键字 RISK_WORDS="Failed password" #关键字出现次数 RISK_TIMES=3 #IP白名单 HOSTS_ALOW="/etc/hosts.allow" #IP黑名单 HOSTS_DENY="/etc/hosts.deny" #备份目录 WEB_FOLDER="/download/folder/" #备份标识 COPIED_TAG=0 IPLIST=`grep -E "${CHECK_FREQ}" "$LOGS_FNAME" | grep -E "${RISK_WORDS}" | awk -F 'from' '{print $2}' | awk '{print $1}' | sort|uniq` [ -z "${IPLIST}" ] && exit 0 IFSBAK=$IFS IFS=$'\n' for RISK in ${IPLIST} do IP_ALOWED=`grep -E "${RISK}" "${HOSTS_ALOW}"` IP_DENIED=`grep -E "${RISK}" "${HOSTS_DENY}"` [ -n "${IP_ALOWED}" ] || [ -n "${IP_DENIED}" ] && continue CONN_TIMES=`grep -E "${RISK}" "${LOGS_FNAME}" | wc -l` [ ${CONN_TIMES} -gt ${RISK_TIMES} ] && echo "sshd: ${RISK}" >> "${HOSTS_DENY}" && COPIED_TAG=1 done IFS=$IFSBAK [ ${COPIED_TAG} == 1 ] && cp -r "${HOSTS_DENY}" "${WEB_FOLDER}" && COPIED_TAG=0
最后,将脚本加执行权限并设置定时任务。
原创文章禁止转载:技术学堂 » Linux定时检测并屏蔽SSH暴力攻击源IP