Con el tiempo, he ido recopilando una serie de herramientas que hacen más fácil la administración de un servidor de correo basado en postfix.
Qshape
qshape es una utilidad que forma parte del paquete de instalación de postfix que sirve de gran ayuda para ver cuán de congestionado está nuestro servidor.
La mejor manera de entender cómo trabaja es ver la salida de su ejecución:
[root@desdelaconsola ~]$ qshape T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 8 3 4 1 0 0 0 0 0 0 0 miempresa.com 4 3 1 0 0 0 0 0 0 0 0 yopmail.com 3 0 3 0 0 0 0 0 0 0 0 hotmai.es 1 0 0 1 0 0 0 0 0 0 0
El eje X corresponde al tiempo en minutos (5, 10, 20 mintuos, etc) que lleva un correo en una cola determinada.
En el eje Y vemos los dominios a los que pertenecen esos correos, ordenados de dominios con mayor número de correos en la cola a dominios con menor número de correos en la cola.
Sin parámetros, la salida corresponde a los correos destino que están en las colas «incoming» y «active«.
En una situación normal, en un servidor de correo no congestionado, estas dos colas estarán prácticamente vacías.
Podemos tener información más útil en muchos casos si consultamos la cola de correos diferidos (deferred):
[root@desdelaconsola ~]# qshape deferred | head -n6 T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 265 0 0 0 0 0 0 74 39 0 152 heyhihellothere.com 81 0 0 0 0 0 0 29 8 0 44 hotmai.com 11 0 0 0 0 0 0 4 1 0 6 example.com 10 0 0 0 0 0 0 0 0 0 10 groups.msn.com 7 0 0 0 0 0 0 2 1 0 4
Vemos que, por ejemplo, de los 81 correos almacenados en la cola deferred enviados al dominio «heyhihellothere.com«, 44 llevan más de 1280 minutos en ella, lo cual probablemente significará que nuestro servidor de correo no ha podido entregar estos correos por ejemplo porque no existe un MX para el dominio y pasado el tiempo de vida que tengamos definido acabará por borrarlos.
La opción «-s» muestra el número de correos en función del dominio que envia por lo que logicamente veremos que la gran mayoría de correos que están en la cola diferida son correos enviados por nosotros y que no se han podido entregar por cualquier razón:
[root@desdelaconsola ~]# qshape -s deferred | head -n6 T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 200 1 0 0 0 0 0 0 83 0 116 desdelaconsola.es 195 1 0 0 0 0 0 0 83 0 111 exampleo.uk 1 0 0 0 0 0 0 0 0 0 1 bluione.no 1 0 0 0 0 0 0 0 0 0 1 wondsrean.net 1 0 0 0 0 0 0 0 0 0 1
Resumiendo, gracias a qshape sabremos de un vistazo lo ocupado que está nuestro servidor y nos servirá para analizar posibles cuellos de botella.
Para más información: Postfix Bottleneck Analysis
Queuegraph
Herramienta basada en rrdtool que muestra de manera gráfica el estado de las colas active, incoming y deferred a lo largo del tiempo (último día, semana, mes y año).
Es realmente útil para conocer cuáles son los patrones de envío de nuestro servidor o por ejemplo detectar de un vistazo un pico anormalmente alto.
Por ejemplo, las graficas diaria y semanal del estado de las «postfix queues» generado por queuegraph:
Se observa claramente que diariamente, de 9 a 10 de la mañana, es cuando el servidor está más ocupado.
La herramienta es realmente sencilla y consta de un shell script cuya ejecución es necesaria configurar en el crontab cada minuto para que vaya recopilando los datos de las diferentes colas de correo y genere los archivos que serán mostrados por un script CGI que colocaremos en el directorio «cgi-bin» del servidor web.
Ha sido desarrollada por Ralf Hildebrandt y puede descargarse desde su página web.
pfqgrep
Pfqgrep es un script perl que permite buscar un patrón en la cola de correos y devuelve los mensajes que lo cumplen.
Tiene opciones muy interesantes como buscar únicamente en una cola determinada, sólo en el remitente, sólo en el destinatario, en el mensaje que explica la razón por la que un mensaje se ha diferido…
Si el mensaje está en la cola active el identificador del mensaje en la cola aparece con un asterisco:
[root@desdelaconsola ~]# perl pfqgrep.pl -a ivazquez -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- D5B5B1E014E* 1644 Fri Oct 14 14:49:23 ivazquez@desdelaconsola.es ivazquez@example.com
Mientras que si está en la cola deferred, aparece también la razón por la que se ha diferido el mensaje:
[root@desdelaconsola ~]# perl pfqgrep.pl -a ivazquez D5B5B1E014E 1644 Fri Oct 14 14:49:23 ivazquez@desdelaconsola.es (connect to example.com[192.0.43.10]:25: Connection timed out) ivazquez@example.com
Habitualmente uso esta utilidad para obtener el «queue id» de un correo para realizar tareas posteriores como puede ser, volver a reencolarlo:
[root@desdelaconsola ~]# postqueue -i queue_id
borrar el correo de la cola:
[root@desdelaconsola ~]# postsuper -d queue_id
ver su contenido, para lo cual usaremos la herramienta pfcat o hacer troubleshooting.
Pfqgrep puede descargarse desde aquí.
pfcat
Pfcat es un sencillo shell script que, dado el «queue id» de un correo, muestra el contenido de dicho correo.
Útil, por ejemplo, para saber si ese correo que tenemos en la cola diferida es el que creeemos que es o no.
Por ejemplo:
[root@desdelaconsola ~]# perl pfqgrep.pl -a ivazquez D5B5B1E014E 1644 Fri Oct 14 14:49:23 ivazquez@desdelaconsola.es (connect to example.com[192.0.43.10]:25: Connection timed out) ivazquez@example.com [root@desdelaconsola ~]# ./pfcat.sh D5B5B1E014E *** ENVELOPE RECORDS /var/spool/postfix/deferred/D/D5B5B1E014E *** message_size: 1644 606 1 0 1644 message_arrival_time: Fri Oct 14 14:49:23 2011 create_time: Fri Oct 14 14:49:23 2011 named_attribute: rewrite_context=remote sender: ivazquez@desdelaconsola.es named_attribute: log_client_address=172.16.100.199 named_attribute: log_client_port=57612 named_attribute: log_message_origin=unknown[172.16.100.199]:57612 named_attribute: log_helo_name=[172.16.100.199] named_attribute: log_protocol_name=ESMTP named_attribute: client_name=correo.desdelaconsola.es named_attribute: reverse_client_name=correo.desdelaconsola.es named_attribute: client_address=127.0.0.1 named_attribute: client_port=41197 named_attribute: helo_name=correo.desdelaconsola.es named_attribute: client_address_type=2 named_attribute: dsn_orig_rcpt=rfc822;ivazquez@example.com original_recipient: ivazquez@example.com recipient: ivazquez@example.com *** MESSAGE CONTENTS /var/spool/postfix/deferred/D/D5B5B1E014E *** Received: from correo.desdelaconsola.es (correo.desdelaconsola.es [127.0.0.1]) by correo.desdelaconsola.es (Postfix) with ESMTP id D5B5B1E014E for; Fri, 14 Oct 2011 14:49:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=desdelaconsola.es; h= message-id:date:from:mime-version:to:subject:content-type :content-transfer-encoding; s=dkim_sig; bh=RGREqRxsmnpUMcyZ5F0Pitp7q tE=; b=gb0nZU7BquTw/ezuCP0ZGF21bwyo+JvPioey33WWK9YtsSJ2aTNktADEy 24TB9hdAaZaaI6bigpdQGbDjRsKDFcHHzqyQ1SQ7yvyc53O3mg65BCYWofCKDSJG W2eD/yUUBdMQlKATpKCCI2pPwQngAY8sE+N2W47YL+XSwccnV4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=desdelaconsola.es; h=message-id :date:from:mime-version:to:subject:content-type :content-transfer-encoding; q=dns; s=dkim_sig; b=pu9EkLoErolT2SI78Dp sz2yUVcxElN53931dQYhYzP8bk8S78bTXB1tUmSl5h9H0iIm6ttpZtM/0HGD/fcH RqS8YCV5Y1ewFTRDbnNe6+1sYxkfDPcj5r65rWeJ7/oAXUXtv2itbQDANebikmH7 XolXKEL1ulLPniueAbaZihM8= Received: from [172.16.100.199] (unknown [172.16.100.199]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by correo.desdelaconsola.es (Postfix) with ESMTPSA id CC53D1E013F for ; Fri, 14 Oct 2011 14:49:23 +0200 (CEST) Message-ID: <4E982FD1.101@desdelaconsola.es> Date: Fri, 14 Oct 2011 14:49:21 +0200 From: Ignacio Vazquez Alvarez User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: ivazquez@example.com Subject: Hola X-Enigmail-Version: 1.3.2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Esto es una prueba *** HEADER EXTRACTED /var/spool/postfix/deferred/D/D5B5B1E014E *** *** MESSAGE FILE END /var/spool/postfix/deferred/D/D5B5B1E014E ***
Puedes descargar pfcat desde aquí
debug_peer_list
No es una herramienta como tal sino que es una directiva de la configuración de postfix que resulta muy útil al tratar de determinar errores en el envío desde determinados clientes.
Permite habilitar el modo debug para el envío desde una o varias IP’s.
Por ejemplo:
debug_peer_list = 192.168.100.50
Se puede especificar también un valor de red/máscara o nombres de dominio.
Para más información: http://www.postfix.org/postconf.5.html#debug_peer_list
Alejandro wrote:
Hola, interesante lista, solamente cambiaría pfcat, ya que el postfix incorpora el comando «postcat -q queue_id».
Saludos
Link | octubre 18th, 2011 at 1:33
Ignacio Vazquez wrote:
@Alejandro tienes razón pero en realidad pfcat lo que usa finalmente es postcat después de una serie de comprobaciones.
Gracias por el aporte.
Link | octubre 18th, 2011 at 10:00