当前位置: 首页 > 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.jsqmd.com/news/1022329/

相关文章:

  • 2026广元旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 梯度提升算法原理与实战:从伪残差到弱树迭代
  • jcode:面向AI编码代理的Rust轻量级运行时框架
  • 终极Navicat无限试用重置:macOS用户告别14天限制的完整指南
  • 2026银川市黄金回收白银回收铂金回收彩金回收TOP5权威榜单:正规靠谱门店实地考察,高性价比首选+联系方式推荐 - 前途无量YY
  • 终极解放双手:Alas碧蓝航线全自动脚本完全指南 [特殊字符]
  • 四合一AI智能体:零基础搭建多模型协同工作台
  • 2026 免费投票小程序推荐|支持图文视频投票、不限人数免费导出数据不用付费 - 微信投票小程序
  • 5分钟解决Windows安卓驱动安装难题:一键自动化ADB Fastboot工具全攻略
  • 如何为Jellyfin构建完整中文番剧库?终极Bangumi插件完整指南
  • GPT-4o多模态能力实测与工程落地指南
  • 2026白城旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • LLaMA-Factory生产级微调实战:从配置校验到OpenAI兼容部署
  • Linux系统随机性溯源:从硬件噪声到getrandom(2)的全链路解析
  • 视频传输流过程技术详解:从视频源到你的屏幕,这中间发生了什么?
  • 2026大同旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 一人公司实战:用AI加速MVP验证闭环
  • GPT-4o真实能力解析:低延迟多模态与工程落地实践
  • 【花雕动手做】行空板 K10 系列实验之音频录放 WS2812B 背景音乐小灯
  • PXD10 Flash控制器实战:从原理到OTA、ECC与高可靠存储应用
  • Amber-Garden:面向模块化演进的语义化命名与依赖治理系统
  • 轩脉刃时间操作系统:用生理节律校准高效能
  • 2026广州旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • MPC860 PowerQUICC通信处理器:架构解析与嵌入式开发实战
  • 大连西岗区旧金镯子出手踩坑多?实测这家回收店结算速度快人一步 - 逸程
  • CEO通知5100名员工:今年不涨薪了,钱要投给AI!
  • 如何查看AIX系统HBA信息
  • 16G显存跑19B多模态模型:结构代谢术揭秘
  • 2026白山旧金铂金白银回收高信赖门店 TOP 线下实体商家电话与门店地址一览 - 诚金汇钻回收公司
  • 2026枣庄市黄金回收白银回收铂金回收彩金回收TOP5权威榜单:正规靠谱门店实地考察,高性价比首选+联系方式推荐 - 前途无量YY