SpamSnake · 15 min read · Dec 25, 2025

O SpamSnake Perfeito - Ubuntu Jeos 10.10 Maverick Meerkat - Página 4

14. KAM

vi /etc/cron.daily/kam.sh

Adicione o seguinte conteúdo e

chmod +x /etc/cron.daily/kam.sh
#!/bin/bash
   
 # Versão original modificada por Andrew MacLachlan ([email protected])
 # Adicionadas reinicializações adicionais do MailScanner em caso de falha na reinicialização inicial
 # Feito para que o script funcione silenciosamente em operação normal (bem-sucedida)
 # Aumentado UPDATEMAXDELAY para 900 de 600
 
 # Insira um atraso aleatório até este valor, para espalhar as atualizações de vírus ao longo
 # do relógio. 1800 segundos = 30 minutos.
 # Defina isso como 0 para desativá-lo.
 UPDATEMAXDELAY=0
 if [ -f /opt/MailScanner/var/MailScanner ] ; then
 . /opt/MailScanner/var/MailScanner
 fi
 export UPDATEMAXDELAY
 
 if [ "x$UPDATEMAXDELAY" = "x0" ]; then
 :
 else
 logger -p mail.info -t KAM.cf.sh Atrasando tarefa cron por até $UPDATEMAXDELAY segundos
 perl -e "sleep int(rand($UPDATEMAXDELAY));"
 fi
 
 # JKF Buscar KAM.cf
 #echo Buscando KAM.cf...
 cd /etc/mail/spamassassin
 rm -f KAM.cf
 wget -O KAM.cf http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf > /dev/null 2>&1
 if [ "$?" = "0" ]; then
 #echo Concluído e buscou algo
 if ( tail -10 KAM.cf | grep -q '^#.*EOF' ); then
 # echo Sucesso, então faça um backup
 cp -f KAM.cf KAM.cf.backup
 else
 echo ERRO: Não foi possível encontrar o marcador EOF
 cp -f KAM.cf.backup KAM.cf
 fi
 else
 echo Falhou ao concluir corretamente
 cp -f KAM.cf.backup KAM.cf
 fi
 #echo Recarregando regras de configuração do MailScanner e SpamAssassin
 /etc/init.d/mailscanner reload > /dev/null 2>&1
 if [ $? != 0 ] ; then
 echo "Falha ao recarregar o MailScanner - Tentando novamente..."
 /etc/init.d/mailscanner force-reload
 if [ $? = 0 ] ; then
 echo "Recarregamento do MailScanner bem-sucedido."
 else
 echo "Parando o MailScanner..."
 /etc/init.d/mailscanner stop
 echo "Aguardando um minuto..."
 perl -e "sleep 60;"
 echo "Tentando iniciar o MailScanner..."
 /etc/init.d/mailscanner start
 fi
 
 fi 

15. ScamNailer

vi /usr/sbin/update_scamnailer

e

chmod +x /usr/sbin/update_scamnailer

Nota: *O conteúdo está em scamnailer.doc.)

Adicione ao cron:

@daily /usr/sbin/update_scamnailer &> /dev/null #Atualizar Scamnailer

16. Firewalling o SpamSnake com Firehol

Introdução

Firehol é um configurador de firewall de filtragem de pacotes iptables com estado. É abstrato, extensível, fácil e poderoso. Pode lidar com qualquer tipo de firewall, mas o mais importante, oferece os meios para configurá-lo, da mesma forma que você pensa sobre ele.

Instalar Firehol

apt-get install firehol

Configurações do Firehol:

vi /etc/default/firehol

e altere o seguinte:

START_FIREHOL=YES
vi /etc/firehol/firehol.conf

e adicione o seguinte:

version 5
   # Aceitar todo o tráfego do cliente em qualquer interface
   interface any internet
   protection strong
   server "icmp ping ICMP ssh http https telnet webmin dns dcc echo smtp" accept
 client all accept

Isso filtra todas as conexões de entrada que não estão relacionadas aos serviços acima. Se você quiser ser menos educado, pode descartá-las adicionando o seguinte após ‘protection strong’: policy drop

vi /usr/sbin/get-iana

com o seguinte e

