Base de conocimiento

Creado por eth0
2015-02-17
13:31:30

Categorías
Etiquetas

Comandos útiles para Exim

Este artículo está basado en este otro: Exim Cheatsheet.

Identificadores de mensaje

Algunos de los comandos mostrados más abajo reciben como parámetro un identificador de mensaje para operar sobre él. En el caso de Exim, dichos identificadores de mensaje son los que aparecen en los logs con el formato XXXXXX-YYYYYY-ZZ.

Ficheros internos de mensajes

Ni que decir tiene que no es buena idea el meterse a toquetear los ficheros de la cola de correo directamente, porque para eso tiene Exim sus comandos. Pero si tuvieras una razón de peso para tener que meterte ahí, esta es la estructura que tienen:

  1. En el directorio /var/spool/exim/msglog están los datos de registro de actividad de cada mensaje. El nombre de los ficheros es el identificador del mensaje.

  2. En el directorio /var/spool/exim/input encontrarás dos ficheros más con el identificador del mensaje como nombre, pero uno termina en -H y el otro en -D; el primero contiene las cabeceras y el segundo el cuerpo.

Si se trabaja con mucho volumen de correo, esos directorios tendrán a su vez subdirectorios indexados.

Comandos para trabajar con la cola de correo

Para sacar el número de mensajes en la cola:

root# exim -bpc

Para sacar la lista de mensajes en cola:

root# exim -bp

Para sacar estadísticas de la cola —número de mensajes, tamaños, mensaje más antiguo y más nuevo y tal—:

root# exim -bp | exiqsumm

Para buscar mensajes en cola a partir de la dirección del remitente:

root# exiqgrep -f [remitente]@dominio

Lo mismo, pero para buscar por destinatario:

root# exiqgrep -r [destinatario]@dominio

Para buscar mensajes que lleven en cola más del número de segundos especificado:

root# exiqgrep -o segundos

Lo mismo, pero para buscar los mensajes que lleven menos tiempo del especificado:

root# exiqgrep -y segundos

Para buscar mensajes en cola por tamaño —mediante una expresión regular, ojo—:

root# exiqgrep -s regextamaño

Para buscar mensajes retenidos (congelados):

root# exiqgrep -z

Y al revés, para buscar sólo los que no lo estén:

root# exiqgrep -x

Todos los parámetros anteriores se pueden combinar. Además, si a la búsqueda le añades el parámetro -i solamente se mostrarán los identificadores de mensaje, y si le añades el parámetro -c se mostrará el número de mensajes que coinciden con la búsqueda.

Los siguientes comandos operan sobre mensajes concretos en la cola.

Para procesar la cola:

root# exim -q -v

Lo mismo, pero sólo para las entregas locales:

root# exim -ql -v

Para eliminar un mensaje de la cola:

root# exim -Mrm message-id message-id ...

Para congelar (retener) un mensaje de la cola:

root# exim -Mf message-id message-id ...

Para descongelarlo (liberarlo):

root# exim -Mt message-id message-id ...

Para forzar su entrega sea cual sea su estado:

root# exim -M message-id message-id ...

Para forzar la entrega, pero sólo si se ha superado el tiempo de reintento:

root# exim -Mc message-id message-id ...

Para rechazar un mensaje y devolverlo como rechazado por el administrador:

root# exim -Mg message-id message-id ...

Para ver las cabeceras de un mensaje de la cola:

root# exim -Mvh message-id

Para ver el cuerpo de un mensaje de la cola:

root# exim -Mvb message-id

Para ver el registro de actividad de un mensaje de la cola:

root# exim -Mvl message-id

Para añadirle destinatarios a un mensaje de la cola:

root# exim -Mar message-id destinatario@dominio destinatario@dominio ...

Para cambiarle el remitente a un mensaje de la cola:

root# exim -Mes message-id remitente@dominio

Y ya si hacemos un poco de fontanería, podemos hacer cosas como las siguientes.

Para borrar de la cola todos los mensajes que estén congelados:

root# exiqgrep -z -i | xargs exim -Mrm

Para borrar de la cola todos los mensajes que lleven en ella desde hace más de cinco días:

root# exiqgrep -o 432000 -i | xargs exim -Mrm

Para congelar todos los mensajes que hayan sido enviados por un remitente concreto:

root# exiqgrep -f ejemplo@example.com -i | xargs exim -Mf

Otra información

Para preguntarle a Exim qué está haciendo en este momento:

root# exiwhat

Para ver las reglas que tiene Exim para entregar correo a una dirección:

root# exim -bt ejemplo@example.com

Para simular una conexión SMTP desde una dirección arbitraria (sin entregar realmente el mensaje):

root# exim -bh 123.123.123.123

Para mostrar todas las directivas de configuración de Exim:

root# exim -bP

Los logs

La regla de oro de los logs de Exim:

Sabiendo esto, para buscar mensajes recibidos desde una IP determinada:

root# exigrep '<= .* \[123.123.123.123\]' /ruta/al/exim_log

Sí, a pesar de todo aún hay que decirle en qué fichero tiene que buscar; en CentOS, por ejemplo, sería /var/log/exim_mainlog. También nótese que el comando es exigrep y no exiqgrep, que es para buscar en la cola.

Lo mismo pero al revés, para buscar correos que se hayan enviado hacia una determinada IP:

root# exigrep '=> .* \[123.123.123.123\]' /ruta/al/exim_log

Para sacar estadísticas a partir de los logs:

root# eximstats /ruta/al/exim_log

Lo mismo, pero con menos información:

root# eximstats -ne -nr -nt /ruta/al/exim_log

Lo mismo, pero de un día concreto:

root# grep -f AAAA-MM-DD /ruta/al/exim_log | eximstats