Melhorias no controle de SPAM & VIRUS no Zimbra

Integradando SPF, Razor & Pyzor ao SpamAssassin do Zimbra

Instalando spf query

SPF (Sender Policy Framework) é um sistema que tenta prevenir o envio de mensagens forjadas, faz isto através de configurações em seu DNS, quando um e-mail for enviado, o servidor checará as entradas TXT/SPF no seu servidor de DNS, e através dela saberá qual servidor pode entregar mensagens com origem em seu domínio, caso alguém esteja enviando mensagens @seudominio sem ser os servidores citados no registro TXT/SPF o servidor MTA pode ser configurado para recusá-la. É uma maneira bem eficiente de evitar problemas com seu dominio.

Instale a biblioteca para checagem spf

#Debian like

apt-get install libmail-spf-query-perl 

#RedHat like

yum install perl-Mail-SPF perl-Mail-SPF-Query

Instalando o razor2

O Razor2 é um sistema colaborativo, distribuido de filtro para deteccao e controle de spam.

Instale o razor2

#Debian like

apt-get install razor

#RedHat like

yum install perl-Razor-Agent razor-agents

Crie o diretorio do razor

mkdir /opt/zimbra/amavisd/.razor; chown -Rf zimbra:zimbra /opt/zimbra/amavisd/.razor

Agora torne-se zimbra (su zimbra) e crie a conta no razor

razor-admin -home=/opt/zimbra/amavisd/.razor -create
razor-admin -home=/opt/zimbra/amavisd/.razor -discover
razor-admin -home=/opt/zimbra/amavisd/.razor -register

Agora edite o arquivo /opt/zimbra/conf/spamassassin/v310.pre e descomente a linha referente ao razor

loadplugin Mail::SpamAssassin::Plugin::Razor2

Instalando o pyzor

O pyzor é uma rede de sistemas distríbuidos para controle de spam, este utiliza digest de mensagens para fazer análise e identificar o SPAM.

#Debina like

apt-get install pyzor

#RedHat like

wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh

yum install pyzor

Crie o diretorio do pyzor

mkdir /opt/zimbra/amavisd/.pyzor; chown zimbra:zimbra /opt/zimbra/amavisd/.pyzor

Agora como usuario zimbra (su zimbra)

zimbra@zcs:~/amavisd$ pyzor --homedir /opt/zimbra/amavisd/.pyzor discover
downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x
Traceback (most recent call last):
  File "/usr/bin/pyzor", line 8, in <module>
    pyzor.client.run()
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 1005, in run
    ExecCall().run()
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 184, in run
    self.servers  = self.get_servers(servers_fn)
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 411, in get_servers
    servers.read(open(servers_fn))
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 117, in read
    self.append(pyzor.Address.from_str(line))
  File "/var/lib/python-support/python2.5/pyzor/__init__.py", line 458, in from_str
    fields[1] = int(fields[1])
IndexError: list index out of range

Esse erro é normal, o pyzor tenta baixar o arquivo servers atualizado em http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x porém ele o arquivo não está disponível e retorna o erro.

Para resolver este problema, coloque a linha abaixo no arquivo servers dentro do diretório /opt/zimbra/amavisd/.pyzor, pois ele vai funcionar.

zimbra@zcs:/opt/zimbra$ echo "82.94.255.100:24441" > /opt/zimbra/amavisd/.pyzor/servers

Agora vamos fazer um teste para ver se nosso pyzor consegue se conectar no servidor.

zimbra@zcs:/opt/zimbra/amavisd/.pyzor$ pyzor --homedir /opt/zimbra/amavisd/.pyzor ping
82.94.255.100:24441     (200, 'OK')

Ajustando o spamassassin para trabalhar com razor2 e pyzor

Edite o arquivo /opt/zimbra/conf/spamassassin/local.cf

ok_languages en es
ok_locales en es
trusted_networks 127. 10.70. 192.168.
use_bayes 1
skip_rbl_checks 0
use_razor2 1
dns_available yes 

