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`
if [ -z "${IPLIST}" ]
then
  exit 0
fi

IFSBAK=$IFS
IFS=$'\n'

for RISK in ${IPLIST}
do
  IP_ALOWED=`grep -E "${RISK}" "${HOSTS_ALOW}"`
  IP_DENIED=`grep -E "${RISK}" "${HOSTS_DENY}"`
  if [ -n "${IP_ALOWED}" ] || [ -n "${IP_DENIED}" ]
  then
    continue
  fi
  CONN_TIMES=`grep -E "${RISK}" "${LOGS_FNAME}" | wc -l`
  if [ ${CONN_TIMES} -gt ${RISK_TIMES} ]
  then
    echo "sshd: ${RISK}" >> "${HOSTS_DENY}"
    COPIED_TAG=1
  fi
done

IFS=$IFSBAK

if [ ${COPIED_TAG} == 1 ]
then
  cp "${HOSTS_DENY}" "${WEB_FOLDER}"
  COPIED_TAG=0
fi

最后,将脚本加执行权限并设置定时任务。

原创文章禁止转载:技术学堂 » Linux定时检测并屏蔽SSH暴力攻击源IP

赞 (0) 打赏

精彩评论

8+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