Skip to content
Retour aux guides
Guide

Installer GoPhish sur un VPS : tutoriel complet

GoPhish open source, installation pas-à-pas sur Ubuntu/Debian VPS. Configuration SMTP, Nginx reverse proxy, certificat SSL, hardening.

Thomas Ferreira 29 min de lecture

GoPhish reste l’outil open source de référence pour les tests de phishing techniques. Sa promesse est claire : un binaire Go, une interface web, une API REST, et vous voilà capable de lancer une campagne contre votre propre infrastructure. Le projet, démarré par Jordan Wright en 2013 (github.com/gophish/gophish), totalise plus de 13 000 étoiles GitHub et reste sous licence MIT. La version stable est la 0.12.1.

Ce tutoriel couvre l’installation complète sur un VPS Ubuntu 22.04 LTS ou Debian 12, depuis le provisionnement jusqu’à la première campagne. Il s’adresse aux administrateurs système, aux pentesters et aux RSSI techniques qui veulent un déploiement reproductible. Si vous cherchez à comprendre où GoPhish atteint ses limites dans un contexte d’entreprise (formation, conformité, reporting), consultez d’abord notre analyse GoPhish en entreprise : pourquoi ça ne suffit pas. Pour un comparatif côte à côte avec d’autres solutions, voir notre page comparatif GoPhish.

Avertissement légal. GoPhish doit être utilisé uniquement contre une infrastructure que vous possédez ou pour laquelle vous disposez d’un mandat écrit. Toute campagne contre des destinataires non consentants relève de l’atteinte à un système de traitement automatisé (article 323-1 du Code pénal) et d’un traitement illicite au sens du RGPD. Voir notre page conformité RGPD pour le cadre légal applicable aux simulations en entreprise.

Prérequis matériels et logiciels

GoPhish est léger : un binaire Go statique, une base SQLite, pas de runtime PHP ou Java. Un VPS modeste suffit pour une PME.

Spécifications recommandées :

  • CPU : 1 à 2 vCPU pour des campagnes jusqu’à 5 000 destinataires
  • RAM : 2 Go suffisent, 4 Go pour des campagnes simultanées
  • Stockage : 20 Go SSD (la base de données monte rarement à plus de 1 Go même après plusieurs années)
  • OS : Ubuntu 22.04 LTS ou Debian 12 (les distributions les mieux testées pour le binaire officiel)
  • Réseau : adresse IPv4 publique, IPv6 optionnelle

Comparaison des hébergeurs courants en France et en Europe :

HébergeurLocalisationPrix indicatifRemarques
OVH (VPS Starter)Roubaix, Strasbourg, Gravelines4 à 8 €/moisRéputation IP correcte, opérateur français
Scaleway (DEV1-S)Paris, Amsterdam6 à 12 €/moisConsole moderne, bonne API
Hetzner (CX22)Falkenstein, Nuremberg, Helsinki4 à 6 €/moisExcellent rapport qualité/prix
Vultr (Regular)Paris, Francfort6 à 12 €/moisRéputation IP variable selon la plage
AWS EC2 t3.smallParis, Francfort15 à 25 €/moisIPs souvent pénalisées par les filtres anti-spam, à éviter pour l’envoi sortant

Pour la simulation de phishing, OVH, Scaleway et Hetzner offrent le meilleur compromis. Documentez la finalité « simulation de phishing en environnement consenti » dans votre compte d’hébergeur si une vérification est demandée.

Autres prérequis :

  • Un nom de domaine séparé de votre domaine principal (10 à 15 €/an chez OVH, Gandi, Namecheap). Ne réutilisez jamais votre domaine d’entreprise pour les simulations.
  • Accès SSH au VPS avec une clé publique préinstallée (la plupart des panels d’hébergeurs proposent cette option à la création).
  • Compétences de base en administration Linux : édition de fichiers, gestion de services systemd, configuration de pare-feu.

Le budget total se situe autour de 5 à 15 €/mois pour l’hébergement, plus 10 à 15 €/an pour le domaine. C’est la partie « gratuite » de GoPhish ; le coût réel se trouve dans le temps d’installation et de maintenance, détaillé dans notre analyse GoPhish en entreprise.

Étape 1 — Préparer le serveur

Connectez-vous en SSH au VPS fraîchement provisionné. Toutes les commandes ci-dessous supposent que vous êtes connecté en root ou que vous préfixez par sudo.

Mise à jour du système

apt update && apt upgrade -y
apt install -y wget unzip curl ufw fail2ban sqlite3 ca-certificates

Vérifiez la version du système :

lsb_release -a

Vous devez voir Ubuntu 22.04 ou Debian 12. Sur une distribution plus ancienne, mettez d’abord à jour la distribution (do-release-upgrade sous Ubuntu) avant de continuer.

