SSH 登录暴力破解日志检测脚本

📅 2026/6/16 8:55:02
SSH 登录暴力破解日志检测脚本
用途分析 Linux 系统 SSH 认证日志识别爆破攻击 IP输出异常告警报表1.用 Vim 编辑器打开日志检测 Python 脚本vim ai_log_detect.py2.写入脚本# 导入所需工具库 # re正则表达式用来提取日志中的IP地址 # argparse命令行参数解析运行时指定日志文件、输出文件名 # pandas表格数据分析筛选、统计、导出CSV报表 # numpy数值计算本脚本未实际使用可删除 import re import argparse import pandas as pd import numpy as np # 正则表达式规则匹配标准IPv4地址 如192.168.1.10 IP_RE re.compile(r(\d{1,3}(?:\.\d{1,3}){3})) # 风险关键词列表匹配SSH暴力破解、认证失败类恶意日志 KEYS [failed,fail,authentication failure,invalid user,failed password,error] def main(): # 创建命令行参数解析对象 p argparse.ArgumentParser() # 必填参数 --log指定待分析的日志文件路径 p.add_argument(--log, requiredTrue) # 可选参数 --out指定输出CSV报表文件名默认ai_log_report.csv p.add_argument(--out, defaultai_log_report.csv) # 解析终端传入的参数 args p.parse_args() # 空列表用于存储每行日志提取后的IP与文本 lines [] # 读取日志文件errorsignore 忽略乱码、无法解码的行避免程序崩溃 for L in open(args.log, errorsignore): # 用正则在当前行查找IPv4地址 ip IP_RE.search(L) # 存入字典有IP就存IP无IP填空字符串同时保存去除首尾空格的原始日志 lines.append({ip: ip.group(0) if ip else , msg: L.strip()}) # 将列表转为pandas表格DataFrame方便批量筛选统计 df pd.DataFrame(lines) # 筛选可疑日志两个条件同时满足 # 1. 日志转小写后包含任意一个爆破风险关键词 # 2. 日志中提取到IP排除无来源的系统日志 sus df[df[msg].str.lower().str.contains(|.join(KEYS)) (df[ip] ! )] # 若筛选后无任何可疑登录记录打印提示并直接结束程序 if sus.empty: return print(No suspicious events found) # 按IP分组统计计算每个IP出现的攻击记录条数列名改为count counts sus.groupby(ip).size().rename(count).reset_index() # 计算异常判定阈值攻击次数均值 2倍标准差最低限制阈值为5次 # 统计学逻辑超出均值±2倍标准差视为异常max防止日志太少阈值过低 thr max(counts[count].mean() 2 * counts[count].std(ddof0), 5) # 新增flag标记列攻击次数超过阈值则标记True判定为高危爆破IP counts[flag] counts[count] thr # 将统计结果导出为CSV报表indexFalse不输出pandas自带行号 counts.to_csv(args.out, indexFalse) # 在终端打印最终统计表格 print(counts) # Python程序入口只有直接运行本文件时才执行main主函数 if __name__ __main__: main()3.生成测试日志文件sample_auth.logcat sample_auth.log EOF Jan 21 10:01:02 host sshd[1234]: Failed password for invalid user admin from 192.168.1.10 port 51432 ssh2 Jan 21 10:01:12 host sshd[1235]: Failed password for invalid user test from 192.168.1.10 port 51433 ssh2 Jan 21 10:05:00 host sshd[1240]: Accepted password for user kali from 192.168.1.5 port 52222 ssh2 Jan 21 10:10:02 host sshd[1250]: Failed password for invalid user root from 10.0.0.5 port 34567 ssh2 Jan 21 10:12:03 host sshd[1251]: Failed password for invalid user root from 10.0.0.5 port 34568 ssh2 EOF4.执行 SSH 爆破日志检测脚本读取测试日志 sample_auth.log 并将 IP 攻击统计结果输出到自定义报表 report.csvpython3 ai_log_detect.py --log sample_auth.log --out report.csv5.打印报表文件 report.csv 内的 IP 攻击次数与高危标记全部内容cat report.csv