Vamos a ver los comandos para eliminar spam de la cola de postfix, para cuando nuestro servidor de mail tiene muchos correos trabados.
¿Qué es postfix?
Postfix es un servidor de mail de código abierto, y gratuito.
Tiene la capacidad de integrarse con filtros de spam y antivirus fácilmente.
En el año 2016 se estimó que un 25% de todos los servidores de mail mundial lo usaban.
Puede utilizarse en sistemas operativos similares a unix, compilando desde el código, y ya viene preinstalado en varios linux. En mi trabajo lo usamos en debian.
Revisamos el listado de correos en la cola de postfix
$postqueue -p
----Queue ID----- --Size-- ---Arrival Time---- --Sender/Recipient------
4W8QV469LYz30nF 199 Fri Jun 28 18:52:11 usuario@ejemplo.com
(mail transport unavailable)
sabri.mon@alice.it
4W925B3R5Fz30sS 687 Thu Jun 27 12:08:30 usuario@ejemplo.com
(mail transport unavailable)
4287-4c40-9723@parse.botster.io
4W922K3ZShz30s3 664 Thu Jun 27 12:06:01 usuario@ejemplo.com
(mail transport unavailable)
mail1@glob22glo1.su
4WCRFz4dJdz2yZ2 317 Mon Jul 1 10:09:27 usuario@ejemplo.com
(mail transport unavailable)
mailer@skycloudstar.com
4WCQx119Stz30jq 595 Mon Jul 1 09:54:45 usuario@ejemplo.com
(mail transport unavailable)
andrme@gydimail.online
-- 1734 Kbytes in 5 Requests.
En la primer columna podemos ver los id de cada uno de correos.
Leemos el contenido de los correos
Podemos verificar el contenido de uno de esos correos con este comando y el id del primer correo (4W8QV469LYz30nF):
$postcat -vq 4W8QV469LYz30nF
postcat: name_mask: ipv4
postcat: inet_addr_local: configured 8 IPv4 addresses
*** ENVELOPE RECORDS deferred/D/4W8QV469LYz30nF ***
message_size: 4110 744 1 0 4110 0
message_arrival_time: Wed Jun 26 12:24:28 2024
create_time: Wed Jun 26 12:24:28 2024
named_attribute: log_ident=4W8QV469LYz30nF
named_attribute: rewrite_context=local
sender: usuario@ejemplo.com
named_attribute: encoding=7bit
named_attribute: log_client_name=localhost
named_attribute: log_client_address=127.0.0.1
named_attribute: log_client_port=43232
named_attribute: log_message_origin=localhost[127.0.0.1]
named_attribute: log_helo_name=servidor.ejemplo.com
named_attribute: log_protocol_name=ESMTP
named_attribute: client_name=localhost
named_attribute: reverse_client_name=localhost
named_attribute: client_address=127.0.0.1
named_attribute: client_port=43232
named_attribute: server_address=127.0.0.1
named_attribute: server_port=10025
named_attribute: helo_name=servidor.ejemplo.com
named_attribute: protocol_name=ESMTP
named_attribute: client_address_type=2
named_attribute: dsn_orig_rcpt=rfc822;sabri.mon@alice.it
original_recipient: sabri.mon@alice.it
recipient: sabri.mon@alice.it
pointer_record: 0
*** MESSAGE CONTENTS deferred/D/4W8QV469LYz30nF ***
regular_text: Received: from servidor.ejemplo.com (localhost [127.0.0.1])
regular_text: by servidor.ejemplo.com (Postfix) with ESMTP id 4W8QV469LYz30nF
regular_text: for <sabri.mon@alice.it>; Wed, 26 Jun 2024 12:24:28 -0300 (-03)
regular_text: X-Virus-Scanned: Debian amavisd-new at ejemplo.com
regular_text: X-Spam-Flag: NO
regular_text: X-Spam-Score: -0.898
pointer_record: 1051
regular_text: X-Spam-Status: No, score=-0.898 tagged_above=-9999 required=6.31
regular_text: tests=[ALL_TRUSTED=-1, HTML_FONT_LOW_CONTRAST=0.001,
regular_text: HTML_MESSAGE=0.001, TRACKER_ID=0.1] autolearn=no autolearn_force=no
regular_text: Received: from servidor.ejemplo.com ([127.0.0.1])
regular_text: by servidor.ejemplo.com (servidor.ejemplo.com [127.0.0.1]) (amavisd-new, port 10024)
regular_text: with ESMTP id hDIr-3cEe7Mt for <sabri.mon@alice.it>;
regular_text: Wed, 26 Jun 2024 12:24:13 -0300 (-03)
regular_text: Received: from ns363164.ip-94-23-220.eu (ns363164.ip-94-23-220.eu [94.23.220.136])
regular_text: by servidor.ejemplo.com (Postfix) with ESMTPSA id 4W8QTh32B2z2xx0
regular_text: for <sabri.mon@alice.it>; Wed, 26 Jun 2024 12:24:08 -0300 (-03)
regular_text: Message-ID: <0a3c75da4ceac0cf7cd69f3b2feacf108951@ejemplo.com>
regular_text: From: Monica Leroy <usuario@ejemplo.com>
regular_text: To: sabri.mon@alice.it
regular_text: Subject: =?utf-8?B?QnVvbiBsdfsdfnaW9ybm8h4peV?=
regular_text: Date: Wed, 26 Jun 2024 18:24:02 +0300
regular_text: MIME-Version: 1.0
regular_text: Content-Type: multipart/alternative; boundary="a309448d1bdff16a49e3a5ee1bd0c448ed"
pointer_record: 2043
pointer_record: 2170
pointer_record: 4890
regular_text: X-Spam-Level: ***
pointer_record: 4926
regular_text: X-Spamd-Bar: +++
pointer_record: 4961
regular_text: Authentication-Results: mail.sinalic.gob.ar;
regular_text: none
pointer_record: 2187
regular_text:
regular_text: --a309448d1bdff16a49e3a5ee1bd0c448ed
regular_text: Content-Type: text/plain; charset="utf-8"
regular_text: Content-Transfer-Encoding: quoted-printable
regular_text:
regular_text: Slenderness Corps creer=C3=A0 la vostra nuova figura nel pi=C3=B9 breve t=
regular_text: empo possibile - Contattateci!
regular_text:
regular_text: tcgghzcwchguojumiusrzickbzdwuirnlfpsdvsdvmbcsattmahltsuzpycxsmqrjtyggpnqdpgkofa=
regular_text: dsprvsdvgnxspjp
regular_text:
regular_text: --a309448d1bdffpijstnrt16a49e3a5ee1bd0c448ed
regular_text: Content-Type: text/html; charset="utf-8"
regular_text: Content-Transfer-Encoding: quoted-printable
regular_text:
regular_text: <html>
regular_text: <head>
regular_text: <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
regular_text: </head>
regular_text: <body bgColor=3D"#ffffff">
regular_text: <div align=3Dleft><p><span style=3D"color:#556B2F"><span style=3D"font-si=
regular_text: ze:16.4"><span style=3D"font-family:Bookman"><strong><span style=3D"backg=
regular_text: round-color:#FFFAFA">Slenderness Corps creer=C3=A0 la vostra nuova figura=
regular_text: nel pi=C3=B9 breve tempo possibile - <a href=3D"https://itgoodvsglifes.blo=
regular_text: gspot.com/&#?19dv69/?%#*" target=3D"_blank">Contattateci! </a></span></stro=
regular_text: ng></span></span></span></p</div>
regular_text: <div align=3Dleft><font size=3D2 face=3DArial></font> </div>
regular_text: <div align=3Dleft><font color=3D"#ffffff" size=3D2 face=3DArial>tcgghzcwc=
regular_text: hguojumiusrzickbzdwuirnlfpmbasdsbdfhdfgcsattmahltsuzpycxsmqrjtyggpnqdpgkofadsprgnxsp=
regular_text: jp</font></div></body></html>
regular_text:
regular_text: --a309448d1bdff16sdha49e3a5ee1bd0c448ed--
pointer_record: 0
*** HEADER EXTRACTED deferred/D/4W8QV469LYz30nF ***
named_attribute: encoding=7bit
pointer_record: 0
*** MESSAGE FILE END deferred/D/4W8QV469LYz30nF ***
El resultado del comando puede resultar engorroso, pero hay que prestar atención a las líneas que dice “From:” el Remitente, “To:” es decir el destinatario, y “Subject”, el asunto del mail.
Luego de ver varios correos, detecté que la cuenta del emisor había sido comprometida. El emisor es siempre el mismo, el destinatario se veían correos extranjeros, el asunto no parecía escrito por una persona, y el contenido tenía un sitio web sospechoso.
Paso final para eliminar spam de la cola de postfix
Decidí eliminar todos los correos del mismo emisor, para eso ejecutamos este comando:
$postqueue -p | tail -n +2 | awk '/cuenta@ejemplo.com/ { print $1 }' | postsuper -d -
postsuper: 4W8QV469LYz30nF: removed
postsuper: 4W925B3R5Fz30sS: removed
postsuper: 4W922K3ZShz30s3: removed
postsuper: 4WCRFz4dJdz2yZ2: removed
postsuper: 4WCQx119Stz30jq: removed
postsuper: Deleted: 5 messages
Voy a desmenuzar el comando:
Esto muestra la cola de mail pero sin la línea de títulos.
postqueue -p | tail -n +2
Esto lo dirige con un pipe a awk, busca las coincidencias en el remitente, y imprime la primera columna.
| awk ‘/cuenta@ejemplo.com/ { print $1 }’
Esto dirige con un pipe al comando para eliminar los correos, que usa el id del correo como parámetro.
| postsuper -d –
Por ahora hicimos lo principal para eliminar spam de la cola de postfix. Lo que resta es resetear la cuenta del emisor, y darle una contraseña más fuerte. Para este caso, es de un servidor ldap, y voy a omitir los pasos acá para mantener el post breve.
Saludos.
🏷️ #correo #mail #postfix #servidor_linux #servidores #spam
Muy buen post, explicacion paso a paso con capturas todo bien detallado. Excelente trabajo.