chmod +x /usr/sbin/get-iana
#!/bin/bash
 # $Id: get-iana.sh,v 1.13 2010/09/12 13:55:00 jcb Exp $
   #
   # $Log: get-iana.sh,v $
   # Revisão 1.13 2010/09/12 13:55:00 jcb
   # Atualizado para o formato mais recente de reservas da IANA.
   #
   # Revisão 1.12 2008/03/17 22:08:43 ktsaou
   # Atualizado para o formato mais recente de reservas da IANA.
   #
   # Revisão 1.11 2007/06/13 14:40:04 ktsaou
   # * mensagem de log vazia *
   #
   # Revisão 1.10 2007/05/05 23:38:31 ktsaou
   # Adicionada suporte para definições externas de:
   #
   # RESERVED_IPS
   # PRIVATE_IPS
   # MULTICAST_IPS
   # UNROUTABLE_IPS
   #
   # em arquivos com o mesmo nome em /etc/firehol/.
   # Somente RESERVED_IPS é obrigatório (firehol reclamará se não estiver lá,
   # mas ainda funcionará sem ele), e também é o único arquivo que firehol
   # verifica a idade. Se tiver mais de 90 dias, firehol reclamará novamente.
   #
   # Mudou o script get-iana.sh fornecido para gerar o arquivo RESERVED_IPS.
   # FireHOL também instrui o usuário a usar este script se o arquivo estiver
   # faltando ou estiver muito velho.
   #
   # Revisão 1.9 2007/04/29 19:34:11 ktsaou
   # * mensagem de log vazia *
   #
   # Revisão 1.8 2005/06/02 15:48:52 ktsaou
   # Permitido 127.0.0.1 estar em RESERVED_IPS
   #
   # Revisão 1.7 2005/05/08 23:27:23 ktsaou
   # Atualizado RESERVED_IPS para as reservas atuais da IANA.
   #
   # Revisão 1.6 2004/01/10 18:44:39 ktsaou
   # Mais otimizado e reduzido PRIVATE_IPS usando:
   # http://www.vergenet.net/linux/aggregate/
   #
   # O get-iana.sh fornecido usa .aggregate. se encontrá-lo no caminho.
   # (aggregate é o nome deste programa quando instalado no Gentoo)
   #
   # Revisão 1.5 2003/08/23 23:26:50 ktsaou
   # Bug #793889:
   # Mudar #!/bin/sh para #!/bin/bash para permitir que o FireHOL funcione em sistemas que
   # bash não está vinculado a /bin/sh.
   #
   # Revisão 1.4 2002/10/27 12:44:42 ktsaou
   # Teste CVS
   #
 #
   # Programa que baixa a alocação do espaço de endereços IPv4 pela IANA
   # e cria uma lista com todos os espaços de endereços reservados.
   #
 IPV4_ADDRESS_SPACE_URL="http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
 # O programa irá combinar todas as linhas no arquivo que começam com um número, têm uma barra,
   # seguida por outro número, para o qual o seguinte padrão também irá combinar nas
   # mesmas linhas
   IANA_RESERVED="(RESERVED|UNALLOCATED)"
 # quais linhas que são combinadas pelo acima, para ignorar
   # (ou seja, não incluí-las em RESERVED_IPS)?
   #IANA_IGNORE="(Multicast|Private use|Loopback|Local  Identification)"
   IANA_IGNORE="Multicast"
 tempfile="/tmp/iana.$$.$RANDOM"
 AGGREGATE="`which aggregate 2>/dev/null`"
   if [ -z "${AGGREGATE}" ]
   then
   AGGREGATE="`which aggregate 2>/dev/null`"
   fi
 if [ -z "${AGGREGATE}" ]
   then
   echo >&2
   echo >&2
   echo >&2 "AVISO"
   echo >&2 "Por favor, instale 'aggregate' para reduzir a lista de IPs."
   echo >&2
   echo >&2
   fi
 echo >&2
   echo >&2 "Buscando IANA IPv4 Address Space, de:"
   echo >&2 "${IPV4_ADDRESS_SPACE_URL}"
   echo >&2
 wget -O - -proxy=off "${IPV4_ADDRESS_SPACE_URL}" |\
   egrep " *[0-9]+/[0-9]+.*${IANA_RESERVED}" |\
   egrep -vi "${IANA_IGNORE}" |\
   sed -e 's:^ *\([0-9]*/[0-9]*\).*:\1:' |\
   (
 while IFS="/" read range net
   do
   if [ ! $net -eq 8 ]
   then
   echo >&2 "Não é possível lidar com máscaras de rede de $net bits  ($range/$net)"
   continue
   fi
 first=`echo $range | cut -d '-' -f 1`
   first=`expr $first + 0`
   last=`echo $range | cut -d '-' -f 2`
   last=`expr $last + 0`
 x=$first
   while [ ! $x -gt $last ]
   do
   # test $x -ne 127 && echo "$x.0.0.0/$net"
   echo "$x.0.0.0/$net"
   x=$[x + 1]
   done
   done
   ) | \
   (
   if [ ! -z "${AGGREGATE}" -a -x "${AGGREGATE}" ]
   then
   "${AGGREGATE}"
   else
   cat
   fi
   ) >"${tempfile}"
 echo >&2
   echo >&2
   echo >&2 "ENCONTRADO OS SEGUINTES RANGES DE IP RESERVADOS:"
   printf "RESERVED_IPS=\""
   i=0
   for x in `cat ${tempfile}`
   do
   i=$[i + 1]
   printf "${x} "
   done
   printf "\"\n"
 if [ $i -eq 0 ]
   then
   echo >&2
   echo >&2
   echo >&2 "Falha ao encontrar IPs reservados."
   echo >&2 "Possivelmente o formato do arquivo foi alterado, ou não consigo buscar a URL."
   echo >&2
 rm -f ${tempfile}
   exit 1
   fi
   echo >&2
   echo >&2
   echo >&2 "Diferenças entre a lista buscada e a lista instalada em"
   echo >&2 "/etc/firehol/RESERVED_IPS:"
 echo >&2 "# diff /etc/firehol/RESERVED_IPS  ${tempfile}"
   diff /etc/firehol/RESERVED_IPS ${tempfile}
 if [ $? -eq 0 ]
   then
   echo >&2
   echo >&2 "Nenhuma diferença encontrada."
   echo >&2
 rm -f ${tempfile}
   exit 0
   fi
 echo >&2
   echo >&2
   echo >&2 "Você gostaria de salvar esta lista em  /etc/firehol/RESERVED_IPS"
   echo >&2 "para que o FireHOL a utilize automaticamente a partir de agora?"
   echo >&2
   while [ 1 = 1 ]
   do
   printf >&2 "sim ou não > "
   read x
 case "${x}" in
   sim) cp -f /etc/firehol/RESERVED_IPS /etc/firehol/RESERVED_IPS.old  2>/dev/null
   cat "${tempfile}" >/etc/firehol/RESERVED_IPS || exit 1
   echo >&2 "Novos RESERVED_IPS escritos em  '/etc/firehol/RESERVED_IPS'."
   echo "Firehol será reiniciado agora"
   sleep 3
   /etc/init.d/firehol restart
   break
   ;;
 não)
   echo >&2 "Nada salvo."
   break
   ;;
 *) echo >&2 "Não consigo entender '${x}'."
   ;;
 esac
   done
 rm -f ${tempfile}