Création d’un utilisateur sans privilèges

Ne faites jamais tourner GoPhish en root. Créez un utilisateur applicatif :

adduser --system --group --home /opt/gophish --shell /usr/sbin/nologin gophish

L’option --system empêche la connexion interactive. Pour les opérations d’administration courantes, créez un utilisateur administratif distinct :

adduser admin
usermod -aG sudo admin

Copiez votre clé SSH dans le nouveau compte :

mkdir -p /home/admin/.ssh
cp /root/.ssh/authorized_keys /home/admin/.ssh/
chown -R admin:admin /home/admin/.ssh
chmod 700 /home/admin/.ssh
chmod 600 /home/admin/.ssh/authorized_keys

Testez la connexion admin@votre-ip depuis votre poste avant de désactiver le login root.

Durcir SSH

Éditez /etc/ssh/sshd_config :

nano /etc/ssh/sshd_config

Ajustez ou ajoutez ces directives :

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
AllowUsers admin
Port 22

Rechargez SSH :

systemctl restart ssh

Vérifiez depuis un nouveau terminal que vous pouvez toujours vous connecter admin@votre-ip avant de fermer la session courante. Une erreur de configuration SSH avec une seule session ouverte peut vous verrouiller à l’extérieur du serveur.

Configurer UFW

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose

Le port 3333 n’est pas exposé directement : il sera accessible uniquement via Nginx en reverse proxy.

Configurer fail2ban

L’installation par défaut surveille SSH. Vérifiez :

systemctl status fail2ban
fail2ban-client status sshd

Pour ajuster les seuils, copiez /etc/fail2ban/jail.conf en /etc/fail2ban/jail.local et modifiez bantime, findtime, maxretry selon votre politique.

Étape 2 — Télécharger et installer GoPhish

La version stable 0.12.1 est publiée sur github.com/gophish/gophish/releases. Les binaires sont distribués au format ZIP par plateforme.

Télécharger et vérifier le binaire

cd /tmp
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip

Vérifiez le checksum SHA256 publié dans les release notes :

sha256sum gophish-v0.12.1-linux-64bit.zip

Comparez la sortie avec le hash officiel (page releases GoPhish). Un hash divergent signifie une archive corrompue ou compromise : recommencez le téléchargement.

Installer dans /opt/gophish

mkdir -p /opt/gophish
unzip gophish-v0.12.1-linux-64bit.zip -d /opt/gophish
chown -R gophish:gophish /opt/gophish
chmod +x /opt/gophish/gophish

L’arborescence après extraction :

/opt/gophish/
├── config.json
├── db/
├── gophish
├── LICENSE
├── README.md
├── static/
├── templates/
└── VERSION

Le fichier gophish est le binaire principal, config.json la configuration, db/ contient les migrations SQLite et static/ les ressources web.

Étape 3 — Configurer config.json

Le fichier /opt/gophish/config.json contient deux sections critiques : admin_server (l’interface d’administration) et phish_server (le serveur de tracking qui sert les emails et les landing pages aux destinataires).

Voici une configuration de référence adaptée à un déploiement derrière Nginx :

{
  "admin_server": {
    "listen_url": "127.0.0.1:3333",
    "use_tls": false,
    "cert_path": "",
    "key_path": "",
    "trusted_origins": ["admin.exemple.fr"]
  },
  "phish_server": {
    "listen_url": "0.0.0.0:80",
    "use_tls": false,
    "cert_path": "",
    "key_path": ""
  },
  "db_name": "sqlite3",
  "db_path": "gophish.db",
  "migrations_prefix": "db/db_",
  "contact_address": "contact-securite@votredomaine.fr",
  "logging": {
    "filename": "",
    "level": ""
  }
}

Commentaires sur chaque champ :

  • admin_server.listen_url : on bind sur 127.0.0.1:3333 (et non 0.0.0.0:3333) pour que l’interface admin ne soit accessible que via Nginx. Cela protège contre l’exposition accidentelle du port 3333.
  • admin_server.use_tls : false parce que c’est Nginx qui termine le TLS. Si vous voulez exposer GoPhish directement en HTTPS sans reverse proxy, passez à true et renseignez cert_path et key_path.
  • admin_server.trusted_origins : champ ajouté en version 0.12.1 selon les release notes officielles. Liste les FQDN attendus dans l’en-tête Origin des requêtes. Sans ce champ, GoPhish derrière un reverse proxy renvoie des erreurs CSRF lors de la soumission de formulaires.
  • phish_server.listen_url : 0.0.0.0:80 permet à GoPhish d’écouter sur toutes les interfaces pour servir les landing pages aux victimes. Vous pouvez aussi placer ce serveur derrière Nginx, voir l’étape 5.
  • contact_address : champ obligatoire depuis la v0.10. Adresse email affichée si un destinataire curieux interroge le serveur. Utilisez une vraie adresse interne, pas une adresse jetable.
  • db_name : sqlite3 par défaut. Pour des déploiements à plus de 50 000 destinataires ou des écritures concurrentes, MySQL est supporté ("db_name": "mysql" et "db_path": "user:pass@(host:3306)/dbname").

