Utilizando o amavis para inserir Disclaimer

Olá ! Nos artigos anteriores eu expliquei sobre a inserção de Disclaimer utilizando um filtro externo escrito somente para essa funcionalidade:

https://respirandolinux.wordpress.com/2013/01/10/postfix-adicionando-disclaimer-excecoes-de-remetentes-e-arquivos-diferentes-por-dominio/

https://respirandolinux.wordpress.com/2013/01/05/postfix-adicionando-disclaimer-excecoes-de-remetentes/

https://respirandolinux.wordpress.com/2012/12/18/postfix-adicionando-disclaimer-todas-as-mensagens-enviadas/

Porém, se o Amavis já estiver implementado é possível utilizar o mesmo para inserir as mensagens automáticas, portanto veremos essa implementação neste artigo.

Primeiramente, é necessário instalar o altermime, que continua sendo o programa utilizado para modificar a mensagem,

Após instalar o altermime, vamos iniciar a configuração do Disclaimer, podendo ser feita no arquivo 50-user.conf do Amavis:

### HABILITA INSERÇÃO DISCLAIMER
$defang_maps_by_ccat{+CC_CATCHALL} = [ ‘disclaimer’ ];

# Programa utilizado para modificar a mensagem
$altermime = ‘/usr/bin/altermime’;

$policy_bank{‘MYNETS’} = { # Modificar somente as mensagens geradas internamente
originating => 1,
allow_disclaimers => 1,
};

# Arquivo com o Disclaimer
@altermime_args_disclaimer = qw(–disclaimer=/etc/postfix/disclaimer/_OPTION_.txt);

@disclaimer_options_bysender_maps = ({
#Permite incluir disclaimer baseado no dominio ou usuário

#Os domínios matriz e filial terão disclaimers diferentes
‘matriz.com.br’ => ‘matriz.com.br’,
‘filial.com.br’ => ‘filial.com.br’,

#O usuario fabio terá um disclaimer pessoal
fabio@matriz.com.br’ => ‘fabio.matriz.com.br’,

#O usuario fulano não terá um disclaimer

fulano@matriz.com.br’ => ‘empty’,

# Disclaimer para ser inserido caso não se encaixe nos critérios acima
‘.’ => ‘default’,
},);

Feito isso, basta reiniciar o serviço do Amavis que as mensagens automáticas já serão inseridas, sendo preciso criar os arquivos no diretório apontado em altermime_args_disclaimer.

Postfix: Adicionando disclaimer – Exceções de remetentes e arquivos diferentes por domínio

Seguindo a série de tutoriais sobre Disclaimer (ou footer) com Postfix, apresento um script mais elaborado que contempla exceções de remetentes que não devem ter o Disclaimer inserido e a possibildiade de incluir Disclaimers diferentes com base no domínio de origem. Todos os passos para configuração devem ser seguidos conforme o primeiro artigo: https://respirandolinux.wordpress.com/2012/12/18/postfix-adicionando-disclaimer-todas-as-mensagens-enviadas/, substituindo o script pelo que é apresentado nesse tutorial.

Antes de publicar o post explico a lógica utilizada, onde primeiramente serão tratadas as exceções, os remetentes devem ser incluídos no arquivo definido pela variável EXCECOES_REMETENTES. Após tratar as exceções, será feito o tratamento para definir qual o arquivo que deve ser utilizado, o script contempla dois disclaimers, os domínios para qual cada um será aplicado é definido pelas variáveis DISCLAIMER1 e DISCLAIMER2. Os arquivos com os Disclaimer estão como disclaimer1.txt e disclaimer2.txt conforme pode ser visto no Script.

Obs.: É recomendável criar um diretório específico para armazenar  as configurações e arquivos contendo os disclaimers, para uma melhor organização.

Segue o script, que também está publicado em https://github.com/fsschmidt/postfix/blob/master/Disclaimer/disclaimer-pordominio.sh:

#!/bin/sh
# Fabio S. Schmidt <fabio@improve.inf.br>
# 06/Jan/2013
# Contempla excecoes de remetentes que nao terao o disclaimer inserido
# e disclaimers especificos de acordo com o dominio do remetente
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
#REMETENTES QUE NAO DEVEM TER O DISCLAIMER INSERIDO
EXCECOES_REMETENTES=/etc/postfix/excessoes_remetente
#DEFINIMOS QUAL DISCLAIMER DEVE SER INSERIDO PARA CADA DOMINIO
DISCLAIMER1=/etc/postfix/dominios-disclaimer1.txt
DISCLAIMER2=/etc/postfix/dominios-disclaimer2.txt
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap “rm -f in.$$” 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
#FAZ A PESQUISA DO REMETENTE PARA A EXCECAO
from_address=`grep -m 1 “From:” in.$$ | cut -d ” ” -f 2 | cut -d ” ” -f 1`
# FAZ A PESQUISA DO DOMINIO REMETENTE PARA ADICIONAR O DISCLAIMER DESEJADO
from_domain=`grep -m 1 “From:” in.$$ | cut -d ” ” -f 2 | cut -d ” ” -f 1 | cut -d@ -f2`
#TRATA AS EXCECOES PRIMEIRO
if [ `grep -wi ^${from_address}$ ${EXCECOES_REMETENTES}` ]; then
$SENDMAIL -oi “$@” <in.$$
exit $?
#CONSULTA O DOMINIO DO REMENTE PARA ADICIONAR O DISCLAIMER CORRESPONDENTE
elif [ `grep -wi ^${from_domain}$ ${DISCLAIMER1}` ]; then
/usr/bin/altermime –input=in.$$ \
                   –disclaimer=/etc/postfix/disclaimer1.txt \
                   –disclaimer-html=/etc/postfix/disclaimer1.html \
                   –xheader=”X-Copyrighted-Material: Colocar o site da empresa aqui http://www.company.com/privacy.htm&#8221; || \
                     { echo Message content rejected; exit $EX_UNAVAILABLE; }
