08 noviembre 2011

Herramientas útiles en la administración de Postfix

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:
Gráfica generada por queuegraph
Gráfica generada 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
tags: , ,
Escrito en Correo por Ignacio Vazquez

Tomado de: http://desdelaconsola.es/herramientas-utiles-en-la-administracion-de-postfix/

No hay comentarios: