手把手搭建Gophish钓鱼邮件测试平台:基于QQ邮箱SMTP的实战部署指南 📅 2026/7/4 11:22:14 1. 项目概述为什么我们需要一个可控的钓鱼邮件测试环境最近在内部做安全意识培训发现很多同事对钓鱼邮件的警惕性依然不足。一封看似来自“行政部”的“工资条更新通知”或者伪装成“IT支持”的“账户异常登录提醒”依然能轻松骗到不少人点击链接。这让我意识到光靠理论宣讲效果有限得让大伙儿亲身体验一下“中招”的感觉印象才深刻。于是搭建一个安全、可控的内部钓鱼邮件测试环境就成了一个刚需。这个环境的核心目的不是为了“黑”谁而是为了“教育”和“测试”。对于安全团队而言它是评估企业员工安全意识水平、验证邮件安全网关防护效果、演练应急响应流程的绝佳工具。对于开发或运维同学在测试邮件通知、用户注册等涉及邮件发送的功能时一个能模拟真实邮件交互、记录用户行为的沙箱环境也比直接调用生产环境的邮件服务要稳妥得多。Gophish 正是为此而生的开源工具。它轻量、易用提供了从邮件模板制作、目标用户管理、钓鱼页面克隆到数据捕获和结果仪表盘展示的一站式解决方案。你不需要成为邮件协议专家也能快速上手。而使用QQ邮箱的SMTP服务作为发件渠道则解决了我们最头疼的问题发件信誉和可达性。自建邮件服务器固然自由但IP信誉积累、反垃圾邮件策略SPF、DKIM、DMARC配置繁琐且极易被各大邮箱服务商拒信。利用QQ邮箱这类成熟服务相当于借用了腾讯的“信誉背书”能极大提高测试邮件成功进入收件箱而非垃圾箱的概率。接下来我将手把手带你完成从零搭建Gophish并配置QQ邮箱SMTP服务的全过程。整个过程我会基于一台干净的Linux服务器以Ubuntu 22.04为例进行演示但核心步骤在CentOS等主流发行版上同样适用。我们不仅会完成搭建还会深入每个配置项背后的原理并分享我在多次部署中踩过的坑和总结的技巧。2. 环境准备与核心组件解析在开始敲命令之前我们需要理清整个架构。一次完整的钓鱼测试涉及几个关键角色发件服务器Sender、钓鱼邮件Bait、目标收件人Target、钓鱼网站Landing Page以及控制中心Dashboard。Gophish巧妙地将这些角色整合在了一个应用里。2.1 服务器选择与基础考量首先你需要一台具有公网IP的服务器。这是为了让目标用户能够访问你部署的钓鱼页面。这里有几个关键选择云服务器 vs. 本地虚拟机/物理机强烈推荐使用云服务器如阿里云、腾讯云、AWS等。原因有三一是公网IP稳定易得二是可以快速重装系统避免测试污染本地环境三是云服务商通常提供完善的安全组防火墙配置方便我们控制端口访问。操作系统Gophish是Go语言编写的二进制文件跨平台性极好。Linux是首选因为部署和管理更便捷。本文以Ubuntu 22.04为例。网络与端口这是第一个容易踩坑的地方。Gophish默认会用到两个服务端口管理端口默认3333用于访问Web管理后台。务必通过安全组/防火墙限制此端口仅允许你的办公IP或VPN IP访问绝不对公网开放否则你的钓鱼平台就成了别人的玩具。钓鱼页面端口默认80用于托管克隆的钓鱼网站。这个端口需要对公网开放以便目标用户访问。注意国内很多云服务商如阿里云、腾讯云的25端口SMTP默认端口是默认禁用的用于防止垃圾邮件。这正是我们为什么要使用QQ邮箱的465端口SMTPS的原因。2.2 Gophish 工作流程与组件关系理解以下流程能帮你更好地配置和使用Gophish配置阶段你在Gophish管理后台通过3333端口访问进行设置。Sending Profiles配置QQ邮箱的SMTP服务器地址、端口、账号和授权码。这定义了“信使”。Email Templates编辑或导入钓鱼邮件的HTML内容和主题。这定义了“信件”。Landing Pages克隆或编写一个假的登录页面例如模仿公司OA、邮箱登录页。这定义了“陷阱”。Users Groups导入目标邮箱地址列表。这定义了“目标”。执行阶段你创建一个Campaign钓鱼活动将以上四个组件关联起来。Gophish 使用你配置的QQ邮箱向目标列表发送钓鱼邮件。邮件中的链接被替换成指向你服务器80端口的钓鱼页面地址。捕获与反馈阶段目标用户收到邮件如果点击链接会访问你的钓鱼页面。用户在钓鱼页面上输入信息如账号密码并提交数据会被Gophish捕获并记录。用户的所有行为邮件是否被打开、链接是否被点击、数据是否提交都会实时展示在Dashboard仪表盘上。2.3 为什么选择QQ邮箱的SMTP服务除了前面提到的信誉问题还有几个实操上的优点免费且可靠QQ邮箱服务稳定免费用户也有足够的发送额度用于测试。配置简单无需自建复杂的Postfix/Dovecot邮件服务器省去了配置SPF、DKIM等反垃圾记录虽然对QQ邮箱本身配置这些更好但非必须的麻烦。端口灵活支持465SMTPS和587Submission端口完美规避云厂商的25端口封锁。广泛接受QQ邮箱的发件IP池信誉度较高邮件送达率有保障。注意用于测试的QQ邮箱账号强烈建议使用一个新注册的、与个人主账号无关的小号。一方面避免测试邮件污染你的主邮箱联系人另一方面也是出于安全隔离的考虑。3. 手把手部署Gophish服务端现在我们开始实操。请确保你已经拥有一台安装了Ubuntu 22.04的云服务器并通过SSH登录。3.1 系统更新与依赖检查首先更新系统包列表并升级现有软件这是一个好习惯。sudo apt update sudo apt upgrade -y检查服务器是否已经安装了类似Nginx、Apache等占用80端口的服务。如果有你需要决定是停止它们还是为Gophish更换钓鱼页面端口。sudo netstat -tulpn | grep :80如果输出为空说明80端口空闲。如果被占用比如被Nginx占用你可以选择先停止它sudo systemctl stop nginx或者在后续配置Gophish时修改钓鱼页面的监听端口。3.2 下载与安装GophishGophish的安装简单到令人发指——它就是一个独立的二进制文件。访问 Gophish的GitHub Releases页面 查看最新版本。本文撰写时最新稳定版是v0.12.1。请以实际最新版为准。在服务器上创建一个专用目录并进入。mkdir ~/gophish cd ~/gophish使用wget下载对应版本的Linux 64位压缩包。将下面的链接版本号替换成你看到的最新版。wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip解压文件。系统可能没有预装unzip如果需要请先安装sudo apt install unzip -y。unzip gophish-v0.12.1-linux-64bit.zip解压后你会看到几个文件其中gophish就是主程序config.json是配置文件。赋予主程序执行权限。chmod x gophish至此Gophish就“安装”完成了。是的没有复杂的编译和依赖安装过程。3.3 关键配置文件config.json详解在启动前我们必须修改config.json文件这是Gophish的大脑。vim config.json你会看到类似如下的内容版本不同可能略有差异{ admin_server: { listen_url: 127.0.0.1:3333, use_tls: true, cert_path: gophish_admin.crt, key_path: gophish_admin.key }, phish_server: { listen_url: 0.0.0.0:80, use_tls: false }, db_name: sqlite3, db_path: gophish.db, migrations_prefix: db/db_, contact_address: , logging: { filename: } }我们需要修改几个关键地方admin_server.listen_url这是管理后台的监听地址。必须将127.0.0.1改为0.0.0.0否则你无法通过服务器的公网IP远程访问后台。但切记改完后要在云服务器的安全组里设置规则只允许你的IP访问3333端口。admin_server.use_tls管理后台是否启用HTTPS。默认是true并使用自签名证书gophish_admin.crt和gophish_admin.key。第一次访问时浏览器会提示不安全需要手动确认。对于内部测试建议保持true因为密码等敏感信息会在网络中传输HTTPS能提供基础加密。如果你嫌自签名证书麻烦可以设为false但务必确保访问管理后台的网络环境是可信的如通过VPN。phish_server.listen_url这是钓鱼页面的监听地址。默认0.0.0.0:80是正确的表示监听所有网卡的80端口。如果你的80端口被占用可以在这里修改例如0.0.0.0:8080。phish_server.use_tls钓鱼页面是否启用HTTPS。强烈建议保持false。因为为钓鱼页面申请可信的SSL证书非常困难且没有必要。用户访问http://开头的链接在测试场景下是可接受的。如果启用HTTPS你需要自己配置证书否则用户访问时会看到严重的警告反而显得更可疑。修改后的配置示例如下假设我们使用默认80端口且管理后台启用HTTPS{ admin_server: { listen_url: 0.0.0.0:3333, use_tls: true, cert_path: gophish_admin.crt, key_path: gophish_admin.key }, phish_server: { listen_url: 0.0.0.0:80, use_tls: false }, ... // 其余部分保持不变 }保存并退出编辑器。3.4 启动Gophish与初次登录现在可以启动Gophish了。为了让程序在后台持续运行我们使用nohup配合。nohup ./gophish gophish.log 21 这条命令的意思是在后台运行./gophish并将其标准输出和错误输出都重定向到gophish.log文件中。方便我们后续排查问题。查看日志确认启动成功并找到初始的随机密码。tail -f gophish.log你会在日志中看到类似这样的行time2023-10-27T08:00:00Z levelinfo msgPlease login with the username admin and the password 2c8f3b1a0e9d5记下这个密码示例中是2c8f3b1a0e9d5然后就可以访问管理后台了。打开你的浏览器访问https://你的服务器公网IP:3333。注意是https协议。由于是自签名证书浏览器会显示“不安全”警告点击“高级”-“继续前往”即可。在登录页面用户名是admin密码就是刚才日志里显示的那一串随机字符。登录成功后系统会强制要求你立即修改密码。请务必设置一个强密码并妥善保存。实操心得启动后建议使用ps aux | grep gophish查看进程是否在运行。首次登录修改密码后新的密码会加密存储在gophish.db这个SQLite数据库文件中。如果忘记了密码最直接的方法是停止Gophish删除gophish.db文件然后重新启动又会生成一个新的随机密码。当然这会丢失所有配置和数据所以请务必记好密码。4. 核心配置详解QQ邮箱SMTP与钓鱼组件设置登录到Gophish清爽的管理后台左侧是功能菜单。我们按照一次钓鱼活动的配置流程来操作。4.1 配置Sending Profiles发件策略这是连接QQ邮箱的关键步骤。点击左侧Sending Profiles然后点击右上角的New Profile。Name给这个配置起个名字比如QQMail-SMTP。这只是个标识。Interface Type保持默认的SMTP。From发件人显示名称。这里可以玩一些“花样”比如IT Support your-qq-numberqq.com或者系统通知 no-replyyour-company.com。但要注意里的邮箱地址必须和下面Username的邮箱一致否则QQ邮箱SMTP服务器会认证失败。对于测试我建议先老老实实用你的QQ号 your-qq-numberqq.com的格式。HostSMTP服务器地址和端口。这是第一个大坑。QQ邮箱的SMTP服务器地址是smtp.qq.com。端口不是默认的25而应该使用:465。所以这里填smtp.qq.com:465。为什么是465因为465端口是用于SMTPS (SMTP over SSL)的通信全程加密且能绕过云服务器的25端口封锁。Username你的QQ邮箱完整地址如123456789qq.com。Password这不是你的QQ密码这是需要单独生成的“授权码”。登录你的QQ邮箱网页版进入“设置”-“账户”-“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”。找到“开启服务”下的“POP3/SMTP服务”点击“开启”。根据提示可能需要短信验证你会获得一个16位的“授权码”。请立即复制并妥善保存它只显示一次。将这个授权码填入Password字段。Email Headers (Optional)可以留空。这里可以添加自定义邮件头比如X-Mailer: Microsoft Outlook 16.0来伪装邮件客户端。但初期测试可以不设置。填写完毕后强烈建议先点击右下角的Send Test Email。在弹出框里输入一个你自己的、非QQ邮箱的测试邮箱地址比如公司邮箱或另一个Gmail点击发送。如果配置正确你的测试邮箱很快会收到一封来自你QQ邮箱的测试邮件。如果发送失败查看页面上的错误信息。常见问题有“Authentication Failed”用户名或密码授权码错误。请仔细检查QQ邮箱地址和授权码注意授权码不要有空格。“Connection timed out”服务器地址或端口错误或者云服务器安全组未放通465端口的出站规则。是的发邮件是服务器的出站连接需要确保你的云服务器安全组允许访问外网的465端口。“SSL error”尝试勾选配置页面下方的Ignore Certificate Errors忽略证书错误有些环境下自签名证书会有问题。4.2 制作Email Templates钓鱼邮件模板点击Email Templates-New Template。Name模板名称如Password-Reset-Notice。Import Email这是最实用的功能。你可以先在真实的邮箱客户端如Outlook、Gmail里精心设计一封邮件包括格式、图片、公司Logo等然后发送给自己。收到后在邮箱里找到“显示邮件原文”或“导出为EML文件”的选项将完整的邮件源代码复制出来粘贴到这个文本框里。然后务必勾选上Change Links to Point to Landing Page。这个选项会自动将邮件正文里的所有超链接href替换成你后续在Campaign中指定的钓鱼页面URL。Subject邮件主题。要足够吸引人且不突兀例如“【重要】关于员工邮箱密码安全强制的通知”、“您的账户存在异常登录活动请立即核查”。内容编辑框如果你没有导入邮件也可以在这里直接编写。它支持HTML和纯文本模式。在HTML模式下你可以使用{{.URL}}这个模板变量。这个变量至关重要它代表了最终要替换成的钓鱼链接。你应该在邮件正文的某个超链接里使用它比如a href{{.URL}}点击此处立即验证您的身份/a。Add Tracking Image默认勾选。它会在邮件末尾插入一个肉眼不可见的追踪像素1x1的透明图片。当收件人打开邮件即使只是预览图片被加载Gophish就能记录“邮件已打开”事件。对于测试内部员工建议取消勾选因为有些邮件客户端默认不加载远程图片反而会导致数据不准确。对于外部模拟测试可以勾选。Add Files可以添加附件。比如伪造一个“工资明细表.xls”或“会议纪要.docx”。注意附件大小受限于你的QQ邮箱SMTP服务和目标邮箱服务器的限制。编辑完成后可以点击Preview预览效果然后Save Template。4.3 创建Landing Pages钓鱼页面点击Landing Pages-New Page。Name页面名称如Fake-Company-Portal。Import Site这是“克隆”网站的功能。在输入框里填入你想要模仿的网站登录页地址例如https://login.example.com然后点击Import。Gophish会尝试抓取该页面的HTML和资源。成功率取决于目标网站的反爬机制和复杂度。对于简单的登录页效果很好。内容编辑框导入后页面HTML会显示在这里。你通常需要做以下修改修改表单提交地址找到form action... methodpost这行将action的属性值清空或改为#。这样表单数据就会提交到当前页面被Gophish捕获。修改输入框名称确保用户名和密码输入框的name属性是明确的如username和password。Gophish默认会捕获所有提交的数据但清晰的命名有助于你查看结果。处理乱码和资源导入的页面可能出现中文乱码可以检查或修改meta charsetUTF-8。如果页面引用了外部CSS/JS/图片这些链接可能还是指向原网站的你需要手动下载这些资源并上传到你的服务器或者修改链接为指向你克隆的地址这比较高级初期可以忽略只保证基本表单功能。Capture Submitted Data必须勾选勾选后才会捕获用户在这个页面上提交的数据。Capture Passwords如果勾选在仪表盘上提交的数据中密码字段会被明文显示。出于隐私考虑在测试真实员工时不要勾选你只需要知道有人提交了即可。在技术测试时可以勾选以便验证功能。Redirect to用户提交表单后跳转到哪个URL。可以设置为你们公司真正的门户网站地址或者一个“验证成功请关闭页面”的提示页。这能让“陷阱”看起来更逼真。4.4 管理Users Groups目标用户和组点击Users Groups-New Group。Name组名如IT-Department-Test。Bulk Import Users批量导入。点击Download CSV Template下载模板CSV文件。模板至少需要Email列还可以有First Name,Last Name,Position等列用于在邮件模板中个性化称呼通过{{.FirstName}}等变量。用Excel或文本编辑器编辑好CSV文件后在这里上传。Add手动添加单个用户。适合测试时添加自己和几个同事的邮箱。添加完成后点击Save Changes。5. 发起Campaign钓鱼活动与实战演练前面所有的准备工作都是为了这一刻。点击Campaigns-New Campaign。Name活动名称如2023-Q4-Security-Awareness-Test-1。Email Template选择你刚才创建的邮件模板例如Password-Reset-Notice。Landing Page选择你创建的钓鱼页面例如Fake-Company-Portal。URL这是第二个关键配置点。这里要填写你部署的钓鱼页面最终对外访问的地址。因为你的Gophish钓鱼页面服务运行在服务器的80端口假设公网IP是1.2.3.4那么这里应该填http://1.2.3.4/。Gophish会自动为每个Campaign生成一个唯一的ID最终的钓鱼链接会是http://1.2.3.4/?ridAbCdEf这种形式。确保你填写的URL和端口默认80与config.json中phish_server的配置以及云服务器安全组的入站规则一致。Launch Date活动启动时间。默认是“立即发送”。你可以设置一个未来的时间。Send Emails By这是一个非常有用的功能。如果你要发送大量邮件比如超过100封设置一个比Launch Date晚几分钟的截止时间Gophish会在这段时间内均匀地发送邮件而不是一瞬间全部发出。这能有效避免触发QQ邮箱的发送频率限制以及目标邮件服务器的垃圾邮件防护策略。Sending Profile选择你配置好的QQ邮箱发件策略例如QQMail-SMTP。Groups选择目标用户组例如IT-Department-Test。所有信息确认无误后点击Launch Campaign。活动即刻开始如果Launch Date是现在的话。你会被转到Dashboard页面。5.1 仪表盘Dashboard数据解读Dashboard是监控活动进展的指挥中心。主要看几个指标Sent计划发送的邮件总数和已成功发送的数量/比例。Opened邮件被打开的数量/比例。这依赖于追踪图片是否被加载。Clicked邮件中的链接被点击的数量/比例。只要用户点击了那个包含{{.URL}}的链接就会被记录。Submitted Data在钓鱼页面上提交了数据的数量/比例。Email Reported用户点击了邮件中的“举报钓鱼邮件”按钮的数量这个功能需要你在邮件模板中预设一个特殊的报告链接用得较少。点击每个指标下面的数字可以查看详细的事件日志包括发生时间、对应的用户邮箱等。5.2 数据查看与导出点击Campaign列表右侧的View Results可以进入该活动的详细结果页。在这里你可以看到每个目标用户的状态Sent, Opened, Clicked, Submitted并且可以点击Details查看具体数据包括提交的用户名、密码如果之前勾选了捕获密码、IP地址、User-Agent等信息。这些数据可以用于生成测试报告直观地展示各部门员工的安全意识薄弱环节。6. 常见问题、排查技巧与进阶优化在实际搭建和测试过程中你肯定会遇到各种问题。下面是我总结的一些常见坑点和解决思路。6.1 邮件发送失败问题在Sending Profiles里发送测试邮件失败或者在Campaign中大量邮件显示“Error Sending”。排查检查授权码99%的问题出在这里。确认QQ邮箱的SMTP服务已开启使用的是最新的16位授权码并且复制时没有多余空格。检查端口和主机确认Host是smtp.qq.com:465。尝试将端口改为587TLS有时465端口在某些网络环境下会被拦截。检查服务器出站规则登录云服务器控制台检查安全组/防火墙规则是否允许该服务器访问外网的smtp.qq.com的465和587端口。出站规则通常默认是全部放通的但如果你的公司有严格策略可能需要申请开通。查看Gophish日志回到服务器查看gophish.log文件 (tail -f gophish.log)寻找发送邮件时的详细错误信息。QQ邮箱发送限制免费QQ邮箱有每日发送上限大约几百封且短时间内高频发送会被限制。利用Send Emails By功能拉长发件时间窗口。6.2 收件人收不到邮件或进入垃圾箱问题Dashboard显示邮件已发送成功但目标邮箱没收到或者在垃圾箱里。排查与优化发件人伪装From字段不要伪装成明显的内部高管或IT部门用普通的通知邮箱即可。伪装越像进垃圾箱的概率越高。邮件内容避免使用明显的钓鱼关键词如“密码”、“验证”、“点击这里”、“紧急”。测试邮件的主题和正文要尽量平常化。发送频率使用Send Emails By控制节奏模拟正常发件行为。测试不同邮箱服务商QQ邮箱发往不同服务商如163、Gmail、企业邮箱的到达率不同。可以先用一个小列表测试各种邮箱的到达情况。检查SPF记录进阶虽然我们用了QQ的SMTP但发件人域名如果是你自己的域名则需要为该域名配置正确的SPF记录包含include:spf.mail.qq.com。但这属于进阶伪装初期可以忽略。6.3 钓鱼页面无法访问或提交数据不捕获问题用户点击链接后打不开页面或者提交表单后Dashboard没有记录。排查检查URL配置确认Campaign中的URL填写正确是http://你的IP:端口/的格式且端口已在你服务器的安全组入站规则中放通。检查Gophish服务在服务器上运行curl http://localhost:80如果端口是80看能否访问到Gophish的默认页面。如果不行可能是Gophish进程挂了检查日志。检查页面表单确保钓鱼页面的form标签的action属性已被清空或改为#并且method是post。浏览器控制台让测试用户在打不开页面时按F12打开开发者工具切换到Console或网络(Network)标签查看具体的错误信息。可能是JS/CSS资源加载失败导致页面白屏。6.4 提升测试的真实性与安全性域名与HTTPS购买一个与你公司域名相似的“山寨”域名例如公司是example.com你可以注册examp1e.com或example-login.com并将这个域名解析到你的服务器IP。然后在Campaign的URL里使用这个域名。甚至可以为此域名申请一个免费的SSL证书如Let‘s Encrypt并在config.json中为phish_server配置证书启用HTTPS。这能极大降低用户的警惕性。邮件模板个性化在导入的CSV文件中填写员工的姓名、部门等信息在邮件模板中使用{{.FirstName}}、{{.Position}}等变量实现邮件的个性化称呼这能显著提高打开率和点击率。时间选择不要在深夜或凌晨发起测试选择工作日的上午或下午上班后一段时间这样更符合正常办公邮件的发送规律。测试后沟通测试结束后务必通过正式渠道如公司群公告、邮件告知员工这是一次安全演练并公布结果可以匿名化数据进行针对性的安全教育。这是整个测试活动最有价值的一环也是合规性的要求。搭建Gophish钓鱼测试环境技术本身并不复杂难的是对细节的把握和对“人性”的理解。每一次成功的测试都应该成为我们改进安全防护、提升员工意识的宝贵经验。记住我们的目的是筑起防线而不是制造恐慌。