Sauvegardez et appliquez les permissions :

chown gophish:gophish /opt/gophish/config.json
chmod 600 /opt/gophish/config.json

Étape 4 — Premier lancement et accès admin

Créer le service systemd

Plutôt que de lancer GoPhish manuellement, créez une unité systemd pour le démarrage automatique. Éditez /etc/systemd/system/gophish.service :

[Unit]
Description=GoPhish Phishing Simulation Server
After=network.target

[Service]
Type=simple
User=gophish
Group=gophish
WorkingDirectory=/opt/gophish
ExecStart=/opt/gophish/gophish
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=gophish

# Hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
ReadWritePaths=/opt/gophish

[Install]
WantedBy=multi-user.target

Rechargez systemd et démarrez :

systemctl daemon-reload
systemctl enable --now gophish
systemctl status gophish

La sortie doit afficher active (running). Si ce n’est pas le cas, examinez les logs :

journalctl -u gophish -n 50 --no-pager

Récupérer le mot de passe admin initial

Depuis la version 0.10, GoPhish génère un mot de passe admin aléatoire au premier démarrage et le log sur stdout (journalisé par systemd). Récupérez-le :

journalctl -u gophish | grep "Please login with the username admin and the password"

La ligne ressemble à :

time="2026-05-11T10:23:45+02:00" level=info msg="Please login with the username admin and the password K7xN9pQ2mLvR4tYz"

Notez ce mot de passe. Vous le saisirez à la première connexion, et GoPhish vous demandera immédiatement de le changer.

Tester l’accès local

Tant que Nginx n’est pas configuré, l’interface n’est accessible que depuis le serveur. Testez via un tunnel SSH depuis votre poste :

ssh -L 3333:127.0.0.1:3333 admin@votre-ip

Ouvrez ensuite http://localhost:3333 dans votre navigateur. Vous tomberez sur la page de connexion GoPhish. Connectez-vous avec admin et le mot de passe récupéré, puis changez-le immédiatement.

Procédure de reset du mot de passe

Si vous perdez l’accès admin, arrêtez GoPhish et modifiez la base SQLite. La commande exacte est documentée par les mainteneurs (documentation officielle) :

systemctl stop gophish
cd /opt/gophish
sqlite3 gophish.db

Puis dans le shell SQLite :

UPDATE users SET hash='$2a$10$IYkPp0.QsM81lcyqdHi6PuiE0K7l6hCtuROOOZj8h.LM1xrkbk0Sa', password_change_required=1 WHERE username='admin';
.quit

Le hash ci-dessus correspond au mot de passe gophish. Redémarrez le service, connectez-vous avec admin:gophish, et changez le mot de passe.

Étape 5 — Configurer Nginx en reverse proxy

Placer GoPhish derrière Nginx apporte trois bénéfices : terminer le TLS proprement avec Let’s Encrypt, masquer le port 3333 et restreindre l’accès admin par IP, et séparer le domaine d’administration (admin.exemple.fr) du domaine de phishing (phish.exemple.fr).

Installer Nginx et Certbot

apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx

Vérifiez que Nginx répond :

curl -I http://localhost

Préparer les DNS

Chez votre registrar (OVH, Gandi, Namecheap), créez deux enregistrements A pointant vers l’IPv4 du VPS :

admin.exemple.fr.    A    203.0.113.42
phish.exemple.fr.    A    203.0.113.42

Attendez la propagation DNS (généralement 5 à 30 minutes, vérifiez avec dig +short admin.exemple.fr).

Configuration Nginx : admin

Créez /etc/nginx/sites-available/gophish-admin :

server {
    listen 80;
    server_name admin.exemple.fr;

    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name admin.exemple.fr;

    ssl_certificate /etc/letsencrypt/live/admin.exemple.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/admin.exemple.fr/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
    add_header X-Frame-Options DENY always;
    add_header X-Content-Type-Options nosniff always;
    add_header Referrer-Policy strict-origin-when-cross-origin always;

    # IP allowlist (voir étape 7)
    # allow 203.0.113.0/24;
    # deny all;

    client_max_body_size 25M;

    location / {
        proxy_pass http://127.0.0.1:3333;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Origin https://admin.exemple.fr;
        proxy_read_timeout 300s;
    }
}

