Samba com Antivírus ClamAV no Red Hat 5.x / CentOS 5.x

Não é preciso descrever como é importante em um ambiente onde haja computadores Windows envolvidos que é necessário ter um antivírus no servidor de arquivos Linux ou FreeBSD com o Samba.

Essa versão do artigo irá cobrir Red Hat / CentOS versão 5.x.

Pré-requisitos

1.0 Instalando o ClamAV

É necessário o repositório Yum RPMforge estar instalado e configurado. Veja “Pré-requisitos”.

yum install clamav clamav-db clamd

1.1 Configurando o clamd

Após a instalação do clamav, edite o arquivo /etc/clamd.conf e adeque as suas necessidades.

Para uma utilização geral, a seguinte configuração é suficiente:

Arquivo: /etc/clamd.conf

LogFile /var/log/clamav/clamd.log
LogFileMaxSize 0
LogTime yes
LogSyslog yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
MaxThreads 50
ReadTimeout 300
User root
AllowSupplementaryGroups yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanMail yes
ScanArchive yes
ArchiveBlockEncrypted no

Por que o usuário ‘root’? Porque por padrão o Clamd roda como usuário ‘clamav’ e quando o Samba chamar o clamav e for necessário apagar algum arquivo com vírus ele não vai ter permissão.

Inicar e garantir que iniciará no boot:

chkconfig --levels 35 clamd on
service clamd start
Starting Clam AntiVirus Daemon:                            [  OK  ]

1.2 Configurando freshclam para atualizações

Editar o arquivo de configuração do freshclam que ficará parecido com o seguinte:

Arquivo: /etc/freshclam.conf

DatabaseDirectory /var/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogTime yes
DatabaseMirror db.br.clamav.net
DatabaseMirror database.clamav.net
DatabaseOwner root
NotifyClamd /etc/clamd.conf
SubmitDetectionStats /etc/clamd.conf

Criar o arquivo de log pro Freshclam

touch /var/log/clamav/freshclam.log
chown clamav:clamav /var/log/clamav/freshclam.log

Caso seu servidor não tenha acesso diretamente à internet mas você possui um proxy na rede, coloque os seguintes parâmetros no arquivo /etc/freshclam.conf com as informações do proxy.

Arquivo: /etc/freshclam.conf

HTTPProxyServer 192.168.1.1
HTTPProxyPort 3128
HTTPProxyUsername user
HTTPProxyPassword s3nh4

Após isso, a permissão do arquivo /etc/freshclam.conf deverá ser 0600.

chmod 0600 /etc/freshclam.conf

Pode-se executar o comando freshclam para atualizar a assinatura de vírus.

freshclam

2.0 Instalando o Samba

A versão que vem por padrão com o Red Hat / CentOS não é possível utilizar em conjunto com o vscan, por isso será necessário compilar o Samba para que tenha suporte ao samba-vscan.

2.0.1 RPMs 64 bits gerados

Se o seu SO é 64 bits, então os pacotes do Samba eu compilei e estou disponbilizando aqui, pra facilitar o trabalho e não ser necessário instalar o ambiente de desenvolvimento no servidor.

Caso queira compilar, prossiga para o próximo passo

2.0.2 Preparando o Samba para gerar o pacote .rpm

Faça o download do RPM source do samba:

cd ~
wget http://netops.nexicom.net/centos/5.4/updates/SRPMS/samba-3.0.33-3.14.el5.src.rpm

Instalar os arquivos:

rpm -ivh samba-3.0.33-3.14.el5.src.rpm

É necessário descompacatar o .tar.gz do código fonte e depois compactá-lo.

cd /usr/src/redhat/SOURCES
tar zxvf samba-3.0.33.tar.gz
cd samba-3.0.33/source
./autogen.sh && ./configure
make proto

Se ao tentar compilar o Samba, ao executar os comandos acima você tiver a seguinte mensagem:

./autogen.sh && ./configure
./autogen.sh: running script/mkversion.sh
./script/mkversion.sh: 'include/version.h' created for Samba("3.0.33")
./autogen.sh: running autoheader -I. -Ilib/replace
./autogen.sh: running autoconf -I. -Ilib/replace
Now run ./configure and then make.
SAMBA VERSION: 3.0.33
LIBREPLACE_LOCATION_CHECKS: START
...
LIBREPLACE_LOCATION_CHECKS: END
LIBREPLACE_CC_CHECKS: START
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

É por que não tem os pacotes de desenvolvimento instalado, para resolver isso, instale-os:

yum install rpm-build gcc gcc-c++ make autoconf automake libtool

2.1 Fazer o download do vscan

2.1.1 Binário 64bits do vscan