elif [ `grep -wi ^${from_domain}$ ${DISCLAIMER2}` ]; then
/usr/bin/altermime –input=in.$$ \
                   –disclaimer=/etc/postfix/disclaimer2.txt \
                   –disclaimer-html=/etc/postfix/disclaimer2.html \
                   –xheader=”X-Copyrighted-Material: Colocar o site da empresa aqui http://www.company.com/privacy.htm&#8221; || \
                     { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
### ENVIA A MENSAGEM APOS INSERIR O DISCLAIMER DESEJADO ###
$SENDMAIL -oi “$@” <in.$$
exit $?

Postfix: Adicionando disclaimer – Exceções de remetentes

No primeiro tutorial sobre disclaimer (muitas vezes também chamado de footer) com o Postfix, compartilhei um script básico que irá adicionar o texto automátio em todas as mensagens: https://respirandolinux.wordpress.com/2012/12/18/postfix-adicionando-disclaimer-todas-as-mensagens-enviadas/

Com o script abaixo, é possível definir exceções de remetentes que não terão o disclaimer inserido. Para configurar basta seguir os passos do primeiro artigo e substituir o script pelo arquivo abaixo, que também está publicado em https://github.com/fsschmidt/postfix/tree/master/Disclaimer:

#!/bin/sh
# Fabio S. Schmidt <fabio@improve.inf.br>
# 05/Jan/2013
# Contempla exceções de remetentes que não terão o disclaimer inserido
# Inserir os remetentes para exceção no arquivo definido pela variavel EXCESSOES_REMETENTES
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
#REMETENTES QUE NAO DEVEM TER O DISCLAIMER INSERIDO
EXCECOES_REMETENTES=/etc/postfix/excecoes_remetente
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap “rm -f in.$$” 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
#FAZ A PESQUISA DO REMETENTE PARA A EXCECAO
from_address=`grep -m 1 “From:” in.$$ | cut -d ” ” -f 2 | cut -d ” ” -f 1`
if [ `grep -wi ^${from_address}$ ${EXCECOES_REMETENTES}` ]; then
$SENDMAIL -oi “$@” <in.$$
exit $?
else
/usr/bin/altermime –input=in.$$ \
                   –disclaimer=/etc/postfix/disclaimer.txt \
                   –disclaimer-html=/etc/postfix/disclaimer.html \
                   –xheader=”X-Copyrighted-Material: Colocar o site da empresa aqui http://www.company.com/privacy.htm&#8221; || \
                     { echo Message content rejected; exit $EX_UNAVAILABLE; }
$SENDMAIL -oi “$@” <in.$$
exit $?
fi

Postfix: Adicionando disclaimer – Todas as mensagens enviadas

Olá,  nesse primeiro tutorial sobre adicionar disclaimer, que são mensagens automáticas que serão inseridas no rodapé das mensagens enviadas, faremos a implementação básica modificando todas as mensagens enviadas pelo seu servidor.

Primeiramente, precisamos instalar o software Altermime (http://www.pldaniels.com/altermime/), para qual o Postfix irá redirecionar a mensagem e fará o trabalho de adicionar o Disclaimer, nesse artigo utilizamos o Debian Squeeze com o repositório Stable:

aptitudade install altermime

Agora vamos criar um usuário que será responsável ela execução do filtro externo, assim como o diretório para o mesmo trabalhar as mensagens:

useradd -r -c “Postfix Filters” -d /var/spool/filter filter -s /dev/null

mkdir /var/spool/filter
chown filter:filter /var/spool/filter
chmod 750 /var/spool/filter

Precisamos fazer as modificações abaixo no arquivo Master.cf, para que o mesmo direcione as mensagens para o filtro externo somente para as mensagens enviadas pelo nosso servidor, evitando que o mesmo adicione o conteúdo em mensagens recebidas de fora e ao executar outros filtros locais, como amavis por exemplo.

Modifique o serviço SMTP, conforme abaixo:

127.0.0.1:smtp      inet  n       –       n       –       –       smtpd

IP_LAN:smtp      inet  n       –       n       –       –       smtpd
-o content_filter=disclaimer:

IP_WAN:smtp      inet  n       –       n       –       –       smtpd

Você deve substituir IP_LAN pelo IP utilizado pelos clientes locais de e-mail e IP_WAN pelo IP utilizado para receber as mensagens externas.

Ainda no final do arquivo, adicione o filtro externo:

disclaimer     unix    –       n       n       –       –       pipe
flags=Rq user=filter argv=/etc/postfix/filters/disclaimer.sh -f ${sender} — ${recipient}

Feito isso, crie o arquivo disclaimer.sh no diretório acima (/etc/postfix/filters) com o seguinte conteúdo:

O script abaixo está publicado em: https://github.com/fsschmidt/postfix/tree/master/Disclaimer

Arquivo publicado no

#!/bin/sh
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap “rm -f in.$$” 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }

cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

/usr/bin/altermime –input=in.$$ \
  –disclaimer=/etc/postfix/disclaimer/default.txt \
                   –disclaimer-html=/etc/postfix/default.html \
                   –xheader=”X-Copyrighted-Material: Colocar site da empresa aqui http://www.company.com/privacy.htm&#8221; || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }

$SENDMAIL -oi “$@” <in.$$

exit $?

Modifique o grupo da pasta /etc/postfix/filters e do script disclaimer.sh para filter, para que o usário tenha permissão para executar o mesmo:

chgrp filter /etc/postfix/filters -R

Você  deve colocar a mensagem que será inserida automaticamente nos arquivos /etc/postfix/disclaimer/default.txt e /etc/postfix/default.html, com suas versões em texto puro e HTML, automaticamente.

Observe que através do parâmetro xheader estamos inserindo uma informação no cabeçalho a mensagem e é muito utilizado colocar a URL para as políticas de correio eletrônico da empresa.

Feito isso, efetue o restart no Postfix e teste o funcionamento.

Obs.: Em breve adicionarei novos artigos sobre o Disclaimer no Postfix, podendo criar regras e exceções para remetentes e domínios específicos.