Antivírus para Servidor de EMAIL (Linux/Sendmail) Nota: Instalação e a operação foi totalmente testado em ambiente Linux com sendmail como SMTP-server. O software antivírus utilizado foi o da McAfee/NAI, portanto para o software antivírus que você mais gosta, altere os parâmetros conforme necessário, o antivirus da McAfee/NAI não é GRATUITO ! Os links aqui informados podem estar desatualizados, para o antivírus da McAfee procure no site www.nai.com.br, e para o amavis em www.amavis.org. MUITO CUIDADO com a versão do AMAVIS que você baixar, pois este manual não SE REFERE a versão em PERL !!! Começando... 1. Instruções para Instalação do AMaVis: 1.1 Instalando o software: O truque principal é a utilização da shell script scanmails, que executará o software de antivírus para fazer a varredura no arquivo atachado ao email, inclusive do corpo (body) da mensagem, pois alguns vírus vem no corpo da mensagem, e não como atachado. 1.2 Baixe o pacote AMaVis do endereço: http://www.amavis.org/dist/amavis-0.2.1.tar.gz 1.3 Destarrear o arquivo baixado em um diretório qualquer (preferencial vazio), p.ex: /tmp/amavis; 1.4 Execute os comandos abaixo no diretório onde você destarreou o arquivo amavis-0.2.1.tar.gz (/tmp/amavis): [root@servidor amavis]# ./configure [root@servidor amavis]# make [root@servidor amavis]# make install 1.5 Se der algum erro an compilação do AMaVis com relação ao software TNEF, você deve baixar e instalar o tnef, busque no endereço: http://world.std.com/~damned/software.html ou http://world.std.com/~damned/tnef-1.1.tar.gz, versão 1.1 e compile-o: tar xvfz tnef-1.1.tar.gz cd tnef-1.1 ./configure make make install 1.6 Mate o processo sendmail ("killall -HUP sendmail") ou pelo comando abaixo: [root@servidor uvscan]# /etc/rc.d/init.d/sendmail stop OBSERVAÇÃO: Para BARRAR vírus que venham no CORPO (body) da mensagem, vamos mudar o utilitário utilizado no parâmetro [metamail], alterando de /usr/bin/metamail para /usr/bin/ripmime, mas para isto, você precisa ter o ripmime instalado. Se não estiver instalado, faça conforme abaixo, caso contrário, faça o passo 1.9: 1.7 Procure por ripmime-xxx.rpm (conforme sua distribuição Linux), no site www.rpmfind.net, e baixe-o para instalar posteriormente. A versão que eu estou utilizando está em: ftp://ftp.rpmfind.net/linux/PLD/current/dists/ra/PLD/i686/PLD/RPMS/ripmime-1.2.16.7-1.i686.rpm 1.8 Faça a instalação executando no prompt do Linux: rpm -Uvh ripmime-1.2.16.7-1.i686.rpm 1.9 Modificando o arquivo /etc/sendmail.cf manualmente, por exemplo: Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@SPfhn, S=10/30, R=20/40, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u Alterar para: #Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@SPfhn, S=10/30, R=20/40, # T=DNS/RFC822/X-Unix, # A=procmail -Y -a $h -d $u Mlocal, P=/usr/sbin/scanmails, F=lsDFMAw5:/|@SPfhn, S=10/30, R=20/40, T=DNS/RFC822/X-Unix, A=scanmails -Y -a $h -d $u ATENÇÃO: não altere a linha, duplique os comandos que foram comentados, descomente-os e altere P=/usr/bin/procmail para P=/usr/sbin/scanmails e A=/usr/bin/procmail para A=/usr/sbin/scanmails OBSERVAção: a script /usr/sbin/scanmails NÃO SUBSTITUI o /usr/bin/procmail !!! Pois dentro da script /usr/sbin/scanmails tem a execução do /usr/bin/procmail, portanto fique tranquilo se você criou regras dentro para utilizar o procmail, elas continuarao a funcionar normalmente !!! 2. Faça alterações no arquivo /usr/sbin/scanmails: ATENÇÃO: Faça um BACKUP da sua script /usr/sbin/scanmails !!! 2.1 Faça a alteração do parâmetro METAMAIL, para utilizarmos o ripmime, procure por metamail e faça a alteraçao conforme abaixo: altere de: metamail=/usr/bin/metamail para: metamail=/usr/bin/ripmime 2.2 Altere o comando que utiliza o parâmetro METAMAIL, procure-o e faça a alteraçao conforme abaixo: if [ "x${metamail}" != "x" ] && [ -x ${metamail} ] then ##${metamail} -r -q -x -w ${tmpdir}/receivedmail > /dev/null 2>&1 ## DESATIVADO PARA UTILIZAR RIPMIME ${metamail} -d ${tmpdir}/unpacked/ -i ${tmpdir}/receivedmail > /dev/null 2>&1 else echo "WARNING! Could not decode mailfile (neither metamail nor reformime is installed)" | log_error echo "--> neither decode/detach, nor scanning done !" | log_error fi Aqui a atualização para o ripmime já está pronta, vamos continuar. 2.2 Próximo a linha 50, existe a parametrização dos softwares de antivírus, para o software da McAfee, você deve alterar conforme abaixo: ################################################ # Path to NAI antivírus (uvscan) # # (if installed) # ################################################ uvscan=/usr/local/bin/uvscan uvscan_version=4 uvscan3_cmdl="--recursive --summary --verbose" uvscan4_cmdl="--secure -rv --summary" vírus_name=Desconhecido # to use EXTRA.DAT file (for the latest vírus) # add --extra /path/EXTRA.DAT ! Obs: IMPORTANTE !!! Altera o parâmetro uvscan_version para 4 (quatro). Inclua o parâmetro [vírus_name], para enviarmos o nome do vírus no ASSUNTO (subject) do email ! 2.1 próximo a linha 154, existe a parametrização de quem deve receber o email de alerta sobre contaminação por vírus, conforme abaixo o email seria enviado para: notifysender - Quem envio o email (remetente); notifyreceiver- Quem iria receber o email, mas não recebeu por estar contaminado com vírus (destinatário); notifyadmin - Para o Administrador de Rede, assim ele fica sabendo o que está acontecendo ! ################################################ # send vírus report to admin (see mailto)? # # send notification message to sender? # # send notification message to receiver? # ################################################ notifyadmin=yes notifysender=yes notifyreceiver=yes 2.2 Inclua na shell /usr/sbin/scanmails, a execução do comando para obter o nome do vírus, o comando é: vírus_name=`cat ${tmpdir}/logfile | grep "Found the" | cut -d " " -f 11` E somente serve o antivírus da McAfee (NAI) !!! Aqui nós guardamos o parâmetro [vírus_name], portanto você deve ter incluído o parâmetro no passo 2.2 ! Veja como ficaria a execução para o antivírus da McAfee: ########################## McAfee ################################## if [ "x${uvscan}" != "x" ] then if [ "x${uvscan}" != "x" ] && [ -x ${uvscan} ] then if [ "x${uvscan_version}" = "x3" ] then ${uvscan} ${uvscan3_cmdl} ${tmpdir}/unpacked >> ${tmpdir}/${logfile} 2>&1 scanstatus1=$? if [ ${scanstatus1} -eq 139 ] then echo "WARNING! it seems that ${uvscan} crashed while scanning for" | log_error echo " víruses in ${tmpdir}/unpacked" | log_error echo " 139 is an unusual return value for uvscan" | log_error echo " try to upgrade to uvscan 4.0.3 or higher" | log_error fi scanstatus5=0 vírus_name=`cat ${tmpdir}/logfile | grep "Found the" | cut -d " " -f 11` ### INCLUA AQUI ### else ## Version 4.x ${uvscan} ${uvscan4_cmdl} ${tmpdir}/unpacked/ >> ${tmpdir}/${logfile} 2>&1 scanstatus5=$? scanstatus1=0 vírus_name=`cat ${tmpdir}/logfile | grep "Found the" | cut -d " " -f 11` ### INCLUA AQUI ### fi else scanstatus1=0 scanstatus5=0 fi else scanstatus1=0 scanstatus5=0 fi 2.3 próximo a linha 1180, você tem a montagem da notificação de alerta de vírus para o administrador, usuário que enviou e usuário que recebeu. Faça as alterações para "traduzir" as mensagens de alerta, veja como foi feito (se desejar, copie e cole): ====CUT HERE========================================================= ############ A virus was found: Move the mail. ###################### echo " " echo "Virus [${virus_name}] ENCONTRADO enviada notificacao para: [${mailto}]" >> ${tmpdir}/${logfile} if [ "x${do_virusbackup}" = "xyes" ] then mkdir -p ${virusmailsdir}/${myname} mv ${tmpdir}/receivedmail ${virusmailsdir}/${myname}/${virusbackup} chmod 400 ${virusmailsdir}/${myname}/${virusbackup} fi echo " " echo "O email abaixo contem um VIRUS." >${tmpdir}/virusmail echo " " echo Originalmente: $0 "$@" >>${tmpdir}/virusmail if [ "x${do_virusbackup}" = "xyes" ] then echo " " echo "O email foi guardado em: [${virusmailsdir}/${myname}/${virusbackup}]" >> ${tmpdir}/virusmail fi if [ "x${do_log}" = "xyes" ]; then mkdir -p ${systemlogdir} cat ${tmpdir}/${logfile} >>${systemlogdir}/${logfile} fi if [ "x${do_syslog}" = "xyes" ] then ${logger} -p ${syslog_level} -t ${scanscript}"[$$]" "ENCONTRADO VIRUS [${virus_name}] NO EMAIL DE: [${sender}] PARA: [${receiver}]" fi if [ "x${notifyadmin}" = "xyes" ] ; then logdata=`cat ${tmpdir}/virusmail ${tmpdir}/${logfile}` cat </dev/null AVVER=`head -1 readme.txt | cut -d' ' -f11` if [ ! -f dat-$AVVER.tar ]; then for i in *.tar ; do mv $i $i.old done if wget http://download.nai.com/products/datfiles/4.x/nai/dat-$AVVER.tar >/dev/null; then for i in *.dat ; do cp -p $i $i.bak done if tar xf dat-$AVVER.tar; then rm -f *.old echo `date` Successfully updated antivírus DAT files to $AVVER fi fi fi --- fim --- Coloque no cron do sistema, para buscar atualizações com a periodicidade que você achar melhor (todos os dias, a cada 12 horas e etc). SO' PARA GARANTIR: Fora o AMaVis + UvScan (McAfee), eu também uso regras no procmail, para barrar arquivos: - .exe, .bat, .com, .vbs e outros. O que garante mais ainda a segurança com relação a vírus, pois se alguem enviar um email com um vírus NOVISSIMO, ou seja, que não esteja na lista de vírus conhecidos pela antivírus da McAfee, eu garanto o não recebimento do email contaminado na rede interna. Esta ferramenta adicional você pode encontrar em: http://www.ppgia.pucpr.br/~borchardt/tools ou http://www.linuxsecurity.com.br/article.php?sid=2949 OBSERVAções GERAIS: Como a versão do amavis-0.2.1 foi descontinuada, as alterações feitas aqui ficam valendo como atualização para o problema de virus no corpo da mensagem. Espero que não tenha faltado nada, que houve algum problema, entre em contato comigo em PVT no email macedo@marilan.com. BOA SORTE !!! ================================== Alexandre Macedo Administrador de TI macedo@marilan.com Marilan Alimentos S/A www.marilan-biscoitos.com.br Linux Registered User # 106.459 ==================================