Caso seu SO seja 64 bits, estou dispobilizando a biblioteca do vscan-clamav já compilada.

Caso seja 32 bits ou queira compilar o código fonte, prossiga para o próximo tópico.

2.1.2 Compilando pelo código fonte

cd ~
wget http://www.openantivirus.org/download/samba-vscan-0.3.6c-beta5.tar.gz

Descompactar:

tar zxvf ~/samba-vscan-0.3.6c-beta5.tar.gz -C /usr/src

Compilar o samba-vscan:

cd /usr/src/samba-vscan-0.3.6c-beta5/
./configure --with-libclamav --with-samba-source=/usr/src/redhat/SOURCES/samba-3.0.33/source/

Ao final, você terá algo como:

** Configuration summary for samba-vscan 0.3.6c beta5 :

 Compile samba-vscan for Samba      : "3.0.33"
 Compile samba-vscan with sources in: /usr/src/redhat/SOURCES/samba-3.0.33/source/
 Compile samba-vscan backends       : oav sophos fprotd fsav trend icap mksd kavp clamav nai antivir
 Use GLOBAL_LIBS                    : -lmagic
 Use libmksd as                     : builtin
 Use libkavdc as                    : builtin

Hora de começar a compilar o samba-vscan:

cd /usr/src/samba-vscan-0.3.6c-beta5
make

Por enquanto é isso. Não execute make install.

2.1 Gerando o .rpm para o samba com vscan

2.1.1 Gerar o .rpm do samba

Agora é necessário compactar o diretório samba-3.0.33 novamente pra gerar o .rpm com tudo certo dentro.

Instalar dependências:

yum install cups-devel gnutls-devel pam-devel readline-devel ncurses-devel libacl-devel openldap-devel openssl-devel
cd /usr/src/redhat/SOURCES/
mv samba-3.0.33.tar.gz samba-3.0.33.tar.gz.orig
tar zcvf samba-3.0.33.tar.gz samba-3.0.33

Gerar o .rpm do samba-3.0.33:

cd /usr/src/redhat/SPECS/
rpmbuild -bb samba.spec

Ao final do processo, você terá algo como:

Wrote: /usr/src/redhat/RPMS/x86_64/samba-3.0.33-3.14.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/samba-client-3.0.33-3.14.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/samba-common-3.0.33-3.14.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/samba-swat-3.0.33-3.14.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/samba-debuginfo-3.0.33-3.14.x86_64.rpm
...

Para instalar, utilizaremos o próprio rpm.

rpm -iUvh /usr/src/redhat/RPMS/x86_64/samba-3.0.33-3.14.x86_64.rpm /usr/src/redhat/RPMS/x86_64/samba-client-3.0.33-3.14.x86_64.rpm /usr/src/redhat/RPMS/x86_64/samba-common-3.0.33-3.14.x86_64.rpm

Eu já tinha o samba instalado e nesse caso não me deixou instalar por cima e finalizou com as seguintes mensagens:

Preparing...                ########################################### [100%]
	package samba-common-3.0.33-3.15.el5_4.1.x86_64 (which is newer than samba-common-3.0.33-3.14.x86_64) is already installed
	package samba-3.0.33-3.15.el5_4.1.x86_64 (which is newer than samba-3.0.33-3.14.x86_64) is already installed
	package samba-client-3.0.33-3.15.el5_4.1.x86_64 (which is newer than samba-client-3.0.33-3.14.x86_64) is already installed

Nesse caso é seguro executar o rpm com o parâmetro --force

rpm -iUvh --force /usr/src/redhat/RPMS/x86_64/samba-3.0.33-3.14.x86_64.rpm /usr/src/redhat/RPMS/x86_64/samba-client-3.0.33-3.14.x86_64.rpm /usr/src/redhat/RPMS/x86_64/samba-common-3.0.33-3.14.x86_64.rpm
Preparing...                ########################################### [100%]
   1:samba-common           ########################################### [ 33%]
   2:samba                  ########################################### [ 67%]
   3:samba-client           ########################################### [100%]

3.0 Configuração do vscan

No diretório /etc/samba crie o arquivo de configuração para o samba-vscan (um exemplo desse arquivo está em: /usr/src/samba-vscan-0.3.6c-beta5/clamav/vscan-clamav.conf)

Arquivo: /etc/samba/vscan-clamav.conf

max file size = 0
verbose file logging = no
scan on open = yes
scan on close = yes
deny access on error = yes
deny access on minor error = yes
send warning message = yes
infected file action = delete
quarantine directory  = /tmp
quarantine prefix = vir-
max lru files entries = 100
lru file entry lifetime = 5
exclude file types =
exclude file regexp =
clamd socket name = /var/run/clamav/clamd.sock
scan archives = yes
libclamav max files in archive = 1000
libclamav max archived file size = 10485760
libclamav max recursion level = 5

