本篇文章將詳細介紹如何使用 GoPhish、Mailgun 以及 Nginx 打造一個企業級的多網域社交工程演練平台。隨著網路釣魚攻擊已成為企業資安中最常見的威脅之一,許多公司開始定期進行社交工程演練來提升員工的安全意識。透過本文的教學,讀者將學會如何結合 GoPhish 開源框架、Mailgun 郵件發信服務與 Nginx 反向代理技術,搭建一個可支援多個網域名稱的仿真釣魚測試平台。在這個平台上,企業資安團隊可以靈活地使用不同網域來模擬各種釣魚攻擊場景,GoPhish 教學、Mailgun 發信與Nginx 設定的實務步驟也都會在文章中逐一說明。此平台將協助企業有效執行社交工程演練,進行安全意識訓練,同時確保每個網域的釣魚網站皆採用 HTTPS SSL 憑證配置以增加真實性。
- GoPhish 是什麼?
- 為何選擇 Mailgun?
- 建置環境準備與系統架構說明
- 安裝與設定 GoPhish
- 使用 Mailgun 發送釣魚郵件
- Nginx 反向代理與 HTTPS 配置
- 新增客戶網域與自動化管理
- 常見錯誤排除與維運建議
- 結語與部署建議
- FAQ
GoPhish 是什麼?
GoPhish 是一款開源的網路釣魚模擬工具框架,主要用於企業內部的仿冒郵件攻擊測試。透過 GoPhish,企業可以在安全可控的環境下發起仿真的釣魚郵件活動,追蹤員工的開信率、連結點擊率以及提交敏感資訊(如帳號密碼)的情況。這有助於評估組織對釣魚攻擊的防範能力,找出安全意識薄弱的環節並強化訓練。由於社交工程攻擊(特別是網路釣魚)仍是目前最常見且有效的入侵手法之一,定期對員工進行社交工程演練已成為許多企業必備的資安策略。GoPhish 提供簡潔的 web 圖形介面來管理整個釣魚演練流程,包括建立郵件內容、釣魚網站(著陸頁)、寄件設定以及受測者名單等。使用 GoPhish,資安團隊能在單一平台上監控所有釣魚測試活動的成效,透過詳細的統計數據(如郵件送達與開啟狀態、點擊連結數量、提交資料記錄等等)來評估員工的警覺性。
值得一提的是,GoPhish 不僅適用於企業內部安全意識訓練,也常被紅隊(Red Team)或滲透測試人員用來模擬真實攻擊場景。它的開放原始碼性質意味著使用者可以根據需求對其進行二次開發或擴充。不過,在進行任何仿冒攻擊測試時,都必須確保已取得組織管理階層的同意,並通知相關單位以避免誤報真實資安事件。總之,GoPhish 是「以攻擊者之姿訓練防禦」的實用工具,在企業強化資訊安全防護戰略中扮演了重要角色。
為何選擇 Mailgun?
在部署釣魚演練平台時,郵件發送功能至關重要。我們之所以選擇 Mailgun 作為發信服務,主要是因為它專門針對開發者和企業提供可靠的電子郵件寄送 API 與 SMTP 中繼服務。使用 Mailgun 有幾個明顯優勢:
- 多網域管理方便:Mailgun 允許一個帳戶管理多個寄件網域。我們可以為不同的釣魚情境設定不同的網域郵件地址(例如釣魚郵件可以來自不同的公司域名),而在 Mailgun 平台上集中管理這些網域的 DNS 驗證和寄送參數,這非常適合多網域管理的需求。
- 良好的寄送成功率:Mailgun 具有高送達率的基礎設施,幫助提高郵件進入收件者收件匣(而非被當成垃圾郵件)的機會。相比自行架設郵件伺服器,Mailgun 已替我們處理很多底層的寄送最佳化(包括IP信譽、退信處理等),在企業進行大規模內部測試時能更省心。
- 簡易的 API 和 SMTP 整合:Mailgun 提供直觀的儀表板與 API,可很容易地取得 SMTP 認證資訊。對於 GoPhish 這類應用,我們不需開發額外程式,只要將 Mailgun 提供的 SMTP 主機、帳號密碼設定進 GoPhish 的寄件設定檔(Sending Profile),即可開始發信。整個流程相當簡單。
- 彈性的服務方案:Mailgun 提供的免費層級就足以應付小規模的釣魚演練(通常每月有一定量的免費郵件額度),而當演練規模擴大時,也能依需求升級方案。這種彈性對於剛開始建置演練平台的團隊很有幫助。
當然,除了 Mailgun 之外也有其他選擇,例如 SendGrid、Amazon SES 或企業自有的 SMTP 伺服器。然而使用這些替代方案時,可能會遇到一些挑戰:例如企業自建郵件伺服器可能缺乏良好的發信信譽,或需要額外配置 SPF/DKIM 才能避免被標記為垃圾信。而 Mailgun 作為專業郵件寄送平台,已為我們預先解決許多此類問題。我們只需專注在演練本身的內容設計,而不必煩惱郵件是否發得出去、會不會被擋下。因此在企業級的釣魚模擬中,Mailgun 是一個穩定且省時的發信解決方案。
值得注意的是,在使用 Mailgun 發送釣魚郵件時,務必遵守服務條款並確保收件者(如員工)已在演練計畫範圍內。Mailgun 要求使用者對寄送名單擁有合法的郵件授權,幸好企業內部演練通常屬於合法使用情境,但仍需避免在測試中寄送未經許可的廣泛垃圾郵件,以免違反相關規定。
建置環境準備與系統架構說明
在進入安裝與設定細節之前,我們先說明整體系統架構與準備工作,確保環境就緒以支援多網域社交工程演練平台的運作。
1. 伺服器與作業系統: 首先,您需要一台可以長期運行的伺服器作為演練平台的主機。建議使用 Linux 作業系統(例如 Ubuntu 20.04/22.04 LTS 或 CentOS 等),因為 GoPhish 與 Nginx 在 Linux 上有較佳的支援與相對簡單的部署流程。確保伺服器擁有足夠的記憶體與 CPU 資源來處理您預期的郵件發送量和使用者點擊流量(一般來說,GoPhish 本身資源需求不高,但若同時執行大量郵件發送與接收流量,仍需適當的硬體規格)。此外,請確認您的伺服器對外網路連線正常,且已開放必要的防火牆埠(例如 TCP 80 和 443 給 Nginx 使用,以及稍後 GoPhish 管理介面的埠 3333)。
2. 網域名稱: 準備好一個或多個網域名稱供釣魚演練使用。這些網域將用來註冊 Mailgun 寄信以及架設釣魚網站。為了達到多網域的效果,您可以註冊數個不同的網域(例如 example-phish1.com, example-phish2.com 等),甚至可以選擇與常見品牌相似的域名來提高演練逼真度。請注意,切勿使用您公司官方網域以外的郵件寄送名義來寄送測試郵件,以免引起寄送網域信譽風險。準備好網域後,將每個網域的 DNS A 紀錄指向您的伺服器 IP,使這些網域能夠正確解析到您的主機。同時,在 Mailgun 平台上新增這些網域時也需要進行 DNS 設定(例如新增 TXT 紀錄以驗證網域擁有權、設定 SPF/TXT 紀錄 v=spf1 include:mailgun.org ...
以及 DKIM 等),這部分我們會在後續章節詳述。
3. 系統架構概述: 整個演練平台由三大部分組成:GoPhish 應用、Mailgun 郵件服務、Nginx Web 伺服器,如下所示:
- GoPhish 應用:負責演練活動的核心邏輯,包括郵件內容製作、發送(透過 SMTP 中繼)、受測者資料管理、釣魚網站頁面託管及結果收集。GoPhish 自身提供一個後台管理介面(預設埠為 3333)供管理員操作設定。
- Mailgun 郵件服務:作為 GoPhish 的郵件發送後端。GoPhish 並不直接對外發信,而是將郵件透過 SMTP 提交給 Mailgun,由 Mailgun 代為寄出給目標員工信箱。Mailgun 確保郵件寄送的可靠性,並提供基本的投遞狀態追蹤(例如成功/失敗、退信原因等)供管理員參考。
- Nginx Web 伺服器:這是在我們伺服器上部署的一個反向代理服務。由於 GoPhish 原生僅支援單一網域的憑證配置,為了同時支持多個網域的釣魚網站,我們使用 Nginx 來處理外部 HTTP/HTTPS 請求。Nginx 將會針對每個設定的網域提供對應的 SSL 憑證(確保瀏覽器顯示安全連線),並將這些請求代理轉發給 GoPhish 在本地主機上提供的釣魚網站服務埠。換句話說,Nginx 是 GoPhish 與使用者(受測員工)的中介:使用者點擊釣魚郵件中的連結後,瀏覽器會向 Nginx 所在的伺服器發出請求(透過對應的網域名稱),Nginx 解密 HTTPS 並將流量導向 GoPhish,GoPhish 再回傳對應的仿冒頁面給使用者。
上述架構的好處是:我們可以在單一伺服器、單一 GoPhish 實例下,使用多個不同域名來展開平行的釣魚活動,同時保持管理面的統一。資安人員只需登入一次 GoPhish 後台,即可掌握所有網域下的各項演練數據。在進入實作部分前,請確保您對 DNS 設定、Linux 服務安裝等基本步驟不陌生。如果環境中有既有的防火牆或 IDS/IPS 系統,也建議先行評估本演練平台的網路連線需求,以避免測試流量被過度攔截。
安裝與設定 GoPhish
接下來,我們進入 GoPhish 的安裝與配置步驟。這部分假設您已在 Linux 伺服器上取得系統管理權限(root 或可使用 sudo 的帳戶),並且具備基本的系統操作知識。
1. 下載與安裝 GoPhish: GoPhish 官方提供可直接執行的二進位檔案,無需自行編譯源碼。您可以前往 GoPhish 的 GitHub Releases 頁面下載適用於您系統架構的壓縮檔(例如最新的 Linux 64-bit 版本 zip 檔)。下載完成後,將其上傳或直接下載至您的伺服器。例如,使用 wget 指令下載 (版本號請替換為實際最新版):
$ wget https://github.com/gophish/gophish/releases/download/vX.Y.Z/gophish-vX.Y.Z-linux-64bit.zip
$ unzip gophish-vX.Y.Z-linux-64bit.zip
$ cd gophish-vX.Y.Z-linux-64bit
以上指令將 GoPhish 解壓縮到當前目錄。接著,您會看到一個 config.json
設定檔與 gophish
執行檔。
2. 配置 GoPhish 參數: 使用您慣用的文字編輯器打開 config.json
,我們需要根據架構需求調整幾個重要參數:
- 管理介面設定 (
admin_server
): 預設情況下,GoPhish 的後台管理介面僅監聽在本機的 127.0.0.1:3333,且使用自簽的 TLS 憑證。如果您希望能從遠端瀏覽器存取管理介面,將"listen_url"
的數值改為"0.0.0.0:3333"
(允許所有介面存取)。use_tls
可維持true
,表示啟用 HTTPS。第一次啟動時 GoPhish 會自動產生gophish_admin.crt
和gophish_admin.key
憑證檔案供後台使用(為自簽憑證,瀏覽器可能會警告,但由於僅管理員使用,可接受該風險或自行替換為有效憑證)。 - 釣魚網站設定 (
phish_server
): 這部分關係到受測者瀏覽釣魚網站時的服務配置。預設"listen_url"
可能是"0.0.0.0:80"
(表示在所有介面監聽 80 埠 HTTP),use_tls
預設為false
(也就是以 HTTP 提供釣魚頁面)。然而,因為我們計畫使用 Nginx 來提供 HTTPS 並同時處理多網域,我們需要做以下調整:- 將
listen_url
改為例如"127.0.0.1:5000"
,意思是在本機的 5000 埠上提供釣魚網站服務。您也可以選擇其他未被佔用的埠號,例如 8080。重要的是,我們將 GoPhish 的釣魚網站僅綁定在本地主機介面 (127.0.0.1),讓外部流量必須經由 Nginx 反向代理才能存取,這樣可以增加安全性。 - 確認
use_tls
設為false
。我們不需要 GoPhish 本身處理加密連線,這部分將由 Nginx 代勞。因此 GoPhish 內部以 HTTP 提供內容即可。稍後在 Nginx 中,我們會將客戶端的 HTTPS 請求轉為 HTTP 再送入 GoPhish。 cert_path
和key_path
這兩個欄位可保留預設值(或留空),因為在use_tls:false
的情況下,GoPhish 不會用到這些檔案。
- 將
- 資料庫設定:預設 GoPhish 使用內建的 SQLite 資料庫 (
db_path
: “gophish.db”)。如果您的測試規模不大,SQLite 足以應付。我們在此無需修改。如需更高並發或多使用者環境,可考慮改用 MySQL 或 PostgreSQL,但那屬於進階設定。 - 其他參數:通常可維持預設。例如
contact_address
(聯絡信箱,可留空)、logging
日誌設定等。完成編輯後,儲存並關閉config.json
。
3. 啟動 GoPhish 服務: 在終端機中執行以下命令以啟動 GoPhish:
$ sudo ./gophish
(若檔案沒有執行權限,先執行 chmod +x gophish
以賦予執行許可。)
啟動後,您應該會在終端機看到 GoPhish 的啟動日誌。首次執行時,日誌中會提示一組管理員登入憑證,包含使用者名稱(預設為 admin
)和隨機產生的初始密碼。請妥善記下這組密碼。日誌還會顯示 GoPhish 釣魚伺服器和管理介面的啟動狀態,例如:
time="2025-...+08:00" level=info msg="Admin server listening at https://0.0.0.0:3333"
time="2025-...+08:00" level=info msg="Phish server listening at http://127.0.0.1:5000"
如果您看到如上所示的資訊,代表 GoPhish 兩個主要服務皆已成功啟動。在不關閉終端的情況下,嘗試從本地或遠端瀏覽器登入 GoPhish 後台管理介面:在網址列輸入 https://<伺服器IP>:3333
。由於我們使用的是自簽憑證,瀏覽器可能會跳出安全警告,此時您需要自行將憑證視為信任才能繼續。接著即可看到 GoPhish 的登入頁面。輸入上面取得的預設帳號密碼進行登入,第一次登入後系統通常會提示您設定新密碼(務必設定一組強度高的新密碼,以保障後台安全)。
進入 GoPhish 後台後,您會看到儀表板介面,以及側邊欄的各種功能選單,如「Dashboard 儀表板」、「Campaigns 釣魚事件」、「Email Templates 郵件模板」、「Landing Pages 登入頁面」、「Sending Profiles 寄件設定檔」等等。此時 GoPhish 的基本安裝算是完成了,但在我們開始建立釣魚活動之前,還需要配置 Mailgun 作為寄信端,以及 Nginx 作為反向代理。我們將在接下來的章節中完成這些部分的設定。
使用 Mailgun 發送釣魚郵件
現在我們已經有一個跑在本機的 GoPhish 伺服器(尚未開始任何釣魚活動),接下來需要設定 Mailgun,讓 GoPhish 可以透過 Mailgun 的 SMTP 來發送釣魚郵件給受測者。以下是 Mailgun 整合的步驟:
1. Mailgun 帳戶與網域設定: 如果您還沒有 Mailgun 帳號,首先在 Mailgun 官方網站註冊一個帳戶。註冊過程需要驗證電子郵件,並且在最近的政策中,Mailgun 可能要求您綁定信用卡才能解除試用狀態並允許新增自訂網域。在帳戶準備就緒後,登入 Mailgun 管理後台,導航到「Sending > Domains」頁面,點擊「Add New Domain」來新增您的寄信網域。輸入您準備使用的網域名稱(如 example-phish1.com
),並選擇 Mailgun 的伺服區域(美國或歐洲,通常與您的主要受眾地理位置相符即可)。
2. DNS 驗證網域: Mailgun 會要求您對剛新增的網域進行擁有權驗證和郵件相關的 DNS 設定。通常,它會提供一組 DNS 紀錄,例如:
- 兩筆 TXT 紀錄:一筆用於網域驗證(Mailgun 會產生類似
mailgun._domainkey
的名稱和值),另一筆用於郵件寄送身份識別(SPF 記錄,內容包含v=spf1 include:mailgun.org ...
部分)。 - DKIM 金鑰:常以
default._domainkey.yourdomain
作為 TXT 紀錄的名稱和值,Mailgun 提供這個公開金鑰以便收件方驗證郵件簽章。 - MX 紀錄(可選):如果您希望 Mailgun 代管該網域的收件郵件,用於處理退信等。但釣魚演練通常不需要處理回信,因此可視情況設定。
按照 Mailgun 提示,在您的網域 DNS 設定處新增上述紀錄。一旦 DNS 記錄正確設定並傳播,Mailgun 後台中的該網域應該會顯示「Verified」(已驗證)。這步驟確保您有權使用該網域發送郵件,並減少寄出的郵件被標記為垃圾的機率。
3. 建立寄件人信箱(SMTP 認證): Mailgun 對每個網域預設建立了一個郵件寄件帳號,通常形式為 postmaster@您的網域
。我們可以使用這個帳號進行 SMTP 認證。點擊 Mailgun 後台中剛剛驗證的網域,您會看到設定詳情,其中包括 SMTP 伺服器位址、埠號以及 Default SMTP Login
(通常就是 postmaster@…)等資訊。此時點擊「Reset Password」或類似的按鈕,重設該 SMTP 使用者的密碼。Mailgun 會產生一組新密碼(API 金鑰形式的隨機字串),請將它複製備份好,稍後我們需要在 GoPhish 中用到。
4. 在 GoPhish 中設定 SMTP 寄件設定檔: 回到 GoPhish 後台,點選左側選單的「Sending Profiles」(寄件設定檔),然後新增一個新的寄件設定檔。填寫以下欄位:
- Name(名稱): 為這個設定檔取一個易識別的名稱,例如 “Mailgun – ExamplePhish1″。
- SMTP Host: 輸入 Mailgun 提供的 SMTP 主機位址。例如美國區可能是
smtp.mailgun.org
(確認 Mailgun 後台對您的網域所列出的 SMTP Host,一般美國區的通用位址即可)。 - Username(使用者名稱): 輸入剛才 Mailgun 顯示的 SMTP login(格式類似
[email protected]
)。 - Password(密碼): 貼上您剛剛複製的 Mailgun SMTP 密碼。
- SMTP Port: 輸入 Mailgun SMTP 服務的埠號,一般為 587(使用 STARTTLS)或 465(SSL)。建議使用 587,因為 STARTTLS 是通用的提交埠。
- Use TLS: 如果有此選項,勾選它以確保 GoPhish 與 Mailgun 之間的連線經過加密(587 埠配合 STARTTLS 即可滿足)。
- From Address(寄件者位址): 這裡可以填入郵件顯示的寄件人資訊。例如
支援團隊 <[email protected]>
。建議使用您驗證的網域中的信箱(如 [email protected])為寄件者信箱,名稱可以自訂,使郵件看起來更真實。不過在測試階段也可簡單填寫[email protected]
等。
填好後,您可以利用 GoPhish 提供的 “Send Test Email” 功能來驗證設定是否正確:在新增寄件設定檔時,畫面下方有一個可以輸入任意電子郵件地址的欄位(例如輸入您的個人信箱),點擊發送測試郵件。如果 Mailgun 設定正確且連線暢通,應該會收到成功的回饋訊息(GoPhish 會提示郵件已發送)。此時檢查該測試郵件信箱,確認是否收到測試郵件。如果有,則表示 GoPhish 已成功透過 Mailgun 發信。如果沒有,需檢查日誌輸出(GoPhish 會在「Emails」頁面顯示失敗原因)以及 Mailgun Logs 查看有無連線請求進入,來排除設定錯誤的可能性。
5. 多網域的寄件配置: 如果您的平台要管理多個寄信網域,可為每個網域重複以上步驟:在 Mailgun 後台新增並驗證額外的網域,取得各自的 SMTP 認證;然後在 GoPhish 中建立對應的「寄件設定檔」。GoPhish 允許您建立多組 SMTP 設定檔,日後在建立釣魚活動時,可以選擇特定的設定檔對應您想使用的寄件網域,從而實現郵件從不同網域發送的效果。
完成 Mailgun 的整合後,我們已經打通了釣魚郵件發送的管道。接下來要確保釣魚鏈接(網頁)能夠正確地以對應網域提供服務並採用 HTTPS,加強可信度。這部分就由 Nginx 來實現。
Nginx 反向代理與 HTTPS 配置
如先前架構所述,Nginx 在本平台中扮演「多網域的入口」角色。我們將使用 Nginx 來處理所有進入的 HTTP/HTTPS 請求,並依據請求的網域名稱將流量導向 GoPhish 內部的釣魚網站服務。以下是 Nginx 的安裝與設定步驟:
1. 安裝 Nginx: 在您的 Linux 伺服器上,透過套件管理工具安裝 Nginx。以 Ubuntu 為例:
$ sudo apt update
$ sudo apt install nginx
安裝完成後,確認 Nginx 服務是否啟動:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx # 設定開機自動啟動
預設情況下,Nginx 會在 80 埠(HTTP)和 443 埠(HTTPS)監聽(443 埠需要有憑證才會啟用)。我們接下來會為我們的釣魚網域設定虛擬主機(Virtual Host)。
2. 為每個網域建立 Nginx 組態: Nginx 通常使用獨立的組態檔來對應不同的網域。我們可以在 /etc/nginx/sites-available/
目錄下為每個釣魚網域建立一個組態檔。例如,假設我們有兩個網域 phish1.example
和 phish2.example
(請替換為您實際擁有的網域):
$ sudo vi /etc/nginx/sites-available/phish1.conf
插入以下內容:
server {
listen 80;
server_name phish1.example;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name phish1.example;
ssl_certificate /etc/letsencrypt/live/phish1.example/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/phish1.example/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
上述設定分為兩個部分:第一個 server
區塊 (listen 80) 將所有 HTTP 請求強制轉址到 HTTPS;第二個 server
區塊 (listen 443 ssl) 則處理該網域上的 HTTPS 請求。請注意,我們在 443 虛擬主機中指定了 ssl_certificate
和 ssl_certificate_key
,您需要將路徑替換為您的憑證存放位置。關於憑證檔案的取得,我們稍後說明。location /
區塊內,我們使用 proxy_pass
將流量轉發至 GoPhish 本地的釣魚網站服務(我們先前將 GoPhish 設定在 127.0.0.1:5000)。另外,proxy_set_header
指令用來在轉發請求時附加一些標頭:
Host $host
確保轉發給後端時仍然帶上原始的主機名稱,讓後端服務(GoPhish)知道被訪問的是哪個網域(儘管 GoPhish 目前用不到此資訊,但保留這標頭以備未來需要)。X-Real-IP $remote_addr
和X-Forwarded-For $proxy_add_x_forwarded_for
則是將使用者的真實 IP 地址轉發給後端,讓 GoPhish 日誌紀錄中保存受測者的來源 IP,而不是記錄成 Nginx 代理的 127.0.0.1。
為第二個網域 phish2.example
也創建類似的組態檔,只需替換對應的網域名稱與憑證路徑即可。
3. 申請並部署 SSL 憑證: 為了讓受測員工在瀏覽釣魚頁面時看到正常的 HTTPS 安全鎖,我們需要為每個網域取得有效的 SSL 憑證。最方便的方式是使用 Let’s Encrypt 提供的免費憑證,以及 Certbot 工具來自動化申請。以 Ubuntu 為例,先安裝 Certbot:
$ sudo apt install certbot python3-certbot-nginx
然後針對您的每個網域執行 Certbot Nginx 插件:
$ sudo certbot --nginx -d phish1.example -d www.phish1.example
上述指令會自動申請 phish1.example
以及其 www
子網域的憑證(如果有需要覆蓋 www
)。Certbot 成功後,會自動修改您 phish1.conf
中的 Nginx 設定以加入憑證路徑,以及撰寫好 80 埠轉址的部分。如果您先前已手動撰寫,Certbot 可能會詢問是否覆蓋或編輯,我們可選擇適當的方式讓憑證順利部署。對第二個網域執行相同流程:
$ sudo certbot --nginx -d phish2.example -d www.phish2.example
完成後,Certbot 也會自動設定定期續約的排程任務,確保憑證過期前會自動更新。您可以透過 certbot renew --dry-run
測試更新是否正常。
(若無法使用 Certbot Nginx 插件,另一種方式是使用 certbot certonly
取得憑證,再手動編輯 Nginx 組態加入 ssl_certificate
與 ssl_certificate_key
路徑。確保您的憑證和私鑰檔案放置妥當且 Nginx 有權限存取。)
4. 啟用並測試 Nginx 配置: 建立並編輯完對應的組態檔後,將它們啟用:在 Debian/Ubuntu 系統,可透過建立符號連結到 sites-enabled
目錄來啟用站台。例如:
$ sudo ln -s /etc/nginx/sites-available/phish1.conf /etc/nginx/sites-enabled/phish1.conf
$ sudo ln -s /etc/nginx/sites-available/phish2.conf /etc/nginx/sites-enabled/phish2.conf
然後檢查 Nginx 設定語法:
$ sudo nginx -t
如果結果顯示 OK,重新載入 Nginx:
$ sudo systemctl reload nginx
現在,嘗試在瀏覽器訪問 https://phish1.example/
和 https://phish2.example/
(使用您設定的實際網域)。理想情況下,應該看到某個頁面載入。由於目前我們還沒有在 GoPhish 建立任何著陸頁面 (Landing Page),預設情況下 GoPhish 對未知路徑可能回應一個預設頁面或 404 訊息。如果您看到瀏覽器顯示安全連線且返回了一個 404 頁面,這其實是好現象,代表 Nginx -> GoPhish 的代理鏈路已經暢通。404 僅僅是因為我們尚未設定內容。稍後當我們建立釣魚網站內容並啟動活動時,受測者點擊連結就會顯示正確的模擬頁面了。
在設定 Nginx 過程中,有幾點要特別注意:
- 切勿在
location /
區塊中添加不必要的 Header 或做修改請求的動作。保持簡潔的proxy_pass
即可。額外添加不當的標頭可能會導致 GoPhish 無法正確紀錄或處理請求。 - 確保每個網域使用正確的憑證,否則使用者瀏覽時會遇到證書錯誤而失去對演練郵件的信任。
- 若您在同一伺服器上同時運行其他網站服務,要仔細檢查
server_name
定義避免衝突,以免 Nginx 無法正確路由請求。
經過這一步,我們的多網域釣魚網站環境基本就緒:Mailgun 負責郵件的寄出,Nginx 反向代理確保不同網域的請求能夠到達 GoPhish,並透過正確的 HTTPS 提供服務。接下來,我們將說明如何在 GoPhish 中新增使用多網域的釣魚活動,以及如何自動化地管理新增網域的流程。
新增客戶網域與自動化管理
當您的演練平台需要擴充新的網域(例如有新的子公司或客戶專案需要各自獨立的釣魚網域),以下是建議的新增流程以及可考慮的自動化措施:
1. 新網域的設定流程:
- 網域註冊與 DNS 設定:註冊一個新的網域名稱,或從客戶處取得欲使用的網域權限。將該網域的 DNS A 紀錄指向您的演練平台伺服器 IP。此外,為了後續的發信與驗證,在 DNS 中預先加入 SPF、DKIM 等 TXT 紀錄(Mailgun 在新增網域時會提供具體值,可在此階段一併配置)。
- Mailgun 中新增網域:登入 Mailgun 後台,新增這個新的網域,並完成驗證(確認 DNS TXT 紀錄呈現「已驗證」狀態)。獲取或重置該網域的 SMTP 認證(postmaster 帳號及密碼),同前述步驟將它保存好。
- 取得 SSL 憑證:使用 Certbot 為新網域申請 SSL 憑證。可以與前述步驟同時進行,或在網域 DNS A 紀錄生效後立即申請。確保憑證順利簽發並部署在伺服器上。
- 配置 Nginx:仿照之前的網域設定,為新網域建立一份 Nginx 組態,內含 HTTP -> HTTPS 轉址、HTTPS 代理到 GoPhish 的設定。使用新的網域名稱和其憑證路徑,然後啟用組態並重新載入 Nginx。
- GoPhish 中設定:在 GoPhish 後台,進入「Sending Profiles」新增對應此網域的寄件設定檔(使用剛獲取的 SMTP 認證)。另外,如果需要,也可在「Landing Pages」建立該網域專用的仿冒登入頁面內容,或在郵件模板中使用該網域的特定連結。最重要的是,在建立新的釣魚 Campaign(活動)時,選擇正確的寄件設定檔,並在「URL」欄位填入該網域的釣魚網址(例如
https://phish-new.example/login
或您設計的路徑)。如此一來,此活動發出的郵件裡,GoPhish 會自動將{{.URL}}
置換為您指定的網域 URL,受測者點擊時就會通過 Nginx 代理到正確的著陸頁。
2. 自動化管理考量:當網域數量增多時,手動執行上述流程可能既耗時又容易出錯。以下是一些自動化的方向,可提升多網域管理效率:
- 腳本化網域新增:可以編寫腳本(Shell script、Python 等)來自動執行一系列操作。例如,給定一個網域名稱,腳本可呼叫 Mailgun API 新增網域並取得 DNS 紀錄要求,然後透過雲端 DNS 提供商的 API 將這些紀錄寫入;接著透過 Certbot 的 DNS 驗證模式申請 SSL 憑證(無需人工介入 DNS TXT 驗證),最後生成對應的 Nginx 組態檔並 Reload 服務。這樣,新增一個網域可能只需執行一次腳本即可完成所有必要配置。
- 集中配置管理:若您精通基礎設施即程式(Infrastructure as Code)的工具,例如 Ansible、Terraform 等,也可將多網域、多伺服器的配置編寫成代碼,使環境的建立和變更都可重複且可追蹤。這在需要快速為多個客戶部署獨立釣魚域名時特別有用。
- 監控與調整:自動化不僅在新增時,也可用於日常維運。例如寫腳本定期檢查所有網域的憑證有效期(Certbot 本身有自動更新,但多一層監控更保險)、Mailgun 剩餘額度或寄送狀況。如果發現異常(例如憑證快過期或 Mailgun 被擋信),可以及早介入處理。
3. 安全與隔離:多網域的環境可能意味著對應多個不同專案或客戶。雖然我們利用單一 GoPhish 服務方便地管理所有活動,但需注意不同活動之間的資料隔離。例如,不同客戶的員工名單應分開儲存、不同網域的郵件模板及登陸頁面注意不要混用等。GoPhish 本身提供分類的功能有限,所以管理上要嚴謹定義命名與使用規則(例如透過活動名稱前綴、群組命名等區分客戶)。若安全要求極高的情境下,可以考慮為不同客戶架設獨立的 GoPhish 服務,避免資料混淆風險。
總之,隨著企業演練規模擴大,手動管理多個網域可能變得繁瑣。因此及早規劃自動化流程,能讓您的多網域社交工程演練平台在增加新場景或新客戶時,維持良好的可擴充性與一致性。
常見錯誤排除與維運建議
在實際運行釣魚演練平台的過程中,您可能會遇到一些常見的問題。以下列出幾個典型問題以及對應的排除方法,同時提供維護營運時的建議:
- 郵件無法成功送達或被判為垃圾郵件:如果發現釣魚郵件沒有送到受測者收件匣(可能出現在垃圾信件匣甚至被郵件伺服器直接拒收),首先檢查 Mailgun 日誌和 GoPhish 的寄送狀態。確認網域的 SPF、DKIM 是否設定正確,Mailgun 後台是否顯示寄送成功。如果郵件被標記為垃圾郵件,可以嘗試優化郵件內容(避免過多看似垃圾郵件的關鍵詞、不要在信中附上可疑連結文字)、或在 Mailgun 中申請專屬 IP 提升信譽,以及循序漸進地增加寄送量讓網域建立信任(所謂的 IP/domain warming)。同時也可以請受測者將寄件者域名加入允許清單,以防止公司內部的郵件防火牆攔截測試郵件。
- GoPhish 無法發信/寄信設定檔測試失敗:如果在 GoPhish 設定 SMTP 後測試郵件發送失敗,請檢查:Mailgun 網域是否驗證完成(未驗證網域 Mailgun 不允許發信)、所填的 SMTP 主機/埠/帳密是否正確、伺服器是否能連通 Mailgun(有無被防火牆阻擋 SMTP 連線)。Mailgun 的 SMTP 埠 587 需要能夠進行 TLS 握手,有些雲主機預設封鎖郵件埠,可嘗試更換埠為 443(Mailgun 也提供 587/465/2525 等埠)或與主機提供商解除限制。若錯誤訊息顯示「Authentication failed」,可重新在 Mailgun 後台重置 SMTP 密碼並更新於 GoPhish。
- 受測者點擊連結後頁面無法開啟:如果郵件成功送達且受測者嘗試點擊其中連結卻無法開啟網頁,請檢查 Nginx 與 GoPhish 的配置。常見原因有:DNS 未正確指向您的伺服器 IP、Nginx 組態錯誤導致代理未生效(可查看
/var/log/nginx/error.log
判斷問題)、GoPhish 服務未運行或埠號不符(確認 GoPhish 日誌是否仍在運作,埠號和 Nginx proxy_pass 指定一致)。另外,確認 GoPhish Campaign 設定中的 URL 是否與使用者實際點擊的域名一致。如果 Campaign 中設定的是另一個網域或 IP,使用者點擊的連結就會導向錯誤的地方。 - Nginx 502 Bad Gateway/504 Timeout:這類錯誤表示 Nginx 無法從後端取得有效回應。可能原因包括:GoPhish 程序當掉或未啟動、proxy_pass 指向的位址錯誤、GoPhish 處理請求過久導致逾時。解決方法:重啟 GoPhish 並觀察其日誌是否有報錯、確認 config.json 的 phish_server 設定與 Nginx 一致。如果 GoPhish 負載過高(雖少見),也可調整 Nginx 的
proxy_read_timeout
等參數來包容較長的處理時間。 - SSL 憑證問題:若使用者反映瀏覽釣魚網站時遇到憑證警告,應檢查您為該網域配置的憑證是否有效。例如憑證是否過期、網域是否和憑證上的名稱完全匹配、是否使用了不受信任的簽發機構。Let’s Encrypt 的憑證需要每 90 天更新一次,確保 cron 任務正常執行,或使用
certbot renew
定期測試。若某網域短期內停止使用,反而導致憑證過期被用戶碰見,可提前移除或更新配置避免影響信任度。 - 多網域設定的特殊情況:由於我們透過單一 GoPhish 服務應對多網域,會有某些限制。例如 GoPhish 內建的 404 錯誤頁面對所有網域是共用的,無法針對不同網域定製錯誤頁。如果這種細節很重要,可能需要額外在 Nginx 層面處理(例如為不同 server block 設置自訂 404 頁面的 error_page)。此外,同一伺服器 IP 掛載多個網域也意味著在偵察下可能被識破(例如安全團隊可藉由 IP 反查連結多個域名),不過在內部訓練環境中這通常不是大問題。
- Mailgun 額度與法規:維運時別忘了關注 Mailgun 帳戶的寄送量配額。如果公司員工很多,演練郵件可能成千上萬封,確保所用的 Mailgun 方案足夠支撐。超額將導致郵件無法發送。同時留意 Mailgun 的日誌,有無出現大量退信或投訴。如果公司郵件策略嚴格,可事先與 IT 部門協調,避免內網防毒或過濾系統把演練攔截。另外,也請遵循相關法規與公司政策,確保演練的資料(如員工名單、點擊行為紀錄)被妥善保護,不被未授權的人存取。
維運建議:
- 定期升級:隨著 GoPhish 開發持續進行,建議關注官方更新,適時升級版本以獲取新功能和安全修正。在升級前備份好資料庫與設定檔。
- 權限管控:如果有多位管理人員操作平台,請明確分工並保管好後台帳號密碼。目前 GoPhish 後台缺乏細緻的 RBAC 控制,只有一組管理員帳號,故密碼管理和變更紀錄尤為重要。
- 日誌與報表:養成定期檢視演練結果的習慣。利用 GoPhish 匯出的 CSV 報表或 API,將結果整合進公司內部的資訊安全儀表板,可提升管理階層對此工作的重視。此外,保存歷次演練的關鍵指標有助於長期追蹤員工安全意識的成長曲線。
- 隱私與尊重:在演練中收集到的資料(例如哪些用戶點擊了連結、輸入了密碼),應僅用於內部訓練目的,不對外公開。制定清晰的政策,告知員工演練的存在及目的,並在事後提供教育說明,將有助於取得支持並達到更好的訓練效果。
結語與部署建議
透過上述步驟,我們成功地建置了一套企業級多網域社交工程演練平台。利用 GoPhish 的強大功能,我們能夠靈活地設計釣魚郵件和仿冒網站;藉助 Mailgun 的專業郵件基礎架構,我們確保了郵件發送的高可達性;而 Nginx 的引入則彌補了 GoPhish 在多網域與憑證方面的限制,為每個網域提供了安全可靠的訪問渠道。
在部署此平台至實際環境時,以下建議值得參考:
- 先小規模試行:在全公司推行釣魚演練前,可先選取一個部門進行試點。透過小規模測試,檢驗平台的穩定性、郵件模板的效果,以及找出可能的問題(例如過濾系統是否攔截、員工反應如何)。根據試點結果微調後,再擴大範圍至整公司。
- 逐步擴充功能:本平台搭建完成後,您可以考慮加入更多進階功能。例如自訂更精細的報表、自動化在釣魚頁面上填入受測者資訊(更逼真)、或者整合公司內部的 AD/LDAP 名單以自動更新受測者資料等。這些都可以通過 GoPhish 的 API 或額外的開發來達成。
- 重視教育意義:部署這個技術平台的最終目的,是為了提升人員的資安意識。因此,每次演練結束後,建議針對點擊或受騙的員工安排適當的後續教育,例如線上課程或注意事項提醒,同時也要讚揚成功識破釣魚的員工。透過良性的反饋循環,整個演練計畫才能真正發揮作用。
- 安全部署:將平台本身納入公司的資產清單,並套用必要的防護措施。例如限制只有內部管理人員的 IP 才能存取 GoPhish 後台、定期備份 GoPhish 的資料庫、監控系統異常登入嘗試等,確保這個用於測試的「攻擊」平台不會反過來成為新的弱點。
最後,透過本篇指南,相信您已對建置和運營一個多網域的社交工程演練平台有了全面的了解。這是一項需要技術細節和人為判斷並重的工作:技術上,我們提供了完整的步驟;在人為層面,則需要您的創意去設計演練、以及對結果的分析解讀。希望這個平台能幫助您的企業打造更堅實的「人員防線」,在面對真實的網路釣魚攻擊時臨危不亂,守住關鍵的第一道防線。
FAQ
Q: GoPhish 本身可以直接支援多網域嗎?
A: GoPhish 原生僅支援在單一 config.json
中設定一組釣魚網站域名和憑證。如果需要同時運行多網域,必須透過外部工具來輔助。本文介紹的方式是使用 Nginx 作為反向代理,讓單一 GoPhish 實例對外呈現多個域名。這種方法可以達到目的,而且管理也集中在一個後台。如果需要完全獨立的多租戶環境,也可以考慮部署多套 GoPhish,但那會增加管理成本。
Q: 是否能使用其他郵件服務(如自架 SMTP 伺服器或第三方)來替代 Mailgun?
A: 可以的。GoPhish 的寄件設定檔支援任意 SMTP 伺服器。因此您可以使用公司自己的郵件伺服器、SendGrid、Amazon SES 等服務。然而,每種方案有不同考量:自架郵件伺服器需要確保 IP 信譽和反垃圾措施,否則郵件可能被攔截;其他第三方服務可能有寄送量限制或條款問題。Mailgun 是相對平衡的一個選擇,特別是在管理多網域和寄送可靠性方面表現優異。如果您的企業已有可信的郵件基礎設施,也可以嘗試使用現有系統進行演練,但務必避免使用真實營運郵件系統造成混淆。
Q: 若演練郵件一直被收件者的安全系統阻擋,有什麼辦法改善?
A: 這是常見的情況。對策包括:1) 確認基礎設定無誤,如 DNS SPF/DKIM 通過驗證,寄件網域未被列入黑名單;2) 微調郵件內容,降低被過濾的可能,例如不要使用過於刺激的標題或可疑的附件;3) 將發信頻率降低或分批發送,避免一下子大量郵件衝擊造成觸發防禦機制;4) 與內部 IT 協調,在公司郵件網關放行特定演練郵件(例如根據網域或郵件標頭識別)僅限演練期間;5) 最後,可以考慮更換演練用網域或郵件服務,以避開先前可能留下的信譽污點。演練的目的是教育而非考驗 IT 設備,因此在必要時可調整技術手段來確保郵件能夠抵達員工信箱。
Q: 進行這種仿冒攻擊測試是否合法,會不會違反 Mailgun 的使用政策?
A: 在合法且授權的前提下進行內部釣魚演練是被廣泛接受的安全做法。重點是您必須確保得到公司管理層的批准,並告知參與的員工這是一項安全訓練(通常不需事先揭露具體時間和內容,以保留測試效度,但應在聘雇條款或年度訓練計畫中說明會有此類社交工程測試)。至於 Mailgun 的政策,該服務禁止濫發垃圾郵件或未經收件人允許的郵件。然而,在企業內部演練中,我們寄送的目標是公司自己的員工,而且目的是提升安全意識,通常不會視為違規。但建議您在 Mailgun 平台建立郵件時明確設定發信人身份和郵件內容,以免誤觸 Mailgun 的垃圾郵件偵測機制。如有疑慮,也可與 Mailgun 客服確認此用途是允許的。
Q: 我該如何保護這個演練平台本身不被濫用或攻擊?
A: 首先,保護 GoPhish 後台:確保管理帳號密碼足夠強,必要時定期更換。其次,只在需要時才開放 GoPhish 後台存取,平時可利用防火牆限制只有特定 IP 可以連線管理埠 3333。再次,定期更新系統與軟體,包括 GoPhish 本身、Nginx、以及底層作業系統的安全更新,修補已知漏洞。監控方面,可以啟用 GoPhish 的日誌或額外在 Nginx 層面監控管理路徑的存取,若發現可疑嘗試立即採取行動。最後,對於 Mailgun API 金鑰、SMTP 密碼等敏感資訊,要妥善保存,避免洩漏給無關人員。一旦這些被惡意者取得,可能被用來發送釣魚郵件給非授權對象,引發法律和商譽風險。保持良好的安全習慣,才能使演練平台本身不成為新的風險點。
相關文章