Jugando con mailq - Userlinux.net

Cuando falla la entrega en un servidor de correo lo lógico es que la cola se vaya llenando hasta reparar el problema. En ese momento las peticiones irán saliendo con cierto orden de prioridad. Hay varios comandos con los que podemos jugar para ayudar al servidor en el proceso de…

Jugando con mailq

26.Oct.2007 ~ 8 Comentarios ~ 13730 Lecturas
Cuando falla la entrega en un servidor de correo lo lógico es que la cola se vaya llenando hasta reparar el problema. En ese momento las peticiones irán saliendo con cierto orden de prioridad. Hay varios comandos con los que podemos jugar para ayudar al servidor en el proceso de peticiones.

Con un poco de paciencia, conocimientos mínimos de bash y usando tanto mailq como postsuper (Postfix) podremos facilitar el flujo de correos encolados. Vamos a ello.

Primero miramos el número de correos que tenemos en cola. Esta operación se puede hacer de diversos modos:
# mailq | tail -n1
-- 70865 Kbytes in 1654 Requests.
# mailq | grep Requests
-- 70865 Kbytes in 1654 Requests.
Una vez sabemos el número exacto de correos que están esperando a ser procesados podemos hacernos una idea del tiempo que nos puede llevar reestablecer el normal funcionamiento del servicio.

Para ver una descripción algo más detallada de los correos (id, fecha, origen, destino...) podemos usar mailq sin más modificadores, obviamente el resultado será un chorizo tremendo si hay muchos Requests. Probemos a ver las 20 primeras lineas:
# mailq | head -n20
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9A792414C6B*   30256 Fri Oct 26 11:41:30  tequilasunrise270@liberotta.it
                                         alguien@server

387924150E9*   41997 Fri Oct 26 11:26:53  1784@lavoca.es
                                         mas@server

1AB8D4141C3*    1163 Fri Oct 26 11:29:51  AIMEE-Jenksya@ariastone.com
                                         otrouser@server

D5808414C6F*   22998 Fri Oct 26 11:41:35  sateve@zongati.com
                                         alguien@server

81983414DDC*     518 Fri Oct 26 11:28:13  otrouser@server
                                         alguien@server

274104137A6*  170349 Fri Oct 26 11:28:19  tequilasunrise270@liberotta.it
                                         mas@server

CCC684141CC*   38295 Fri Oct 26 11:29:20  sateve@zongati.com
Nota: He modificado las direcciones de correo por no facilitar datos reales que puedan afectar al ejemplo ni al correcto funcionamiento de dichas cuentas.

Podemos comprobar que algunos de los correos en cola son correctos, otros spam o correo no deseado. Como trataremos de facilitar la tarea del servidor, podemos borrar los que veamos como no deseados.

Pongamos que tequilasunrise270@liberotta.it es uno de los correos a eliminar, nos fijamos en su ID (primer campo): 9A792414C6B y lo referenciamos con postsuper -d:
# postsuper -d 9A792414C6B
postsuper: 9A792414C6B: removed
postsuper: Deleted: 1 message
#
Sencillo -aunque tedioso- si la cola no llega a 50 correos, si jugamos con números más grandes el asunto se complica y el proceso empieza a alargarse notablemente en el tiempo. Es la hora de aplicar un poco de scripting.

Imaginemos que tequilasunrise270@liberotta.it nos ha estado inundando a correos en casi todas las cuentas del servidor, en vez de ir buscando el ID de una en una:
# mailq | grep tequilasunrise270@liberotta.it
Podemos sacar de forma más directa el ID con cut y pasarlo como parámetro a postsuper para que el trabajo sea más rápido (el ejemplo se ejecuta con una cuenta de correo, pero podríamos filtrar todo un dominio de la misma forma):
# for i in `mailq | grep tequilasunrise270@liberotta.it | cut -f1 -d*`; do postsuper -d $i; done
postsuper: 769024147F2: removed
postsuper: Deleted: 1 message
postsuper: 93A4B415197: removed
postsuper: Deleted: 1 message
postsuper: BD9FC414BFB: removed
postsuper: Deleted: 1 message
postsuper: 024EF4150C2: removed
postsuper: Deleted: 1 message
postsuper: 12114414813: removed
postsuper: Deleted: 1 message
...
#
Otra opción que se me ocurre así a bote pronto es generar a partir de mailq una lista negra de direcciones spam y borrar todos los correos estén en cola y hagan referencia a ellas.

