基于实际部署经验总结,系统环境为 Ubuntu 22.04,Python 3.10,KVM 虚拟化,客户机使用 Windows 10 专业版


一、系统环境准备

1.1 硬件要求

  • CPU:支持硬件虚拟化(Intel VT-x / AMD-V)

  • 内存:至少 8GB(推荐 16GB)

  • 磁盘:根分区建议 50GB+,另加一块独立硬盘用于虚拟机镜像(建议 100GB+)

1.2 安装基础软件包

sudo apt update && sudo apt upgrade -y
sudo apt install -y git wget curl software-properties-common build-essential

1.3 安装 Python 3.10(Ubuntu 20.04/18.04 需要,22.04 自带)

sudo apt install -y python3.10 python3.10-venv python3.10-dev

1.4 安装 KVM 虚拟化

sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
sudo systemctl enable --now libvirtd
# 将当前用户加入 libvirt 和 kvm 组
sudo usermod -aG libvirt,kvm $USER
# 重新登录或执行 newgrp libvirt

1.5 启用嵌套虚拟化(若在 VMware/VirtualBox 内运行 Ubuntu)

  • 关闭 Ubuntu 虚拟机,在虚拟机设置 → 处理器 → 勾选 “虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”

  • 启动 Ubuntu,检查:

    cat /sys/module/kvm_intel/parameters/nested   # 应返回 1 或 Y

    如果为 0,执行:

    sudo modprobe -r kvm_intel
    sudo modprobe kvm_intel nested=1
    echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm_intel.conf

二、安装 CAPEv2

2.1 克隆项目

cd /opt
sudo git clone https://github.com/kevoreilly/CAPEv2.git
sudo chown -R $USER:$USER CAPEv2   # 将所有权给当前用户,后续再改 cape 用户

2.2 安装 Poetry 并配置国内源

# 为当前用户安装 Poetry
python3.10 -m pip install --user poetry
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
​
# 配置 Poetry 使用清华源(加速)
poetry config repositories.pypi https://pypi.tuna.tsinghua.edu.cn/simple
# 或添加阿里云源
poetry source add --priority=primary aliyun https://mirrors.aliyun.com/pypi/simple/

2.3 安装 Python 依赖

cd /opt/CAPEv2
poetry env use python3.10
poetry install

2.4 配置数据库(PostgreSQL + MongoDB)

CAPEv2 脚本会自动安装,若需手动:

sudo apt install -y postgresql mongodb
sudo systemctl enable --now postgresql mongodb

三、配置 Windows 10 客户机

3.1 创建虚拟机

sudo virt-install \
    --name Cape-Win10 \
    --memory 4096 \
    --vcpus 2 \
    --disk path=/var/lib/libvirt/images/cape-win10.qcow2,size=50 \
    --os-variant win10 \
    --network network=default,model=virtio \
    --graphics vnc,listen=0.0.0.0,port=5900 \
    --cdrom /path/to/Win10_22H2.iso \
    --noautoconsole
    
name: 虚拟机名称
ram:内存 16G
disk path:存储虚拟机的位置,用默认位置就好,大小为 50 G
vcpus:虚拟 CPU 核数
os-variant:系统为 win10
network:采用 default 网络
graphic:设置 VNC 连接,这个用来就行虚拟机内部的配置,这个一定要有如果在服务器上的话。
cdrom:操作系统镜像的路径
noautoconsole:无自动终端

3.2 安装 Windows 10 专业版

  • 通过 VNC 连接(宿主机 IP:5900)完成安装

  • 必须使用 专业版(Pro),才能通过组策略彻底关闭 Defender

3.3 安装 VirtIO 驱动

虚拟机内挂载 virtio-win.iso(从 Fedora 仓库 下载):

  • 打开设备管理器 → 未知以太网控制器 → 更新驱动 → 浏览光驱中的 NetKVM\w10\amd64

  • 重启虚拟机

