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.shAdicione 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 Scamnailer16. 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 fireholConfigurações do Firehol:
vi /etc/default/firehole altere o seguinte:
START_FIREHOL=YESvi /etc/firehol/firehol.confe 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 acceptIsso 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-ianacom 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-ianacom o seguinte conteúdo e
chmod +x /usr/sbin/update-iana#!/bin/sh
/usr/sbin/get-iana < /etc/firehol/get-iana-answerfilevi /etc/firehol/get-iana-answerfilecom o seguinte conteúdo:
yesExecute o script para atualizar os RESERVED_IPS:
/usr/sbin/update-ianaAgora 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 firehol17. 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::LDAPvi /usr/bin/getadsmtp.plcom 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.plEdite 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.
- Defina $dc1 e $dc2 para os nomes de domínio totalmente qualificados ou endereços IP de 2 dos seus controladores de domínio.
- 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.
- 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.plNeste 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 reloadFinalmente, 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.shcom o seguinte e
chmod +x /usr/bin/update-relay_recipients.sh#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reloadNão se esqueça de garantir que o seguinte esteja no seu arquivo /etc/postfix/main.cf:
relay_recipient_maps = hash:/etc/postfix/relay_recipientsAdicione 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.deb19. 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 altermimeEm 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/filterDepois, 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/disclaimerAgora, 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.txtFinalmente, 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 :-)
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.