Integrando ClamAV e F-Prot e avast! no Postfix!

Empolgado com a criação do filtro de conteúdo que verifica as headers From: e o Return-Path dos emails, percebi que seria interessante criar um único filtro de conteúdo para os AntiVírus, escaneando todos os emails que chegam no sistema com todos os AntiVírus que tivermos disponíveis em nossos servidores! 💡

Experimentei o ClamAV, F-Prot, avast!, AVG e Panda; todos em suas versões para linux, e dessa lista só não funcionou o AVG (que apresentou erros ao atualizar) e o Panda cuja última atualização do banco de dados de virus foi em 2005.

A idéia e o funcionamento são simples: escanear o email até encontrar um virus, e caso encontre, parar de escanear para não desperdiçar recursos. Além de utilizar os AntiVírus mais rápidos primeiro (como por exemplo o ClamAV que possui um daemon na memória, depois dele o F-Prot carrega e escaneia mais rápido que o avast!).

Esse script possui a opção de colocar os emails em quarentena e avisar o administrador por email caso algum vírus seja encontrado. Também aceita que se crie um daemon exclusivo no Postfix permitindo que seja cascateado mais um filtro de conteúdo!

O script pode ser encontrado aqui. E o suporte à outros AntiVírus pode ser adicionado facilmente derivando um dos módulos existentes dos outros scanners.

Os AntiVírus utilizados podem ser encontrados em:

http://www.clamav.net

http://www.f-prot.com/products/home_use/linux

http://www.avast.com/linux-unix-edition

Algumas notas: O avast! pede uma licensa de uso para cada usuário.. e como o nosso Postfix geralmente usa o usuário nobody, será preciso editar o /etc/passwd e apontar um diretório home para esse usuário (eu escolhi /etc) e então copiar os dados do root em ~/.avast/ para o novo /etc/.avast à cada atualização. Eu também fiz um script bacana que atualiza tanto o avast! quanto o F-Prot, e nos avisa por email quando ocorre alguma atualização. Tal qual o freshclam.sh, a atualização pode ser executada a toda hora! 😀

#!/bin/bash
# Make mail headers
echo 'From: "AntiVirus Updates" av-updates@`hostname --long`' > .update.tmp
echo "Subject: Updates `date "+%d/%m/%Y %H:%M"`" >> .update.tmp
echo "Date: `date` >> .update.tmp
echo "Message-ID: <`date +%Y%m%d%H%M%S`@`hostname`>" >> .update.tmp
echo "" >> .update.tmp
# Update ClamAV
#/etc/cron.hourly/freshclam.sh
# Update avast!
/usr/local/bin/avast-update > .update.tmp.avast 2>&1
if [ -z "`grep "No updates" .update.tmp.avast `" ]; then
  cp -r /root/.avast/* /etc/.avast/
  chgrp nobody /etc/.avast/*
  chmod g+r /etc/.avast/*
fi
# Update F-Prot
/usr/local/bin/fpupdate > .update.tmp.fprot
# If the antivirus updated, send an email!
if [ -z "`grep "No updates" .update.tmp.avast `" ]; then
  updated="yes"
  echo "##### avast! results #####" >> .update.tmp
  cat .update.tmp.avast >> .update.tmp
fi
if [ -n "`cat .update.tmp.fprot`" ]; then
  updated="yes"
  echo "##### F-Prot results #####" >> .update.tmp
  cat .update.tmp.fprot >> .update.tmp
fi
if [ "$updated" = "yes" ]; then
  sendmail -G -i -f av-updates -- root < .update.tmp
fi
rm .update.tmp*

Para não receber o email, basta comentar a linha do sendmail 🙂

Leia mais artigos sobre o Postfix!

Integrando o ClamAV com o Samba e o Postfix e o Squid!

Eis que resolvi, finalmente, trabalhar a idéia de instalar um Anti-Vírus no Linux… algo que eu sempre relutei: tanto pela queda de performance que um Anti-Vírus propicia quanto pela falta de necessidade de se utilizar um Anti-Vírus quando você obtem os seus arquivos somente de fontes extremamente confiáveis (e sabe contudo, analizar o conteúdo dos arquivos e cuidar da manutenção do seu sistema caso algo fora do normal venha a ocorrer). Porém.. como costumo criar backups dos meus clientes em um compartilhamento especial do samba, dedicado a escanear os arquivos com Anti-Vírus, o ClamAV se demonstrou como uma opção adicional ao Avast! e ao AVG.. contando também com a possibilidade de integrá-lo ao Samba, ao Postfix e ao Squid!!

Continuar lendo