G-ho5t-Wr1t3r/RUSICATA
GitHub: G-ho5t-Wr1t3r/RUSICATA
一个基于 Django 的 Suricata IPS 轻量级 Web 管理界面,专为攻防 CTF 竞赛中实时部署和管理入侵防御规则而设计。
Stars: 0 | Forks: 0
# Rusicata

*语言选择*

IT
Rusicata 是一个基于 **Django** 的高级解决方案,用于简化 **Suricata** 在 **IPS (Intrusion Prevention System)** 模式下的管理。Rusicata 专为 Attack & Defense (A/D) 竞赛设计,允许通过动态规则、实时监控以及细粒度的 HTTP 和传输层流量管理来保护服务。 ## 1. Suricata IPS 简介 Suricata 是一款高性能的网络安全监控引擎 (IDS/IPS)。在 IPS 模式下,Suricata 不仅限于检测威胁,还可以对恶意流量进行**主动干预** (drop/reject)。 ### 规则的工作原理 Suricata 规则遵循特定的语法,组成如下: `动作 协议 源 源端口 -> 目标 目标端口 (选项)` **Rusicata 管理的规则示例:** 1. **HTTP 过滤 (URI 匹配):** `drop http any any -> any 80 (msg:"Blocco attacco SQLi"; flow:to_server,established; content:"GET"; http_method; content:"UNION SELECT"; http_uri; sid:100001; rev:1;)` 2. **传输层过滤 (TCP):** `alert tcp any any -> any 4444 (msg:"Rilevato traffico sospetto su porta 4444"; flow:to_server,established; sid:100002; rev:1;)` 3. **全局过滤 (ICMP):** `reject icmp any any -> any any (msg:"Ping disabilitato"; sid:2000001; rev:1;)` ## 2. Repository 结构 该项目的组织结构将 Web 管理逻辑与系统配置分离开来: * **`rusicata_master/`**: Django 项目的核心。 * **`rusicata/`**: 全局配置 (`settings.py`, `urls.py`)。 * **`rusicata_manager/`**: 主应用程序。包含模型 (`models.py`)、dashboard 视图以及与 Suricata 交互的逻辑。 * **`suricata.yaml`**: 为 Rusicata 优化的 Suricata 配置模板。 * **`init.sh`**: 用于打包项目并将其传输到 Game VM 的本地脚本。 * **`setup.sh`**: 用于安装依赖项并进行完整部署的远程脚本。 * **`destroy_rusicata.sh`**: 用于完全恢复系统状态(移除 Suricata、iptables 规则和数据)的脚本。 * **`.assets/`**: 用于文档的图形资源。 ## 3. 设计选择 ### Django 与系统的集成 与标准的 Web 应用不同,Rusicata 直接与操作系统进行交互: * **规则文件管理**:在数据库中创建的每个 `Service` 都会在 `/var/lib/suricata/rules/{service_name}.rules` 中生成一个物理文件。 * **Hot-Reload**:为了避免服务中断,Rusicata 使用 `SIGUSR2` 信号指示 Suricata 在不重启 daemon 的情况下重新加载规则。只有在修改文件结构(例如添加新服务)时才会执行完全重启 (`systemctl restart`)。 * **SID 管理**:规则 ID (SID) 使用基于服务 ID 的偏移量自动生成(例如 `Service ID * 100000 + increment`)以确保唯一性。 ### 异步逻辑 诸如重启 Suricata daemon 之类的繁重操作通过独立的线程 (`threading.Thread`) 进行处理,以确保 Web 界面在维护操作期间保持响应。 ## 4. 自动化与脚本 ### 4.1 `init.sh` (本地管理) 自动化将文件传输到目标 VM 的过程。 * **压缩**:创建一个名为 `rusicata.tar.gz` 的 tarball,排除不必要的文件 (`env`, `__pycache__`, `.git`)。 * **传输**:通过 SCP 发送 tarball 和 `setup.sh` 脚本。 * **Debug Mode**:如果使用 `-D` 运行,它还会传输维护脚本 (`destroy_rusicata.sh`)。 ### 4.2 `setup.sh` (部署) 在 VM 上执行完整设置: 1. **依赖项**:安装 `python3-venv`、`suricata`、`jq` 和 `software-properties-common`。 2. **Python 环境**:创建 virtual environment 并安装依赖。 3. **Django 设置**:配置 SQLite 数据库,执行迁移并创建超级用户(默认 `root:root`)。 4. **Suricata 配置**:将 daemon 配置为在 IPS 模式下运行的系统服务 (`-q 0`)。 5. **Networking**:注入必要的 IPTABLES 规则以将流量路由到 Suricata 队列。 ### 4.3 `destroy_rusicata.sh` (清理) 将机器恢复到初始状态: * 停止 Django 和 Suricata。 * 彻底删除 Suricata 包及其在 `/etc/suricata` 中的相关配置。 * **清理 IPTABLES**:精准移除跳转到 NFQUEUE 的规则。 * 删除 `/opt/rusicata` 目录和数据库。 ## 5. Networking 与 IPS 配置 (NFQUEUE) IPS 模式下的 Suricata 充当网络接口与应用程序之间的“过滤器”。 ### 选择 IPTABLES 链 流量通过 `NFQUEUE 0` 队列发送到 Suricata。配置取决于要检查的流量类型: * **标准模式 (`DOCKER-USER`)**:仅检查指向 Docker container 的流量。在服务已经 container 化的 CTF 环境中,这是性能最好且最安全的选择。 * **完全模式 (`--all`)**:涉及 `INPUT`、`FORWARD` 和 `OUTPUT` 链。它检查机器上的所有流量,包括 SSH 访问和系统通信。 **注意 Docker 的 DNAT:** Docker 在 `PREROUTING` 链中应用 NAT。当数据包到达 `FORWARD`(或 `DOCKER-USER`)链时,目标端口已经被映射为 container 的内部端口。**因此,Rusicata 规则必须基于应用程序在 container 内运行的实际端口。** ## 6. 手动设置(分步指南) 如果您希望在不使用自动化脚本的情况下安装 Rusicata: ### 阶段 1:系统准备 ``` sudo apt update && sudo apt install -y python3-venv suricata jq ``` ### 阶段 2:Django 配置 1. 将代码解压到 `/opt/rusicata`。 2. 创建 venv:`python3 -m venv .env && source .env/bin/activate`。 3. 安装依赖项:`pip install -r requirements.txt`。 4. 配置数据库: python3 rusicata_master/manage.py migrate python3 rusicata_master/manage.py createsuperuser ### 阶段 3:Suricata 配置 1. 将 `rusicata_master/suricata.yaml` 复制到 `/etc/suricata/suricata.yaml`。 2. 编辑 systemd 服务 (`/usr/lib/systemd/system/suricata.service`) 并设置为: `ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -q 0 -D` 3. 重新加载并启动:`systemctl daemon-reload && systemctl restart suricata`。 ### 阶段 4:IPTABLES 配置重定向: ``` iptables -I DOCKER-USER -j NFQUEUE --queue-num 0 --queue-bypass ``` ## 7. 操作说明与故障排除 ### 常用命令 * **事件监控**: ``` tail -f /var/log/suricata/eve.json | jq ``` * **验证配置**: ``` suricata -T -c /etc/suricata/suricata.yaml ``` * **规则状态**(需要激活的 unix socket): ``` suricatasc -c reload-rules ``` ### 已知问题 * **Loopback 测试**:Iptables 处理 `localhost` 到 `localhost` 流量的方式与处理外部流量的方式不同;如果在本地执行,`drop` 测试可能会失败。 * **YAML 语法**:Suricata 对 `suricata.yaml` 文件的格式极其敏感。缩进错误将导致服务无法启动。 ## 许可证 本项目根据 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 授权。 这意味着您可以自由地共享和修改本材料,前提是您必须向我进行署名,不得将其用于商业目的,并在相同的许可下分发任何修改后的版本。EN
Rusicata 是一个基于 **Django** 的高级解决方案,用于简化 **Suricata** 在 **IPS (Intrusion Prevention System)** 模式下的管理。Rusicata 专为 Attack & Defense (A/D) 竞赛设计,允许通过动态规则、实时监控以及细粒度的 HTTP 和传输层流量管理来保护服务。 ## 1. Suricata IPS 简介 Suricata 是一款高性能的网络安全监控引擎 (IDS/IPS)。在 IPS 模式下,Suricata 不仅限于检测威胁,还可以**主动干预** (drop/reject) 以阻断恶意流量。 ### 规则的工作原理 Suricata 规则遵循特定的语法,组成如下: `动作 协议 源端口 -> 目标 目标端口 (选项)` **Rusicata 管理的规则示例:** 1. **HTTP 过滤 (URI 匹配):** `drop http any any -> any 80 (msg:“Blocking SQLi attack”; flow:to_server,established; content:‘GET’; http_method; content:“UNION SELECT”; http_uri; sid:100001; rev:1;)` 2. **传输层过滤 (TCP):** `alert tcp any any -> any 4444 (msg:“Suspicious traffic detected on port 4444”; flow:to_server,established; sid:100002; rev:1;)` 3. **全局过滤 (ICMP):** `reject icmp any any -> any any (msg:“Ping disabled”; sid:2000001; rev:1;)` ## 2. Repository 结构 该项目的组织结构将 Web 管理逻辑与系统配置分离开来: * **`rusicata_master/`**: Django 项目的核心。 * **`rusicata/`**: 全局配置 (`settings.py`, `urls.py`)。 * **`rusicata_manager/`**: 主应用程序。包含模型 (`models.py`)、dashboard 视图以及与 Suricata 交互的逻辑。 * **`suricata.yaml`**: 为 Rusicata 优化的 Suricata 配置模板。 * **`init.sh`**: 用于打包项目并将其传输到 Game VM 的本地脚本。 * **`setup.sh`**: 用于安装依赖项并进行完整部署的远程脚本。 * **`destroy_rusicata.sh`**: 用于完全恢复系统状态(移除 Suricata、iptables 规则和数据)的脚本。 * **`.assets/`**: 用于文档的图形资源。 ## 3. 设计选择 ### Django 与系统的集成 与标准的 Web 应用不同,Rusicata 直接与操作系统进行交互: * **规则文件管理**:在数据库中创建的每个 `Service` 都会在 `/var/lib/suricata/rules/{service_name}.rules` 中生成一个物理文件。 * **Hot-Reload**:为了避免服务中断,Rusicata 使用 `SIGUSR2` 信号指示 Suricata 在不重启 daemon 的情况下重新加载规则。只有在修改文件结构(例如添加新服务)时才会执行完全重启 (`systemctl restart`)。 * **SID 管理**:规则 ID (SID) 使用基于服务 ID 的偏移量自动生成(例如 `Service ID * 100000 + increment`)以确保唯一性。 ### 异步逻辑 诸如重启 Suricata daemon 之类的繁重操作通过独立的线程 (`threading.Thread`) 进行处理,以确保 Web 界面在维护操作期间保持响应。 ## 4. 自动化与脚本 ### 4.1 `init.sh` (本地管理) 自动化将文件传输到目标 VM 的过程。 * **压缩**:创建一个名为 `rusicata.tar.gz` 的 tarball,排除不必要的文件 (`env`, `__pycache__`, `.git`)。 * **传输**:通过 SCP 发送 tarball 和 `setup.sh` 脚本。 * **Debug Mode**:如果使用 `-D` 运行,它还会传输维护脚本 (`destroy_rusicata.sh`)。 ### 4.2 `setup.sh` (部署) 在 VM 上执行完整设置: 1. **依赖项**:安装 `python3-venv`、`suricata`、`jq` 和 `software-properties-common`。 2. **Python 环境**:创建 virtual environment 并安装依赖。 3. **Django 设置**:配置 SQLite 数据库,执行迁移并创建超级用户(默认 `root:root`)。 4. **Suricata 配置**:将 daemon 配置为在 IPS 模式下运行的系统服务 (`-q 0`)。 5. **Networking**:注入必要的 IPTABLES 规则以将流量路由到 Suricata 队列。 ### 4.3 `destroy_suricata.sh` (清理) 将机器恢复到初始状态: * 停止 Django 和 Suricata。 * 彻底删除 Suricata 包及其在 `/etc/suricata` 中的相关配置。 * **清理ABLES**:精准移除跳转到 NFQUEUE 的规则。 * 删除 `/opt/rusicata` 目录和数据库。 ## 5. Networking 与 IPS 配置 (NFQUEUE) IPS 模式下的 Suricata 充当网络接口与应用程序之间的“过滤器”。 ### 选择 IPTABLES 链 流量通过 `NFQUEUE 0` 队列发送到 Suricata。配置取决于要检查的流量类型: * **标准模式 (`DOCKER-USER`)**:仅检查指向 Docker container 的流量。在服务已经 container 化的 CTF 环境中,这是性能最好且最安全的选择。 * **完全模式 (`--all`)**:涉及 `INPUT`、`FORWARD` 和 `OUTPUT` 链。它检查机器上的所有流量,包括 SSH 访问和系统通信。 **注意 Docker 的 DNAT:** Docker 在 `PREROUTING` 链中应用 NAT。当数据包到达 `FORWARD`(或 `DOCKER-USER`)链时,目标端口已经被映射为 container 的内部端口。**因此,Rusicata 规则必须基于应用程序在 container 内运行的实际端口。** ## 6. 手动设置(分步指南) 如果您希望在不使用自动化脚本的情况下安装 Rusicata: ### 步骤 1:系统准备 ``` sudo apt update && sudo apt install -y python3-venv suricata jq ``` ### 步骤 2:Django 配置 1. 将代码解压到 `/opt/rusicata`。 2. 创建 venv:`python3 -m venv .env && source .env/bin/activate`。 3. 安装依赖项:`pip install -r requirements.txt`。 4. 配置数据库: python3 rusicata_master/manage.py migrate python3 rusicata_master/manage.py createsuperuser ### 步骤 3:Suricata 配置 1. 将 `rusicata_master/suricata.yaml` 复制到 `/etc/suricata/suricata.yaml`。 2. 编辑 systemd 服务 (`/usr/lib/systemd/system/suricata.service`) 并设置为: `ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -q 0 -D` 3. 重新加载并重启:`systemctl daemon-reload && systemctl restart suricata`。 ### 步骤 4:IPTABLES 配置重定向: ``` iptables -I DOCKER-USER -j NFQUEUE --queue-num 0 --queue-bypass ``` ## 7. 操作说明与故障排除 ### 常用命令 * **事件监控**: ``` tail -f /var/log/suricata/eve.json | jq ``` * **验证配置**: ``` suricata -T -c /etc/suricata/suricata.yaml ``` * **规则状态**(需要激活的 Unix socket): ``` suricatasc -c reload-rules ``` ### 已知问题 * **Loopback 测试**:Iptables 处理 `localhost` 到 `localhost` 流量的方式与处理外部流量的方式不同;在本地运行时 `drop` 测试可能会失败。 * **YAML 语法**:Suricata 对 `suricata.yaml` 文件的格式极其敏感。缩进错误将导致服务无法启动。 ## 许可证 本项目根据 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 授权。 这意味着您可以自由地共享和修改本材料,前提是您必须向我进行署名,不得将其用于商业目的,并在相同的许可下分发任何修改后的版本。标签:CTF攻防, Cutter, Django, Metaprompt, Suricata, Web界面, 入侵防御系统, 后端开发, 威胁猎捕, 现代安全运营, 请求拦截, 逆向工具