Linux SSH 登录日志安全分析工具产品系统Vibe Coding

我要开发同款
微信用户20224005982026年10月16日
4阅读

技术信息

语言技术
Java、SpringMVC、Mybatis、Vue、MySQL
系统类型
Web、Linux、Windows
行业分类
云计算

作品详情

行业场景

Linux 服务器一旦开放 SSH 端口,就会持续遭受来自公网的自动化暴力破解扫描。运维人员面对 /var/log/secure 这类纯文本日志,只能靠 grep 和肉眼翻查,无法回答"哪个 IP 在攻击我""哪个账号被重点尝试""攻击集中在什么时段"这些关键问题。

传统做法是部署 ELK 等重型日志平台,但对只有几台服务器、缺乏专职安全人员的中小团队和高校实验室而言,部署和维护成本过高。

本项目针对这一场景,提供一个轻量级的 SSH 登录日志安全分析工具:直接解析系统原生日志,结构化入库后以 Web 报表呈现攻击来源、被攻击账号、时间趋势,并自动识别疑似暴力破解行为,无需部署任何日志采集组件。

功能介绍

本工具围绕"日志采集 → 结构化存储 → 安全分析 → 可视化呈现"四个环节设计,主要功能模块如下:

1. 日志解析入库模块:支持上传或指定日志文件路径(/var/log/secure、/var/log/auth.log),一键解析并批量入库。自动识别登录失败、无效用户登录失败、登录成功三类事件,实时返回总行数、成功解析数、跳过数与耗时。

2. 攻击来源统计模块:以「失败次数 Top 10 源 IP」排行呈现攻击来源,展示每个 IP 的失败次数及其首次、末次攻击时间,快速定位主要威胁源。

3. 账号风险统计模块:统计被尝试最多的用户名 Top 10,识别 root、admin、oracle 等被重点撞库的账号,为账号策略加固提供依据。

4. 时间趋势分析模块:按小时聚合失败次数,以柱状图呈现攻击的时间分布规律,辅助判断攻击是持续性扫描还是集中爆发。

5. 暴力破解自动检测模块:基于滑动窗口算法,自动标记在任意 5 分钟窗口内失败次数达到阈值的源 IP,并给出精确的窗口起止时间;检测阈值和时间统计范围均支持通过 URL 参数动态调整,便于演示与调优。

项目实现

【承担任务】
本项目为个人独立完成,我负责全部环节:需求分析、数据库设计、日志解析、统计分析算法、后端接口、前端报表页面及测试验证。

【技术栈】
后端采用 Java 17 + Spring Boot 3.3.4,持久层使用 MyBatis 3.0.3,数据库为 MariaDB 10.3(兼容 MySQL 8),前端使用 Thymeleaf 模板 + ECharts 图表库,构建工具为 Maven。

【架构设计】
采用经典三层结构,代码按职责分包:controller 负责请求接收与页面渲染,service 承载业务逻辑,parser 专注于日志解析,mapper 对接数据库,vo 用于统计结果传递。解析层与存储层解耦,便于后续扩展其他类型日志。

【技术亮点】
1. 滑动窗口暴力破解检测:将同一 IP 的失败时间序列用双指针滑窗扫描,统计任意连续 5 分钟窗口内的最大失败次数,整体复杂度 O(n)。选择在 Java 内存中实现而非 SQL 窗口函数,是出于可读性、可测试性和边界验证便利性的权衡。

2. 批量入库与幂等保证:采用 500 条一批的批量插入显著提升写入性能,同时开启 JDBC 的 rewriteBatchedStatements=true 参数避免驱动将批量语句拆分回单条;配合唯一索引与 INSERT IGNORE,保证同一日志文件重复解析不会产生重复数据 —— 实测 20029 行日志约 2.2 秒完成入库。

3. 解析层前置数据清洗:超长字段会在数据库层触发 Data too long 错误,在批量插入场景下一条脏数据会导致整批事务失败,因此在解析阶段即完成字段截断;同时将 IPv6 回环地址 ::1 归一化为 127.0.0.1,避免同一来源被统计为两个 IP。

4. 安全与工程规范:数据库连接信息不写入代码仓库,仅保留 application.

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论