当前位置: 首页 > news >正文

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

用途:分析 Linux 系统 SSH 认证日志,识别爆破攻击 IP,输出异常告警报表

1.用 Vim 编辑器打开日志检测 Python 脚本

vim ai_log_detect.py

2.写入脚本

# 导入所需工具库 # 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', required=True) # 可选参数 --out:指定输出CSV报表文件名,默认ai_log_report.csv p.add_argument('--out', default='ai_log_report.csv') # 解析终端传入的参数 args = p.parse_args() # 空列表,用于存储每行日志提取后的IP与文本 lines = [] # 读取日志文件,errors='ignore' 忽略乱码、无法解码的行避免程序崩溃 for L in open(args.log, errors='ignore'): # 用正则在当前行查找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(ddof=0), 5) # 新增flag标记列:攻击次数超过阈值则标记True(判定为高危爆破IP) counts['flag'] = counts['count'] >= thr # 将统计结果导出为CSV报表,index=False不输出pandas自带行号 counts.to_csv(args.out, index=False) # 在终端打印最终统计表格 print(counts) # Python程序入口:只有直接运行本文件时,才执行main主函数 if __name__ == "__main__": main()

3.生成测试日志文件sample_auth.log

cat > 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 EOF

4.执行 SSH 爆破日志检测脚本,读取测试日志 sample_auth.log 并将 IP 攻击统计结果输出到自定义报表 report.csv

python3 ai_log_detect.py --log sample_auth.log --out report.csv

5.打印报表文件 report.csv 内的 IP 攻击次数与高危标记全部内容

cat report.csv
http://www.gsyq.cn/news/1534191.html

相关文章:

  • 3an推客是什么平台?资深运营深度解析合规电商增长工具
  • 2026广元旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 终极Navicat无限试用重置:macOS用户告别14天限制的完整指南
  • 2026银川市黄金回收白银回收铂金回收彩金回收TOP5权威榜单:正规靠谱门店实地考察,高性价比首选+联系方式推荐 - 前途无量YY
  • 终极解放双手:Alas碧蓝航线全自动脚本完全指南 [特殊字符]
  • 2026大同旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 大连西岗区旧金镯子出手踩坑多?实测这家回收店结算速度快人一步 - 逸程
  • GPT-4o真实能力解析:低延迟多模态与工程落地实践
  • 【花雕动手做】行空板 K10 系列实验之音频录放 WS2812B 背景音乐小灯
  • PXD10 Flash控制器实战:从原理到OTA、ECC与高可靠存储应用
  • MPC860 PowerQUICC通信处理器:架构解析与嵌入式开发实战
  • CEO通知5100名员工:今年不涨薪了,钱要投给AI!
  • 如何查看AIX系统HBA信息
  • 2026枣庄市黄金回收白银回收铂金回收彩金回收TOP5权威榜单:正规靠谱门店实地考察,高性价比首选+联系方式推荐 - 前途无量YY
  • TX3E/FMRX3MS 二功能遥控车IC+内置马达驱动
  • Splashtop远程桌面核心技术解析:低延迟图形传输与实战应用
  • 2026年6月16日海安改灯本地走访记:施工环境、密封和调光先核对哪几项 - Ayu8888
  • 深入解析PXD10 LINFlex模块:LIN总线硬件加速与寄存器配置实战
  • 终极指南:如何用BepInEx框架为Unity游戏打造强大的插件系统
  • 水泥彩瓦厂家推荐排行榜单|2026 靠谱屋面瓦厂商整理,别墅自建房采购参考 - 商业新知
  • 2026湛江市黄金回收白银回收铂金回收彩金回收TOP5权威榜单:正规靠谱门店实地考察,高性价比首选+联系方式推荐 - 前途无量YY
  • 从渗透测试视角复盘:若依(RuoYi)框架的几类常见未授权访问漏洞与实战利用
  • 手把手教你排查logback-spring.xml配置:从‘no applicable action’错误到正确使用TimeBasedRollingPolicy
  • RAG与Agent的结合:解决幻觉问题的终极方案
  • 2026大兴安岭旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 2026白银旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • BepInEx技术方案:解决Unity多运行时插件框架的统一架构实战
  • 如何深度优化显卡性能:5个高级配置方案实战解析
  • 2026余姚防水补漏机构甄选榜单|住建实测全域靠谱修缮品牌TOP5及片区避坑指南 - 宅安选房屋修缮
  • 半导体物理核心概念解析:从能带到器件的工程实践指南