Você está na página 1de 5

verificar no master.

cf smtp inet n n -o content_filter=clamav:clamav smtpd

no final do arquivo master.cf clamav unix n n pipe flags=Rq user=clamav argv=/usr/lib/postfix/clamav-filter.sh -f ${sender} -- ${recipient} =======================================================================

clamd.conf

The clamd.conf file is quite simple and needs no additional explanation:


# configuration file for clamd # # format is "key value"

# comments start with `#' and go to end of line # blank lines are okay # lines cannot be continued loglevel logfile poll_time # sample_time email_list 3.0 # sample time in seconds 1 /rotse/run/log/clamd.log 0.1 # main loop time quantum # 0,1,2 = terse,verbose,debug

"observer@rotse3a.lanl.gov" # send mail to on open/close

==================================================================

INTEGRANDO O POSTFIX COM O CLAMAV


Gleydson Soares (gsoares) - Deives Michellis "thefallen"

Aumento de Desempenho 1. Software Utilizado 2. Partindo pra instalacao o 2.1. ClamAV o 2.2. ClamAV Filter 3. Integrando com o SpamAssassin 4. Acertando alguns detalhes no Postfix 5. Mantendo o "banco de dados" do ClamAV sempre atualizado 6. Um pouquinho de Teoria (para os nao tao apressados :D) 7. Finalizando Autores

Colaboradores

Aumento de Desempenho
Muitos admins sofreram ou ainda sofrem com o aumento de virus na Internet, causando lentidao na entrega e recebimento em seus MTAs. Tudo isso por falta de um filtro que trabalhasse diretamente com o postfix sem precisar passar pelo amavis ou mailscanner (os famosos consumidores de memoria e cpu ;)). Quem no j teve a experiencia de integrar o postfix com expresses body_checks para rejeitar o email antes mesmo que ele passe pelo amavis ou mailscanner e se surpreendeu com o alto desempenho. Porem a soluo ideal integrar um antivirus diretamente com o MTA. Nesse tutorial usaremos o postfix junto com o clamav (antivirus livre).

1. Software Utilizado

ClamAv - http://www.clamav.net/ / http://aleron.dl.sourceforge.net/sourceforge/clamav/clamav0.70.tar.gz Clamav Filter - http://www.unitednerds.org/projects/mail/ / http://www.unitednerds.org/projects/mail/clamav-filter.sh.bz2 Postfix - http://www.postfix.org - Subentende-se que voce ja possui o Postfix configurado e rodando, soh aguardando o antivirus :)

2. Partindo pra instalacao


2.1. ClamAV
Primeiramente, descompacte o tar.gz do ClamAV e crie os usuarios padrao.
root@maquina:/usr/src# tar -xvzf clamav-0.70.tar.gz root@maquina:/usr/src# groupadd clamav root@maquina:/usr/src# adduser -g clamav -s/bin/false -c"ANTI-VIRUS Clamav" clamav

Para compilarmos, vamos usar algumas opcoes no ./configure:


root@maquina:/usr/src/clamav-0.70# ./configure --prefix=/usr --sysconfdir=/etc && make && make install

Pronto, seu ClamAV est instalado, agora so falta configurar o seu /etc/clamav.conf. Apenas algumas linhas precisam ser alteradas. Entre elas, precisamos comentar a linha "Example" e descomentar as linhas "ScanMail" e "User clamav". Voce pode querer tambem alterar algumas variaveis do ClamAV, como lugar em que eh gerado o unix socket. Segue abaixo um exemplo de clamav.conf:
#/etc/clamav.conf LogTime # Voce pode ter o log no syslog ou em um arquivo de log, ou os 2. LogSyslog LogFile /var/log/clam/clamd.log PidFile /var/run/clam/clamd.pid LocalSocket /var/run/clam/clamd.sock FixStaleSocket MaxThreads 50 ThreadTimeout 600 MaxDirectoryRecursion 15

FollowFileSymlinks SelfCheck 600 User clamav ScanMail ScanArchive ArchiveMaxFileSize 10M ArchiveMaxRecursion 5 ArchiveMaxFiles 1000

Nesse exemplo, foram usados os diretorios (inexistentes) /var/run/clam, /var/log/clam. Crie ambos e de permissoes para o usuario "clamav" (caso queira usar essa estrutura de diretorios):
root@maquina:# mkdir /var/run/clam /var/log/clam root@maquina:# chown -R clamav:clamav /var/run/clam /var/log/clam

Nao se esqueca de colocar o /usr/sbin/clamd para ser iniciado no boot. Note que eh uma boa ideia inicialo ANTES do Postfix (assim, quando o Postfix requisitar o antivirus, ele ja esta la.)

2.2. ClamAV Filter


Bem, aqui devemos dar nosso agradecimento ao thefallen em ter aberto nossos olhos em relao a essa implementao e pelo desenvolvimento desse filtro. Pegue o script em http://www.unitednerds.org/projects/mail/clamav-filter.sh.bz2 Descompacte o script no diretorio : /usr/lib/postfix (ou /usr/libexec/postfix), e d permissao de execuo com o comando "chmod 0755 clamav-filter.sh". Nao se esqueca de criar o diretorio de spool /var/spool/filter com o usuario "clamav" como owner.
root@maquina:/usr/lib/postfix# root@maquina:/usr/lib/postfix# root@maquina:/usr/lib/postfix# root@maquina:/usr/lib/postfix# bunzip2 clamav-filter.sh.bz2 chmod 0755 clamav-filter.sh mkdir /var/spool/filter chown clamav:clamav /var/spool/filter

