2 dic. 2019

Manejo de colas de correos desde línea de comando

Wilmer Barrios | lunes, diciembre 02, 2019 |


Si bien es posible administrar la cola de correo de WHM, puede encontrar momentos en los que preferiría hacerlo desde la línea de comandos. A veces, como si el servidor está bajo una carga alta, puede ser más rápido realizar operaciones desde la línea de comandos que a través de WHM.

También puede ser útil si necesita realizar operaciones en grandes lotes de mensajes.

A veces solo necesita saber cuántos mensajes hay en la cola. Idealmente, no habrá ninguno. Sin embargo, eso no siempre es una expectativa realista para un servidor de correo particularmente activo.

Exim técnicamente no pone en cola el correo hasta después de que el primer intento de entrega haya fallado con un error temporal. Hay muchos motivos por los que un intento de entrega puede fallar, incluidos, entre otros:

1 La carga en el servidor está por encima del umbral de entrega.

2 El servidor de correo receptor no está disponible.

3 La cuenta del destinatario local no puede recibir correo (exceso de cuota, problemas de permisos, etc.).

Dicho esto, solo porque haya mensajes en la cola no significa que tenga un problema de spam. De hecho, a menudo el spam nunca llega a la cola porque falla con un error permanente.

Entonces, ¿cómo obtengo un recuento de colas?

¿Necesita obtener un número básico que le permita saber cuántos mensajes existen actualmente en la cola? Utilice los indicadores -bpc con la utilidad de línea de comandos exim, como se muestra en el siguiente ejemplo: 

Un ejemplo de ejecución del comando exim -bpc, que muestra aquí que actualmente hay 2 mensajes en la cola activa en este servidor en particular.

-bash-4.1# exim -bpc
2

La utilidad de línea de comandos exim en realidad le brinda mucha flexibilidad tanto para recuperar información sobre la cola como para realizar operaciones en ella.

Para obtener un resultado resumido que muestre información básica sobre cada mensaje en la cola, puede usar los indicadores -bp con el comando exim. Echemos un vistazo a un ejemplo que muestra los dos mensajes que existen en nuestra cola:



exiqgrep también es una herramienta poderosa para ayudarlo a analizar su salida de cola y recuperar la información específica que está buscando.

Por ejemplo, para buscar en la cola y enviar solo los mensajes con una dirección de remitente específica, puede usar la siguiente sintaxis:

exiqgrep -f [usuario] @ dominio.tld

Arriba: Un ejemplo de uso de exiqgrep con el indicador -f seguido de una dirección del remitente, para identificar específicamente los mensajes enviados por un usuario en particular.

Esto es particularmente útil para identificar la fuente de spam local o para determinar qué sucedió después de que un usuario informa que no ha llegado un mensaje enviado (primero verificará si están atascados en la cola, luego use los registros para averiguar por qué )

¿Necesita rastrear mensajes de su destinatario en su lugar? Puede usar el comando exiqgrep para hacer esto también. Aquí, en lugar de usar la bandera -f, usaríamos la bandera -r (un poco más fácil de recordar, ¿verdad?).

exiqgrep -r [usuario] @ dominio.tld

Arriba: un ejemplo de un comando exiqgrep con el indicador -r seguido del destinatario que desea buscar en la cola.


Esto puede ser útil para investigar cuando un usuario informa que una cuenta ya no recibe correo. Además, puede usar esto para identificar cuándo un usuario ha sido bombardeado por correo y determinar si exim se ha configurado para poner en cola automáticamente los mensajes cuando se excede la cuota.

Otra característica útil de la utilidad exiqgrep es buscar mensajes en la cola según criterios de edad. Exiqgrep usa indicadores basados en la terminología más joven y más vieja, y usa apropiadamente -o para mayores (old) y -y para jóvenes (young), seguido de una cantidad de segundos totales.

Dos ejemplos prácticos de esto:

exiqgrep -o 172800

Arriba: un ejemplo de búsqueda en la cola de mensajes anteriores a un día (172.800 segundos).

exiqgrep -y 1800

Arriba: Un ejemplo de búsqueda en la cola de mensajes menores (más nuevos) que 30 minutos (1.800 segundos) de antigüedad.

Ver encabezados

Puede ser extremadamente útil analizar el encabezado de un mensaje al intentar determinar qué sucedió exactamente con ese mensaje o cómo fue manejado por el servidor.

Después de adquirir el valor Exim ID del mensaje, puede usarlo para generar específicamente el encabezado de ese mensaje usando la siguiente sintaxis:

exim -Mvh <exim-id>

Arriba: Al usar la herramienta de línea de comandos exim con los indicadores -Mvh (distingue entre mayúsculas y minúsculas), seguido de un valor válido de ID Exim (las llaves <> son simplemente para el marcador de posición; estos no deberían existir en el comando real), se imprimirán la información del encabezado de ese mensaje a STDOUT 

Ver cuerpo

A veces, el encabezado simplemente no es suficiente, y necesita ver cómo se ve el contenido real del cuerpo del mensaje. Puede usar un formato muy similar usando la herramienta de línea de comandos exim nuevamente, pero esta vez con el conjunto de banderas -Mvb, seguido nuevamente por la ID Exim del mensaje.

-MvhMessage.. view.. header
-MvbMessage.. view.. body


exim -Mvb <exim-id>