Empezamos creando un archivo con la lista de todas las direcciones de correos implicados en cola, por ejemplo:
# mailq | grep : | cut -f3 -d":" | cut -f3 -d" " | sort  > ~/mailq.log
# cat ~/mailq.log
14479TDJAR@rrew.com
1919@intl-error.mail.info
3F2ZB9R@barriage.com
4QC5TBFN4Y@rarnyne.net
5minnews.com@kingofthedirt.com
71V8V5@rarrgoico.net
7AP31N@rarrlolico.com
96ZEXFSXB@rarrisolidp.com
9DTOUY@rarrgoldmine.com
aalguien@server.com
Aprafivo69@abebooks.com
BenaeMilne@meiselania.cc
Boospq@123456.com
bueno@server.com
Casey.Wood@jermanyfromhome.net
DAVEY879@RUBIAZA.DE
dario@server.com
DKG40BZ@chickenstolen.de
...
Observamos que en mailq.log hay direcciones "buenas" y "malas", bien manualmente o con alguna otra operación que se nos ocurra podemos quedarnos solamente con las "malas" para pasarle a postsuper. Podríamos eliminar de una tacada las direcciones propias del servidor, convirtiendo el cribado en algo más sencillo:
# cat mailq.log | grep -v server.com > mailq.log
Desde que tenemos el fichero con la lista de direcciones de correo "sobrante" podemos lanzar el siguiente comando, que buscará en mailq todas las referencias a esas cuentas, sacando el ID y procesándolo mediante postsuper:
# for i in `cat ~/mailq.log`; do `mailq | grep $i| cut -f1 -d* | postsuper -d -`; done
Una vez aplicados estos pequeños trucos la cola debería haberse limpiado bastante y lo que es más importante, en mucho menos tiempo que si vamos procesando los correos uno a uno.

Todo depende de las manos del administrador y de su capacidad de filtrado con las cuentas, pero realmente... ¿qué sistema no depende de un administrador?. Más sencillo sería un postsuper -d ALL aunque apuesto a que más de uno tendría cargo de conciencia.

Comentarios


gravatar
07.Dec.2007
De verdad tu post estuvo muy interesante y me animo a revisar con mas detalle este comando. Felicitaciones de VErdad.

Saludos desde Arequipa PEru,

gravatar
Magda Morales
25.Jun.2008
Gracias, me ayudo mucho tu post!!!

Saludos, México.

gravatar
Manuel
07.Feb.2009
Gracias, Me ayudo mucho tu informacion ademas de que aprendi mucho mas.

Saludos, QRO

gravatar
marcos
09.Feb.2009
Buenas

Estoy probando los diferentes comandos en un CentOS pero no filtra bien. Aparecen palabras como blocked. Porque puede ser esto?

Gracias

gravatar
marcos
09.Feb.2009
Buenas

Estoy probando los diferentes comandos en un CentOS pero no filtra bien. Aparecen palabras como blocked. Porque puede ser esto?

Gracias

gravatar
08.Dec.2009
Muy buen articulo, bastante útil para aquellos que se adentran en la administración de servidores de correo, en lo personal uso pfqueue para tareas rutinarias como borrar correos, re encolar, pero para tareas de uso rudo y acompañado de bash scripting prefiero mailq y postsuper.

pfqueue: A console-based tool for handling MTA queues
http://pfqueue.sourceforge.net/

Saludos.

gravatar
atilio
03.Mar.2010
para poder borra todos los mails de la cola: postsuper -d ALL

gravatar
hicolu
08.Oct.2010
vacan el post. quiero borrar todo los correos que tengan dominio @yahoo.com como lo hago ??? me envias la rpta a mi correo gracias

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • Juan
  • Marina
  • Francisco
  • fon
  • minWi
  • isra
  • reidrac
  • r0sk
  • Rodrigo Rega
  • minWi
  • r0sk
  • reidrac
  • r0sk
  • deady
  • errece

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

ssh frases champions userlinux iphone lugo rsidenotes felicidades films nintendo opinion sysadmin 2008 blogsfera vacaciones juegos cake ds debian sidenotes apple web blogs mac mysql cakephp deportes 2007 mundial openbsd barça ubuntu twitter blog humor meme canción alemania_2006 games bsd lucux linux twitt programación cumpleaños software django league bash macosx ps3 rfilms conciertos freebsd seguridad personal hack php bake futbol

Archivo

Social

Enlaces de interés