fdsimoes-git/ids-agent-smith
GitHub: fdsimoes-git/ids-agent-smith
一款面向 GCP 上 Node.js 应用的轻量级入侵检测系统,结合多源日志实时监控、AI 威胁分析和 Telegram 告警,实现从威胁发现到自动封禁的闭环防御。
Stars: 1 | Forks: 0
# IDS Agent
[](LICENSE)
针对 GCP 上 Node.js 应用程序的入侵检测与报警系统,具备 AI 驱动的威胁分析功能。
## 概述
IDS Agent 可实时监控服务器的日志文件,使用可配置的规则检测威胁,通过 Telegram 发送警报,并可选择使用 Claude AI 分析威胁并采取自主防御措施。
**专为以下环境设计:** 运行在 Nginx + Cloudflare 之后的 GCP e2-micro 实例上的 Node.js。
## 功能
- **10 项检测规则**:暴力破解、端口扫描、HTTP 洪水、4xx/5xx 激增、SSH 滥用、扫描器 user-agent、地理位置异常、SQL 注入、XSS、封禁后再次访问
- **实时日志监控**:Nginx、auth.log、UFW、fail2ban、systemd journal
- **Telegram 警报**:带有严重性标签,包含协议/请求/来源上下文以及内联操作命令
- **AI 分析**:Claude 评估 HIGH/CRITICAL 级别的威胁,对攻击进行分类,并提供建议措施
- **自主模式**:通过 fail2ban 和 iptables 实现由 AI 驱动的 IP 自动封禁(可配置)
- **人机协同 (Human-in-the-loop)**:通过 Telegram 命令进行手动封禁、白名单设置和生成报告
- **每日摘要** 于早上 08:00 发送,**每周 AI 报告** 于周一发送
- **HTTP API**:提供 `/health` 和 `/stats` 端点
- **轻量级**:单进程、内存存储、极简依赖
## 环境要求
- Node.js >= 20
- Ubuntu 24 (GCP e2-micro)
- Nginx(配置为反向代理)
- Cloudflare(位于服务器前端)
- fail2ban(已安装并运行)
- iptables(可用)
## 快速设置
```
# Clone repo
git clone
/opt/ids-agent
cd /opt/ids-agent
# 运行 setup (以 root 身份)
sudo bash setup.sh
```
此设置脚本将会:
1. 创建一个 `ids-agent` 系统用户
2. 建立日志和数据目录
3. 安装 Node.js 依赖
4. 配置文件权限和 sudoers
5. 安装 systemd 服务
## 配置说明
所有配置均通过 systemd 服务文件中设置的 **环境变量** 进行:
```
sudo nano /etc/systemd/system/ids-agent.service
```
| 变量 | 必填 | 描述 |
|---|---|---|
| `TELEGRAM_BOT_TOKEN` | 是 | Telegram Bot API token |
| `TELEGRAM_CHAT_ID` | 是 | 用于接收警报的 Telegram 聊天 ID |
| `ANTHROPIC_API_KEY` | 是 | 用于 Claude AI 的 Anthropic API 密钥 |
| `AUTONOMOUS_MODE` | 否 | 设为 `true` 以启用自动封禁(默认:`false`) |
| `MONITORED_SERVICE` | 是 | 你的应用程序的 systemd 服务名称 |
| `API_BEARER_TOKEN` | 是 | 用于 `/stats` 端点的 Bearer token |
| `ALLOWED_COUNTRIES` | 否 | 逗号分隔的国家代码(默认:`BR,US`) |
| `IDS_PORT` | 否 | HTTP API 端口(默认:`3001`) |
## Nginx 日志格式
IDS Agent 需要将来自 Cloudflare 的真实客户端 IP 作为 Nginx 访问日志的第一个字段。请将以下内容添加到你的 `nginx.conf` 中:
```
http {
log_format cf '$http_cf_connecting_ip - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log cf;
}
```
### 通过 Nginx 封禁 IP
IDS Agent 会自动管理 `/etc/nginx/blocked-ips.conf`,以便在 HTTP 层拦截被禁止的 IP(当服务器位于 Cloudflare 之后时,这至关重要,因为 iptables 对于 Web 流量只能看到 Cloudflare 的 IP)。请将以下 include 语句添加到每个 Nginx `server` 块中:
```
server {
include /etc/nginx/blocked-ips.conf;
# ... rest of your config
}
```
## 运行
```
# Start
sudo systemctl start ids-agent
# Enable on boot
sudo systemctl enable ids-agent
# Check status
sudo systemctl status ids-agent
# View logs
sudo journalctl -u ids-agent -f
# Health check
curl http://localhost:3001/health
# Stats (受保护)
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:3001/stats
```
## Telegram 命令
| 命令 | 描述 |
|---|---|
| `/block_ip ` | 通过 fail2ban + iptables 封禁指定 IP |
| `/whitelist ` | 抑制对指定 IP 的未来警报 |
| `/report ` | 针对该 IP 活动的 AI 深度分析报告 |
| `/status` | 当前的威胁摘要和统计数据 |
| `/help` | 显示可用命令 |
## 检测规则
| 规则 | 触发条件 | 严重级别 |
|---|---|---|
| brute-force | 同一 IP 在 60 秒内出现 5 次以上登录失败 (401/403) | MEDIUM/HIGH |
| port-scan | 同一 IP 在 30 秒内访问 10 个以上不同的端点 | HIGH |
| http-flood | 同一 IP 在 60 秒内发出 100 个以上请求 | HIGH/CRITICAL |
| 4xx-spike | 全局在 1 分钟内出现 30 次以上客户端错误 | MEDIUM |
| 5xx-spike | 全局在 1 分钟内出现 3 次以上服务端错误 | HIGH |
| ssh-abuse | 同一 IP 出现 3 次以上 SSH 登录失败 | HIGH/CRITICAL |
| suspicious-user-agent | 已知的扫描器特征 (sqlmap, nikto, nmap 等) | HIGH |
| geo-anomaly | 请求来自未加入白名单的国家 | LOW |
| sqli-attempt | URL 中包含 SQL 注入模式 | CRITICAL |
| xss-attempt | URL 中包含 XSS 模式 | HIGH |
| post-ban-access | 最近被解封的 IP 再次访问服务器 | MEDIUM |
## AI 集成
当检测到 HIGH 或 CRITICAL 级别的威胁时,Claude AI 会进行以下操作:
1. 分析完整的上下文信息(日志数据、IP 历史、检测规则、协议、HTTP 方法/状态、user-agent、来源)
2. 对攻击类型进行分类并给出置信度评分
3. 提供建议措施:`block` (封禁)、`monitor` (监控)、`ignore` (忽略) 或 `escalate` (升级上报)
4. 提供人类可读的解释说明
**自主模式** (`AUTONOMOUS_MODE=true`):置信度 >= 70% 的 AI 推荐封禁操作将自动执行。
**人机协同** (`AUTONOMOUS_MODE=false`):AI 提供建议措施,操作员通过 Telegram 命令进行确认。
AI 决策将被记录到 `/var/log/ids-agent/ai-decisions.log` 中。
## 架构
```
src/
├── index.js # Main entry — wires everything together
├── store.js # In-memory IP tracking with TTL cleanup
├── parsers/ # Log line parsers (nginx, auth, ufw, fail2ban, journal)
├── detectors/ # Detection rules (one per file)
├── alerters/ # Telegram alerts + daily summary
├── ai/ # Claude AI analyzer, autonomous actions, threat memory
├── api/ # HTTP health/stats endpoints
├── bot/ # Telegram bot command handler
└── utils/ # Logger, sanitizer, file tailer, cooldown manager, origin identifier
```
## 部署建议
1. 在最初的几天里,请以 `AUTONOMOUS_MODE=false` 作为起点运行
2. 在 `/var/log/ids-agent/ai-decisions.log` 中查看 AI 的决策
3. 对可疑 IP 使用 `/report ` 命令来验证 AI 的准确性
4. 在对 AI 的判断建立信心后,再启用自主模式
5. 通过 `/stats` 监控内存使用情况——内存存储每 5 分钟清理一次
## 文件
| 文件 | 用途 |
|---|---|
| `config.js` | 核心配置(读取环境变量) |
| `ids-agent.service` | systemd 服务模板 |
| `setup.sh` | 针对 Ubuntu 24 的自动化安装脚本 |
| `.gitignore` | 排除敏感数据和日志文件 |标签:AI威胁分析, AppImage, CISA项目, Claude AI, Cloudflare, fail2ban, GCP, GNU通用公共许可证, HTTP洪水防御, iptables, IP 地址批量处理, MITM代理, MITRE ATT&CK, Nginx, Node.js, PE 加载器, PKI安全, SQL注入检测, Telegram告警, Web应用防火墙, XSS检测, 入侵检测系统, 安全数据湖, 安全防护, 异常检测, 插件系统, 暴力破解防御, 端口扫描检测, 网络安全, 自动化响应, 自定义脚本, 轻量级安全, 隐私保护