vi /usr/sbin/update-iana

com o seguinte conteúdo e

chmod +x /usr/sbin/update-iana
#!/bin/sh
 /usr/sbin/get-iana  < /etc/firehol/get-iana-answerfile
vi /etc/firehol/get-iana-answerfile

com o seguinte conteúdo:

yes

Execute o script para atualizar os RESERVED_IPS:

/usr/sbin/update-iana

Agora seu servidor está configurado para aceitar apenas conexões para os serviços que você permitiu.

Adicione ao cron:

@monthly /usr/sbin/update-iana &> /dev/null #Atualizar ips reservados do firehol

17. Aplicar Destinatários de Relay

As seguintes instruções são destinadas a pessoas que usam Microsoft Exchange 2000 ou Microsoft Exchange 2003.

Esta página descreve como configurar seu gateway de e-mail para obter periodicamente uma lista de endereços de e-mail de destinatários válidos do seu sistema Exchange. Fazendo isso, você pode configurar seu servidor para rejeitar automaticamente qualquer e-mail endereçado a endereços inválidos. Isso reduzirá a carga em seu servidor Exchange, uma vez que ele não precisará mais processar relatórios de não entrega, e reduzirá a carga em seu servidor postfix, pois não precisará realizar a verificação de spam e vírus na mensagem.

