goodbaye/parser
GitHub: goodbaye/parser
一款轻量级 Python CLI 工具,用于解析 SSH 认证日志并检测暴力破解、失败后成功登录及非典型时间登录等可疑活动。
Stars: 0 | Forks: 0
# LogSentinel
一款小型的 CLI 实用工具,用于解析 Linux 的 SSH 身份验证日志(`auth.log` / `secure`),
它可以发现可疑活动:brute-force 攻击、多次失败尝试后的成功登录,
以及非典型时间的登录。
本项目是一项独立的学习实践——旨在练习日志解析和类似于 SIEM 中关联规则的检测逻辑,
但它是从零开始使用 Python 实现的,未使用现成的 SIEM 系统。
## 功能
- 解析 OpenSSH 的标准 syslog 行(`Failed password`、`Accepted password` /
`Accepted publickey`、`Invalid user`)
- 检测规则:
- **Brute force** — 在滑动时间窗口内,来自同一 IP 的 N 次或更多次失败登录尝试
- **失败尝试后的成功登录** — 来自某 IP 的成功登录,且该 IP 在此之前不久发生过多次失败尝试(经典的“攻击者最终成功潜入”模式)
- **非典型时间登录** — 在可自定义的非工作时间内的成功登录
- 控制台输出报告,并支持导出为 JSON / CSV
- Unit 测试(pytest)以及基于 GitHub Actions 的 CI-workflow
## 安装
```
git clone https://github.com/goodbaye/parser.git
cd parser
pip install -r requirements.txt
```
该实用工具本身不需要任何外部依赖——`requirements.txt`
仅包含运行测试所需的 `pytest`。
## 使用说明
```
python3 -m logsentinel.cli sample_logs/auth.log --year 2026
```
导出结果:
```
python3 -m logsentinel.cli sample_logs/auth.log --year 2026 --json findings.json --csv findings.csv
```
选项:
| 标志 | 描述 |
|---|---|
| `--year YEAR` | 需要附加到日志时间戳的年份(syslog 行中未指定年份)。默认为当前年份。 |
| `--json PATH` | 将结果以 JSON 格式写入指定路径 |
| `--csv PATH` | 将结果以 CSV 格式写入指定路径 |
| `--quiet` | 不在控制台输出报告 |
### 输出示例
```
Parsed 12 recognized log lines from sample_logs/auth.log
Findings: 4 (high=2, medium=2, low=0)
----------------------------------------------------------------------------------------------------
[HIGH ] 2026-01-10T03:14:08 rule=brute_force ip=203.0.113.5 user=root
5 failed login attempts from 203.0.113.5 within 60s (threshold=5)
[HIGH ] 2026-01-10T03:14:20 rule=success_after_failures ip=203.0.113.5 user=root
Successful login for user 'root' from 203.0.113.5 after 7 prior failed attempt(s)
[MEDIUM] 2026-01-10T02:47:33 rule=off_hours_login ip=198.51.100.77 user=backup_svc
Successful login for user 'backup_svc' from 198.51.100.77 at 02:47:33 (off-hours window)
[MEDIUM] 2026-01-10T03:14:20 rule=off_hours_login ip=203.0.113.5 user=root
Successful login for user 'root' from 203.0.113.5 at 03:14:20 (off-hours window)
----------------------------------------------------------------------------------------------------
```
## 运行测试
```
pip install -r requirements.txt
pytest -v
```
## 项目结构
```
parser/
├── logsentinel/
│ ├── __init__.py
│ ├── parser.py # разбор строк лога в объекты LogEvent
│ ├── detectors.py # правила детектирования -> объекты Finding
│ ├── report.py # вывод в консоль / JSON / CSV
│ └── cli.py # точка входа CLI на argparse
├── tests/
│ ├── test_parser.py
│ └── test_detectors.py
├── sample_logs/
│ └── auth.log # синтетический пример лога для демонстрации
└── .github/workflows/ci.yml
```
## 后续改进
- 支持来自 `journalctl` / `.evtx`(Windows Event Log)的输入数据
- 用于检测分布式 brute-force(多个 IP,单一目标账号)的规则
- 使用配置文件来设置阈值,而不是使用硬编码的值
- 封装为可通过 pip 安装的 CLI(`pyproject.toml`,入口点 `logsentinel`)
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:Linux运维, Python, SIEM规则, SSH, 安全规则引擎, 异常检测, 无后门, 红队行动, 逆向工具