## Optional Score Increases
## Choose your preferred values...
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score PYZOR_CHECK 2.500
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000
bayes_ignore_header Received: from mail3.example.com
bayes_ignore_header Received: from localhost
bayes_ignore_header Received: from mail1.example.com
bayes_ignore_header Received: from mail2.example.com

Ajustando configurações do amavisd-new

Edite o arquivo /opt/zimbra/conf/amavisd.conf

$sa_tag_level_deflt  = -10.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.6; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 15; # triggers spam evasive actions
$sa_dsn_cutoff_level = 15;    # spam level beyond which a DSN is not sent
$sa_quarantine_cutoff_level = 15;  # spam level beyond which quarantine is off

$sa_mail_body_size_limit = 512*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0;    # only tests which do not require internet access?

Integrando postgrey ao zimbra

O postgrey é uma implementação do conceito “greylist”. Muito eficiente no combate ao SPAM a greylist consiste em uma fila especial para entrega de mensagens, ele funciona da seguinte forma, quando um MTA tentar entregar uma mensagem para o seu servidor MTA o postgrey recusar a mensagem, dando um reject com codigo 550 (ou seja, tente mais tarde), se for um servidor real, configurado de acordo com as RFC’s de SMTP, ele tentará entregar a mensagem novamente depois de algum tempo, na segunda tentativa o postgrey libera o envio. Se for um sistema de SPAM ele simplesmente passa para a próxima mensagem de sua lista e não tenta entregar aquela mensagem que foi rejeitada. O postgrey é um sistema simples, com um conceito simples, porém extremamente funcional e diminui muito SPAM e VIRUS, seu fluxo de mensagens e sua fila vão diminuir bastante.

Veja neste gráfico como diminuiu a quantidade de spam e virus do servidor, analise o antes e depois.

Mailgraph greylisting.png

#Debina like

apt-get install postgrey

#RedHat like

yum install postgrey

Agora vamos configurar o postfix do zimbra para ususá-lo, edite o arquivo

vi /opt/zimbra/conf/postfix_recipient_restrictions.cf

E coloque a linha baixo antes da linha que contem a diretiva permite

check_policy_service inet:127.0.0.1:60000

Parametros de inicializacao do postgrey

Agora vamos ajustar os parametros de incializacao do postgrey, edite o arquivo /etc/defaults/postgrey e substitua

POSTGREY_OPTS="--inet=127.0.0.1:60000"

por

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60 --max-age=30"

Vamos entender o que é o que!

--delay especifica o tempo que um MTA ficara na greylist (por quanto tempo ele vai recusar msgs do mta).
--max-age significa por quanto tempo o postgrey vai manter essas informações em cache

whitelist do postgrey

O postgrey possue 2 tipos de whitelist, uma para clients e outra para recipients, vamos ajustar a whitelist de clients, edite o arquivo /etc/postgrey/whitelist_clients e caso queria colocar parte da esplanada dos ministérios lá, ficaria assim…

# ministerios do brasil 

planejamento.gov.br
comunicacoes.gov.br
mc.gov.br
mct.gov.br
mec.gov.br
desenvolvimento.gov.br
mds.gov.br
cultura.gov.br
cidades.gov.br
agricultura.gov.br
incra.gov.br
in.gov.br
mma.gov.br
mme.gov.br
mpas.gov.br
mre.gov.br
saude.gov.br
turismo.gov.br
presidencia.gov.br
brasil.gov.br
defesa.org.br
fazenda.gov.br
esporte.gov.br
integracao.gov.br
mj.gov.br
mte.gov.br
transportes.gov.br

# entidades com status de ministerio

agu.gov.br
cgu.gov.br
bcb.gov.br
nae.gov.br

# autarquias, agencias e programas ligados a ministerios

iti.gov.br
radiobras.gov.br
ebc.tv.br
onid.org.br
tvbrasil.org.br
serpro.gov.br
dataprev.gov.br

Salve a lista, reinicie o postgrey

/etc/init.d/postgrey restart

ou

invoke-rc.d postgrey restart

pronto, postgrey instalado, configurado e integrado!

referências