Instalar Dependências

Instale o módulo perl Net::LDAP:

perl -MCPAN -e shell  
install Net::LDAP
vi /usr/bin/getadsmtp.pl

com o seguinte:

#!/usr/bin/perl -T -w
   # Este script irá puxar todos os endereços SMTP dos usuários do seu Active Directory
   # (incluindo endereços de e-mail primários e secundários) e listá-los no
   # formato "[email protected] OK" que o Postfix usa com relay_recipient_maps.
   # Certifique-se de verificar o caminho para o perl acima.
   # Isso requer que o Net::LDAP esteja instalado.  Para instalar o Net::LDAP, em um shell
   # digite "perl -MCPAN -e shell" e depois "install Net::LDAP"
   use Net::LDAP;
   use Net::LDAP::Control::Paged;
   use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );
   # Insira o caminho/arquivo para a saída
   $VALID = "/etc/postfix/relay_recipients";
   open VALID, ">$VALID" or die "NÃO É POSSÍVEL ABRIR $VALID $!";
   # Insira o FQDN dos seus controladores de domínio do Active Directory abaixo
   $dc1="domaincontroller1.example.com";
   $dc2="domaincontroller2.example.com";
   # Insira o contêiner LDAP para sua base de usuários.
   # A sintaxe é CN=Users,dc=example,dc=com
   # Isso pode ser encontrado instalando as Ferramentas de Suporte do Windows 2000
   # e depois executando o ADSI Edit.
   # No ADSI Edit, expanda o "Domain NC [domaincontroller1.example.com]" &
   # você verá, por exemplo, DC=example,DC=com (este é o seu base).
   # O Contêiner de Usuários será especificado no painel direito como
   # CN=Users dependendo do seu esquema (este é o seu contêiner).
   # Você pode verificar isso clicando em "Propriedades" da sua pasta de usuário
   # no ADSI Edit e examinando o valor "Caminho", como:
   # LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
   # o que seria $hqbase="cn=Users,dc=example,dc=com"
   # Nota:  Você também pode usar apenas $hqbase="dc=example,dc=com"
   $hqbase="cn=Users,dc=example,dc=com";
   # Insira o nome de usuário e a senha para um usuário válido no seu Active Directory
   # com nome de usuário na forma cn=username,cn=Users,dc=example,dc=com
   # Certifique-se de que a senha do usuário não expire.  Note que este usuário
   # não requer privilégios especiais.
   # Você pode verificar isso clicando em "Propriedades" do seu usuário em
   # ADSI Edit e examinando o valor "Caminho", como:
   # LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
   # o que seria $user="cn=user,cn=Users,dc=example,dc=com"
   # Nota: Você também pode usar o login UPN: "[email protected]"
   $user="cn=user,cn=Users,dc=example,dc=com";
   $passwd="password";
   # Conectando-se aos controladores de domínio do Active Directory
   $noldapserver=0;
   $ldap = Net::LDAP->new($dc1) or
   $noldapserver=1;
   if ($noldapserver == 1)  {
   $ldap = Net::LDAP->new($dc2) or
   die "Erro ao conectar aos controladores de domínio especificados $@ \n";
   }
   $mesg = $ldap->bind ( dn => $user,
   password =>$passwd);
   if ( $mesg->code()) {
   die ("erro:", $mesg->error_text((),"\n"));
   }
   # Quantos resultados de consulta LDAP pegar para cada rodada paginada
   # Defina para menos de 1000 para Active Directory
   $page = Net::LDAP::Control::Paged->new( size => 990 );
   @args = ( base     => $hqbase,
   # Brinque com isso para pegar objetos como Contatos, Pastas Públicas, etc.
   # Um filtro mínimo apenas para usuários com e-mail seria:
   # filter => "(&(sAMAccountName=*)(mail=*)))"
   filter => "(& (mailnickname=*) (| (&(objectCategory=person)
   (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))
   (&(objectCategory=person)(objectClass=user)(|(homeMDB=*)
   (msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))
   (objectCategory=group)(objectCategory=publicFolder) ))",
   control  => [ $page ],
   attrs  => "proxyAddresses",
   );
   my $cookie;
   while(1) {
   # Realizar busca
   my $mesg = $ldap->search( @args );
   # Filtrando resultados para atributos proxyAddresses
   foreach my $entry ( $mesg->entries ) {
   my $name = $entry->get_value( "cn" );
   # Atributos LDAP são multivalorados, então temos que imprimir cada um.
   foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
   # Teste se a linha começa com uma das seguintes linhas:
   # proxyAddresses: [smtp|SMTP]:
   # e também descarte esta string inicial, para que $mail seja apenas o
   # endereço sem outros caracteres...
   if ( $mail =~ s/^(smtp|SMTP)://gs ) {
   print VALID $mail." OK\n";
   }
   }
   }
   # Continue apenas em LDAP_SUCCESS
   $mesg->code and last;
   # Obter cookie do controle paginado
   my($resp)  = $mesg->control( LDAP_CONTROL_PAGED ) or last;
   $cookie    = $resp->cookie or last;
   # Defina o cookie no controle paginado
   $page->cookie($cookie);
   }
   if ($cookie) {
   # Tivemos uma saída anormal, então deixe o servidor saber que não queremos mais
   $page->cookie($cookie);
   $page->size(0);
   $ldap->search( @args );
   # Também seria uma boa ideia morrer infeliz e informar o OP neste ponto
   die("Consulta LDAP malsucedida");
   }
   # Adicione restrições adicionais, usuários, etc. ao arquivo de saída abaixo.
   #print VALID "[email protected] OK\n";
   #print VALID "[email protected] 550 Usuário desconhecido.\n";
   #print VALID "domain3.com 550 Usuário não existe.\n";
   close VALID;