3.4 客户机内部配置

  1. 静态 IP(CAPEv2 不支持 DHCP):

    • IP: 192.168.122.100,掩码: 255.255.255.0,网关: 192.168.122.1,DNS: 8.8.8.8

  2. 安装 Python 3.8.10 32位下载地址

    • 安装时勾选 “Add Python to PATH”

  3. 安装 Pillowpython -m pip install Pillow==9.5.0

  4. 部署 CAPE Agent

    • 下载 agent.py → 重命名为 agent.pyw

    • Win+R 输入 shell:common startup,将 agent.pyw 放入该文件夹

  5. 关闭 Windows Defender 实时保护(通过组策略):

    • gpedit.msc → 计算机配置 → 管理模板 → Windows 组件 → Microsoft Defender 防病毒 → 启用“关闭 Microsoft Defender 防病毒”

  6. 禁用 Windows Update 服务services.msc → Windows Update → 禁用并停止

  7. 关闭防火墙:控制面板 → Windows Defender 防火墙 → 全部关闭

3.5 测试 Agent

在宿主机执行:

curl http://192.168.122.100:8000

应返回 JSON 格式的 Agent 信息。

3.6 拍摄运行中快照(关键)

# 确保虚拟机已开机且 agent 可访问
sudo virsh snapshot-create-as Cape-Win10 cape-running --disk-only --atomic

验证快照状态:

sudo virsh snapshot-info Cape-Win10 cape-running   # State: running

四、配置 CAPEv2 服务

4.1 创建专用运行用户 cape

sudo useradd -m -s /bin/bash cape
# 为 cape 用户安装 Poetry
sudo -u cape python3.10 -m pip install --user poetry
sudo -u cape poetry config repositories.pypi https://pypi.tuna.tsinghua.edu.cn/simple

4.2 修改配置文件

编辑 /opt/CAPEv2/conf/kvm.conf

[machinery]
machinery = kvm
​
[kvm]
machines = cuckoo1
interface = virbr0
dsn = qemu:///system
​
[cuckoo1]
label = Cape-Win10
platform = windows
ip = 192.168.122.100
arch = x86
snapshot = cape-running

4.3 创建 systemd 服务

以下服务文件需创建在 /etc/systemd/system/: WorkingDirectory为项目目录

cape-rooter.service

[Unit]
Description=CAPE rooter
After=network.target
​
[Service]
WorkingDirectory=/opt/CAPEv2
ExecStart=/home/cape/.local/bin/poetry run python utils/rooter.py -g cape
User=root
Group=root
Restart=always
RestartSec=5m
​
[Install]
WantedBy=multi-user.target

cape-web.service

[Unit]
Description=CAPE WSGI app
After=cape-rooter.service
​
[Service]
WorkingDirectory=/opt/CAPEv2/web
ExecStart=/home/cape/.local/bin/poetry run python manage.py runserver_plus 0.0.0.0:8000 --traceback --keep-meta-shutdown
User=cape
Group=cape
Restart=always
RestartSec=5m
​
[Install]
WantedBy=multi-user.target

cape-processor.service

[Unit]
Description=CAPE report processor
After=cape-rooter.service
​
[Service]
WorkingDirectory=/opt/CAPEv2
ExecStart=/home/cape/.local/bin/poetry run python utils/process.py -p1 -pt 900 auto
User=cape
Group=cape
Restart=always
RestartSec=5m
LimitNOFILE=100000
​
[Install]
WantedBy=multi-user.target

cape.service(调度器):

[Unit]
Description=CAPE scheduler
After=cape-rooter.service
​
[Service]
WorkingDirectory=/opt/CAPEv2
ExecStart=/home/cape/.local/bin/poetry run python cuckoo.py
User=cape
Group=cape
Restart=always
RestartSec=5m
​
[Install]
WantedBy=multi-user.target

4.4 启动所有服务

sudo systemctl daemon-reload
sudo systemctl enable --now cape-rooter cape-web cape-processor cape
sudo systemctl status cape-rooter cape-web cape-processor cape

其中,每个服务作用为

cape.service    cuckoo.py    主调度器,负责接收、调度分析任务。
cape-processor.service    process.py    分析处理器,负责处理分析结果并生成报告。
cape-web.service    manage.py    Web 界面,提供基于 Django 的网页管理后台。
cape-rooter.service    rooter.py    网络路由,以 root 权限运行,负责管理沙箱的网络通信


