fdsimoes-git/ids-agent-smith

GitHub: fdsimoes-git/ids-agent-smith

一款面向 GCP 上 Node.js 应用的轻量级入侵检测系统,结合多源日志实时监控、AI 威胁分析和 Telegram 告警,实现从威胁发现到自动封禁的闭环防御。

Stars: 1 | Forks: 0

IDS Agent

# IDS Agent [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](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检测, 入侵检测系统, 安全数据湖, 安全防护, 异常检测, 插件系统, 暴力破解防御, 端口扫描检测, 网络安全, 自动化响应, 自定义脚本, 轻量级安全, 隐私保护