Em seguida, defina as permissões no arquivo para permitir que ele seja executado:

chmod +x /usr/bin/getadsmtp.pl

Edite o arquivo para personalizá-lo para seu domínio específico. Como o arquivo é somente leitura, você precisará usar :w! para salvar o arquivo no vi.

  1. Defina $dc1 e $dc2 para os nomes de domínio totalmente qualificados ou endereços IP de 2 dos seus controladores de domínio.
  2. Defina $hqbase igual ao caminho LDAP para o contêiner ou unidade organizacional que contém as contas de e-mail para as quais você deseja obter os endereços de e-mail.
  3. Defina $user e $passwd para indicar qual conta de usuário deve ser usada para acessar essas informações. Esta conta só precisa ser membro do domínio, então seria uma boa ideia configurar uma conta especificamente para isso.

Tente executar o script. Se funcionar corretamente, ele criará /etc/postfix/relay_recipients.

Observe que se seu servidor postfix estiver separado dos controladores de domínio ativos por um firewall, você precisará abrir a porta TCP 389 do servidor postfix para os ADCs.

getadsmtp.pl

Neste ponto, você pode querer editar /etc/postfix/relay_recipients e remover quaisquer endereços de e-mail indesejados, pois este script importa tudo.

Postmap o arquivo para criar o db hash

postmap /etc/postfix/relay_recipients  
postfix reload

Finalmente, você pode querer configurar um trabalho cron para atualizar e construir periodicamente o arquivo /etc/postfix/relay_recipients.db. Você pode configurar um script chamado /usr/bin/update-relay-recipients.sh: (Opcional)

vi /usr/bin/update-relay-recipients.sh

com o seguinte e

chmod +x /usr/bin/update-relay_recipients.sh
#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reload

Não se esqueça de garantir que o seguinte esteja no seu arquivo /etc/postfix/main.cf:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

Adicione ao cron:

30 2 * * * /usr/bin/update-relay-recipients.sh #sincronizar relay_recipients com endereços do Active Directory

:Nota que este trabalho cron será executado todos os dias às 2:30 AM para atualizar o arquivo de banco de dados. Você pode querer executar o seu com mais frequência ou não, dependendo de com que frequência você adiciona novos usuários de e-mail ao seu sistema.

18. Instalar Webmin (Opcional):