五、验证与提交任务

5.1 访问 Web 界面

浏览器打开 http://<宿主机IP>:8000,默认用户名/密码:cape/cape

5.2 命令行提交测试任务

sudo -u cape /home/cape/.local/bin/poetry run python /opt/CAPEv2/utils/submit.py /tmp/eicar.com


六、常见问题与解决办法

问题现象 可能原因 解决方法
virt-install 报 “Host does not support virtualization” 嵌套虚拟化未开启 检查 VMware/BIOS 设置,加载 kvm_intel nested=1,重启 libvirtd
Docker 磁盘空间不足 根分区过小 添加新硬盘,迁移 /var/lib/libvirt/images 或整个 /opt/CAPEv2
cape-processor 反复重启,日志显示 “missing id” 服务参数顺序错误 ExecStart 改为 ... utils/process.py -p7 -pt 900 auto
cape-processor 报 “No module named 'libvirt'” Python 虚拟环境缺少 libvirt 包 sudo -u cape poetry run pip install libvirt-python
cape-processor 报 “Cannot allocate memory” 物理内存不足 降低 -p1 并行数,增加 swap,减少虚拟机内存
快照状态为 shutoff 快照是在虚拟机关闭时拍摄的 重新启动虚拟机,开机后执行 virsh snapshot-create-as
libvirt 连接被拒绝 cape 用户不在 libvirt sudo usermod -aG libvirt cape;重启 libvirtd
Poetry 下载依赖超时 访问国外源慢 配置国内镜像源(清华、阿里云),增加超时 poetry config installer.timeout 600
Web 界面无法访问 服务监听 127.0.0.1 或防火墙阻挡 修改 cape-web.service 中的 0.0.0.0:8000sudo ufw allow 8000
虚拟机 Agent 无响应 Windows 防火墙阻挡或 agent 未运行 关闭防火墙,检查启动文件夹,手动运行 agent.pyw 测试
提交任务一直 pending 调度器未运行或快照错误 sudo systemctl status cape;检查 kvm.conf 中的快照名是否正确
No space left on device 根分区满 清理日志(journalctl --vacuum-size=200M),迁移项目到数据盘

  • 解决不能自动生成报告,添加循环脚本

sudo tee /usr/local/bin/cape-processor-loop.sh > /dev/null << 'EOF'
#!/bin/bash
​
LOG_FILE="/var/log/cape-processor.log"
​
echo "$(date): CAPE Processor Loop Started" >> $LOG_FILE
​
cd /var/lib/libvirt/images/CAPEv2-master
​
while true; do
    echo "$(date): Checking for completed tasks..." >> $LOG_FILE
​
    # 添加 auto 参数
    /home/cape/.local/bin/poetry run python utils/process.py auto -p 1 --disable-memory-limit >> $LOG_FILE 2>&1
​
    sleep 30
done
EOF
​
sudo chmod +x /usr/local/bin/cape-processor-clean-loop.sh
​
#更改配置
/etc/systemd/system/cape-processor.service,改为指向脚本
​
# 3. 修改服务文件,使用这个新脚本
sudo tee /etc/systemd/system/cape-processor.service > /dev/null << 'EOF'
[Unit]
Description=CAPE Report Processor (Clean Loop)
After=network.target mongodb.service
​
[Service]
User=sqa
Group=sqa
WorkingDirectory=/var/lib/libvirt/images/CAPEv2-master
ExecStart=/usr/local/bin/cape-processor-clean-loop.sh
Restart=always
RestartSec=10
​
[Install]
WantedBy=multi-user.target
EOF
​
# 重新加载并启动服务
sudo systemctl daemon-reload
sudo systemctl restart cape-processor
# 查看服务状态
sudo systemctl status cape-processor
​
# 查看cape-process日志
tail -f /var/log/cape-processor.log

七、维护建议

  • 定期清理日志:sudo journalctl --vacuum-size=500M

  • 监控磁盘空间:df -h,尤其注意 /var/lib/libvirt/images 和根分区

  • 更新 CAPEv2:cd /opt/CAPEv2 && git pull && poetry install

  • 备份虚拟机快照和数据库

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