Dentro do arquivo master.cf insira as seguintes linhas:


smtp inet n n -o content_filter=clamav:clamav smtpd

clamav unix n n pipe flags=Rq user=clamav argv=/usr/lib/postfix/clamav-filter.sh -f ${sender} {recipient}

--

OBS - se voce antes usava amavis, nao se esqueca de comentar as linhas referentes a ele no master.cf e se atente em tirar a linha "content_filter = smtp-amavis:[127.0.0.1]:10024" dentro do main.cf.

3. Integrando com o SpamAssassin


Eh bastante simples integrarmos o SpamAssassin ao nosso script do Clamav Filter. Supondo que voce ja tenha o SpamAssassin instalado, e o "spamd" rodando, basta editar o clamav-filter.sh e mudar a linha:
SENDMAIL="/usr/sbin/sendmail -i "

Para:
SENDMAIL="/usr/bin/spamc -f -e /usr/sbin/sendmail -i "

Agradecimentos a David da Guia Carvalho pela dica :)

4. Acertando alguns detalhes no Postfix


Podemos acertar alguns detalhes no Postfix para evitar que o filtro de timeout sob carga pesada. No master.cf, voce pode limitar a quantidade de processos do filtro rodando ao mesmo tempo (para evitar que o workload da maquina suba muito). No exemplo abaixo, limitamos a 15 instancias do filtro; aumente esse limite com calma e veja ate onde seu servidor aguenta sem "abrir o bico" :)
clamav unix n n 15 pipe flags=Rq user=clamav argv=/usr/lib/postfix/clamav-filter.sh -f ${sender} {recipient} -$

Precisamos tambem ajustar a variavel "command_time_limit" no main.cf. Essa variavel diz quanto tempo um comando externo ao Postfix pode rodar antes de ser "morto" pelo processo "master". O default eh de 1000s; esse valor deve ser suficiente para a maioria dos ambientes. No entanto, em horarios de pico de utilizacao da maquina, ou sob ataque, esse limite pode causar erros de "Timeout Exceeded" no Postfix. Pode aumenta-lo para um valor maior (talvez 1h) para evitar isso. Basta colocar no main.cf uma linha assim:
#/etc/postfix/main.cf: command_time_limit = 1h

5. Mantendo o "banco de dados" do ClamAV sempre atualizado


O ClamAV ja vem com uma ferramenta para fazer isso, o "freshclam". Pode-se inicia-lo como um "daemon" no sistema e deixar que ele verifique se ha atualizacoes no "banco de dados" do ClamAV. Voce pode inicia-lo com o comando:
/usr/bin/freshclam --log-verbose --daemon-notify --daemon --checks=50 --log=/var/log/clam/freshclam.log

Depois que se sentir "seguro" com o funcionamento do ClamAV (depois que ja tiver mostrado pro seu chefe que o ClamAV se atualiza sozinho mesmo :D), voce pode remover as opcoes de "verbose" do clamav.conf e do freshclam. Isso economiza espaco em disco, descartando logs desnecessarios. Ah, nao se esqueca de colocar o freshclam para rodar no boot tambem :)

6. Um pouquinho de Teoria (para os nao tao apressados :D)


O comando "clamdscan" conecta ao daemon (via unix-domain ou tcp sockets) "clamd" e solicita que o daemon verifique o arquivo. Manter o clamd rodando e apenas solicitar verificacoes pelo cliente agiliza bastante o processo de verificacao. Dessa maneira, voce evita o desperdicio de recursos que seria carregar todo o banco de dados de virus apenas para scanear um arquivo. Eh por esse motivo que precisamos rodar o script com o mesmo usuario que o "clamd" estara rodando, para que ele possa acessar as mensagens na fila de filtragem. Faca um teste rodando o clamdscan e rodando o clamscan (esse nao usa o clamd; ele carrega todas as definicoes de virus e depois scaneia). No ultimo benchmarking que eu fiz, o clamscan levava em media 80 segundos para fazer o que o clamdscan fazia em 5-7 segundos.

Para integrarmos o ClamAV Filter ao Postfix, usamos as opcoes de content_filter do Postfix ligadas ao processo "pipe" do mesmo, que permite que enviemos mensagens "para fora" do Postfix. Ha mais explicacoes sobre isso na Palestra do evento LinuxChix-BR de 2004, disponivel neste mesmo site (http://www.unitednerds.org/thefallen/docs/?area=Postfix).

7. Finalizando
Bem, agora so digitar "postfix reload" e ver como a performance de seu MTA vai melhorar em 99%. Bom agora voc pode pedir seu aumento salarial ao seu chefe que com certeza ele vai aceitar hehehehehe abrao e espero ter ajudado, qualquer dvida envie um email