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.
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