开源漏洞管理平台Faraday部署与实战指南:从Docker安装到自动化聚合

发布时间:2026/7/7 11:09:24
开源漏洞管理平台Faraday部署与实战指南:从Docker安装到自动化聚合 1. 项目概述为什么需要 Faraday如果你是一名安全工程师、渗透测试人员或者负责企业安全运营那么“漏洞管理”这个词对你来说一定不陌生。每天你可能要面对来自各种扫描器、人工测试、第三方报告的海量漏洞数据它们格式不一、描述混乱散落在 Excel、PDF、邮件甚至聊天记录里。手动整理、去重、分配、跟踪和复测不仅效率低下还极易出错一个高危漏洞被遗漏的风险会直线上升。Faraday 就是为了解决这个痛点而生的。它是一个开源的漏洞协同与管理平台Vulnerability Management Platform你可以把它理解为一个专为安全团队打造的“漏洞数据中心”和“协同作战室”。它不是一个扫描器而是一个强大的聚合器和管理器。它能将来自 Nessus、Nmap、Burp Suite、Metasploit、Qualys 等数十种主流安全工具的扫描结果自动导入、解析、归一化并以统一的视图呈现出来。所有漏洞信息、资产信息、证据截图、PoC、团队讨论、修复状态都集中在一个地方实现从发现到修复的闭环跟踪。我最初接触 Faraday 是因为团队内部漏洞流转全靠人工表格混乱不堪。在对比了多个开源和商业方案后最终选择了 Faraday。原因很简单它足够轻量、灵活且完全由社区驱动没有商业产品的黑盒和绑定。你可以完全掌控自己的数据并根据团队的工作流进行深度定制。对于中小型安全团队或预算有限的个人研究者而言Faraday 提供了一个近乎完美的起点。接下来我将以一个“从零到一”的视角带你完整走一遍 Faraday 的安装、配置和核心使用流程。我会分享官方文档里不会写的细节以及我在实际部署和日常使用中踩过的坑和总结的技巧。无论你是想在个人实验环境搭建一个玩一玩还是准备为团队部署一套生产级系统这篇指南都能给你提供直接的参考。2. 环境准备与安装方案选型在真正动手安装之前花点时间规划你的部署方案至关重要。Faraday 提供了多种安装方式选择哪种取决于你的使用场景、技术栈和运维能力。2.1 理解 Faraday 的架构与依赖Faraday 是一个典型的客户端-服务器C/S架构应用Faraday Server 这是核心一个基于 Web 的应用程序负责数据存储、API 接口和用户界面。它后端主要依赖 PostgreSQL 数据库和 Redis用于缓存和消息队列。Faraday Client 这是一个命令行工具CLI安装在你的工作机上。你通过它来执行命令将扫描报告上传到 Faraday Server或者直接从 CLI 启动一些集成工具如 Nmap并将结果实时流式传输到服务器。因此安装 Faraday 本质上是在部署一个包含 Web 应用、数据库和缓存服务的微服务栈。2.2 主流安装方案对比与选择官方和社区主要推荐以下几种方式我为你梳理了各自的优劣和适用场景方案一Docker Compose推荐给绝大多数用户这是目前最主流、最省心的安装方式。官方提供了完整的docker-compose.yml文件一键拉起所有服务Server, PostgreSQL, Redis。优点 隔离性好部署极快几乎无需关心系统依赖和版本冲突。升级和迁移也相对容易。缺点 需要你对 Docker 和 Docker Compose 有基本了解。数据持久化需要正确配置卷Volume。适用场景 个人学习、团队测试环境、中小型生产环境。这是我最推荐的入门和生产部署方式。方案二Python pip 直接安装通过pip install faraday-server和pip install faraday-cli分别安装服务器和客户端。优点 最“原生”的方式适合喜欢深度定制和开发的用户。缺点 需要手动安装和配置 PostgreSQL、Redis 等所有依赖过程繁琐容易因系统环境如 Python 版本、系统库导致安装失败。适用场景 开发者、希望贡献代码的社区成员或者需要在无法运行 Docker 的特殊环境中部署。方案三从源码运行适用于开发直接克隆 GitHub 仓库在本地运行开发服务器。优点 可以直接调试和修改代码实时看到变化。缺点 配置最复杂仅适用于开发目的。适用场景 为 Faraday 项目做代码贡献或进行二次开发。我的选择与建议 除非你有强烈的开发需求否则无脑选择 Docker Compose 方案。它能让你在10分钟内看到一个可运行的 Faraday把精力集中在学习使用上而不是和系统依赖搏斗。本指南也将以 Docker Compose 方案为主线进行详解。2.3 基础环境准备无论选择哪种方案你都需要准备一台 Linux 服务器Ubuntu 20.04/22.04 LTS 或 CentOS/RHEL 8 是常见选择或一台性能足够的个人电脑Windows/macOS 可通过虚拟机或 WSL2 运行 Linux。对于 Docker 方案请确保安装 Docker Engine 版本建议 20.10。安装 Docker Compose 版本建议 v2.0。请注意现在 Docker Compose 通常作为 Docker Desktop 的一部分或独立的docker-compose-plugin提供命令可能是docker compose没有横杠。你可以通过以下命令快速检查docker --version docker compose version如果系统没有安装请参考 Docker 官方文档进行安装。对于 Ubuntu一个快速的安装脚本如下生产环境请务必阅读官方文档# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加 Docker 官方 GPG 密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gosu tee /etc/apt/keyrings/docker.asc /dev/null # 设置仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装 Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin3. 使用 Docker Compose 部署 Faraday Server这是最核心的步骤我们将一步步搭建起 Faraday 的服务端。3.1 获取与配置 Docker Compose 文件首先创建一个专门的工作目录并获取官方提供的编排文件。mkdir faraday-docker cd faraday-docker curl -o docker-compose.yml https://raw.githubusercontent.com/infobyte/faraday/master/docker-compose.yml下载完成后不要急着启动。我们先来审视并修改这个docker-compose.yml文件以满足基本的安全和持久化需求。用文本编辑器打开它。你需要关注和修改以下几个关键部分数据库密码 在postgres服务的environment部分找到POSTGRES_PASSWORD。务必修改为一个强密码不要使用默认值。environment: POSTGRES_USER: faraday POSTGRES_PASSWORD: YourStrongPasswordHere! # 修改这里 POSTGRES_DB: faradayFaraday Server 密钥 在faraday-server服务的environment部分找到SECRET_KEY。这是 Django 应用用于签名会话、CSRF 令牌等的重要密钥必须修改且应使用一个长而复杂的随机字符串。environment: SECRET_KEY: YourVeryLongAndRandomSecretKeyString # 修改这里 ...数据持久化最重要 默认的 compose 文件可能没有将 PostgreSQL 的数据目录映射到宿主机。这意味着一旦容器重建所有漏洞数据都会丢失必须添加卷映射。services: postgres: image: postgres:13-alpine ... volumes: - postgres_data:/var/lib/postgresql/data # 确保这一行存在 ... faraday-server: image: faradaysec/faraday:latest ... volumes: - faraday_data:/home/faraday/.faraday # 确保这一行存在存储服务器配置、上传的文件等 ... # 在文件最底部定义这些卷 volumes: postgres_data: faraday_data:如果volumes部分不存在请手动添加。这样数据就会保存在 Docker 管理的命名卷中即使容器删除数据卷依然存在。网络与端口 默认情况下Faraday Server 的 Web 服务会映射到宿主机的5985端口。你可以根据情况修改。例如如果你想用标准的 HTTP 端口可以修改faraday-server服务的端口映射ports: - 8080:5985 # 将宿主机8080端口映射到容器5985端口3.2 启动 Faraday 服务栈配置完成后在docker-compose.yml所在目录执行启动命令docker compose up -d-d参数表示在后台运行。首次运行会从 Docker Hub 拉取镜像需要一些时间。启动后使用以下命令查看容器状态docker compose ps你应该看到postgresredisfaraday-server三个容器的状态都是Up。3.3 初始化与首次访问容器启动后Faraday Server 需要一点时间进行数据库迁移和初始化。你可以通过查看日志来确认进度docker compose logs -f faraday-server当看到类似Starting development server at http://0.0.0.0:5985/和Quit the server with CONTROL-C.的日志时说明服务已就绪。现在打开你的浏览器访问http://你的服务器IP:5985如果你修改了端口映射则使用对应的端口。首次访问你会看到 Faraday 的登录界面。默认的管理员账号和密码是admin/admin。重要安全提示 使用默认凭证登录后第一件必须做的事就是修改管理员密码在 Web 界面右上角用户下拉菜单中进入 “Profile” 或 “Change Password” 进行修改。3.4 常见安装问题排查即使按照步骤操作你也可能会遇到一些问题。这里记录几个我踩过的坑问题1启动失败提示端口被占用。原因 宿主机上已有其他服务占用了5985或 PostgreSQL 的5432端口。解决 修改docker-compose.yml中的端口映射。例如将5985:5985改为55985:5985。问题2Faraday Server 容器不断重启日志显示数据库连接失败。原因 PostgreSQL 容器尚未完全启动Faraday Server 就尝试连接导致失败。解决 Docker Compose 的depends_on只保证容器启动顺序不保证服务就绪。可以增加重启策略在faraday-server服务下添加restart: unless-stopped。手动等待先docker compose up -d postgres redis等待几十秒后再docker compose up -d faraday-server。使用healthcheck高级在postgres服务定义中添加健康检查让 Faraday Server 依赖其健康状态。问题3上传文件或操作时提示权限错误。原因 Docker 容器内用户通常是faraday对映射的宿主机目录没有写权限。解决 确保宿主机上持久化目录如果使用绑定挂载bind mount的权限正确。更简单的方法是使用 Docker 命名卷named volume如我们之前配置的faraday_data让 Docker 管理权限。4. Faraday Client 的安装与配置Server 端搭建好了现在我们需要在用来做渗透测试或安全评估的工作机可能是 Kali Linux 也可能是你自己的笔记本上安装 Client 这样才能把数据发送到 Server。4.1 安装 Faraday CLIFaraday CLI 是一个 Python 包通过 pip 安装是最简单的方式。强烈建议使用虚拟环境以避免与系统或其他项目的 Python 包冲突。# 1. 创建并进入虚拟环境以 venv 为例 python3 -m venv faraday-env source faraday-env/bin/activate # Linux/macOS # 对于 Windows: faraday-env\Scripts\activate # 2. 安装 faraday-cli pip install faraday-cli安装完成后验证是否成功faraday-cli --version4.2 连接 Faraday Server安装好 CLI 后需要让它知道你的 Server 在哪里。这里有两种主要的认证方式API Key和用户名密码。推荐使用 API Key 更安全且适合自动化。方法一使用用户名密码连接初次配置faraday-cli auth -f SERVER_URL -u USERNAME -p PASSWORD例如faraday-cli auth -f http://192.168.1.100:5985 -u admin -p your_new_password执行成功后凭证会保存在~/.faraday/config文件中。方法二使用 API Key推荐在 Faraday Web 界面中点击右上角用户名 - “My Profile”。找到 “API Key” 部分点击 “Generate new API Key”。复制生成的长字符串。在终端使用 API Key 登录faraday-cli auth -f SERVER_URL --api-key YOUR_API_KEY连接成功后你可以测试一下faraday-cli workspace list这条命令会列出 Server 上所有的工作空间Workspace。初始状态下列表应该是空的。5. 核心概念与工作流实战在开始导入漏洞之前必须理解 Faraday 的几个核心概念它们构成了你日常使用的框架。5.1 工作空间Workspace你的项目沙盒Workspace 是 Faraday 中最核心的隔离单元。你可以为每一次安全评估、每一个客户、每一个应用系统创建一个独立的工作空间。所有相关的资产、漏洞、笔记都归属于某个工作空间不同工作空间之间的数据完全隔离。创建第一个工作空间faraday-cli workspace create --name Pentest-Project-Alpha-2024--name: 工作空间名称最好有明确标识如客户名-项目名-日期。你还可以通过--description添加描述。创建后使用select命令进入该工作空间后续所有操作默认都在此空间内进行。faraday-cli workspace select Pentest-Project-Alpha-20245.2 资产Host与服务Service构建你的攻击面地图在 Faraday 中资产不仅指一台主机IP/Domain还包括其上运行的服务端口、协议、横幅信息。这种层级关系更符合真实的网络环境。手动添加一个资产faraday-cli host add --ip 192.168.1.10 --os Linux为这个资产添加一个服务faraday-cli service add --host-ip 192.168.1.10 --name http --port 80 --protocol tcp当然更常见的做法是通过导入扫描报告来自动化添加资产和服务。5.3 漏洞Vulnerability与证据Evidence漏洞是管理的核心对象。每个漏洞都关联到特定的主机和服务并包含名称、描述、严重等级Critical, High, Medium, Low, Info、状态Open, Re-opened, Closed, Risk-Accepted、解决方案等字段。证据Evidence功能非常实用。你可以为漏洞附加截图、命令输出、PoC代码等文件这在报告编写和内部复核时是无可辩驳的支撑材料。6. 实战导入扫描报告与数据聚合这是 Faraday 的“高光时刻”。我们将把来自不同工具的扫描结果导入到同一个工作空间体验数据聚合的魅力。6.1 准备扫描报告假设我们针对目标192.168.1.0/24进行了以下扫描Nmap 全面的端口和服务发现。Nessus 漏洞扫描。Burp Suite Web 应用漏洞扫描。请确保你拥有这些工具的输出报告文件。Faraday 支持多种格式如 Nmap 的 XML (-oX) Nessus 的.nessus Burp 的 XML 等。6.2 使用 CLI 导入报告首先确保你已经选中了目标工作空间。导入 Nmap XML 报告faraday-cli tool report import --tool nmap --file /path/to/your/nmap_scan.xml这个命令会解析 Nmap 报告自动创建或更新工作空间中的主机Host和服务Service信息。导入 Nessus 报告faraday-cli tool report import --tool nessus --file /path/to/your/scan.nessusNessus 报告包含详细的漏洞信息。导入后Faraday 会创建对应的漏洞Vulnerability条目并自动关联到之前由 Nmap 创建的主机和服务上。如果主机不存在它也会被创建。导入 Burp Suite XML 报告faraday-cli tool report import --tool burp --file /path/to/your/burp_scan.xml6.3 在 Web 界面中查看聚合结果现在打开 Faraday 的 Web 界面进入 “Pentest-Project-Alpha-2024” 工作空间。仪表盘 你会看到一个概览显示漏洞数量分布按严重性、主机统计、最近活动等。主机视图 点击左侧菜单的 “Hosts”你会看到一个清晰的列表列出了所有从 Nmap 和 Nessus 报告中发现的主机。点击任意主机可以看到它的详细信息IP、操作系统、所有开放端口/服务以及在这台主机上发现的所有漏洞无论来自 Nessus 还是 Burp。漏洞视图 点击 “Vulnerabilities”这里列出了所有漏洞可以按严重性、状态、工具来源等进行筛选。最关键的是来自 Nessus 的 “Apache Tomcat 信息泄露” 和来自 Burp 的 “Cross-Site Scripting (XSS)” 现在都在同一个列表里了你可以进行统一排序和优先级划分。数据关联 点击一个漏洞进入详情页。你会看到这个漏洞属于哪台主机、哪个服务它的完整描述、解决方案以及它是由哪个工具Nessus发现的。你还可以在这里添加笔记、更改状态、上传证据截图。实操心得 导入顺序有时很重要。建议先导入网络发现类报告如 Nmap建立资产骨架再导入漏洞详情报告如 Nessus, Burp。这样漏洞能更准确地关联到已有的服务上。如果顺序反了Faraday 也能处理但可能需要在 Web 界面上手动调整一些关联。7. 漏洞生命周期管理与团队协作数据聚合只是第一步如何高效地管理这些漏洞的修复流程才是 Faraday 作为“管理平台”的价值所在。7.1 漏洞状态与工作流Faraday 为每个漏洞定义了状态机Open 新发现的漏洞待处理。Re-opened 被重新打开的漏洞例如修复后验证不通过。Closed 已修复并验证通过的漏洞。Risk-Accepted 经评估决定接受该风险不予修复。在漏洞详情页你可以直接更改状态。一个典型的流程是测试人员将漏洞状态设为Open并分配给开发负责人开发修复后状态改为Closed测试人员复测如果通过则保持关闭如果不通过则改为Re-opened。7.2 分配与通知在漏洞详情页或列表页你可以将漏洞分配Assign给团队中的特定成员。被分配的用户会在 Web 界面上收到通知通常在顶部的铃铛图标处。这是实现责任到人的关键避免了漏洞在群里一下就被淹没的情况。所有分配和状态变更历史都会被记录便于追溯。7.3 自定义字段与标签对于大型或复杂项目默认字段可能不够用。Faraday 允许你为漏洞添加自定义字段例如 “业务影响等级”、“修复截止日期”、“CWE编号” 等。标签Tags功能则更灵活你可以快速为一批漏洞打上诸如need-poc、false-positive、third-party-component等标签方便后续筛选和批量操作。7.4 报告生成漏洞修复完成后你需要向管理层或客户提交报告。Faraday 内置了报告生成功能。在 Web 界面进入你的工作空间。点击左侧菜单的 “Reporting”。你可以选择生成Executive Summary给管理层看的概览或Detailed Report给技术团队看的详情。在生成前可以筛选特定严重性、状态或标签的漏洞。报告支持 PDF 和 HTML 格式导出。导出的报告会包含漏洞统计图表、漏洞列表详情含描述、解决方案、证据截图等所有关键信息。避坑技巧 内置报告模板可能不符合你公司的格式要求。Faraday 支持自定义报告模板需要修改服务器端的模板文件。对于 Docker 安装你需要将自定义模板文件挂载到容器内的/home/faraday/.faraday/reports/templates/目录。这是一个进阶用法但能极大提升报告输出的专业性。8. 高级技巧与集成应用掌握了基础操作后下面这些技巧能让你的 Faraday 用起来更顺手、更强大。8.1 使用 Faraday CLI 进行实时同步除了导入静态报告Faraday CLI 还能与一些工具进行实时集成。例如你可以让 Nmap 扫描的结果实时流入 Faraday而不是先存文件再导入。nmap -sV -O 192.168.1.0/24 -oX - | faraday-cli tool run --tool nmap --workspace Pentest-Project-Alpha-2024 -这条命令将 Nmap 的 XML 输出通过管道 (|) 直接传递给faraday-cli tool run实现实时导入。这在进行交互式测试时非常有用。8.2 利用 API 实现自动化Faraday 提供了完整的 REST API。这意味着你可以将漏洞管理流程集成到你的 CI/CD 管道或自动化脚本中。场景一自动创建工单。 当 Faraday 中出现一个Critical漏洞时通过 API 触发脚本在 Jira 或 GitLab 中自动创建一个高优先级任务。场景二资产同步。 定期从 CMDB 系统通过 Faraday API 同步资产列表确保评估范围准确。场景三自定义仪表盘。 拉取 Faraday 的数据在公司内部的 Grafana 大屏上展示安全态势。API 文档通常可以在你的 Faraday Server 地址后加/api/v2/docs访问如http://your-server:5985/api/v2/docs。8.3 性能调优与维护随着数据量增长你可能会遇到性能问题。以下是一些优化点数据库索引 确保 PostgreSQL 数据库表有合适的索引。对于大型部署可能需要 DBA 介入优化。定期清理 删除不再需要的旧工作空间。可以使用 CLI 或 Web 界面操作。备份策略务必定期备份对于 Docker 部署备份就是备份postgres_data和faraday_data这两个卷。你可以使用docker compose exec执行pg_dump或者直接备份整个卷的物理文件。# 简单备份示例 docker compose exec postgres pg_dump -U faraday faraday faraday_backup_$(date %Y%m%d).sql升级版本 关注 Faraday 的 GitHub 发布页。升级前务必完整备份数据。对于 Docker 部署升级通常只需修改docker-compose.yml中的镜像标签如faradaysec/faraday:latest改为faradaysec/faraday:4.5.0然后执行docker compose pull和docker compose up -d。9. 常见问题与故障排除实录这里汇总了我和社区里经常遇到的一些问题及其解决方法。Q1 导入报告时CLI 提示 “Connection refused” 或 “Cannot reach Faraday”。检查 首先用faraday-cli workspace list测试连接。如果失败检查Faraday Server 的地址和端口是否正确。服务器防火墙是否放行了该端口。如果 Server 在 Docker 内CLI 在宿主机外确保端口映射正确且网络可达。运行docker compose logs faraday-server查看服务器日志是否有错误。Q2 导入 Nessus 报告后漏洞数量远少于 Nessus 客户端里看到的。原因 Faraday 的 Nessus 解析器可能只解析了它认为的“漏洞”类型而忽略了“信息类”发现。此外Nessus 的.nessus文件可能包含多个扫描策略的结果解析逻辑可能不同。解决 这是开源解析器的常见情况。可以尝试在 Nessus 中导出时选择不同的格式如 CSV看是否能包含更多信息。或者将 Faraday 的解析结果视为“已确认的高价值漏洞子集”手动补充重要信息。Q3 Web 界面操作缓慢特别是打开包含大量漏洞的主机详情页时。原因 可能是前端渲染大量数据导致也可能是数据库查询慢。解决尝试在漏洞列表页使用筛选器减少一次性加载的数据量。检查服务器资源CPU、内存使用情况。对于生产环境考虑为 PostgreSQL 增加资源并参考上一节的性能调优建议。Q4 忘记管理员密码怎么办解决 通过 Docker 容器执行 Django 命令重置密码。docker compose exec faraday-server faraday-manage changepassword admin然后根据提示输入新密码即可。Q5 如何批量修改漏洞状态或分配负责人解决 Web 界面提供了批量操作功能。在漏洞列表页勾选多个漏洞顶部会出现一个操作栏Action Bar你可以在这里批量更改状态、分配、打标签或删除。这是管理大量漏洞的必备技能。从最初的手忙脚乱到现在的得心应手Faraday 已经成为我们团队安全运营中不可或缺的一环。它最大的价值不在于技术有多炫酷而在于它用一套相对简单清晰的逻辑把漏洞管理的“脏活累活”流程化了。数据聚合、状态跟踪、团队协作、报告生成这些重复性工作被自动化让我们能更专注于漏洞分析和技术研究本身。对于刚接触的朋友我的建议是先搭起来用起来。不要一开始就追求完美的部署架构或复杂的自定义流程。用一个 Docker Compose 快速搭建测试环境导入一两个真实的扫描报告玩玩它的界面和基础功能。当你切身感受到它如何把你从多个 Excel 表格中解放出来时你自然会去探索更高级的用法。开源项目的另一个好处是当你遇到问题或有好点子时可以直接去 GitHub 上提 Issue 或参与讨论社区的反馈往往比商业支持更热情、更贴近实际需求。