VPS 只要暴露在公网,SSH 暴力破解就没停过。传统的 Fail2Ban 虽然能封禁 IP,但只能基于频率规则,难以识别复杂的攻击模式或慢速扫描。主机选今天分享一个实战思路:利用 AI Agent 分析 auth.log,自动识别 SSH 登录失败模式、暴力破解行为和异常 IP 地址。相比单纯的正则匹配,AI 能从日志语义中发现更隐蔽的攻击特征,适合希望提升 VPS 安全运维效率的用户。

为什么需要 AI Agent 分析 auth.log
运维人员平时看日志,多用 `grep`、`awk` 或者 `lastb`。这些工具处理几千行日志没问题,但面对数万行且包含各种用户名枚举、漏洞尝试的混合日志时,效率极低。AI Agent 的优势在于“理解”日志内容,而不是仅仅匹配字符串。它能识别出攻击者在尝试特定的用户名组合,或者利用特定的漏洞 Payload,甚至能总结出攻击来源的地域分布特征。
对于不想把敏感日志上传到公有云 API 的用户,建议使用本地模型(如 Ollama 部署 Llama 3 或 Qwen)在 VPS 本地运行分析。这样既保证了数据不出境,又能利用大模型的能力处理非结构化日志。
本地部署 Ollama 运行分析模型
要实现 AI Agent 分析,首先得有一个能跑起来的模型。如果你的 VPS 内存大于 4GB,完全可以跑一个轻量级的 7B 模型。我们使用 Docker 部署 Ollama,方便管理。
Docker 快速启动 Ollama
执行以下命令拉取并运行 Ollama 容器:
docker run -d -v ollama:/root/.ollama -p 11434:11434 –name ollama ollama/ollama
这条命令将 Ollama 的数据持久化存储在 Docker Volume 中,并映射了 11434 端口。容器启动后,拉取一个适合文本分析的小参数模型,比如 Qwen2.5 或 Llama3.1:
docker exec -it ollama ollama pull qwen2.5:7b
建议选择 7B 版本,在推理速度和分析能力之间取得平衡。如果你的 VPS 配置较低,也可以尝试 3B 或 4B 的量化版本。
构建日志提取与 Prompt 逻辑
AI Agent 不能直接“吃”下几百 MB 的 auth.log 文件,我们需要先做预处理,提取出“可疑”片段,再交给 AI 分析。
提取关键日志信息
不要把整个日志文件扔给 AI。先用 Linux 命令筛选出“Failed password”或“Invalid user”的记录,并限制行数。例如,提取最近 50 条失败记录:
grep "Failed password\|Invalid user" /var/log/auth.log | tail -n 50 > /tmp/ssh_fail.log
检查一下 `/tmp/ssh_fail.log` 的内容,确保没有包含敏感的服务器内部信息(虽然 auth.log 主要是登录记录,但还是要注意别把环境变量泄露出去)。
编写分析 Prompt
Prompt 的设计决定了 Agent 的输出质量。我们需要告诉 AI 它的角色是安全运维专家,任务是从给定的日志中分析攻击模式。
创建一个简单的 Python 脚本 `analyze_log.py`,或者直接使用 `curl` 调用 Ollama API。以下是一个通用的 Prompt 模板:
text
你是一个 Linux 安全运维专家。请分析以下 SSH 认证日志片段。
任务:
1. 识别是否存在暴力破解攻击。
2. 统计攻击尝试最多的前 3 个 IP 地址。
3. 识别攻击者尝试过的用户名模式(例如是否尝试了常见用户名如 root, admin, test)。
4. 判断是否存在慢速扫描或分布式攻击。
5. 给出具体的 iptables 封禁建议。
日志内容:
[这里插入 /tmp/ssh_fail.log 的内容]
执行脚本与异常 IP 识别
有了日志和 Prompt,就可以编写自动化脚本让 Agent 开始工作了。
调用本地 API 进行分析
使用 `curl` 向本地的 Ollama 服务发送请求。为了方便,我们可以把上面的 Prompt 和日志内容拼接到一个 JSON 文件里,或者直接在命令行中处理(注意转义字符)。
更推荐写一个简单的 Bash 脚本:
#!/bin/bash
LOG_CONTENT=$(cat /tmp/ssh_fail.log)
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "你是一个 Linux 安全运维专家。请分析以下 SSH 认证日志片段:\n\n'"$LOG_CONTENT"'\n\n请列出攻击 IP 和建议封禁的命令。",
"stream": false
}' | jq -r '.response'
赋予执行权限并运行:
chmod +x analyze_ssh.sh
./analyze_ssh.sh
AI Agent 会输出类似这样的分析报告:
*攻击判定:检测到高频暴力破解。
*Top IP:192.0.2.123 (尝试次数: 400), 203.0.113.45 (尝试次数: 200)。
*用户名模式:攻击者使用了字典攻击,尝试了 admin, user, postgres 等常见账户。
*封禁建议:`iptables -A INPUT -s 192.0.2.123 -j DROP`。
结合自动化工作流
如果你在用 n8n 或其他自动化工具,可以将这个流程封装成一个 Webhook。每天定时运行脚本,分析日志,如果检测到高危 IP,自动触发 Webhook 通知你,甚至调用 API 直接修改防火墙规则。
老鸟叮嘱
1.数据隐私第一:auth.log 可能包含你的登录用户名甚至部分输入错误的信息。千万不要为了图方便把日志直接粘贴到 ChatGPT 或 Claude 的网页版里,除非你确定这是测试环境。生产环境建议死磕本地模型。
2.别让 Agent 获得执行权:目前的方案是让 AI “建议”封禁,而不是直接让它执行封禁命令。大模型偶尔会产生幻觉,万一它把内网网段或者你自己的 IP 给封了,那就麻烦了。人机复核是必须的。
3.日志轮转问题:`auth.log` 通常会由 logrotate 管理,分析时要注意读取的是当前活跃的日志还是已经被压缩归档的日志(如 auth.log.1)。要做长周期分析,需要先解压归档文件。
4.资源占用:本地跑模型费内存。如果是 1G 内存的小鸡,别跑 7B 模型,老老实实用 Shell 脚本写正则匹配,或者调用远程 API。
FAQ
1. AI 分析日志比传统正则表达式准确吗?
在识别特定字符串(如 "Failed password")上,正则更快更准。但在识别“攻击意图”或“复杂模式”(如先探测用户名再尝试密码)上,AI 具有优势,能发现传统规则漏掉的慢速攻击。
2. 低配 VPS(1核1G)能部署这个方案吗?
跑本地 7B 模型非常吃力,容易 OOM(内存溢出)。建议使用 API 调用云端模型(如 DeepSeek、OpenAI),或者使用极小的量化模型(如 1B 参数),但分析能力会打折扣。
3. 如何防止 AI Agent 误封合法 IP?
永远不要让 Agent 直接执行 `iptables` 命令。设计工作流时,让 Agent 输出报告,由运维人员确认,或者设置一个阈值,只有当某个 IP 失败次数超过极高数值(如 1000 次)且被 AI 标记为恶意时,才触发自动封禁。
4. 除了 auth.log,AI 还能分析什么日志?
Nginx 访问日志(识别 CC 攻击、爬虫)、应用错误日志(分析异常堆栈)、MySQL 慢查询日志(优化 SQL 建议)。只要是文本格式的日志,AI 基本都能处理。
5. 分析速度慢怎么办?
本地模型推理速度取决于 CPU/GPU 性能。可以通过减少上下文长度(只分析最近 100 行日志)或使用量化版本来提速。如果是实时监控,建议还是用 Fail2Ban 这种基于规则的工具,AI 仅用于事后的深度分析。
利用 AI Agent 分析 auth.log,本质上是把繁琐的“看日志”工作外包给了一个不知疲倦的助手。它不能完全替代防火墙,但能极大地提升你对服务器安全态势的感知能力。
DESCRIPTION:
本教程介绍如何利用 AI Agent 分析 VPS 的 auth.log,自动识别 SSH 登录失败、暴力破解行为及异常 IP,包含 Ollama 本地部署、日志提取与 Prompt 编写实战,提升服务器安全运维效率。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10116.html 商家投稿邮箱:zhujixuanblog@qq.com
