Gophish Setup

#1 Instalación

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

Hay que cambiar el panel de administración para que escuche por el puerto 3333

# #2 Crear plantillas

Tendremos que añadir {{.FirstName}} {{.LastName}} {{.Tracker}} {{.Url}} al html de las plantillas

#3 Certificado SSL del dominio

Para tener el candadito verde en el dominio

sudo apt update

sudo apt upgrade

sudo apt install snapd

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --manual --preferred-challenges=dns -d *.<DOMINIO>.com

Creamos el TXT en el panel del dominio como nos piden

Verificamos si está ya accediendo a

https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.DOMAIN

#4 Clonar panel de login con plugin

SingleFile - Microsoft Edge Addons

Plugin para clonar web

Ahora habría que crear una landing Page desde gophish copiando y pegando el código que hemos extraído con la extensión

#5 Servidor de correo

Para hacerlo de forma manual podemos hacerlo con poste.io, ahora bien , si queremos evitar dolores de cabeza, lo mejor que podemos hacer es comprarnos 5 correos, que no suele salir por mas de dos euros en nuestro proveedor de dominio.

snap install docker

Matamos todo lo que está en 25, 80, 8443, 110, 143, 587 antes

 docker run \
    --net=host \
    -e TZ=Europe/Prague -e HTTPS_PORT=8443 \
    -v /your-data-dir/data:/data \
    --name "mailserver" \
    -h "mail.example.com" \
    -d \
    -t analogic/poste.io

Ponemos un registro tipo A que apunte a la IP pública de nuestra VPS

y uno MX

Probar a enviar un email a https://www.mail-tester.com/

COMPRAR CORREOS 💵

Añadir un registro de tipo A y otro MX en el dominio

Configurarlo adecuadamente en el Sending Profile

#6 PROXY INVERSO NGINX PARA EVITAR CRAWLERS Y BOTS

Lo mejor que podemos hacer para que no nos tiren el dominio a las horas es hacer una whitelist para permitir que solo ciertas IPs pueden acceder a la landing page

Lo primero será cambiar el config.json del gophish para que la landing se vea desde el 8080, ya que pondremos un nginx por delante

{
        "admin_server": {
                "listen_url": "0.0.0.0:3333",
                "use_tls": true,
                "cert_path": "gophish_admin.crt",
                "key_path": "gophish_admin.key",
                "trusted_origins": []
        },
        "phish_server": {
                "listen_url": "127.0.0.1:8080",
                "use_tls": false,
                "cert_path": "...",
                "key_path": "..."
        },
        "db_name": "sqlite3",
        "db_path": "gophish.db",
        "migrations_prefix": "db/db_",
        "contact_address": "",
        "logging": {
                "filename": "",
                "level": ""
        }
}

Comandos & Setup

sudo apt-get update

sudo apt-get install nginx -y

sudo systemctl status nginx

Tras cada cambio

sudo nginx -t
sudo systemctl restart nginx

Modo Blacklist

El siguiente es un script para crear /etc/nginx/blacklist.conf que bloqueará IPs de google, microsoft ... y spiders y bots

#!/bin/bash

# Archivo de salida
OUTPUT_FILE="/etc/nginx/blacklist.conf"

# --- PARTE 1: BLOQUEO POR IPs (ASNs) ---
# AS15169 = Google
# AS8075  = Microsoft
# AS16509 = Amazon AWS
# AS14618 = Forcepoint
# AS62044 = Zscaler
# AS11835 = Palo Alto
# AS25961 = Symantec
# AS12486 = Mimecast
# AS40528 = Proofpoint
# AS14061 = DigitalOcean
# AS13335 = Cloudflare (Opcional, a veces envían crawlers)

ASNS=("AS15169" "AS8075" "AS16509" "AS14618" "AS62044" "AS11835" "AS25961" "AS12486" "AS40528" "AS14061")

echo "[*] --- FASE 1: Generando lista de IPs (Red) ---"
echo "# Blacklist generada el $(date)" > $OUTPUT_FILE

for asn in "${ASNS[@]}"; do
    echo -n "[...] Descargando IPs de $asn ... "
    whois -h whois.radb.net -- "-i origin $asn" | \
    grep "^route:" | \
    awk '{print "deny " $2 ";"}' >> $OUTPUT_FILE
    echo "OK"
done

# --- PARTE 2: BLOQUEO POR USER-AGENT ---
echo "[*] --- FASE 2: Añadiendo bloqueo de User-Agents ---"

# Añadimos un bloque 'if' al final del mismo archivo.
# Nginx leerá las IPs primero, y si pasa, leerá esto.

cat <<EOF >> $OUTPUT_FILE

# -------------------------------------------
# BLOQUEO POR USER-AGENT (Nombres de Robots)
# -------------------------------------------

