En resumen
Cuando una cuenta de correo de tu servidor envía spam, la cola de Exim crece de golpe y la IP termina en listas negras en pocas horas. Se detiene en cuatro pasos: identificar la cuenta o el script en /var/log/exim_mainlog, cambiar la contraseña y suspender el envío, borrar de la cola los mensajes de spam y cerrar la causa, que casi siempre es una contraseña robada por phishing o adivinada por fuerza bruta.
Señales de que una cuenta está comprometida
- La cola de correo pasa de decenas a miles de mensajes (
exim -bpc). - Llegan cientos de rebotes ("Mail delivery failed") a una cuenta que normalmente no envía tanto.
- Gmail u Outlook empiezan a rechazar o enviar a spam el correo de todo el servidor.
- La IP del servidor aparece en Spamhaus, SpamCop o Barracuda.
- Un cliente avisa que sus contactos recibieron correos raros "de su parte".
- El servidor bloquea un dominio por superar el límite de correos por hora.
Paso 1: identificar quién está enviando
El spam saliente tiene dos orígenes posibles, y el log de Exim muestra cuál es:
| Origen | Cómo aparece en exim_mainlog | Causa típica |
|---|---|---|
| Cuenta de correo | A=dovecot_login:usuario@dominio.cl | Contraseña robada por phishing, adivinada o filtrada |
| Script del sitio web | cwd=/home/usuario/public_html/... sin autenticación | Formulario sin protección, plugin vulnerable o malware en el sitio |
Estos comandos muestran los mayores emisores del día. Ejecútalos como root:
# Tamaño de la cola
exim -bpc
# Resumen de la cola por dominio de destino
exim -bp | exiqsumm | sort -rn | head -20
# Cuentas autenticadas que más correo enviaron
grep "A=dovecot_login" /var/log/exim_mainlog | grep -o "A=dovecot_login:[^ ]*" | sort | uniq -c | sort -rn | head
# Directorios desde donde scripts enviaron correo
grep "cwd=/home" /var/log/exim_mainlog | grep -o "cwd=[^ ]*" | sort | uniq -c | sort -rn | headPara confirmar, abre uno de los mensajes en cola: exim -Mvh ID muestra los encabezados y exim -Mvb ID el cuerpo. Si Track email origin via X-Source está activo en Tweak Settings, los encabezados X-Source y X-Source-Dir indican el script exacto.
Sin consola, WHM › Email › View Relayers y View Sent Summary muestran lo mismo de forma gráfica.
Paso 2: detener el envío
Actúa en este orden. El objetivo es cortar el envío primero y limpiar después:
- Cambia la contraseña de la cuenta en cPanel › Correo › Cuentas de correo › Administrar. Esto también cierra las sesiones de webmail abiertas por el atacante.
- Suspende el envío de esa cuenta desde la misma pantalla (opción de suspender el envío) o por consola con UAPI.
- Si el origen es un script, suspende el envío de toda la cuenta cPanel con WHM API mientras limpias el sitio.
- Revisa reenviadores y filtros en cPanel › Correo › Reenviadores y Filtros de correo. Los atacantes suelen crear reglas que reenvían todo el correo a una dirección externa o que borran las respuestas para que el dueño no se entere.
# Suspender el envío de una cuenta de correo
uapi --user=CPUSUARIO Email suspend_outgoing email=usuario@dominio.cl
# Suspender el envío de toda una cuenta cPanel
whmapi1 suspend_outgoing_email user=CPUSUARIO
# Reactivar cuando esté resuelto
uapi --user=CPUSUARIO Email unsuspend_outgoing email=usuario@dominio.cl
whmapi1 unsuspend_outgoing_email user=CPUSUARIOPaso 3: limpiar la cola
Los mensajes de spam que siguen en cola se van a seguir intentando entregar y dañando la reputación. Bórralos filtrando por remitente:
# Ver cuántos mensajes hay de ese remitente
exiqgrep -c -f usuario@dominio.cl
# Borrarlos
exiqgrep -i -f usuario@dominio.cl | xargs exim -Mrm
# Borrar los rebotes congelados (frozen) que suele dejar una campaña
exiqgrep -z -i | xargs exim -MrmRevisa la lista antes de borrar: exiqgrep -f usuario@dominio.cl sin -i muestra los mensajes. Un filtro mal escrito puede borrar correo legítimo de otros clientes.
Paso 4: encontrar y cerrar la causa
| Causa | Cómo confirmarla | Qué hacer |
|---|---|---|
| Contraseña robada por phishing | El usuario recuerda haber "verificado su cuenta" en una página | Cambiar contraseñas que reutilizaba y revisar phishing de credenciales |
| Fuerza bruta o password spraying | Muchos "auth failed" en /var/log/maillog antes del primer envío | Ajustar cPHulk y seguir esta guía |
| Contraseña filtrada en otro sitio | La dirección aparece en filtraciones públicas | Contraseña única y gestor de contraseñas |
| Malware en el equipo del usuario | Envíos autenticados desde la IP de la oficina o la casa del usuario | Antivirus en el equipo antes de cambiar la contraseña |
| Script vulnerable | Envíos con cwd=/home/... y encabezado X-PHP-Script | Actualizar o eliminar el plugin y escanear el sitio con ImunifyAV o ClamAV |
Paso 5: recuperar la reputación
Con el envío detenido, revisa si la IP o los dominios quedaron en listas negras y pide la baja solo después de haber cerrado la causa. Si lo pides antes, te vuelven a listar y algunas listas tardan más en aceptar la segunda solicitud. Paso a paso en cómo sacar la IP del servidor de una lista negra.
Si el buzón tenía datos personales
Un atacante con acceso a un buzón pudo leer y descargar todo su contenido. En la Unión Europea, el RGPD exige notificar a la autoridad de control en un máximo de 72 horas cuando la brecha supone un riesgo para las personas; en España, a la AEPD. En Chile, la Ley 21.719 exige informar las vulneraciones de seguridad a la Agencia de Protección de Datos Personales desde su plena vigencia en diciembre de 2026. Documenta qué pasó, cuándo y qué hiciste: lo vas a necesitar.
Cómo evitar que vuelva a pasar
- Límite de correos por hora y porcentaje máximo de rebotes en Tweak Settings, para que el próximo incidente se corte solo.
- cPHulk y contraseñas fuertes obligatorias, para que adivinar contraseñas sea inviable.
- Alertas: un cron que avise si
exim -bpcsupera cierto número. - Filtrar el phishing entrante. La mayoría de las cuentas comprometidas empiezan con un correo que lleva a una página falsa de inicio de sesión. Clisec analiza los enlaces y sus páginas de destino antes de entregar el correo y bloquea ese phishing en todo el servidor.
La revisión completa del servidor está en la guía de seguridad del correo en cPanel.
Preguntas frecuentes
¿Cómo sé qué cuenta envía spam en mi servidor cPanel?
Busca en /var/log/exim_mainlog las líneas con A=dovecot_login y cuenta cuántas veces aparece cada usuario. Si el origen es un script, busca las líneas con cwd=/home. WHM › View Relayers muestra lo mismo sin consola.
¿Basta con cambiar la contraseña?
No siempre. Revisa también reenviadores y filtros que haya creado el atacante, limpia la cola y averigua cómo obtuvo la contraseña. Si no cierras la causa, vuelve a pasar.
¿Cuánto tarda en salir la IP de las listas negras?
Depende de la lista: Spamcop y algunas otras expiran solas en horas o días cuando paran las denuncias; Spamhaus suele aceptar la baja en uno o dos días si el problema está resuelto.
¿Clisec bloquea el spam saliente?
No. Clisec filtra el correo entrante. Ayuda a prevenir cuentas comprometidas porque bloquea el phishing que roba las contraseñas, pero el envío se controla con los límites de Exim y WHM descritos en esta guía.
Protege el correo entrante de todo tu servidor
La mayoría de las cuentas comprometidas empiezan con un correo de phishing. Clisec lo bloquea antes de que llegue al buzón, en todo tu servidor cPanel.