apt-get install perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions  
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/universe/libm/libmd5-perl/libmd5-perl_2.03-1_all.deb  
dpkg -i libmd5-perl_2.03-1_all.deb  
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb  
dpkg --install webmin_1.520_all.deb

19. Adicionar Automaticamente Um Aviso A E-mails Enviados Com alterMIME (Opcional)

Este tutorial mostra como instalar e usar o alterMIME. O alterMIME é uma ferramenta que pode adicionar automaticamente um aviso aos e-mails. Neste artigo, explicarei como instalá-lo como um filtro Postfix no Ubuntu.

Instalando o alterMIME:

apt-get install altermime

Em seguida, criamos o filtro de usuário com o diretório home /var/spool/filter - o alterMIME será executado como esse usuário:

useradd -r -c "Filtros Postfix" -d /var/spool/filter filter  
mkdir /var/spool/filter  
chown filter:filter /var/spool/filter  
chmod 750 /var/spool/filter

Depois, criamos o script /etc/postfix/disclaimer que executa o alterMIME. O pacote alterMIME do Ubuntu vem com um script de exemplo que podemos simplesmente copiar para /etc/postfix/disclaimer:

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer  
chgrp filter /etc/postfix/disclaimer  
chmod 750 /etc/postfix/disclaimer

Agora, o problema com este script é que ele não distingue entre e-mails de entrada e saída - ele simplesmente adiciona um aviso a todos os e-mails. Normalmente, você deseja avisos apenas para e-mails de saída, e mesmo assim, não para todos os endereços de remetente. Portanto, modifiquei um pouco o script /etc/postfix/disclaimer - chegaremos a isso em um minuto.

Neste momento, criamos o arquivo /etc/postfix/disclaimer_addresses que contém todos os endereços de e-mail do remetente (um por linha) para os quais o alterMIME deve adicionar um aviso:

vi /etc/postfix/disclaimer_addresses
[email protected]
[email protected]
[email protected]

Agora abrimos /etc/postfix/disclaimer e o modificamos da seguinte forma (marquei as partes que mudei):

vi /etc/postfix/disclaimer
#!/bin/sh
# Localize estes.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### Mudado do Script Original #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### Mudado do Script Original FIM #######
# Códigos de saída de 
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Limpar quando terminar ou ao abortar.
trap "rm -f in.$$" 0 1 2 3 15
# Começar a processar.
cd $INSPECT_DIR || { echo $INSPECT_DIR não existe; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Não é possível salvar o e-mail no arquivo; exit $EX_TEMPFAIL; }
####### Mudado do Script Original #######
# obter endereço From
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Por favor, visite http://www.company.com/privacy.htm" || \
                    { echo Conteúdo da mensagem rejeitado; exit $EX_UNAVAILABLE; }
fi
####### Mudado do Script Original FIM #######
$SENDMAIL "$@" 

Em seguida, precisamos do arquivo de texto /etc/postfix/disclaimer.txt que contém nosso texto de aviso. O pacote alterMIME do Ubuntu vem com um texto de exemplo que podemos usar por enquanto (claro, você pode modificá-lo se quiser):

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt

Finalmente, temos que dizer ao Postfix que ele deve usar o script /etc/postfix/disclaimer para adicionar avisos aos e-mails de saída. Abra /etc/postfix/master.cf e adicione -o content_filter=dfilt: à linha smtp:

vi /etc/postfix/master.cf
#
# Arquivo de configuração do processo mestre do Postfix.  Para detalhes sobre o formato
# do arquivo, veja a página manual master(5) (comando: "man 5 master").
#
# ========================================================================== 
# tipo de serviço  privado não privilegiado  chroot  despertar  maxproc comando + args
#               (sim)   (sim)   (sim)   (nunca) (100)
# ========================================================================== 
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
[...]

No final do mesmo arquivo, adicione as seguintes duas linhas:

[...] 
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} 

Reinicie o Postfix depois:

/etc/init.d/postfix restart

É isso! Agora um aviso deve ser adicionado aos e-mails de saída enviados dos endereços listados em /etc/postfix/disclaimer_addresses.

20. Capturas de Tela

Parabéns

Você agora deve ter um SpamSnake completo e funcional com todas as funcionalidades :-)

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.