Arriba: Usando la herramienta de línea de comando exim nuevamente pero con el indicador -Mvb esta vez, todavía seguido por la ID Exim, para recuperar el contenido del cuerpo del mensaje e imprimirlo en STDOUT (usaré este término 'STDOUT' más a menudo a medida que avanzamos; si no está familiarizado con él, solo recuerde por ahora que significa salida estándar y esencialmente significa que imprime el texto normalmente en su terminal).

XARGS

La utilidad xargs puede ser extremadamente útil para crear un comando rápido de una línea. Es esencialmente un bucle for empaquetado en un solo comando. Funciona tomando la salida de un comando y convirtiéndola en una ejecución línea por línea de otro comando.

Por ejemplo, supongamos que tengo un archivo de texto que tiene una lista de archivos, cada uno en su propia línea.

Podría capturar ese archivo, luego canalizar la salida a xargs para realizar una operación diferente en cada uno de los archivos enumerados. Esto puede ser bastante útil para manejar operaciones de cola Exim en bloque.

Usando Pipes

Pipes, le permite tomar la salida de un comando y usarla como entrada para otro comando. Este es un concepto básico, pero no siempre es fácil comprender exactamente lo que significa simplemente leyendo la explicación.

Para usar un ejemplo, uno de los usos más comunes que puede encontrar es para "grepping" (usar la herramienta grep para buscar en un archivo) o paginar a través de la salida de un comando:

cat /var/log/exim_mainlog | Less

Arriba: un comando de ejemplo utilizado para permitirle desplazarse por el contenido de un archivo de registro página por página, en lugar de imprimir todo el contenido en la pantalla a la vez.

exim -bp | grep SPAM

Arriba: un comando de ejemplo que utiliza una tubería para buscar la salida de exim -bp (el comando utilizado para imprimir un resumen de cada mensaje en la cola, ¿recuerda?) Para cualquier mención de la palabra "SPAM", sin mayúsculas y minúsculas (aunque el -la bandera, por supuesto, se puede usar con grep para eliminar la mayúscula y minúscula).

Reenviar un mensaje

exiqgrep -r usuario@dominio.tld -i | xargs exim -M

Arriba: en este comando de ejemplo que utiliza pipes y el comando xargs, le estamos indicando a Exim que nos proporcione todos los mensajes en la cola (exiqgrep) con el destinatario designado como usuario@dominio.tld (-r usuario@dominio.tld) e informar a la herramienta exiqgrep de que SOLO queremos generar los ID de Exim que coinciden (-i).

Eliminando un mensaje

exim -Mrm <exim-id>

Arriba: la sintaxis básica para eliminar un mensaje de la cola, en función de su ID de Exim. Nuevamente, vemos el patrón (-M seguido de rm; tal como lo haría con un archivo del sistema de archivos).

Eliminando un mensaje

Por supuesto, la eliminación masiva siempre debe realizarse con precaución. Una vez que elimine el correo de su cola, no hay garantía de que el remitente lo vuelva a enviar.

Por lo tanto, si elimina un mensaje válido destinado a un destinatario, está creando la posibilidad de que su usuario nunca reciba ese correo o el mensaje que contiene. Básicamente ... ten cuidado.

Veamos un ejemplo nuevamente usando una circunstancia similar a la anterior.

Vamos a utilizar nuevamente el comando exiqgrep, pero esta vez vamos a buscar todos los mensajes con un dominio particular en su dirección de remitente, utilizando la bandera -f, y finalmente imprimiendo solo los valores de ID Exim especificando el - Marco, como lo hicimos antes:

exiqgrep -i -f @ spammer.tld | xargs exim -Mrm

Arriba: nuevamente estamos usando xargs para ejecutar exim -Mrm (el comando para eliminar mensajes por Exim ID) en cada Exim ID devuelta por el comando exiqgrep que lo precede, que en nuestro caso debe coincidir con todos los mensajes con un remitente que usa el domain @ spammer.tld (probablemente podrían haber sido un poco más sutiles al respecto, ¿estoy en lo cierto?).

Observe nuevamente la pipes (|) que se usa para canalizar la salida de exiqgrep en la entrada para xargs.

Otro indicador de línea de comando de exim muy importante que queremos asegurarnos y resaltar es el indicador -bt, que sería seguido por una dirección de correo electrónico del destinatario.

Exim -bt funciona como algunas de las pruebas de entrega de correo electrónico que se encuentran dentro de la interfaz WHM. Efectivamente le muestra a dónde exim cree que debería ir un mensaje y cómo debería llegar allí.

Por ejemplo, los mensajes a este usuario están destinados a una cuenta local:

# exim -bt dogs@animals.test
dogs@animals.test
   router = virtual_user, transport = virtual_userdelivery

Mientras que los mensajes a este usuario dejarán el servidor a un destino remoto:

# exim -bt noone@gmail.com
noone@gmail.com
  router = lookuphost, transport = remote_smtp
  host gmail-smtp-in.l.google.com      [64.233.169.26]  MX=5
  host alt1.gmail-smtp-in.l.google.com [173.194.219.26] MX=10
  host alt2.gmail-smtp-in.l.google.com [173.194.204.26] MX=20
  host alt3.gmail-smtp-in.l.google.com [74.125.141.26]  MX=30
  host alt4.gmail-smtp-in.l.google.com [64.233.186.26]  MX=40

Tenga en cuenta que el usuario en realidad no necesita existir; exim solo está verificando en la parte del dominio las entregas remotas.

Share this article
 
Copyright © 2017 MyBiosWeb
Distributed By My Themes | Template Design By BioHosting