64 bits

Copie a lib gerada do vscan para o ClamAV que está em /usr/src/samba-vscan-0.3.6c-beta5/

cd /usr/src/samba-vscan-0.3.6c-beta5/
cp vscan-clamav.so /usr/lib64/samba/vfs

32 bits

Copie a lib gerada do vscan para o ClamAV que está em /usr/src/samba-vscan-0.3.6c-beta5/

cd /usr/src/samba-vscan-0.3.6c-beta5/
cp vscan-clamav.so /usr/lib/samba/vfs

4.0 Configuração do Samba para utilizar o vscan

Edite o arquivo /etc/samba/smb.conf e adicione as entradas em [global]

Arquivo: /etc/samba/smb.conf

        vfs object = vscan-clamav
        vscan-clamav: config-file = /etc/samba/vscan-clamav.conf

Pronto.

Só falta iniciar ou reiniciar o Samba:

service smb start
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]

Os logs dos arquivos scanneados são mostrados em /var/log/messages.

5.0 Não permitir que o yum atualize o Samba

É interessante não permitir que o yum atualize o Samba, se isso acontecer, as alterações feitas pelo samba-vscan quando compilamos ele serão perdidas e você perderá as funcionalidade de antivírus do Samba.

Para fazer isso, é bem simples, adicione a seguinte linha no arquivo /etc/yum.conf na sessão [main]

exclude=samba*
Share this post

8 comments

Join the conversation
  • João B. Silva BRAZIL - 06/04/2010 reply

    Como diria um amigo meu: “isso aqui é a prova de bala”.

    Excelente guia e parabéns pelo conteúdo do site. Obrigado por compartilhar.

    Essa integração funcionou perfeitamente apenas tive que fazer um ajuste no tamanho máximo a ser analisado pelo Clamd, ficava meio lento quando um arquivo era grande ( > 200Mb).

    Obrigado e continue com o bom trabalho!

  • Thiago Gomes BRAZIL - 22/07/2010 reply

    Amigo,

    Esse tutorial é show de bola.. porem instalar numa maquina 32bits e nao consegui.. fiz até o topico 2.0, depois disso ficou confurso por causa da versao 64 bits.. por acaso pode fazer um complicado.. ou então mandar para o meu e-mail..

  • Thiago Gomes BRAZIL - 22/07/2010 reply

    Desculpe.. escrive errado.. eu quis dizer se por acaso vc pode fazer um tutorial somente para 32 bits e ou então maquina para o meu e-mail..

    obrigado

    Daniel Kühl Lima BRAZIL - 23/11/2010 reply

    Oi, siga o passo 2.0.2 que voce terah a versao para 32bits compilada.

  • Andre de Andrade BRAZIL - 23/11/2010 reply

    Excelente tutorial. Me deparei com um problema e não estou saindo do outro lado… não consigo scannear meus arquivos o log apresenta: Nov 23 11:58:17 SrvArq smbd_vscan-clamav[2797]: ERROR: file .//arquivo_001.txt not found, not readable or an error occured
    Nov 23 11:58:17 SrvArq clamd[2793]: lstat() failed on: .//arquivo_001.txt
    Aparentemente seria problema de path, ja que esse arquivo encontra-se fisicamente em /dados/publico. Não creio q seja permissão, estou rodando o clam como root, conforme orientado. Por onde devo seguir? abraços

    Daniel Kühl Lima BRAZIL - 23/11/2010 reply

    No caso teria que ver qual eh o erro que estah aparecendo no arquivo de log do samba, geralmente eh no smbd.log.

    Essa msg de erro que colou estah aparecendo no /var/log/messages neh.

    O que voce pode fazer, eh apagar todos os arquivos dentro de /var/clamav e executar o comando

    freshclam

    pra baixar as assinaturas de virus.

    O caminho .//arquivo.txt nao faz nenhum sentido, coloca a linha:

    debug yes

    no arquivo clamd.conf

    e se aparecer no log alguma linha como:

    lstat() failed on

    Sim, eh problema de permissao ou o Socket pro Clamav nao estah sendo encontrado.

  • Raphael - 27/12/2010 reply

    Daniel,

    Sabe como devo proceder, no caso, tendo já o samba 3.5.6 instalado?

    Daniel Kühl Lima BRAZIL - 06/02/2011 reply

    Ainda não o fiz, mas o segredo está em compilar o vscan usando o source do samba, então, teoricamente ele compilaria usando o source do samba 3.5.x.

    Valeu!

Join the conversation