Configuration Nginx : phish

Le serveur phish sert les emails de tracking et les landing pages. Vous pouvez le placer derrière Nginx ou le laisser exposé directement sur le port 80. Pour bénéficier du HTTPS sur les landing pages (recommandé en 2026), passez par Nginx :

Créez /etc/nginx/sites-available/gophish-phish :

server {
    listen 80;
    server_name phish.exemple.fr;

    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        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 443 ssl http2;
    server_name phish.exemple.fr;

    ssl_certificate /etc/letsencrypt/live/phish.exemple.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/phish.exemple.fr/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Notez que pour cette configuration, vous devez modifier config.json pour binder phish_server sur 127.0.0.1:8080 au lieu de 0.0.0.0:80 :

"phish_server": {
  "listen_url": "127.0.0.1:8080",
  "use_tls": false
}

Activez les sites :

ln -s /etc/nginx/sites-available/gophish-admin /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/gophish-phish /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

Obtenir les certificats Let’s Encrypt

certbot --nginx -d admin.exemple.fr -d phish.exemple.fr --email contact-securite@votredomaine.fr --agree-tos --no-eff-email

Certbot modifie automatiquement la configuration Nginx pour pointer vers les certificats créés. Vérifiez le renouvellement automatique :

certbot renew --dry-run

Une tâche cron est installée par défaut dans /etc/cron.d/certbot pour renouveler tous les 90 jours.

Vérifier trusted_origins

Une fois Nginx en place, redémarrez GoPhish pour appliquer le trusted_origins :

systemctl restart gophish

Connectez-vous sur https://admin.exemple.fr et soumettez un formulaire (par exemple, créer un nouveau Sending Profile). Si vous obtenez une erreur CSRF token invalid ou Origin mismatch, vérifiez que :

  1. trusted_origins dans config.json contient exactement admin.exemple.fr (sans https:// ni slash final)
  2. Nginx forwarde correctement l’en-tête Origin (la directive proxy_set_header Origin dans la configuration ci-dessus)

Cette correction est précisément ce que la v0.12.1 a introduit, selon les release notes.

Étape 6 — Configurer le profil SMTP d’envoi

GoPhish ne sait pas envoyer d’email tout seul : il s’appuie sur un serveur SMTP externe. Le choix de ce serveur conditionne directement la délivrabilité. Pour comprendre les bases, consultez notre guide délivrabilité email.

Pourquoi pas Gmail ou Microsoft 365

Tentation classique : utiliser un compte Gmail ou Microsoft 365 comme relais SMTP. C’est une mauvaise idée pour trois raisons :

  1. Violation des conditions d’utilisation. Les CGU de Google Workspace et de Microsoft 365 interdisent explicitement l’usage de leurs SMTP pour de l’envoi en masse non lié à l’activité de l’utilisateur. Une campagne de simulation tombe sous cette interdiction.
  2. Rate limiting immédiat. Gmail bloque à environ 100 emails/jour pour un compte standard, Microsoft 365 à 10 000/jour mais avec un throttling fort à partir de 30 emails/minute. Une campagne de 500 destinataires sur un compte SMTP unique sera rapidement coupée.
  3. Dégradation de la réputation du compte personnel. Les filtres anti-spam marquent les comptes qui envoient des emails à motif de phishing, même internes. Votre compte peut être suspendu, et la réputation de votre domaine principal entachée.

Utilisez systématiquement un relais SMTP transactionnel séparé.

Comparaison des relais SMTP courants

RelaisLocalisation donnéesTarif débutantPoints forts
Amazon SESRégions au choix (eu-west-3 Paris dispo)0,10 $/1000 emailsFaible coût, très bonne délivrabilité, IPs réservées en option
Brevo (ex-Sendinblue)France (Paris)19 €/mois pour 20 000 emailsHébergement français, conformité RGPD simplifiée
MailgunÉtats-Unis ou UE35 $/mois pour 50 000 emailsAPI et logs détaillés
SendGrid (Twilio)États-Unis principalement19,95 $/mois pour 40 000 emailsDocumentation complète
Postfix self-hostedVotre VPS0 € + tempsContrôle total mais réputation IP à construire de zéro

Pour une PME française, Brevo et Amazon SES (région Paris) sont les choix les plus pragmatiques. Postfix self-hosted demande 5 à 10 jours-homme de configuration avancée pour atteindre une délivrabilité comparable, et la réputation IP d’un VPS fraîchement provisionné est mauvaise par défaut.

Configurer le Sending Profile dans GoPhish

Connectez-vous à https://admin.exemple.fr, allez dans Sending Profiles > New Profile. Exemple avec Brevo :

  • Name : Brevo - phish.exemple.fr
  • Interface Type : SMTP
  • From : Service Sécurité <alertes@phish.exemple.fr>
  • Host : smtp-relay.brevo.com:587
  • Username : votre identifiant SMTP Brevo (généré dans le compte Brevo)
  • Password : la clé SMTP générée
  • Ignore Certificate Errors : false

Cliquez sur Send Test Email et indiquez votre adresse personnelle. Vous devez recevoir l’email en quelques secondes. Si l’email atterrit en spam, vérifiez :

  • SPF de phish.exemple.fr autorise bien Brevo : v=spf1 include:spf.brevo.com -all
  • DKIM Brevo est activé et les clés CNAME pointent correctement
  • DMARC est en p=none au démarrage : v=DMARC1; p=none; rua=mailto:dmarc@votredomaine.fr

Pour la configuration DNS complète, voir notre guide SPF/DKIM/DMARC.

Headers personnalisés

Dans le Sending Profile, la section Email Headers permet d’ajouter des en-têtes personnalisés. Un en-tête utile en simulation interne :

X-Phishing-Simulation: true

Cet en-tête est invisible pour le destinataire mais permet à votre filtre Microsoft 365 ou Google Workspace de reconnaître les emails de simulation et de ne pas les bloquer. Combiné avec une allow-list dans Advanced Delivery Policy, il garantit la délivrabilité dans votre tenant.

Étape 7 — Hardening de l’interface admin

L’interface admin contient l’historique de toutes vos campagnes, les listes de destinataires, et potentiellement les identifiants capturés. C’est une cible de valeur si votre serveur est exposé.

Restreindre /admin par IP

Dans /etc/nginx/sites-available/gophish-admin, décommentez les directives allow/deny pour limiter l’accès à vos IPs professionnelles :

location / {
    allow 203.0.113.0/24;  # Réseau du bureau
    allow 198.51.100.42;   # IP VPN du RSSI
    deny all;

    proxy_pass http://127.0.0.1:3333;
    # ...
}

Rechargez Nginx :

nginx -t && systemctl reload nginx

Toute connexion depuis une IP hors liste recevra un 403 Forbidden. Pour les administrateurs en déplacement, utilisez un VPN de l’entreprise comme point d’entrée unique.

Désactiver la création de comptes utilisateurs

Par défaut, GoPhish permet à un admin de créer d’autres utilisateurs via l’interface (User Management). Pour une installation de pentest mono-utilisateur, supprimez tous les comptes secondaires et conservez uniquement votre compte admin. Évitez de partager des identifiants entre membres d’équipe : créez un compte par personne, avec un mot de passe fort propre.

Politique de mots de passe

GoPhish n’impose pas de politique de complexité par défaut. À votre charge :

  • Minimum 16 caractères, mélange majuscules/minuscules/chiffres/symboles
  • Pas de réutilisation d’un mot de passe utilisé ailleurs
  • Stockage dans un gestionnaire de mots de passe (Bitwarden, 1Password, KeePass)
  • Rotation tous les 6 mois minimum

Pour la cohérence d’entreprise, suivez la politique générale décrite dans notre guide MFA et gestion d’accès.

Logs et rotation Nginx

Les logs Nginx sont précieux pour l’investigation post-incident. Vérifiez la rotation dans /etc/logrotate.d/nginx :

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Conservez 14 jours minimum. Pour un programme continu, exportez les logs vers un SIEM (Wazuh, Graylog) ou au minimum vers un bucket S3 chiffré.

Sauvegarde quotidienne de gophish.db

La base SQLite /opt/gophish/gophish.db contient l’intégralité de l’historique. Une panne disque ou un ransomware sur le VPS efface tout. Mettez en place une sauvegarde chiffrée.

Créez /usr/local/bin/gophish-backup.sh :

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/gophish"
DATE=$(date +%Y%m%d-%H%M%S)
DB_PATH="/opt/gophish/gophish.db"
RETENTION_DAYS=30

mkdir -p "$BACKUP_DIR"

# Snapshot cohérent avec sqlite3 .backup
sqlite3 "$DB_PATH" ".backup '$BACKUP_DIR/gophish-$DATE.db'"

# Chiffrement GPG (clé publique préimportée)
gpg --encrypt --recipient backup@votredomaine.fr \
    --output "$BACKUP_DIR/gophish-$DATE.db.gpg" \
    "$BACKUP_DIR/gophish-$DATE.db"

# Suppression du fichier en clair
rm "$BACKUP_DIR/gophish-$DATE.db"

# Rotation
find "$BACKUP_DIR" -name "gophish-*.db.gpg" -mtime +$RETENTION_DAYS -delete

# Upload vers stockage offsite (exemple OVH Object Storage via s3cmd)
s3cmd put "$BACKUP_DIR/gophish-$DATE.db.gpg" s3://votre-bucket/gophish/

Rendez exécutable et planifiez :

chmod +x /usr/local/bin/gophish-backup.sh
crontab -e

Ajoutez :

30 2 * * * /usr/local/bin/gophish-backup.sh >> /var/log/gophish-backup.log 2>&1

La sauvegarde s’exécute chaque nuit à 2h30, avec rétention de 30 jours en local et envoi chiffré vers un bucket distant.

Étape 8 — Premiers tests

Tout est en place. Lancez une première campagne contre une adresse personnelle pour valider la chaîne complète.

Créer un Sending Profile

Déjà fait à l’étape 6. Vérifiez qu’il fonctionne via Send Test Email.

Créer un Email Template

Email Templates > New Template. Exemple minimal pour test :

  • Name : Test - Notification interne
  • Subject : Action requise sur votre compte
  • Envelope Sender : service-it@phish.exemple.fr
  • Text : version texte de l’email
  • HTML : version HTML
  • Add Tracking Image : coché (image transparente 1x1 pour mesurer l’ouverture)

Dans le HTML, utilisez les variables GoPhish pour personnaliser :

<p>Bonjour {{.FirstName}},</p>
<p>Votre compte présente une activité inhabituelle. <a href="{{.URL}}">Cliquez ici pour vérifier</a>.</p>
<p>Service informatique</p>
{{.Tracker}}

{{.URL}} est remplacé par l’URL de la landing page, {{.Tracker}} insère le pixel de tracking, {{.FirstName}} le prénom du destinataire.

Créer une Landing Page

Landing Pages > New Page. Pour un test simple, une page « C’était un test » suffit :

<!DOCTYPE html>
<html>
<head><title>Test de sécurité interne</title></head>
<body>
  <h1>Ceci était une simulation</h1>
  <p>Vous avez cliqué sur un lien dans un email de simulation de phishing
     envoyé par votre service informatique. Aucune action supplémentaire
     n'est requise.</p>
  <p>Pour en savoir plus sur la reconnaissance des emails frauduleux,
     consultez les ressources de formation interne.</p>
</body>
</html>

L’option Capture Submitted Data permet de récupérer les données saisies dans un formulaire. Pour une simulation à finalité pédagogique, désactivez cette option : capturer les mots de passe en clair des collaborateurs pose des questions RGPD et éthiques sérieuses.

Créer Users & Groups

Users & Groups > New Group. Importez via CSV ou ajoutez manuellement :

First Name,Last Name,Email,Position
Marie,Dupont,marie.dupont@votredomaine.fr,RH
Jean,Martin,jean.martin@votredomaine.fr,Comptabilité

Pour un premier test, créez un groupe à un seul utilisateur : vous-même.

Lancer la campagne de test

Campaigns > New Campaign :

  • Name : Test 001 - validation déploiement
  • Email Template : Test - Notification interne
  • Landing Page : Test - Page de confirmation
  • URL : https://phish.exemple.fr (l’URL publique de votre serveur phish)
  • Launch Date : maintenant
  • Send Emails By : laissez vide pour envoyer tout en une fois (ou planifiez sur plusieurs heures pour une campagne réelle)
  • Sending Profile : Brevo - phish.exemple.fr
  • Groups : sélectionnez votre groupe de test

Cliquez sur Launch Campaign. Vous devriez recevoir l’email en quelques secondes. Vérifiez :

  1. Email reçu en boîte de réception (pas en spam)
  2. Lien dans l’email pointe vers https://phish.exemple.fr/...?rid=...
  3. Clic sur le lien : redirection vers la landing page sur HTTPS
  4. Retour dans GoPhish : la campagne montre 1 email envoyé, 1 ouvert (si vous avez chargé les images), 1 cliqué

Vérifier la délivrabilité

Pour les vraies campagnes, testez la délivrabilité avant de lancer en production. Outils gratuits :

  • mail-tester.com : envoyez un email de test à l’adresse fournie, obtenez un score sur 10 avec diagnostic SPF/DKIM/DMARC, contenu, et réputation IP.
  • GlockApps : test de placement en boîte de réception sur Gmail, Outlook, Yahoo (essai gratuit limité).
  • DMARC Analyzer : suivi des rapports DMARC entrants.

Notre guide délivrabilité email détaille les étapes pour atteindre un score 9/10 minimum avant la première campagne réelle.

Sécurité : ce que cette installation NE règle PAS

Vous avez un serveur GoPhish fonctionnel, durci, derrière un reverse proxy avec TLS, avec un SMTP de qualité. Cela couvre la chaîne technique d’envoi et de tracking. Cela ne couvre pas les enjeux suivants.

Sandbox detection des passerelles email

Microsoft Defender for Office 365, Proofpoint, Mimecast et Barracuda font tourner les emails entrants dans des sandboxes : ils ouvrent les liens, exécutent les pièces jointes en environnement isolé, analysent les redirections. Un emails GoPhish bien construit passe ces vérifications, mais les patterns d’usurpation grossiers (faux logo basse résolution, formulaire de login pointant vers une IP au lieu d’un domaine, pièce jointe ZIP avec exécutable) sont systématiquement bloqués. Tester votre template contre votre propre passerelle email avant de lancer la campagne est obligatoire.

Microsoft 365 / Google Workspace allow-listing

Sans allow-listing explicite, vos emails de simulation finissent en spam ou en quarantaine dans la majorité des tenants Microsoft 365 et Google Workspace. C’est précisément l’objectif des filtres : bloquer les emails qui ressemblent à du phishing. Pour Microsoft 365, la procédure passe par Advanced Delivery Policy dans le portail Defender. Pour Google Workspace, par Apps > Google Workspace > Gmail > Spam, Phishing and Malware. Notre prochain article GoPhish et délivrabilité Microsoft 365 détaille la méthodologie complète.

Reputation building du domaine

Un nouveau domaine sans historique d’envoi sera systématiquement pénalisé par les filtres anti-spam pendant les premières semaines. La construction de réputation passe par un envoi progressif : 10 emails/jour la première semaine, 50/jour la deuxième, 200/jour la troisième, et ainsi de suite. Le guide complémentaire GoPhish délivrabilité SPF DKIM DMARC couvrira ce sujet en détail (article à venir).

Conformité RGPD du traitement

Héberger GoPhish vous-même fait de vous le responsable de traitement au sens de l’article 4 du RGPD pour toutes les données collectées. Cela implique : registre des traitements, base légale documentée (intérêt légitime de l’employeur pour la sécurité du SI selon l’article 6.1.f), information préalable des salariés via la charte informatique ou une note d’information, analyse d’impact si vous capturez des identifiants, sécurisation technique des données. Voir notre page conformité RGPD pour le cadre détaillé.

Absence de formation post-clic

Le constat le plus important. GoPhish redirige les utilisateurs qui cliquent vers une landing page statique. Pas de micro-learning contextuel, pas de module interactif, pas de suivi de complétion. Or, la simulation sans formation associée ne fait pas baisser les taux de clic dans la durée. C’est exactement ce que documente notre analyse GoPhish en entreprise : pourquoi ça ne suffit pas.

Quand passer à une plateforme managée

GoPhish reste un excellent choix pour un test ponctuel par un consultant en sécurité offensive, pour un audit technique avec rapport ad hoc, pour un chercheur qui étudie les mécanismes du phishing, ou pour une organisation à budget zéro avec du temps IT disponible. Dans ces contextes, le coût d’installation et de maintenance se justifie par la nature ponctuelle de l’usage.

Pour un programme continu de sensibilisation avec des campagnes mensuelles, du suivi de progression, de la formation post-clic et des rapports de conformité (NIS2, ISO 27001), le calcul change. Les 8 à 12 jours-homme par an consommés par l’administration de GoPhish, l’absence de formation intégrée, l’absence de reporting automatisé : ces points sont précisément ceux qu’une plateforme managée prend en charge.

nophi.sh propose un hébergement français, plus de 90 scénarios de phishing en français prêts à l’emploi, de la formation micro-learning post-échec automatique, et des rapports de conformité générés en un clic. Les détails sont sur les pages fonctionnalités et tarifs. Pour une équipe technique qui veut continuer à utiliser GoPhish pour des tests ponctuels tout en bénéficiant d’une plateforme pour le programme continu, les deux approches sont complémentaires.

Une dernière option utile : si vous voulez tester un déploiement reproductible et versionné (par exemple pour reproduire l’installation à chaque audit), la version Docker Compose de GoPhish est plus pratique que l’installation binaire détaillée ici. Notre guide GoPhish Docker Compose couvrira ce scénario (article à venir).

FAQ

GoPhish est-il légal à utiliser ?

GoPhish est un logiciel open source sous licence MIT, son usage est légal. Ce qui peut être illégal, c’est ce que vous en faites. Envoyer des emails de phishing à des personnes sans leur consentement préalable (ou celui de leur employeur dans un cadre professionnel) constitue une atteinte à un système de traitement automatisé de données au sens de l’article 323-1 du Code pénal et un traitement illicite au sens du RGPD. Pour une simulation interne en entreprise, vous devez disposer d’un mandat écrit de la direction et informer les salariés en amont de l’existence du programme, sans révéler les dates ni les scénarios. Voir notre page conformité RGPD pour le cadre détaillé.

Quelle version de GoPhish utiliser en production ?

La version stable actuelle est la 0.12.1, publiée par Jordan Wright sur github.com/gophish/gophish/releases. Elle apporte le champ trusted_origins requis derrière un reverse proxy et corrige plusieurs problèmes CSRF. Ne compilez pas depuis la branche master en production : elle peut contenir des changements non testés. Utilisez les binaires officiels signés, vérifiez le checksum SHA256 publié dans les release notes.

Faut-il un domaine séparé pour GoPhish ?

Oui, impérativement. Les emails de simulation, même bien conçus, ressemblent à du phishing parce qu’ils en sont. Les envoyer depuis votre domaine principal entraîne un risque de blacklisting de votre réputation auprès des opérateurs de filtres (Spamhaus, Proofpoint, Microsoft). Utilisez un domaine distinct, idéalement enregistré 30 à 60 jours à l’avance pour laisser le temps de chauffer sa réputation, et configurez SPF, DKIM et DMARC de manière séparée. Voir notre guide délivrabilité email pour la méthodologie de warm-up.

Comment éviter que GoPhish soit blacklisté ?

La délivrabilité dépend de trois facteurs : la réputation du domaine d’envoi (warming progressif sur 2 à 4 semaines), la configuration DNS (SPF strict, DKIM 2048 bits, DMARC à p=none au démarrage), et la qualité du contenu (éviter les patterns triviaux d’anti-spam comme les liens raccourcis, les images sans alt, ou les expéditeurs incohérents). En complément, allow-listez votre domaine et l’IP d’envoi dans les filtres de votre Microsoft 365 ou Google Workspace via l’Advanced Delivery Policy. Le guide GoPhish délivrabilité SPF DKIM DMARC détaille la procédure.

Puis-je héberger GoPhish chez OVH ou Scaleway ?

Oui, les deux hébergeurs français autorisent l’usage d’outils de simulation de phishing dans un cadre légal et consenti. Les conditions générales d’OVH et de Scaleway interdisent l’envoi d’emails non sollicités (spam) et le phishing malveillant, pas les simulations internes. Documentez la finalité dans votre compte d’hébergeur et utilisez un domaine séparé. Hetzner et Vultr sont aussi des choix courants. Évitez DigitalOcean et AWS EC2 pour l’envoi sortant : ces plages d’IP sont souvent pénalisées par les filtres anti-spam à cause des abus historiques.

Quels logs et données GoPhish stocke-t-il ?

GoPhish stocke dans gophish.db (SQLite par défaut) : la liste des destinataires (email, nom, position, département), les résultats par utilisateur (envoyé, ouvert, cliqué, soumis), les données soumises dans les formulaires de landing pages (y compris les mots de passe en clair si vous les capturez), et les logs d’envoi SMTP. Ces données sont sensibles : chiffrez les sauvegardes, n’activez le capture de credentials que si nécessaire pour le scénario, et purgez les anciennes campagnes selon votre politique de rétention RGPD.

Que faire si l’interface admin n’est plus accessible ?

Vérifiez d’abord le statut du service avec systemctl status gophish et les logs avec journalctl -u gophish -n 100. Causes fréquentes : port 3333 déjà occupé, fichier config.json mal formaté (JSON invalide), permissions incorrectes sur gophish.db ou le binaire, certificat SSL expiré côté Nginx. Si vous avez oublié le mot de passe admin, utilisez la procédure de reset détaillée à l’étape 4 : arrêtez GoPhish, modifiez la table users dans SQLite avec sqlite3 gophish.db, redémarrez.


L’installation de GoPhish sur un VPS n’est pas particulièrement difficile pour un administrateur Linux compétent. La partie technique se boucle en 3 à 5 heures pour un premier déploiement, moins pour un déploiement reproductible ultérieur. Ce qui prend du temps, ensuite, c’est la construction du programme autour : les scénarios, la formation, la délivrabilité, le reporting de conformité, le suivi de progression. C’est sur ces points qu’une plateforme managée fait la différence pour un programme continu — pas sur l’installation elle-même.

Pour la suite, deux directions selon votre contexte. Si vous restez sur GoPhish, les guides SPF/DKIM/DMARC, délivrabilité email, et reconnaître un email frauduleux vous donneront le socle technique pour des campagnes réalistes. Si vous évaluez le passage à une plateforme managée, notre comparatif GoPhish et notre page tarifs vous donnent les éléments de décision.

Avant toute campagne réelle, relisez les bases de l’ingénierie sociale côté défensif : votre rôle n’est pas seulement de tester, c’est aussi de protéger vos collaborateurs en cas d’incident réel.