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*
Be Sociable, Share!
 banner ad