FreeBSD

Antivírus

ClamAV


Nosso escopo nesta seção será ter um antivírus funcionando e automatizar, através de um script em shell, a tarefa de varredura dos arquivos armazenados no servidor, em essencial os diretórios home dos usuários.
O antivírus que será utilizado é o ClamAV - Clam AntiVirus. É escrito na linguagem C e possui licensa GPL. O ClamAV não limpa os arquivos infectados, apenas detecta. Seu site é www.clamav.net. Caso já tenha o ClamAV instalado e funcionando, ignore a parte de instalação e configuração do mesmo abaixo, e vá direto para a "Automatização da varredura"


Instalação e configuração do ClamAV

Para instalar o ClamAV é necessário adicionar um grupo e um usuário chamados clamav, da seguintes forma:

# pw group add clamav -g 130
# pw user add clamav -c "Clam AntiVirus" -d "/nonexistent" -s "/sbin/nologin" -u 130 -g 130

Efetue o download da última versão estável a partir de seu site, atualmente é a 0.65, disponível em http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.65.tar.gz. Descompacte este arquivo no diretório /tmp, será criado o diretório clamav-0.65, acesse-o. Digite os seguintes comandos:

# ./configure
# make
# make install

Os executáveis serão instalados em /usr/local/bin e /usr/local/sbin, e o arquivo de configuração fica em /usr/local/etc/clamav.conf. Crie ainda o diretório /var/clamav, com dono clamav e permissão 700, e também o diretório /var/log/clamav. Copie o arquivo de configuração abaixo para /usr/local/etc/clamav.conf. Para maiores detalhes, consulte "man clamav.conf".

-------------------- Arquivo clamav.conf --------------------
# clamav.conf

# Arquivo de log.
LogFile /var/log/clamav/clamd.log

# Para permitir multiplas instancias com o mesmo arquivo de log
# descomente a linha abaixo.
#LogFileUnlock

# Tamanho maximo em bytes do arquivo de log. O valor 0 eh ilimitado.
LogFileMaxSize 0

# Coloca data e hora em cada linha do log.
LogTime

# Usar o Syslog.
#LogSyslog

# Aumenta o detalhamento do log.
#LogVerbose

# Caso desejado salvar o PID em arquivo.
#PidFile /var/run/clamd.pid

# Diretorio contendo arquivos .db.
DataDirectory /usr/local/share/clamav

# Caminho para o socket local.
LocalSocket /var/clamav/clamd

# Remove sockets travados.
FixStaleSocket

# Porta TCP.
#TCPSocket 3310

# Endereco IP. A linha abaixo fornece alguma protecao, ja
# que iremos trabalhar apenas localmente.
TCPAddr 127.0.0.1

# Tamanho maximo da fila de conexoes pendentes.
#MaxConnectionQueueLength 30

# Stream de entrada sera salvo no disco antes de ser scanneado.
#StreamSaveToDisk

# Limite de tamanho do STREAM. Se excedido fecha a conexao.
#StreamMaxLength 10M

# Numero maximo de threads simultaneas. O padrao eh 5.
MaxThreads 20

# Tempo maximo em segs para cada thread. O padrao eh 180.
#ThreadTimeout 500

# Profundidade maxima de varredura de diretorios.
MaxDirectoryRecursion 50

# Segue links simbolicos de diretorios.
#FollowDirectorySymlinks

# Segue links simbolicos de arquivos.
#FollowFileSymlinks

# Intervalo em segs entre cada verificacao da integridade interna.
# O padrao eh 3600.
#SelfCheck 600

# Comando executado quando um virus eh encontrado.
# Nao deve ser usado para deletar ou mover arquivos.
# %v = nome do virus / %f = nome do arquivo
#VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v"

# Usuario sob o qual ira rodar.
User clamav

# Habilita grupos adicionais se o usuario clamav participar de algum.
#AllowSupplementaryGroups

# Nao roda em background. Util para debug.
#Foreground

# Habilita mensagens de debug.
#Debug

# Descomentar a linha abaixo se for varrer arquivos de e-mail.
#ScanMail

# Comentar a linha abaixo para desabilitar a varredura de arquivos.
ScanArchive

# Suporte a arquivos compactados RAR.
#ScanRAR

