Gerando um relatório de emails enviados e recusados pelo Postfix.

Após diversas regras de segurança em meu servidor de emails, optei por gerar um relatório classificando todos os emails que foram recusados pelo meu servidor. Facilitando identificar se algum email legítimo havia sido bloqueado!

O script pode rodar diariamente às 8:00, e gera um relatório completo de todos os emails recusados no dia anterior.

#!/bin/bash
export LANG="en_US"
maillog=/var/log/maillog
#maillog=`ls /var/log/old/maillog-* | sort -n | tail -1`
date=`date +%Y%m%d --date='yesterday'`
fulldate=`date '+%d %B %Y' --date='yesterday'`
grepdate=`date '+%b %d' --date='yesterday'`
echo Relatório de emails recusados em $fulldate > .relatorio.txt
echo -e '\n\n' >> .relatorio.txt
for mail in `grep $grepdate $maillog | grep reject | \
             awk '{ print substr($0, match($0, "to="), length($0)) }' | \
             awk '{ print $1 }' | sort -u`
do
  echo Emails recusados para: $mail | sed s/to=\<//g | sed s/\>//g >> .relatorio.txt
  echo -e '\n' >> .relatorio.txt
  grep $grepdate $maillog | grep $mail | grep reject | \
           awk '{ print $1, $2, $3, substr($0, match($0, "reject: "), length($0)) }' \
               >> .relatorio.txt
  echo -e '\n\n' >> .relatorio.txt
done
cat .relatorio.txt | mail -s "Relatório de emails recusados \
                        `date '+%d/%b' --date='yesterday'`" root

Também pode-se adicionar as seguintes linhas no final do script para um relatório dos emails que foram entregues (facilitando identificar se algum spam passou pela barreira!).

echo Relatório de emails enviados em $fulldate > .relatorio.txt
echo -e '\n\n' >> .relatorio.txt
for mail in `grep $grepdate $maillog | grep deliver | \
             awk '{ print $7 }' | sed s/,// | sort -u`
do
  echo Emails enviados para: $mail | sed s/to=\<//g | sed s/\>//g >> .relatorio.txt
  echo -e '\n' >> .relatorio.txt
  for id in `grep $grepdate $maillog | grep deliver | grep $mail | awk '{ print $6 }'`
  do
    grep $grepdate $maillog | grep $id | egrep -e '(client|from)' | \
             awk '{ print $1, $2, $3, substr($0, match($0, $6), length($0)) }' \
                 >> .relatorio.txt
  done
  echo -e '\n' >> .relatorio.txt
done
.cat relatorio.txt | mail -s "Relatório de emails enviados \
                       `date '+%d/%b' --date='yesterday'`" root

Uma ideia sobre “Gerando um relatório de emails enviados e recusados pelo Postfix.

Escreva seu comentário: