Linux定时检测并屏蔽SSH暴力攻击源IP

近期发现很多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

精彩评论

6+8=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