以下是一个完整的Shell脚本,用于检测暴力破解尝试,即多次连续的失败登录尝试后终于成功登录。该脚本处理 /var/log/secure*
中的日志文件,分析失败和成功的登录尝试,并打印及保存有关潜在的暴力破解尝试的信息:
#!/bin/bash# 设置日志文件路径模式
LOGFILES="/var/log/secure*"# 文件存储外网登录尝试
OUTPUT_FILE="potential_bruteforce_attempts.txt"# 用于检查是否是外网IP的函数
is_external_ip() {ip=$1# 此处假设外网IP不包括私有地址和本地回环地址if [[ $ip =~ ^10\. || $ip =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. || $ip =~ ^192\.168\. || $ip =~ ^127\. ]]; thenreturn 1 # 是内网IPelsereturn 0 # 是外网IPfi
}# 确保输出文件是空的
> "$OUTPUT_FILE"# 检查日志文件并分析
for LOGFILE in $LOGFILES; doif [[ -f "$LOGFILE" ]]; thenecho "Analyzing log file: $LOGFILE"# 分析文件并提取含外网IP的成功登录尝试grep "Accepted password" "$LOGFILE" | while read line; doif [[ $line =~ Accepted\ password.*from\ ([^ ]+) ]]; thenip=${BASH_REMATCH[1]}if is_external_ip "$ip"; thenecho "$line" # 打印到终端echo "$line" >> "$OUTPUT_FILE" # 写入到文件fifidone# 分析失败的尝试,并检查是否后续有成功的登录awk '/Failed password/ {fail[$(NF-3)]++} # 记录失败尝试次数/Accepted password/ {if (fail[$(NF-3)] > 3) { # 检查是否存在多次失败尝试print "Brute-force detected: IP " $(NF-3) " had " fail[$(NF-3)] " failures before a success on line " NRprint "Brute-force detected: IP " $(NF-3) " had " fail[$(NF-3)] " failures before a success on line " NR >> "'$OUTPUT_FILE'"}delete fail[$(NF-3)] # 重置失败计数}' "$LOGFILE"elseecho "Log file does not exist: $LOGFILE"fi
doneecho "Analysis complete. Check $OUTPUT_FILE for potential brute-force attempts."
脚本的功能:
- IP检查:确定日志行中的IP是否属于外网。
- 成功登录尝试:捕捉并记录所有被认为是外网IP的成功登录尝试。
- 失败登录尝试:追踪失败的登录尝试,并在检测到成功登录后,如果之前有多次失败尝试,则报告可能的暴力破解尝试。
运行和使用脚本:
- 保存这段脚本到一个文件中,比如
analyze_bruteforce.sh
。 - 给予执行权限:
chmod +x analyze_bruteforce.sh
。 - 运行脚本:
./analyze_bruteforce.sh
。
这个脚本提供了一种方法来检测潜在的安全威胁,并帮助识别需要关注的特定IP地址。它旨在提供实时反馈和记录,适用于需要监控和防范暴力破解攻击的环境。