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
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.
POSTE.IO 📮
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