# Tamanho maximo de arquivo scanneado. O valor 0 eh ilimitado.
ArchiveMaxFileSize 50M

# Recursao maxima em arquivos compactados (um dentro do outro).
ArchiveMaxRecursion 10

# Numero maximo de arquivos dentro de algum compactado.
ArchiveMaxFiles 1000

# Limita a memoria para descompressao bzip2.
#ArchiveLimitMemoryUsage

-------------------- Fim do arquivo clamav.conf --------------------

Após isso, teste o ClamAV através do scanner de linha de comando, executando o seguinte:

# clamascan -r /usr/originais/clamav-0.65.tar.gz

Deverá aparecer a seguinte linha:

/usr/originais/clamav-0.65.tar.gz: ClamAV-Test-Signature FOUND

Este scanner de linha de comando (clamscan) é o programa que iremos utilizar para fazer a varredura nos arquivos. O daemon (clamd) não será utilizado para esta tarefa.

Após isso, devemos configurar o sistema de atualização automática. Prepare o arquivo de log da atualização, através dos seguintes comandos:

# touch /var/log/clamav/clam-update.log
# chown clamav /var/log/clamav/clam-update.log
# chmod 600 /var/log/clamav/clam-update.log

Adicione a seguinte linha ao arquivo /etc/crontab:

0 */4 * * * root /usr/local/bin/freshclam --quiet -l /var/log/clamav/clam-update.log

Isto fará com que o ClamAV seja atualizado a cada quatro horas, de acordo com a documentação do mesmo este é o período mínimo sugerido.

Crie um script para rotacionar o log do ClamAV, coloque-o em /usr/local/script/rotate_log_clamav.sh. Crie também o diretório /var/log/clamav/oldlog.

-------------------- Arquivo rotate_log_clamav.sh --------------------
#!/bin/sh

# Define o nome para arquivamento
OLD_UPDATE_LOG=/var/log/clamav/oldlog/clam-update.log.`date +%y%m%d-%H%M%S`

# move o arquivo para o diretorio de arquivamento
mv /var/log/clamav/clam-update.log `echo $OLD_UPDATE_LOG`

# cria novamente o arquivo de log do update
touch /var/log/clamav/clam-update.log
chown clamav /var/log/clamav/clam-update.log
chmod 600 /var/log/clamav/clam-update.log

# compacta o arquivado
/usr/bin/gzip $OLD_UPDATE_LOG

# apaga os logs com mais de um ano
find /var/log/clamav/oldlog -mtime +365 -exec rm -f {} \;

-------------------- Fim do arquivo rotate_log_clamav.sh --------------------

Edite o arquivo /etc/crontab e adicione a seguinte linha:

20 0 1 * * root /usr/local/script/rotate_log_clamav.sh

Isto fará com que o arquivo de log seja rotacionado à 0h20min do primeiro dia de cada mês.

 

Automatização da varredura

Agora temos um antivírus instalado e funcionando, basta automatizar a tarefa de varredura. Para isso crie um script com o nome /usr/local/script/varredura_antivirus.sh, como o exemplo abaixo, e adapte-o para as suas necessidades. A permissão deve ser 700.

-------------------- Arquivo varredura_antivirus.sh --------------------
#!/bin/sh

COMANDO="/usr/local/bin/clamscan --quiet --log=/var/log/clamav/clamscan.log --recursive --move=/var/infectados --max-files=100 --max-space=100M --max-recursion=15"

$COMANDO /home
$COMANDO --mbox /var/mail

-------------------- Fim do arquivo varredura_antivirus.sh --------------------

Desta forma, será feita a varredura e os arquivos infectados encontrados serão movidos para o diretório /var/infectados. Não esqueça de criar este diretório e atribuir o dono clamav. Será criado também o arquivo de log /var/log/clamav/clamscan.log.

Agende a execução deste script no Cron, para o horário que for mais conveniente. Por exemplo, para fazer a varredura todo dia às 2 horas, insira a seguinte linha no arquivo /etc/crontab:

0 2 * * * root /usr/local/script/varredura_antivirus.sh

 

Atualizado em 03/02/04.

Heini Thomas Geib.
http://www2.unijui.edu.br/~heini

Voltar