Debian: servidor de arquivos, antivirus, lixeira e auditoria


  • Ambiente:
    • Sistema básico + Categoria Servidor de Arquivos
    • Disco de instalação (netinst-amd64)
  • Softwares utilizados: Samba+Clamav+Scannedonly
    • Samba: 3.2.5
    • Clamav: 0.95.2
    • Scannedonly: 0.15

Introdução

A implementação de servidores de arquivos utilizando a plataforma GNU/Linux permite a utilização de diversos recursos, bem como obter ganhos de performance e segurança.

Este artigo irá apresentar a implementação de um servidor arquivos utilizando a distribuição Debian GNU/Linux Lenny, bem como, a utilização de 3 módulos VFS (Virtual File System) no Samba, para disponibilizar as funcionalidades de Lixeira, Auditoria e Antivirus.

O módulo Recycle permite que os compartilhamentos apresentem o recurso de Lixeira, ou seja, durante a exclusão de arquivos, os usuários terão esses arquivos movidos para outro compartilhamento com a função de Lixeira.

A implementação que será exposta, disponibilizará um compartilhamento para cada usuário logado no servidor, para os mesmos armazenarem seus arquivos, e um compartilhamento que servirá como Lixeira individual para cada usuário.

O segundo módulo VFS utilizado é chamado Full_Audit, que permite o registro detalhado das operações realizadas sobre cada arquivo, operações como acesso, criação e exclusão de arquivos.

Outrossim, este módulo permite que o log gerado tenha um formato que permita a sua leitura de forma mais fácil, e claro, sendo muito rico em detalhes.

O terceiro módulo utilizado é chamado de Scannedonly que desempenhará o papel de backend entre o Samba e o Antivirus Clamav.

Como muitos sabem, a platarforma GNU/Linux possui excelente histórico com relação a quantidade virus e worms que podem comprometer o sistema.

A utilização de usuários com privilégios bastante limitados, combinada ao uso de sistemas de controle mandatários como por exemplo AppArmor e o SeLinux que possibilitam proteger os componentes principais do Sistema Operacional, entretanto um Antivirus permite que os arquivos do usuário em questão não sejam comprometidos, o que muitas vezes é pior que ocorrer o comprometimento dos componentes do sistema.

Em comparação com a platarforma Windows, a quantidade de virus existentes para o GNU/Linux é muito menor.

Isso é uma vantagem, mas ao mesmo tempo faz com que muitos usuários administradores ignorem o fato de que um servidor Linux atuando como Servidor de Arquivos em uma rede utilizando protocolo CIFS, possa vir atuar como repositório de virus.

Muitos administradores preferem manter apenas as estações de trabalho com softwares Antivirus, mas com certeza adicionar uma camada extra de proteção ao ambiente é importante.

Deste modo, implementar um Servidor de Arquivos com Antivirus permite essa segunda camada de proteção, da mesma forma que possibilita que ambientes não muito bem administrados com relação a atualização de definições de virus e/ou uso de antivirus menos eficientes tenham o servidor de arquivos infectados por uma estação, e através do servidor infectado outra estação nos mesmos moldes da estação contaminada seja contaminada também.

Características do Scannedonly