if (\$http_user_agent ~* (google|bing|yahoo|duckduckgo|baidu|yandex|majestic|ahrefs|semrush|spider|crawl|slurp|bot)) {
    return 403;
}

# -------------------------------------------
# FIN DE BLACKLIST
# -------------------------------------------
EOF

echo "[*] Total de líneas generadas:"
wc -l $OUTPUT_FILE

echo "[*] Verificando sintaxis de Nginx..."
nginx -t

if [ $? -eq 0 ]; then
    echo "[*] Sintaxis correcta. Recargando Nginx..."
    systemctl reload nginx
    echo "[SUCCESS] Tu servidor está blindado por IP y por Nombre."
else
    echo "[ERROR] Algo salió mal con la sintaxis. Revisa el archivo generados."
fi

En modo blaclist /etc/nginx/sites-available/default tiene que estar así:

# BLOQUE 1: Puerto 80 (HTTP)
# Su única misión es redirigir todo el tráfico a HTTPS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Cambia esto por tu dominio real si quieres, o déjalo con _
    server_name group-sener.com;

    # Redirección obligatoria a HTTPS
    return 301 https://$host$request_uri;
}

# BLOQUE 2: Puerto 443 (HTTPS)
# Aquí es donde ocurre la magia, el SSL y la conexión a Gophish
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name group-sener.com;

    # --- CERTIFICADOS SSL ---
    # Uso comillas por si acaso hay espacios en las rutas
    ssl_certificate     "/home/gophish-adminuser/gophish/certificate/fullchain1.pem";
    ssl_certificate_key "/home/gophish-adminuser/gophish/certificate/privkey1.pem";

    # Protocolos seguros (Opcional pero recomendado para que no te penalicen por inseguro)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # --- EL ESCUDO (Tu Blacklist) ---
    # Esto debe ir AQUÍ, en el bloque HTTPS
    include /etc/nginx/blacklist.conf;

    # --- LOGS (Para que veas quién entra) ---
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # --- CONEXIÓN A GOPHISH ---
    location / {
        # Conecta al Gophish que tienes escuchando en el 8080 (según tu config.json)
        proxy_pass http://127.0.0.1:8080;

        #Whitelist
        #allow 79.116.91.226;
        #deny all;
        #error_page 403 = @redireccion_segura;

        # Cabeceras obligatorias para evitar bucles y pasar la IP real
        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 https; # Vital para que Gophish sepa que es seguro
    }

    #location @redireccion_segura {
    #    return 301 https://www.google.com;
        # O redirige al sitio REAL de la empresa víctima para confundir más
    #}
}

Modo WhiteList

Aquí en allow pondríamos el listado de ips que queremos admitir.

/etc/nginx/sites-available/default

# BLOQUE 1: Puerto 80 (HTTP)
# Su única misión es redirigir todo el tráfico a HTTPS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Cambia esto por tu dominio real si quieres, o déjalo con _
    server_name group-sener.com;

    # Redirección obligatoria a HTTPS
    return 301 https://$host$request_uri;
}

# BLOQUE 2: Puerto 443 (HTTPS)
# Aquí es donde ocurre la magia, el SSL y la conexión a Gophish
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name group-sener.com;

    # --- CERTIFICADOS SSL ---
    # Uso comillas por si acaso hay espacios en las rutas
    ssl_certificate     "/home/gophish-adminuser/gophish/certificate/fullchain1.pem";
    ssl_certificate_key "/home/gophish-adminuser/gophish/certificate/privkey1.pem";

    # Protocolos seguros (Opcional pero recomendado para que no te penalicen por inseguro)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # --- EL ESCUDO (Tu Blacklist) ---
    # Esto debe ir AQUÍ, en el bloque HTTPS
    #include /etc/nginx/blacklist.conf;

    # --- LOGS (Para que veas quién entra) ---
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # --- CONEXIÓN A GOPHISH ---
    location / {
        # Conecta al Gophish que tienes escuchando en el 8080 (según tu config.json)
        proxy_pass http://127.0.0.1:8080;

        #Whitelist
        allow 79.116.91.226;
        deny all;
        error_page 403 = @redireccion_segura;

        # Cabeceras obligatorias para evitar bucles y pasar la IP real
        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 https; # Vital para que Gophish sepa que es seguro
    }

    location @redireccion_segura {
        return 301 https://www.google.com;
        # O redirige al sitio REAL de la empresa víctima para confundir más
    }
}

#7 Quitar Cabecera de Gophish

Cuando configuremos cada sending profile tenemos que evitar que se envíe la cabecera X-Mailer: Gophish, la podemos sobreescribir

X-Mailer: Microsoft office outlook, build 17.551210

#8 Cambiar el parámetro RID

Aunque optativo es recomendable para evadir filtros antispam, para hacerlo habría que editar el código fuente y recompilar