企业安全意识培训工具 | Enterprise Security Awareness Tool
一个用于企业内部安全意识培训和授权测试的钓鱼邮件模拟系统
SimPhish 是一个专为企业内部安全意识培训设计的钓鱼邮件模拟平台。通过模拟真实的钓鱼攻击场景,帮助组织提高员工的安全意识,识别和防范网络钓鱼威胁。
- 教育导向:通过模拟真实攻击场景,提升员工安全意识
- 安全可控:仅在授权范围内使用,确保测试环境安全
- 数据追踪:详细记录打开、点击、提交等行为数据
- 灵活定制:支持自定义邮件模板、钓鱼页面和变量替换
- 模板编辑:支持 HTML 和富文本编辑器
- 变量替换:内置多种变量(邮箱、姓名、链接、二维码等)
- 附件支持:可添加邮件附件(最多 10 个,单个最大 10MB)
- SMTP 配置:支持多种加密方式(SSL/TLS、STARTTLS)
- 发送控制:支持并发控制和速率限制
- 页面编辑:支持自定义 HTML 内容或从 URL 导入
- 变量支持:页面内容支持变量替换
- 服务器配置:可配置独立的钓鱼服务器地址和端口
- 重定向:支持提交后重定向到指定 URL
- 批量导入:支持 CSV 文件批量导入目标
- 自定义变量:为每个目标设置自定义变量
- 追踪 ID:自动为每个目标生成唯一追踪 ID
- 活动创建:创建钓鱼邮件活动,关联模板、页面和目标
- 发送任务:异步发送邮件,实时查看发送进度
- 数据统计:查看打开率、点击率、提交率等统计信息
- 时间线:查看每个目标的完整交互时间线
- 数据导出:支持导出为 HTML、PDF 或 Excel 格式
- 事件通知:支持邮件发送、打开、点击、提交等事件
- 自定义 URL:可配置多个 Webhook 接收地址
- 语言:Go 1.25+
- 框架:Gin Web Framework
- 存储:JSON 文件存储(无需数据库)
- 认证:JWT Token 认证
- 邮件:gomail (SMTP)
- 二维码:go-qrcode
- PDF 导出:ChromeDP (headless Chrome)
- 框架:React 19
- 构建工具:Vite
- UI 库:Radix UI + Tailwind CSS
- 富文本编辑:TipTap
- 图表:Recharts
- 路由:React Router v7
运行可执行文件后,会在可执行文件所在目录自动创建 data/ 目录,用于存储所有配置和项目数据:
simphish/ # 可执行文件所在目录
├── simphish # 可执行文件(Linux/macOS)
│ # 或 simphish.exe (Windows)
│
└── data/ # 数据目录(首次运行自动创建)
├── config/ # 系统配置文件
│ ├── admin.hash # 管理员密码哈希
│ ├── jwt.secret # JWT 认证密钥
│ └── disclaimer.accepted # 免责声明接受标记
│
└── <project-id>/ # 项目数据目录(每个项目一个)
│ # 例如:63ccc5df-0310-4466-8f96-89b7dd8914be/
├── project_details.json # 项目基本信息
├── email_config.json # 邮件服务器配置
├── targets.json # 目标列表
├── templates.json # 邮件模板列表
├── phishing_pages.json # 钓鱼页面列表
├── campaigns.json # 活动列表
├── campaign_targets_<campaign-id>.json # 活动目标记录
├── clicks_<campaign-id>.json # 点击事件记录
├── opens_<campaign-id>.json # 打开事件记录
└── credentials_<campaign-id>.json # 提交凭证记录
说明:
data/目录在首次运行时自动创建- 所有数据以 JSON 格式存储,便于备份和迁移
- 每个项目有独立的目录,以项目 ID 命名
- 活动相关的数据文件以活动 ID 作为文件名的一部分
- 操作系统:Linux、macOS、Windows
- 内存:建议 512MB 以上
- 磁盘:建议 100MB 以上可用空间
-
下载二进制文件
# 从 releases 下载对应平台的二进制文件 # Linux: simphish-linux-amd64 # macOS: simphish-darwin-amd64 或 simphish-darwin-arm64 # Windows: simphish-windows-amd64.exe
-
运行程序
# Linux/macOS chmod +x simphish ./simphish # Windows simphish.exe
-
访问界面
- 打开浏览器访问:
http://localhost:5173 - 默认管理员账号:
admin - 默认密码:
woaixiatian(首次运行后请立即修改)
- 打开浏览器访问:
- 每个活动都会生成 随机的追踪路径
trackPath和查询参数名trackParam,示例:https://yourhost.com/ab12?x=aB3xK9mL。 - 追踪 ID 采用短随机字符串(非 Base64),链接更短且更难被指纹识别。
- 发送时使用活动已持久化的
trackPath/trackParam;解析端会扫描所有 query 值并匹配追踪 ID,无需固定参数名。 - 钓鱼页、全局打开/点击、二维码、邮件链接和像素均复用该随机路径与参数名,保持一致。
- 不兼容旧的
rid/id参数:历史邮件中的旧链接将无法解析。
| 变量名 | 说明 | 默认值 |
|---|---|---|
PORT |
服务端口 | 5173 |
ALLOWED_ORIGINS |
CORS 允许的来源(逗号分隔) | 无 |
LOGIN_RATE |
登录速率限制(次数) | 5 |
LOGIN_WINDOW_SECONDS |
登录时间窗口(秒) | 60 |
PUBLIC_PAGE_RATE |
公开页面访问速率限制 | 60 |
PUBLIC_SUBMIT_RATE |
公开提交速率限制 | 60 |
PUBLIC_TRACK_RATE |
追踪请求速率限制 | 120 |
SUBMIT_MAX_BYTES |
提交数据最大字节数 | 1048576 (1MB) |
ENVIRONMENT |
运行环境(development/production) | development |
程序会在可执行文件所在目录自动创建 data/ 目录用于存储所有数据。详细的目录结构请参考运行时目录结构部分。
目前数据目录固定在可执行文件所在目录。如需切换:
-
方法一:符号链接(推荐)
# 备份现有数据 mv data data-backup # 创建符号链接指向新位置 ln -s /path/to/new/data data
-
方法二:移动数据目录
# 停止服务 # 移动数据目录 mv data /path/to/new/location # 创建符号链接 ln -s /path/to/new/location/data data
- 登录系统(默认账号:
admin,默认密码:woaixiatian) - 进入"设置"页面
- 点击"修改密码"
- 输入旧密码和新密码
- 创建或选择一个项目
- 进入"邮件配置"页面
- 填写 SMTP 服务器信息:
- 主机:SMTP 服务器地址
- 端口:SMTP 端口(如 25、465、587)
- 加密方式:选择 SSL/TLS、STARTTLS 或无
- 用户名/密码:SMTP 认证信息
- 发件人名称/地址:显示的发件人信息
- 点击"测试连接"验证配置
- 保存配置
- 进入"邮件模板"页面
- 点击"新建模板"
- 填写模板信息:
- 名称:模板名称
- 主题:邮件主题(支持变量)
- 内容类型:选择 HTML 或富文本
- 内容:邮件正文(支持变量)
- 添加变量(可选):
- 在"变量"区域输入变量名
- 点击"添加"按钮
- 添加附件(可选):
- 点击"添加附件"
- 选择文件(最大 10MB)
- 点击"保存"
目标信息变量
{{.email}}- 目标邮箱地址{{.firstName}}- 目标名字{{.lastName}}- 目标姓氏
功能变量(需要配置 Hosting URL)
{{.phishingLink}}或{{.link}}- 钓鱼链接{{.trackingId}}- 追踪 ID{{.trackingPixel}}- 邮件打开追踪像素(隐藏图片){{.qrCode}}- 二维码图片(自动生成)
时间变量
{{.year}}- 当前年份(4位){{.month}}- 当前月份(2位){{.day}}- 当前日期(2位){{.date}}- 当前日期(YYYY-MM-DD){{.hour}}- 当前小时(2位){{.minute}}- 当前分钟(2位){{.second}}- 当前秒数(2位)
自定义变量
- 在目标中设置的自定义变量,使用
{{.变量名}}格式
注意:发送邮件时,系统会自动从所选钓鱼页面的服务器配置中获取 Hosting URL。如果未配置,相关变量(phishingLink、trackingPixel、qrCode)将为空。
- 进入"钓鱼页面"页面
- 点击"新建页面"
- 填写页面信息:
- 名称:页面名称
- URL:页面 URL(可选)
- 内容来源:选择"自定义"或"从 URL 导入"
- 内容:HTML 内容(支持变量)
- 配置钓鱼服务器(重要):
- Hosting URL:外部可访问的服务器地址(如
https://yourdomain.com) - Hosting Port:服务器端口(如
9090) - 这些信息将用于生成追踪链接和二维码
- Hosting URL:外部可访问的服务器地址(如
- 设置重定向 URL(可选)
- 点击"保存"
- 进入"目标"页面
- 点击"新建目标"
- 填写目标信息:
- 邮箱:必填
- 名字/姓氏:可选
- 自定义变量:可选,键值对形式
- 点击"保存"
- 进入"目标"页面
- 点击"导入 CSV"
- 准备 CSV 文件,格式:
email,firstName,lastName,customVar1,customVar2 [email protected],张,三,部门,IT [email protected],李,四,部门,HR - 粘贴 CSV 内容或上传文件
- 点击"导入"
- 进入"活动"页面
- 点击"新建活动"
- 填写活动信息:
- 名称:活动名称
- 邮件模板:选择已创建的模板
- 钓鱼页面:选择已创建的页面
- 目标:选择要发送的目标(可多选)
- 点击"保存"
- 在活动列表中,找到要发送的活动
- 点击"发送"按钮
- 确认发送(系统会提示将使用所选钓鱼页面的服务器地址)
- 等待发送完成,可查看发送进度
- 进入活动详情页面
- 查看统计信息:
- 发送数量
- 打开数量/率
- 点击数量/率
- 提交数量/率
- 查看目标列表:查看每个目标的状态
- 查看时间线:查看每个目标的完整交互记录
- 导出数据:支持导出为 HTML、PDF 或 Excel
所有 API 请求(除登录和健康检查外)需要在 Header 中携带 JWT Token:
Authorization: Bearer <token>
POST /api/auth/login- 登录POST /api/auth/logout- 登出GET /api/auth/me- 获取当前用户信息POST /api/auth/change-password- 修改密码
GET /api/projects- 获取项目列表POST /api/projects- 创建项目GET /api/projects/:id- 获取项目详情PUT /api/projects/:id- 更新项目DELETE /api/projects/:id- 删除项目GET /api/projects/:id/dashboard- 获取仪表板统计
GET /api/projects/:id/email-config- 获取邮件配置POST /api/projects/:id/email-config- 保存邮件配置POST /api/projects/:id/email-config/test- 测试邮件连接
GET /api/projects/:id/templates- 获取模板列表POST /api/projects/:id/templates- 创建模板PUT /api/projects/:id/templates/:templateId- 更新模板DELETE /api/projects/:id/templates/:templateId- 删除模板
GET /api/projects/:id/phishing-pages- 获取页面列表POST /api/projects/:id/phishing-pages- 创建页面PUT /api/projects/:id/phishing-pages/:pageId- 更新页面DELETE /api/projects/:id/phishing-pages/:pageId- 删除页面
GET /api/projects/:id/targets- 获取目标列表POST /api/projects/:id/targets- 创建目标PUT /api/projects/:id/targets/:targetId- 更新目标DELETE /api/projects/:id/targets/:targetId- 删除目标POST /api/projects/:id/targets/import-csv- 导入 CSV
GET /api/projects/:id/campaigns- 获取活动列表POST /api/projects/:id/campaigns- 创建活动GET /api/projects/:id/campaigns/:campaignId- 获取活动详情PUT /api/projects/:id/campaigns/:campaignId- 更新活动DELETE /api/projects/:id/campaigns/:campaignId- 删除活动POST /api/projects/:id/campaigns/:campaignId/send- 发送活动GET /api/projects/:id/campaigns/:campaignId/send-status- 获取发送状态GET /api/projects/:id/campaigns/:campaignId/export?format=xlsx- 导出活动数据
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY simphish .
EXPOSE 5173
CMD ["./simphish"]创建服务文件 /etc/systemd/system/simphish.service:
[Unit]
Description=SimPhish Service
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/simphish
ExecStart=/path/to/simphish/simphish
Restart=always
RestartSec=10
Environment="PORT=5173"
[Install]
WantedBy=multi-user.target启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable simphish
sudo systemctl start simphish# 备份整个数据目录
cp -r data data-backup-$(date +%Y%m%d)
# 或使用 tar 压缩
tar -czf data-backup-$(date +%Y%m%d).tar.gz data/# 停止服务
# 恢复数据目录
cp -r data-backup-20250101/* data/
# 或解压备份
tar -xzf data-backup-20250101.tar.gz数据目录包含所有项目数据,可以直接复制到新服务器使用。
SimPhish 仅用于以下合法目的:
- 企业内部安全意识培训
- 授权范围内的安全测试
- 安全研究和教育
严禁将本工具用于以下任何目的:
- 任何非法活动
- 未经授权的网络攻击
- 真实的钓鱼诈骗
- 恶意软件分发
- 任何违反法律法规的行为
-
用户责任:使用者需对使用本工具的所有行为承担全部责任。任何滥用本工具的行为均由使用者自行承担法律后果。
-
作者免责:作者不对任何滥用本工具的行为承担责任。作者不保证本工具不会被用于非法目的,也不对因使用本工具而产生的任何损失、损害或法律后果负责。
-
无担保:本工具按"现状"提供,不提供任何明示或暗示的担保,包括但不限于对适销性、特定用途的适用性和非侵权性的担保。
-
风险提示:使用本工具存在被误判为垃圾邮件的风险。建议:
- 配置 SPF、DKIM、DMARC 记录
- 使用信誉良好的邮件服务器
- 控制发送频率和数量
- 确保收件人已授权接收测试邮件
-
合规要求:在使用本工具前,请确保:
- 已获得所有相关方的明确授权
- 遵守当地法律法规
- 遵守组织的安全政策
- 已告知收件人这是安全意识培训邮件
通过使用本工具,您确认:
- 已阅读、理解并同意遵守上述所有条款
- 仅将本工具用于合法和授权的目的
- 对使用本工具的所有行为承担全部责任
- 不会将本工具用于任何非法或恶意目的
违反上述条款可能导致法律后果,作者不承担任何责任。
- 作者:xiatian
- 项目:SimPhish - Enterprise Security Awareness Tool
- 支持二维码变量自动生成
- 优化邮件模板变量系统
- 改进发送任务管理
- 增强数据导出功能
- 修复重复发送问题
- 优化钓鱼页面服务器配置集成
- 初始版本发布
- 基础功能实现
最后更新:2025-12-15
再次提醒:请务必遵守法律法规,仅将本工具用于合法和授权的目的。任何滥用行为均由使用者自行承担全部责任。