No site do projeto (http://olivier.sessink.nl/scannedonly/index.html) estão expostas várias características do software, mas dentre elas, considerei interessante a possibilidade de redirecionar o scanning de arquivos para outro servidor.

Deste modo, um servidor que atende bem a demanda do número conexões x tamanho dos arquivos, mas que não possui poder de processamento adequado para o scanning de arquivos, poderia ter essa funcionalidade desempenhada por outro servidor na rede.

Outra característica importante do scannedonly é a escalabilidade, ou seja, quando o mesmo é utilizado em ambientes de média a larga escala, com muitos usuários requisitando acesso a arquivos, bem como, a existência de muitos arquivos grandes e compactados. Nestas condições o módulo Scannedonly se sai melhor que o módulo Samba-vscan.

Vantagens do Samba-vscan sobre o Scannedonly

O Samba-vscan realiza o scanning de arquivos a cada requisição realizada sobre um arquivo (on-access), deste modo, um arquivo que não esteja infectado sempre estará disponível para o usuário. Outrossim, o Scannedonly irá negar o acesso na primeira requisição, após a primeira requisição o daemon (scannedonlyd_vscan) será notificado, o arquivo escaneado e somente após a segunda requisição do arquivo é que o arquivo estará disponível caso não esteja infectado.

Vantagens do Scannedonly sobre o Samba-vscan

Com a descrição da vantagem do Samba-vscan sobre o Scannedonly também ficou clara a desvantagem dele em relação ao modo como ele trabalha.

O Scannedonly escaneia apenas uma vez o arquivo requisitado, na próximas requisições ele verificará a existência de um arquivo de controle contendo o nome do arquivo requisitado e a extensão .scanned, caso exista esse arquivo de controle as próximas requisições não demandaram novo escaneamento do arquivo.

Diferentemente do Samba-vscan que a cada requisição de acesso ao arquivo, realiza o escaneamento do mesmo. Deste modo, um arquivo muito acessado por diversos usuários e várias vezes, demandará o seu escaneamento várias vezes.

Imagine um servidor com 3000 a 4000 arquivos DBF, com cada um possuindo em média 80 a 100 MB e sendo acessado constantemente por 50 usuários, este foi um dos ambientes que presenciei o uso do Samba+Samba-vscan+Clamav onde o administrador já havia realizado a substituição do switch e estava pensando em implementar agregação de link no servidor, com a esperança de que isso fosse resolver seus problemas com relação a alta latência no acesso, mas o problema estava no utilização da CPU, que em momentos de pico (quase todo o expediente) estava entre 85 a 100%.

O projeto Samba-vscan e as versões mais recente do Samba

O projeto Samba-vscan é com certeza um excelente projeto, mas está a algum tempo sem disponibilizar versões que sejam compatíveis com versões das séries mais atuais do Samba, por exemplo, a série 3.4.

O software Scannedonly foi descoberto durante minhas pesquisas e acesso a muitos foruns de discussão sobre a utilização do Samba-vscan nas versões mais recentes do Samba.

Além das diversas pesquisas, realizei modificações nos fontes do Samba-vscan na tentativa de obter exito na compilação, mas não obtive exito devido o pouco disponível para estudar o código fonte.

Deste modo, optei por uma alternativa ao Samba-vscan, pois as versões das séries 3.2 e 3.4 trazem naturalmente diversas correções de segurança, recursos e aumento no desempenho com relação as versões anteriores, sendo assim, andei vendo que muitos administradores tem realizado a instalação de versões anteriores do Samba contendo muitos bugs, como forma de poder obter êxito na compilação do Samba-vscan.

Implementando o Servidor de Arquivos
Ajustes no arquivo de repositórios do APT

Realize a cópia do arquivos de configuração dos repositórios utilizados pelo gerenciador de pacotes apt.

# cp /etc/apt/source.list /etc/apt/source.list.default

Realize a inclusão dos repositórios contrib e non-free, deixando o arquivo source.list semelhante ao exibido na figura 1.

m316a4e58Figura 1 – Arquivo de configuração de repositórios do APT.

Atualização do banco de dados de pacotes

# apt-get update

A execução do apt-get upgrade não será necessária caso você tenha optado por instalar o sistema a partir do disco netinst, onde o download dos pacotes são realizados via internet.

Alguns ajustes no servidor (opcional)

Instale o utilitário rcconf para ativação/desativação de serviços do sistema.

# apt-get install rcconf

Execute o utilitário rcconf e desative os seguintes serviços:

  • exim4
  • mountnfs-bootclean.sh
  • mountnfs.sh
  • nettalk
  • nfs-common
  • nfs-kernel-server
  • openbsd-inetd
  • portmap
  • rsyslog
  • umountnfs.sh

Instalando o OpenSSH Server (recomendável)

# apt-get install openssh-server

Instalando o Sysklogd

# apt-get install syslogd

Instalando o Clamav Antivirus

# apt-get install clamav clamav-docs clamav-daemon clamav-freshclam

Para realizar testes de scanning de arquivos com clamav é interessante instalar o pacote com arquivos de testes.

# apt-get install clamav-testfiles

Se quiser realizar com arquivos realmente infectados, etc você poderá realizar o download no site www.rigacci.org/comp/virus/ (realize esse procedimento por sua conta e risco).

Será necessária a instalação das bibliotecas de desenvolvimento do Clamav, para que o ScannedOnly possa realizar a solicitação de scanning de arquivos ao Clamav. A não instalação do pacote contendo as bibliotecas de desenvolvimento implicará em erro de compilação do Scannedonly.

Portanto execute:

# apt-get install libclamav-dev

Para que o antivirus seja capaz de realizar o scanning em arquivos compactados é essencial instalar pacotes de utilitários compactadores/descompactadores de formatos como por exemplo: arc, bzip2, cab, 7zip, zip e rar.

Esta é uma falha encontrada em diversas implementações em produção que já verifiquei, inclusive, em muitos artigos que explicam a implementação de servidores de arquivos com Samba+SambaVscan+Clamav não é dada a devida atenção ao suporte de formatos de arquivos compactados no sistema, sendo assim, o administrador só irá descobrir o problema verificando os erros informados no log onde não foi possível acessar o arquivo compactado.

# apt-get install arc bzip2 cabextract p7zip unzip unrar

Assim como o Samba-vscan o Scannedonly necessita dos arquivos contendo o código fonte do Samba.

Deste modo, iremos instalar o pacote que contém os mesmos. Como a instalação está sendo baseada em boa parte no uso do gerenciador apt-get, então a necessidade de ter deixado as linhas deb-src no arquivo sources.list

Outrossim, antes de realizar-mos o processo de instalação do pacote com os fontes será necessária a instalação do pacote dpkg-dev, que traz como dependência uma série de pacotes como compiladores, bibliotecas e ferramentas de desenvolvimento como o make.

Deste modo, execute:

# apt-get install dpkg-dev

A seguir instale o pacote com os fontes do Samba:

# cd /usr/local/src
# apt-get source samba

Ao término do processo foi realizado o download de 3 arquivos e a criação de um diretório referente aos fontes do Samba, um arquivo contendo o código fonte, outro contendo os patches de segurança.

O diretório conterá os arquivos com os fontes que utilizaremos na compilação do ScannedOnly.

Devemos agora acessar o diretório dos fontes do Samba e gerar o make file, bem como, alguns arquivos headers devido eles conterem alguns prototipos de funções utilizados pelo scannedonly, este procedimento também é necessário na compilação do samba-vscan.

# cd samba-3.0.25/source
# ./configure
# make proto

A seguir iremos realizar o download dos fontes do ScannedOnly:

# cd /usr/local/src
# wget http://olivier.sessink.nl/scannedonly/scannedonly-0.15.tar.bz2

Proceda com a descompatação e desconcatenação dos arquivos, e a geração do make file:

# tar -xvjf scannedonly-0.15.tar.bz2
# cd scannedonly-0.15
# ./configure -with-samba-source=/usr/local/src/samba-3.2.5/source
 -with-samba-vfs-dir=/usr/lib/samba/vfs

Atente ao fato do PATH do diretório dos fontes, onde estou considerando que instalamos o pacote no diretório /usr/local/src, mude o PATH conforme o diretório de trabalho que foi utilizado durante o comando “apt-get source samba”.

Realize a compilação e instação:

# make && make install

Criando um shell script de inicialização para Scannedonly

# cd /etc/init.d
# vi scannedonly

#!/bin/sh
scannedonly=”/usr/local/sbin/scannedonlyd_clamav”
port=”2020″
quarent_dir=”/quarentena”
$scannedonly -p $port -d $quarent_dir

Modifique a permissão de acesso do script de modo que ele seja um arquivo executável:

# chmod +x scannedonly

Crie os links simbólicos para inicialização e finalização do daemon scannedonlyd_clamav

# update-rc.d scannedonly defaults

Configurando o Samba

Realize o backup do arquivo exemplo instalado juntamente com o pacote do Samba, pois o mesmo pode servir como referência futura.

# mv /etc/samba/smb.conf /etc/samba/smb.conf-default

Crie o arquivo smb.conf e insira o seguinte conteúdo:

# vi /etc/samba/smb.conf
[global]
netbios name = fileserver
server string = Servidor de arquivos
workgroup = skynet
socket options = TCP_NODELAY SO_RCVBUF=102400 SO_SNDBUF=102400
interfaces = lo eth0
bind interfaces only = yes
log level = 0
passdb backend = tdbsam
max log size = 1024
load printers = no
printing = bsd
printcap name = /dev/null
getwd cache = yes
[homes]
comment = Diretorio pessoal - %U
path = /arquivos/%U
read only = no
guest ok = yes
vfs object = recycle full_audit scannedonly
# Auditoria
full_audit:success = open, opendir, write, unlink, rename, mkdir, rmdir
full_audit:prefix = %u|%I|%S
full_audit:failure = none
full_audit:facilit = local5
full_audit:priority = notice

# Antivirus
scannedonly: domain_socket = False
scannedonly: portnum = 2020
scannedonly: scanhost = localhost
scannedonly: hide_noscanned_files = True

# Lixeira
recycled:keeptree = yes
recycle:versions = yes
recycle:repository = /lixeira/%U
recycle:exclude = *.tmp, *.log, *.iso, *.wav, *.mp3, *.wmv, *.avi
recycle:excludir = tmp, cache

[lixeira]
comment = Lixeira - %U
path = /lixeira/%U
valid users = %U
create mask = 0700
directory mask = 0700
browseable = yes
read only = no
vfs object = scannedonly

# Antivirus
scannedonly: domain_socket = False
scannedonly: portnum = 2020
scannedonly: scanhost = localhost
scannedonly: hide_noscanned_files = True
[quarentena]
comment = Diretorio de quarentena
path = /quarentena
valid users = admin
create mask = 0700
directory mask = 0700
browseable = no
read only = no

Execute o comando testparm para verificar erros de sintaxe.

Além de verificar a saída do comando testparm é importante verificar as mensagens gravadas nos arquivos log.smbd e log.nmbd contidos em /var/log/samba afim de indentificar erros na inicialização dos daemons do Samba, bem como, erros durante a utilização do servidor durante os testes iniciais.

Inicie os daemons do Samba:

# /etc/init.d/samba restart

Crie os diretórios para os Arquivos dos usuários, Lixeira e Quarentena

# mkdir /arquivos /lixeira /quarentena

Crie as contas de usuários que terão compartilhamentos no servidor

A seguir está sendo realizada:

Criação do usuário fulano no sistema:

# useradd -d /dev/null -s /bin/false fulano

Bloqueio da conta de usuário fulano no sistema:

# passwd -l fulano

Criação do usuário fulano no Samba:

# smbpasswd -a fulano

Criação dos diretórios para arquivos pessoais e lixeira para o usuário fulano:

# mkdir /arquivos/fulano /lixeira/fulano

Ajuste de permissões de acesso e mudança do dono dos diretórios:

# chmod 700 /arquivos/fulano /lixeira/fulano
# chown fulano /arquivos/fulano /lixeira/fulano

Auditoria de acesso

Para verificar os acessos realizados, você pode executar o seguinte comando:

# tail -f /var/log/messages |grep smbd_audit

Auditoria de infecção de arquivos

Todos os arquivos infectados são movidos automaticamente para o diretório quarentena, ao mesmo que no diretório onde o arquivo infectado estava é gerado um arquivo de texto vazio contendo como prefixo a frase “VIRU_found_in_” seguido do nome do arquivo infectado e com o sufixo “.txt”.

Além do arquivo gerado é possível acompanhar os registros de infecção armazenados no arquivo syslog, através do comando:

# tail -f /var/log/syslog |grep scannedonly

Realizando testes

Lixeira

Copie alguns arquivos para o compartilhamento do(s) usuário(s) que você criou, em seguida exclua-o(s) e verifique que o mesmo foi movido para o compartilhamento lixeira.

Arquivos infectados

Você pode realizar o teste com arquivos infectados utilizando os arquivos de teste que foram instalados com o pacote clamav-testfiles.

Os arquivos se encontram no diretório /usr/share/clamav-testfiles, você pode simplesmente copia-los para o diretório utilizado como compartilhamento pessoal do usuário.

Se quiser realizar outros testes com arquivos realmente infectados, pode realizar o download de arquivos infectados através do link (www.rigacci.org/comp/virus/ ) informado no inicio do artigo (realize esses testes por sua conta e risco).

Conclusões

Através dos módulos VFS do Samba é possível expandir as capacidades de um servidor Samba, sendo que, recursos como Lixeira e Antivirus são muito bem vindos a Servidores de Arquivos pois evitam dores de cabeça maiores devido exclusões acidentais, bem como, infecção de arquivos importantes e claro, que nosso servidor se tranforme em repositório de virus.

Em relação ao módulo Scannedonly, ele permite que o Servidor Samba tenha sua escalabilidade aumentada com relação a ambientes onde é realizado o acesso a muitos arquivos simultâneamente bem como, esses arquivos sejam grandes e/ou compactados, simplesmente graças ao bom desempenho que o Scannedonly proporciona nessas condições.

Por Waldemar Dibiazi Junior <waldemar_jr [at] hotmail.com>

Fonte: Guia do Hardware

4 Responses to Debian: servidor de arquivos, antivirus, lixeira e auditoria

  1. Simplesmente perfeito seu tutorial!
    muito bem explicado e atualizado, está faltando material assim sobre este assunto com um nível tão bom!
    obrigado e continue assim!

  2. Waldemar Junior disse:

    Que ótimo que gostou do artigo.
    Estarei iniciando a escrita de novos artigos nesse fim de ano.

Conte-nos o que achou...

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: