Remplacer GoPhish : migrer vos cibles et vos modèles
Passer de GoPhish à un outil hébergé : export des cibles par l'API, import CSV ou Microsoft 365, conversion des variables des modèles, archivage des résultats.
Vous faites tourner GoPhish depuis un moment, et le serveur vous coûte plus de temps que les campagnes : mises à jour, profil d’envoi, modèles à traduire, résultats à mettre en forme. Ce guide décrit la bascule vers une plateforme hébergée, nophi.sh, en ne promettant que ce que le produit fait aujourd’hui.
Le point de départ, pour éviter toute surprise : nophi.sh n’importe pas de base GoPhish. La migration passe par des fichiers. Les personnes arrivent par un CSV ou par la synchronisation Microsoft 365, vos modèles par copier-coller après conversion des variables, et l’historique des campagnes reste dans vos archives. Les commandes ci-dessous ont été vérifiées sur GoPhish 0.12.1, la dernière version publiée (14 septembre 2022). Elles supposent une instance installée comme dans notre tutoriel GoPhish sur VPS et utilisent l’API, présentée en détail dans notre guide de l’API GoPhish.
Faire l’inventaire de votre instance
Commencez par mesurer ce que vous avez. Depuis le serveur, ou à travers un tunnel SSH vers le port d’administration :
export GOPHISH_URL="https://127.0.0.1:3333"
export GOPHISH_API_KEY="cle-de-la-page-settings"
H="Authorization: Bearer $GOPHISH_API_KEY"
curl -sk -H "$H" "$GOPHISH_URL/api/groups/" \
| jq '{groupes: length, cibles: ([.[].targets[].email | ascii_downcase] | unique | length)}'
curl -sk -H "$H" "$GOPHISH_URL/api/templates/" | jq 'map(.name)'
curl -sk -H "$H" "$GOPHISH_URL/api/campaigns/summary" \
| jq '.campaigns[] | {id, name, status, launch_date}'
Le premier appel compte les personnes une seule fois, même si elles figurent dans plusieurs groupes. La liste des modèles vous dit lesquels valent la peine d’être repris. Les campagnes listées sont celles à exporter avant d’éteindre le serveur.
Étape 1 : exporter les cibles
La page « Users & Groups » de GoPhish sait importer un CSV et proposer un modèle de fichier, mais elle n’a pas de bouton d’export. Reprenez le CSV d’origine (l’export RH qui a servi à créer les groupes), ou reconstituez-le depuis l’API.
GoPhish stocke quatre champs par personne : email, first_name, last_name et position. Si vous avez rempli position avec le service, cette commande produit un CSV prêt à importer, avec une ligne par adresse :
curl -sk -H "$H" "$GOPHISH_URL/api/groups/" \
| jq -r '["email","first_name","last_name","department"],
([.[].targets[]] | unique_by(.email | ascii_downcase) | .[]
| [.email, .first_name, .last_name, .position])
| @csv' > cibles.csv
Si vos groupes GoPhish correspondaient à des services (« Comptabilité », « Direction »), prenez plutôt le nom du groupe comme service :
curl -sk -H "$H" "$GOPHISH_URL/api/groups/" \
| jq -r '["email","first_name","last_name","department"],
([.[] | .name as $g | .targets[] | [.email, .first_name, .last_name, $g]]
| unique_by(.[0] | ascii_downcase) | .[])
| @csv' > cibles.csv
Une personne présente dans deux groupes n’apparaît qu’une fois, avec le service du premier groupe qui la contient. Relisez ces cas à la main si vos groupes se recoupent.
Étape 2 : importer les personnes dans nophi.sh
Selon votre annuaire, deux chemins sont possibles.
Le premier est Importer un CSV, dans la page des utilisateurs. Les colonnes attendues sont email (obligatoire), first_name, last_name, department et manager_email. La virgule et le point-virgule sont acceptés comme séparateurs, ainsi que les en-têtes français (prénom, nom, service, e-mail). Un fichier issu de GoPhish passe tel quel : les en-têtes First Name, Last Name et Email sont reconnus. La colonne Position, elle, est ignorée : renommez-la department (ou service) si elle contient le service, sinon les personnes arrivent sans service. Les adresses déjà présentes sont ignorées. Si le fichier dépasse le nombre de personnes de votre formule, les premières lignes sont importées et l’application liste les adresses restées dehors.
Le second est la synchronisation Microsoft 365, ou Entra ID. Elle demande une inscription d’application dans Entra ID avec la permission Microsoft Graph User.Read.All, puis reprend les comptes avec leur service et leur manager depuis l’annuaire. Il n’existe pas de synchronisation Google Workspace ni AD/LDAP : dans ces cas, passez par le CSV.
Un changement d’organisation à prévoir : nophi.sh ne gère pas de groupes. Chaque personne appartient à un service, et une campagne vise toute l’organisation, un service, un niveau de risque ou une sélection de personnes. Vos groupes GoPhish se traduisent donc en services, ou en sélections au moment de lancer une campagne.
Étape 3 : reprendre vos modèles
Avant de convertir quoi que ce soit, parcourez la bibliothèque incluse : 80 scénarios en français et en anglais, sur 16 catégories (fraude au président, faux RIB fournisseur, factures, Microsoft 365, DocuSign, Teams et SharePoint, support informatique, RH, livraison, administrations, télécoms, cloud…) et trois niveaux de difficulté. Une partie de vos modèles GoPhish y a probablement déjà un équivalent.
Pour ceux qui vous sont propres, exportez-les d’abord depuis GoPhish. Ce script écrit le HTML de chaque modèle dans un fichier et garde l’objet et l’expéditeur dans un index :
import json
import os
import re
import unicodedata
from pathlib import Path
import requests
URL = os.environ["GOPHISH_URL"].rstrip("/")
r = requests.get(f"{URL}/api/templates/",
headers={"Authorization": f"Bearer {os.environ['GOPHISH_API_KEY']}"},
verify=os.environ.get("GOPHISH_VERIFY_TLS", "1") != "0",
allow_redirects=False, timeout=30)
r.raise_for_status()
dossier = Path("modeles-gophish")
dossier.mkdir(exist_ok=True)
index = []
for t in r.json():
ascii_nom = unicodedata.normalize("NFKD", t["name"]).encode("ascii", "ignore")
slug = re.sub(r"[^a-z0-9]+", "-", ascii_nom.decode().lower()).strip("-")
fichier = f"{t['id']:03d}-{slug}.html"
(dossier / fichier).write_text(t["html"], encoding="utf-8")
index.append({"fichier": fichier, "nom": t["name"], "objet": t["subject"],
"expediteur": t["envelope_sender"],
"pieces_jointes": len(t["attachments"])})
contenu = json.dumps(index, ensure_ascii=False, indent=2)
(dossier / "index.json").write_text(contenu, encoding="utf-8")
Convertissez ensuite les variables. nophi.sh utilise des champs de fusion simples, sans logique :
| GoPhish | nophi.sh | Remarque |
|---|---|---|
{{.FirstName}} | {{first_name}} | |
{{.LastName}} | {{last_name}} | |
{{.Email}} | {{email}} | |
{{.Position}} | {{department}} | si Position contenait le service |
{{.URL}} | {{phishing_link}} | lien suivi vers la page de la simulation |
{{.Tracker}} | {{tracking_pixel}} | pixel de suivi des ouvertures |
{{.From}}, {{.RId}}, {{.TrackingURL}}, {{.BaseURL}} | aucun | à retirer |
| aucun | {{company_name}} | nom de votre organisation |
La conversion des six variables courantes tient dans une commande sed. Elle tolère les espaces que Go accepte entre les accolades :
sed -E \
-e 's/\{\{ *\.FirstName *\}\}/{{first_name}}/g' \
-e 's/\{\{ *\.LastName *\}\}/{{last_name}}/g' \
-e 's/\{\{ *\.Email *\}\}/{{email}}/g' \
-e 's/\{\{ *\.Position *\}\}/{{department}}/g' \
-e 's/\{\{ *\.URL *\}\}/{{phishing_link}}/g' \
-e 's/\{\{ *\.Tracker *\}\}/{{tracking_pixel}}/g' \
modeles-gophish/012-note-interne.html > note-interne-nophish.html
# Contrôle : liste des champs restants entre accolades
grep -o '{{[^}]*}}' note-interne-nophish.html | sort | uniq -c
Les conditions Go ({{if .FirstName}}...{{end}}) n’ont pas d’équivalent : remplacez-les par un texte fixe. Le contrôle final liste chaque champ restant entre accolades ; seuls ceux de nophi.sh doivent apparaître.
Dans nophi.sh, ouvrez ensuite « Créer un modèle ». Le formulaire demande le nom du modèle, la catégorie, la difficulté, la langue, le nom et le courriel de l’expéditeur, l’objet, le corps HTML (le code source se colle tel quel), une version texte et les signaux d’alerte. Ce qui change par rapport à GoPhish :
- l’adresse d’expéditeur se résume à la partie avant le
@: le domaine est toujours le domaine d’envoi configuré avec vous, ce qui remplace à la fois l’Envelope Sender du modèle et le SMTP From du profil GoPhish ; - les pièces jointes de vos modèles GoPhish n’ont pas d’équivalent dans l’éditeur ;
- les signaux d’alerte (ce qui aurait dû alerter la personne : expéditeur, objet, lien, contenu) servent au débrief présenté juste après un clic. Prenez le temps de les écrire, c’est la partie que GoPhish ne gère pas.
Relisez chaque modèle avec le bouton « Aperçu » avant de l’utiliser.
Étape 4 : pages de destination et données saisies
Dans GoPhish, vous avez construit des landing pages, avec ou sans capture des données saisies. Dans nophi.sh, vous ne les reprenez pas : les scénarios s’appuient sur de fausses pages de connexion Microsoft 365, Google Workspace ou génériques, et les mots de passe saisis ne sont jamais enregistrés. La personne qui clique voit un débrief de 3 minutes, puis reçoit un module court assigné automatiquement, avec des relances avant l’échéance et une alerte à son manager ensuite.
Les données que vos landing pages GoPhish ont capturées restent, elles, dans la base gophish.db. Elles relèvent de l’étape 6.
Étape 5 : l’envoi et la liste blanche
Vous n’avez plus de profil d’envoi à maintenir. Les simulations partent de l’infrastructure de nophi.sh, depuis un domaine d’envoi authentifié (SPF, DKIM et DMARC alignés) mis en place avec vous. Les quotas de votre fournisseur, le relais SMTP et la signature DKIM, détaillés dans notre guide du profil d’envoi GoPhish, ne sont plus votre sujet.
L’autorisation côté messagerie reste à faire. Sur Microsoft 365, ajoutez le domaine et les adresses IP d’envoi de nophi.sh dans la politique Advanced Delivery, onglet « Phishing simulation » ; notre guide Microsoft 365 donne les valeurs exactes et la commande PowerShell pour l’IPv6. Une fois la migration terminée, retirez les entrées de votre serveur GoPhish : une exception de filtrage qui ne sert plus n’a aucune raison de rester active. Sur une messagerie mutualisée OVHcloud, sans liste blanche côté serveur, voyez notre guide OVH sans liste blanche.
Le signalement change aussi. GoPhish relève les signalements dans une boîte IMAP (depuis sa version 0.9.0). Avec nophi.sh, les salariés transfèrent l’email suspect à l’adresse de nophi.sh, ou utilisent le bouton « Signaler » intégré à Microsoft 365, configuré pour l’envoyer à cette adresse. Ils reçoivent un verdict de l’IA avec ses raisons, en général en une à deux minutes, et vos contacts sécurité sont prévenus. nophi.sh ne filtre pas et ne bloque pas vos emails : votre passerelle de messagerie reste en place.
Étape 6 : archiver, puis éteindre GoPhish
nophi.sh mesure à partir de votre première campagne et n’importe pas l’historique. Avant d’éteindre GoPhish, exportez donc ce qui doit servir de preuve :
- pour chaque campagne, le bouton « Export CSV » de la page de résultats propose « Results » (une ligne par personne) et « Raw Events » (la chronologie complète) ;
- par script,
GET /api/campaigns/:id/resultsrenvoie les mêmes données en JSON.
Ensuite, nettoyez dans cet ordre :
- supprimez les campagnes une fois exportées (
DELETE /api/campaigns/:idefface aussi leurs résultats et leur chronologie), ou la base entière, selon la durée de conservation prévue dans votre registre RGPD ; - révoquez la clé API et les comptes GoPhish ;
- arrêtez le service, puis détruisez le serveur et ses sauvegardes chiffrées une fois la durée de conservation atteinte ;
- supprimez les enregistrements DNS des sous-domaines d’administration et de phishing, et les entrées GoPhish de vos listes blanches.
Ce qui change au quotidien
Une fois la bascule faite, les tâches que vous scriptiez autour de GoPhish passent dans le produit :
- les campagnes se relancent seules selon le niveau de risque de chaque personne (tous les 7, 14 ou 30 jours), pendant les heures ouvrées (du lundi au vendredi, de 9 h à 17 h par défaut), avec des envois étalés ;
- le tableau de bord suit un score de posture, un score de risque par personne, la comparaison entre services et entre équipes de managers, les cliqueurs récidivistes, les personnes jamais testées et les formations en retard ;
- l’entonnoir ouverture, clic, saisie se lit par campagne, et le rapport d’audit PDF et l’export CSV servent de preuve pour vos audits NIS2, ISO 27001 (A.6.3) ou DORA ;
- les données sont hébergées en France, chez Nextmap.
Le fonctionnement complet est décrit sur la page simulation de phishing, et notre comparatif GoPhish détaille l’écart point par point, avec une estimation du coût réel de GoPhish.
Tester en parallèle avant de couper
Rien n’oblige à tout basculer d’un coup. L’essai de 14 jours donne accès au produit complet, sans carte bancaire et sans prélèvement automatique à la fin. Importez un service, lancez-lui une campagne nophi.sh pendant que GoPhish continue pour les autres, comparez, puis éteignez le serveur. Au-delà de l’essai, la formule Starter couvre jusqu’à 50 utilisateurs pour 99 € HT par mois, un prix fixe pour toute la formule, avec 20 % de remise en annuel ; les autres formules sont sur la page tarifs.
FAQ
nophi.sh peut-il importer une base ou un export GoPhish ?
Non. nophi.sh n’a pas de fonction d’import GoPhish. La migration passe par des fichiers : un CSV pour les personnes (ou la synchronisation Microsoft 365 / Entra ID), et le HTML de vos modèles collé dans l’éditeur, après conversion des variables. Les résultats des campagnes GoPhish restent dans vos archives.
Mes modèles GoPhish fonctionnent-ils tels quels dans nophi.sh ?
Le HTML se colle tel quel dans le champ Corps HTML, mais les variables changent : {{.FirstName}} devient {{first_name}}, {{.URL}} devient {{phishing_link}}, {{.Tracker}} devient {{tracking_pixel}}. Les conditions Go ({{if}}...{{end}}) et les variables {{.RId}}, {{.From}}, {{.TrackingURL}} ou {{.BaseURL}} n’ont pas d’équivalent et sont à retirer. Les pièces jointes ne sont pas reprises.
Que deviennent mes groupes GoPhish ?
nophi.sh ne gère pas de groupes : chaque personne appartient à un service. Si vos groupes GoPhish correspondaient à des services, prenez le nom du groupe comme colonne department lors de l’export. Une campagne peut ensuite viser toute l’organisation, un service, un niveau de risque ou une sélection de personnes.
Peut-on garder l’historique des campagnes GoPhish ?
Oui, en archive. Exportez chaque campagne avec le bouton « Export CSV » de la page de résultats (Results et Raw Events) ou par l’API, et conservez ces fichiers selon votre politique de conservation. nophi.sh mesure à partir de votre première campagne et n’importe pas d’historique.
Faut-il modifier la liste blanche de Microsoft 365 ?
Oui. Ajoutez le domaine et les adresses IP d’envoi de nophi.sh dans la politique Advanced Delivery (onglet « Phishing simulation »), comme décrit dans notre guide Microsoft 365, puis retirez les entrées de votre serveur GoPhish une fois la migration terminée.