Controlando filas do Postfix

De gutocarvalho.net

Aqui vamos ver alguns métodos para controlar as filas de e-mail do MTA Postfix.

Conteúdo

[editar] filas

As filas que esta MTA usa para o processamento de mensagens são:

incoming
active
deferred
corrupt
hold

Quem faz o gerenciamento da fila é o QMGR (http://www.postfix.org/qmgr.8.html)

Agora vamos entender a finalidade de cada fila.

[editar] incoming

Esta é a fila de e-mails que estâo entrando a partir da rede, repassados pelo maildrop.

[editar] active

Esta é a fila de e-mails que foram abertos pelo gerenciador da fila para entregas. Essa fila tem um numero limite para entrada de mensagens.

[editar] deferred

Esta é a fila de mensagens que não conseguiram ser entregues na primeira tentativa. O gerenciador da fila vai seguir as configurações do main.cf para novas tentativas de entregas. Por padrão ele vai dobrando o tempo de entrega a cada tentativa.

[editar] corrupt

Os arquivos das filas que não conseguem ser lidos ou que estão danificados são movidos para esta fila para uma inspeção.

[editar] hold

Mensagens que são colocadas em espera pelo administrador vão para esta fila até que alguém especifique que ela deva ser liberdada.

[editar] onde ficam os diretórios e arquivos das filas ?

Elas ficam no diretório /var/spool/postfix/

root@mail-pri:/etc/postfix# ls /var/spool/postfix/ -la
total 2156
drwxr-xr-x  19 root    root        4096 Dec 13  2006 .
drwxr-xr-x  12 root    root        4096 May 27 08:58 ..
drwx------   2 postfix root      405504 May 28 08:45 active
drwx------   2 postfix root        4096 May 28 08:45 bounce
drwx------   2 postfix root        4096 Mar 26  2006 corrupt
drwx------  18 postfix root        4096 Apr  3  2006 defer
drwx------  18 postfix root        4096 Apr  3  2006 deferred
drwxr-xr-x   2 root    root        4096 May 27 10:37 etc
drwx------   2 postfix root        4096 May 27 10:13 flush
drwx------   2 postfix root        4096 Mar 26  2006 hold
drwx------   2 postfix root     1691648 May 28 08:45 incoming
drwxr-xr-x   2 root    root        4096 May 27 10:37 lib
drwx-wx--T   2 postfix postdrop   36864 May 28 08:45 maildrop
drwxr-xr-x   2 postfix root        4096 May 20 11:37 pid
drwx------   2 postfix root        4096 May 27 10:37 private
drwx--s---   2 postfix postdrop    4096 May 27 10:37 public
drwx------   2 postfix root        4096 Mar 26  2006 saved
drwx------   2 postfix root        4096 Apr  5  2007 trace
drwxr-xr-x   3 root    root        4096 Mar 26  2006 usr

veja o conteúdo do diretório deferred

root@mail-pri:/etc/postfix# ls /var/spool/postfix/deferred/
0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

veja o conteúdo dos sub-diretórios em deferred

root@mail-pri:/etc/postfix# ls -la /var/spool/postfix/deferred/0/
total 216
drwx------   2 postfix postfix  12288 May 28 08:15 .
drwx------  18 postfix root      4096 Apr  3  2006 ..
-rwx------   1 postfix postfix   7648 May 28 08:48 021CF81FC
-rwx------   1 postfix postfix 119423 May 28  2008 05AE380DC
-rwx------   1 postfix postfix  30256 May 28  2008 05FA581C3
-rwx------   1 postfix postfix   5002 May 28  2008 097EE80AD
-rwx------   1 postfix postfix   4578 May 28  2008 0CBB081B8
-rwx------   1 postfix postfix  18921 May 28 08:48 0FB458081

verificando o tipo de arquivo

root@mail-pri:/etc/postfix# file /var/spool/postfix/deferred/0/021CF81FC
/var/spool/postfix/deferred/0/021CF81FC: data

[editar] controlando a fila com o comando postqueue

Vamos aprender a gerenciar a fila com o postqueue (http://www.postfix.org/postqueue.1.html)

[editar] postqueue -p

para verificar como está sua fila use o comando

postqueue -p

[editar] postqueue -f

para dar um flush na fila e enviar mensagens que estão aguardando (deferred) use o comando

postqueue -f

[editar] postqueue -i

para iniciar a entrega imediata de uma mensagem na fila deferred

postqueue -i message_id
postqueue -i F2AF0111029

como obter o message id?

posqueue -p|grep endereco@dominio.com.br
F2AF0111029     5514 Wed May 28 07:58:02  nome@dominio

[editar] postqueue -s

para iniciar a entrega imediata de mensagens na fila para um domínio especifico

postqueue -s mda.gov.br

[editar] controlando fila com o comando postsuper

Vamos aprender a gerenciar a fila com o postsuper (http://www.postfix.org/postsuper.1.html)

[editar] postsuper -h

Colocando mensagem em HOLD (espera).

postsuper -h queue_id

[editar] postsuper -H

Libera mensagem colocada em HOLD

postsuper -H queue_id

[editar] postsuper -d

remove mensagem das filas

postsuper -d queue_id

remove todas as mensagens da fila

postsuper -d ALL

[editar] postsuper -p

Faz um purge na nos arquivos temporarios da fila que podem ser sobras de um crash no sistema ou no postfix.

postsuper -p

[editar] postsuper -s

Verifica a estrutura das filas e repara a fila caso exista algum problema.

postsuper -s

[editar] postsuper -r

Recoloca a mensagem na fila, geralmente usamos quando queremos pegar uma mensagem e enviar imediatamente.

postqueue -r queue_id

Se você quiser fazer isto com várias mensagens, coloque-as em um arquivo, uma em baixo da outra e faça o seguinte

cat queueid_list.txt | postqueue -r -

[editar] visualizando a fila com o comando qshape

O Qshape é uma ferramenta de análise estatística do postfix, vamos aprender a usá-lo.

[editar] visualizando fila active

qshape active
qshape active|head

[editar] visualizando fila deferred

qshape deferred
qshape deferred|head

[editar] visualizando fila incoming

qshape incoming
qshape incoming|head

[editar] visualizando fila hold

qshape hold
qshape hold|head

tem vários outras formas de usar o qshape mas a documentação dele é bem clara ;)

[editar] exemplo de saída do qshape

# qshape incoming active
                                       T  5  10 20 40 80 160 320 640 1280 1280+
                                TOTAL 655 60 111  0 43  0   7   6 120  150   158
                     mopar.ops.gov.br 151 40 111  0  0  0   0   0   0    0     0
                           ops.gov.br 109  0   0  0  0  0   0   0   0   50    59
                    correioweb.com.br  55  0   0  0  0  0   0   0  55    0     0
                          ops.gov.br  35  0   0  0  0  0   0   0   0   14    21
                           uai.com.br  31  0   0  0  4  0   0   0  27    0     0
                serv-ops-2.ops.gov.br  20 20   0  0  0  0   0   0   0    0     0
                           uol.com.br  19  0   0  0 19  0   0   0   0    0     0
                      acritica.com.br  14  0   0  0  1  0   0   6   4    0     3
                    redesat-to.com.br  10  0   0  0  1  0   1   0   4    0     4
                      alterosa.com.br   7  0   0  0  1  0   0   0   6    0     0
                          hotamil.com   6  0   0  0  1  0   0   0   2    0     3
                           ibahia.com   5  0   0  0  0  0   0   0   1    2     2
                 consultor.ops.gov.br   5  0   0  0  0  0   0   0   0    2     3
                        inatel.com.br   4  0   0  0  0  0   0   0   2    0     2
                   estagio.ops.gov.br   4  0   0  0  0  0   0   0   0    1     3
                           ojc.com.br   3  0   0  0  0  0   0   0   2    0     1
                           umc.com.br   3  0   0  0  0  0   0   0   0    0     3
                          oesp.com.br   3  0   0  0  0  0   0   0   1    0     2
                        tvcaju.com.br   3  0   0  0  0  0   1   0   0    0     2

[editar] contando mensagens das filas usando o find

vamos criar um arquivo chamado contafilas

# vim /etc/postfix/contafilas

coloque o conteúdo abaixo

#!/bin/sh

# autor: gutocarvalho (guto@gutocarvalho.net)
# data de criacao: 2008-05-28
# baseado nos scripts do queuegraph
  
# uso: ./contafilas

# variaveis

qdir=`/usr/sbin/postconf -h queue_directory` 

incoming=`/usr/bin/find $qdir/incoming -type f -print | wc -l | awk '{print $1}'`
maildrop=`/usr/bin/find $qdir/maildrop -type f -print | wc -l | awk '{print $1}'`
active=`/usr/bin/find $qdir/active -type f -print | wc -l | awk '{print $1}'`
deferred=`/usr/bin/find $qdir/deferred -type f -print | wc -l | awk '{print $1}'`
hold=`/usr/bin/find $qdir/hold -type f -print | wc -l | awk '{print $1}'`
corrupt=`/usr/bin/find $qdir/corrupt -type f -print | wc -l | awk '{print $1}'`

# imprimindo informacoes
 
echo -e "\nE-mails chegando (incoming queue): $incoming"
echo "E-mails sendo processados (maildrop): $maildrop"
echo "E-mails na fila para entrega (active queue): $active"
echo "E-mails que nao foram entregues (deferred queue): $deferred"
echo -e "E-mails com problemas (corrupt queue): $corrupt\n"

o script original do queuegraph soma incoming + active + maildrop para falar a quantidade de e-mails ativos, deixando apenas a variável active, eu preferi modificar, mas se quiser usar como era originalmente, apague a variável incoming e maildrop e deixe apenas a variável active como abaixo:

active=`/usr/bin/find $qdir/active $qdir/maildrop $qdir/incoming -type f -print | wc -l | awk '{print $1}'`

agora ajuste as permissões

# chmod 700 contafilas

para usar

# ./contafilas

saída do comando

E-mails chegando: 1
E-mails sendo processados: 0
E-mails na fila para entrega local: 2
E-mails que nao conseguiram ser entregues local/remoto: 156
E-mails com problemas: 0

pronto ;)

[editar] contando mensagens das filas usando o qshape

Este script vai usar o qshape para contar as filas INCOMING, ACTIVE, DEFFERD e HOLD

vamos criar o arquivos

# vim contafilas-qshape

coloque o conteúdo do arquivos

#!/bin/bash

#getmailq.sh - written by Valec 2006. Steal and share.
#Get postfix queue lengths

#Place in /usr/local/bin/
#exec .1.3.6.1.4.1.2021.53.101.0 mailq /usr/local/bin/getmailq.sh 

QUEUES="incoming active deferred hold corrupt"

for i in $QUEUES; do
        COUNT=`qshape $i | grep TOTAL | awk '{print $2}'`
        printf "$i:$COUNT "
done

ajustando permissões

chmod 700 contafilas-qshape

rodando o script

# ./contafilas-qshape

saída do comando

incoming:0
active:2
deferred:187
hold:0
corrupt:0

pronto ;)

[editar] delivery status reports

Aproveitando o ensejo vamos falar sobre os estados das mesagens, é importante saber que o gerenciador de fila QMGR mantem um arquivo com o mesmo nome da fila em outros diretórios com informações sobre o estado daquela mensagem.

Os estados são:

bounce
defer
trace

Vamos agora entender o que cada estado significa.

[editar] bounce

Informação sobre os motivos da mensagem ter recebido um bounce (mensagem de erro).

Estas informações são gerenciadas pelo BOUNCE DAEMON.

[editar] defer

Informação sobre os motivos da mensagem estar com o envio atrasado.

Estas informações são gerenciadas pelo DEFER DAEMON.

[editar] trace

Informação sobre requisições com o comando sendmail -v ou sendmail -bv do MTA postfix.

Estas informações são gerenciadas pelo TRACE DAEMON.

;)

[editar] recomendo leitura

[editar] referências

Ferramentas pessoais