segunda-feira, 1 de outubro de 2007

Controlador de Domínio com Samba e Clamwin antivírus utilizando Debian

Este artigo produzido por Tiago André Geraldi, foi muito útil para que eu conseguisse montar um servidor PDC na empresa onde trabalho e por isso estou compartilhando com voçês. No meu caso, ele foi bastante customizado, por exemplo, aqui ele se baseia no Debian 3.1, enquanto eu fiz com o 4.0 Etch, mas serviu de base para que eu pudesse caminhar sózinho.

Boa sorte!!!

Introdução


Esse artigo o guiará passo a passo na montagem de um servidor Samba PDC no Debian 3.1 em modo texto e na personalização do servidor para auto configurar o ClamWin Antivirus nas estações, fazendo com que ele se atualize automaticamente, efetue verificações agendadas e informe no e-mail do administrador os virus encontrados.

O Samba, como todos já sabem, faz com que o Linux possa se comunicar com a plataforma Windows através da rede. Até aí tudo bem, porém, quero apresentar o PDC para quem é novo na área.

PDC ou Controlador de Domínio Primário, é um servidor que gerencia todos as contas dos usuários da rede e controla o logon dos mesmos nas estações Windows estipulando regras de acesso, além de claro, servir arquivos. Com ele podemos configurar scripts de logon que, que são executados toda vez que um usuário se loga, podemos mapear automaticamente unidades de rede, sincronizar data e hora, entre muitas outras possibilidades.

Existe ainda a possibilidade de concentrar todos os arquivos de cada usuário no servidor. Desta forma, não importa em que estação de trabalho o usuário efetue logon, ele sempre terá o seu desktop personalizado, com os seus respectivos documentos. Porém a nossa intenção aqui é fazer justamente o oposto, não concentrar os profiles dos usuários no servidor, tendo em vista que não temos hardware suficiente para isso.

O ClamWin é um antivírus open source para a plataforma Windows, baseado no Clam, famoso antivírus para servidores Unix. O ClamWin é o antivirus para windows mais recomendado na minha opinião, por ser gratuito, ter atualizações freqüentes e não ficar em execução em tempo real (ou seja, ele não fica verificando todos os arquivos que você abre, não comprometendo assim o desempenho da estação).

Por outro lado, é justamente por esse motivo (não ficar ativo continuamente) que ele é criticado. A solução encontrada é agendar verificações diárias. Aqui na minha rede, o ClamWin inicia uma varredura completa todo dia no horário de almoço, elimina automaticamente (se possível) o que encontrou de errado e me manda um e-mail informando se encontrou algum virus e o que fez com ele.

Neste artigo aprenderemos a configurar um servidor PDC do zero e depois sincronizar o ClamWin em todas as estações, através dos scripts de logon.

Ainda antes de começarmos, quero destacar que não podemos nos prender a interfaces gráficas para configurar os serviços do Linux, pois, quando a coisa apertar, teremos que recorrer ao arquivo de configuração em modo texto. Assim, também entendemos melhor as regras e personalizamos melhor o sistema de acordo com nossas necessidades. Além do mais, interfaces gráficas consomem recursos da máquina, o que não é nada interessante.

Sem mais firulas, vamos por a mão na massa...

Instalação e Configuração do Samba

Já que o artigo é dedicado ao Debian, vamos utilizar os próprios repositórios da distribuição para instalar o servidor samba.

# apt-get install samba


O mesmo comando serve para distribuições derivadas como o Conectiva e Ubuntu. Se ainda preferir, baixe o código fonte no site oficial (www.samba.org) e compile, mas isso não será tratado aqui. Ao término, o samba já estará instalado. Agora vamos configurá-lo.

Os arquivos de configuração do samba estão no diretório /etc/samba, podendo variar de acordo com a distro. O principal arquivo é o smb.conf. Como base, abaixo segue o meu smb.conf comentado para que você o adapte a sua rede.

No decorrer do arquivo você encontrará referências a usuários e grupos. A manipulação desses usuários será tratado mais adiante.

Segue o arquivo /etc/samba/smb.conf:

# SERVIDOR SAMBA PDC - DEBIAN GNU/LINUX
# POR TIAGO ANDRÉ GERALDI


[global]
# Na sessão Global está definido a forma como o servidor samba irá funcionar.
# Acompanhe com atenção cada campo.

# No workgroup vai o nome do grupo de trabalho ou Domínio,
# No nosso caso, sendo um PDC, é o nome de Domínio.
workgroup = empresa

# netbios name, o nome do servidor na rede
netbios name = SERVER

# A descrição do servidor para a rede
server string = PDC SERVER LINUX

# Usuário Administrador de Domínio.
# Esses usuários serão administradores do domínio.
# São eles que adicionaram os hosts windows no domínio
# entre outras funções administrativas.
# Pode ser informado vários usuários
# separados por espaços e /ou grupos. No exemplo, usuários
# tiago, darci e o grupo cpd serão os administradores
admin users = tiago darci @cpd

# O PDC é um servidor de data e hora?
# habilitamos essa função e posteriormente faremos os
# computadores da rede sincronizar seu relógio com o servidor
time server = yes

# No caso de haver mais de um PDC na rede, como, por exemplo, um
# servidor Windows NT, as próximas linhas
# dizem se este servidor é o principal PDC e qual é seu OS LEVEL
# (o valor de concorrências com os outros).
# Deixe assim como está se só houver um PDC na rede.
preferred master = yes
domain master = yes
os level = 100

# O Servidor aceitará Logon dos usuários nas estações
domain logons = yes
local master = yes

# As próximas duas linhas referem-se aos diretórios
# onde seriam armazenados os profiles dos usuários.
# No nosso caso, o servidor não guardará essas informações,
# elas ficaram salvas localmente em cada estação, por isso
# as tags ficam vazias.
logon path =
logon home =

logon script = todos.bat
# Script a ser executado pelos usuários quando fizerem logon.
# Os scripts deverão estar dentro da pasta NETLOGON que
# veremos adiante o seu compartilhando, também devem ser .bat
# para que o windows possa executá-lo.
# Neste caso temos um único script para todos os usuários,
# Você pode definir scripts individuais com o nome do usuário
# ex: tiago.bat. Aqui na configuração coloque:
# logon script = %u.bat
# ou ainda conforme o grupo do usuário
# logon script = %g.bat

security = user
# Security: nível de acesso, pode ser user ou share.
# User, temos um controle de autenticação por usuário, cada
# usuário tem suas permissões de acesso. Já como share,
# temos um compartilhamento simples onde todos acessam
# tudo sem nenhum controle.

# O servidor aceitará usuários sem senha?
# Eu prefiro deixar No
null passwords = no

# Habilita senhas criptografadas, é importante a habilitação
# para compatibilidade com windows 2000 e XP
encrypt passwords = true

# Corrige acentuação dos arquivos compartilhados
unix charset = iso8859-1
display charset = cp850

# IPs ou hostnames dos micros da rede
# importante para a segurança, evita conexões indesejadas.
# A classe de IPs da minha rede é 10.1.0.0 talvez a sua
# seja 192.168.0.0, mude de acordo. 127. diz respeito
# ao localhost, o próprio servidor.
hosts allow = 10.1.0. 127.

# arquivo de log do samba
log file = /mnt/sda7/logs/samba/log.%m

# tamanho máximo do arquivo de log em KBs
max log size = 10000

# Nível de detalhes do arquivo log
# altere de 1 a 5 e verifique as diferenças
log level = 2
debug level = 2

# Aqui finda a seção homes. Agora em diante vem os
# compartilhamentos e suas configurações:

# O compartilhamento netlogon é obrigatório
# nele ficará os scripts de logon dos usuários.
# Defina o path, especificando onde está a pasta netlogon
# não esqueça de criá-la também depois.
# Estamos definindo abaixo que o compartilhamento não
# será navegável e que será somente leitura.
[NETLOGON]
comment = Servico de logon
path = /mnt/sda7/netlogon
browseable = no
read only = yes

# Criamos abaixo um compartilhamento público para todos
# acessarem livremente e trocarem arquivos. Ele é
# navegável (browseable=yes), arquivos somente leitura
# podem ser apagados (delete readonly=yes), gravável
# (writable), publico (usuários anônimos também acessaram) e
# disponível (available). Em veto files, defini extensões
# de arquivos que não poderão gravadas, afim de evitar
# abusos. Em create mode, está definido que os arquivos
# criados poderão ser alterados por qualquer um, não
# somente pelo dono, exemplo diferente você verá mais abaixo
[publico]
browseable = yes
delete readonly = yes
writable = yes
path = /mnt/sda7/publico
create mode = 0777
available = yes
public = yes
veto files = /*.mp3/*.wma/*.wmv/*.avi/*.mpg/*.wav/

# O compartilhamento abaixo segue a mesma estrutura,
# a diferença é que só os usuários do grupo adm
# poderão acessá-lo.
[administracao]
path = /mnt/sda6/adm
available = yes
browseable = yes
create mode = 0777
writable = yes
valid users = @adm

# Abaixo temos um compartilhamento com force file mode=700,
# desta maneira os arquivos criados só poderão ser lidos ou
# alterados pelo usuário que os criou.
[bkps]
path = /mnt/sda7/bkps
available = yes
browseable = yes
writeable = yes
force file mode = 700
veto files = /*.mp3/*.wma/*.wmv/*.avi/*.mpg/

# Agora é só ir criando os compartilhamentos que você precisa
# da mesma maneira. Repare que não temos a seção Homes
# comumente vista nos exemplos de smb.conf porque realmente
# não vamos precisar dela.

# smb.conf por Tiago André Geraldi

Criando Grupos e Usuários

Agora já temos um servidor samba configurado. Precisamos ainda adicionar os grupos e os usuários que especificamos no smb.conf. Falta também criar os scripts dos usuários e, por fim, adicionar as máquinas windows no domínio.

Criando grupos:

# addgroup cpd
# addgroup adm
# addgroup maquinas


Neste exemplo, criei assim os dois grupos de usuários que utilizei no meu smb.conf. Faça de acordo com a sua rede. Também foi adicionado o grupo maquinas onde posteriormente cadastraremos os nomes dos hosts da rede.

Criando usuários:

É interessante que os usuários do samba não sejam usuários normais do sistema. Caso contrário, eles poderão efetuar logon no shell no servidor ou mesmo iniciar uma conexão por ssh, o que aumentaria as brechas de segurança no servidor e que ainda nem tenham diretório home.

Para isso, criamos os usuários usando os seguintes comandos:

# useradd -g cpd -s /bin/false -d /dev/null tiago
# smbpasswd -a tiago


Assim criamos o usuário tiago que é do grupo cpd e não tem acesso shell nem diretório home e, em seguida, o cadastramos no samba.

Para alterar a senha de um usuário, use:

# smbpasswd nome_do_usuario


Para excluir um usuário, primeiro o apague do samba, depois do próprio sistema:

# smbpasswd -x nome
# userdel nome


Além dos usuários precisamos também cadastrar os nomes de todas as máquinas. Se um nome de máquina não estiver cadastrado, ela não poderá ser incluída no domínio. Neste exemplo, a máquina a ser incluída será a adm01:

# useradd -g maquinas -s /bin/false -d /dev/null adm01$
# passwd -l adm01$
# smbpasswd -a -m adm01
# smbpasswd -a tiago

Baixando e Instalando o Clamwin nas Estações

O Clamwin está disponível no http://www.clamwin.com. Baixe a versão mais recente na seção downloads e instale normalmente, como é feito com qualquer executável do Windows. Não é necessário realizar nada diferente durante a instalação. Faça isso em todas as estações.

Primeiramente vamos configurar uma estação apenas, colocar seu arquivo de configuração no diretório Netlogon do servidor e configurar os scripts para que sincronizem a configuração nas estações.

Em uma das estações, abra o Clamwin, clique no menu Tools e abra Preferences. Em General selecione a opção "Remove (Use Carefully)" para que os virus sejam removidos automaticamente quando encontrados. Em Shedule Scans, clique em Add. (recomendo usar a opção Daily, para exames diários). Escolha uma hora, a pasta a ser verificada (coloque c:\ para verificar todo o disco) e a descrição.

Na seção Internet Updates, habilite a caixa Update Virus Database on Logon. Em E-mail Alerts, habilite Send Email On Virus Detection, em seguida defina:

Mail Server: servidor de envio. smtp.bol.com.br, por exemplo. A porta a ser usada pelo servidor, 25 é a padrão. Nome de usuário do e-mail que mandará a notificação e senha. Você poderá estar enviando o e-mail de alerta de você para você mesmo, então defina From e To com o mesmo endereço. Clique em Send Test Email para ver se deu tudo certo.

Terminamos a configuração. Vá agora ao diretório "Documents and Settings/nome_do_seu_usuario/Dados de Aplicativos/.clamwin/" e copie os dois arquivos para a pasta netlogon do seu servidor. Tendo em vista que o servidor samba ainda não está em execução, faça isso usando um pendrive ou disquete.

O próximo paço é escrever os scripts de logon.

Escrevendo Scripts de Logon

No arquivo smb.conf ao invés de definirmos o script logon como sendo %u.bat para que seja executado um script com o nome do usuário, por exemplo tiago.bat, colocamos todos.bat. A idéia é a seguinte: em todos.bat colocamos o que todos os usuário irão fazer, por exemplo, sincronizar o Clamwin e data e mapear o publico como P:, no final do arquivo fazemos uma chamada a um arquivo individual com o nome do usuário, assim você terá aquilo que todos executam e aquilo que só um usuário executa. Se não entendeu, entenderá mais abaixo.

Vamos criar o todos.bat. No servidor como root digite:

# vi .../netlogon/todos.bat


Adicione as duas linhas abaixo dentro do arquivo:

net use p: \\server\publico /yes
net time \\server /set /yes


Obs: "server" é o nome do servidor, mude se necessário. Uma linha mapeia o público como p: outra sincroniza a data e hora.

Agora vamos sincronizar o antivírus. Adicione ao arquivo:

c:
cd %userprofile%\Dados de Aplicativos\.clamwin
del Clamwin.conf
del ScheduledScans
copy \\server\netlogon\Clamwin.conf /y
copy \\server\netlogon\ScheduledScans /y
\\server\netlogon\%username%.bat


O script abre a pasta de configuração do clamwin, deleta supostos arquivos de configuração atuais e copia do compartilhamento netlogon os dois novos arquivos de configuração. Portanto, toda vez que um usuário logar em uma máquina o antivirus é automaticamente configurado. Na última linha, o script chama um arquivo com o nome do usuário.bat dentro de netlogon. Por exemplo, você pode criar um arquivo chamado tiago.bat e colocar dentro dele o mapeamento de um compartilhamento específico, assim, somente esse usuário mapeará essa unidade.

Executando o Samba e adicionando as estações

Depois de toda a configuração estar pronta, vamos executar o samba:

# /etc/init.d/samba start


Agora podemos começar a incluir as estações Windows no Domínio do Samba. Na estação, acesse a opção: Propriedades de Meu Computador -> Identificação de Rede.

Selecione Domínio e digite o nome, no caso EMPRESA, de acordo com o especificado no smb.conf. Será solicitado nome e senha de administrador de domínio.

Após reiniciar o computador é interessante que você defina a senha de administrador local da máquina e exclua todas as outras contas locais. No Painel de Controle, Ferramentas Administrativas, Gerenciamento do Computador, você controla isso, inclusive pode definir quais usuários do domínio ou grupo terão acesso de administrador na máquina (poderão instalar ou remover programas, modificar configurações, etc.) os demais, apenas poderão trabalhar na máquina sem fazer nada de significativo. Pronto, daí em diante, nada de você ficar se incomodando em formatar máquinas porque os usuários fazem mais do que deviam. Associando o Samba com um servidor proxy, é tiro e queda.

Esse artigo tem como base o guia Foca Linux e a documentação Oficial do Samba. Os livros do Morimoto também foram muito úteis.

Artigo original: http://www.guiadohardware.net/artigos/pdc-debian-clamwin-estacoes/

quarta-feira, 26 de setembro de 2007

Configurando um servidor proxy/cache com firewall no Linux

Este documento foi criado com base no Debian Etch4

Para este procedimento o sistema deverá estar devidamente instalado e configurado com duas placas de rede, caso estas ainda não tenham sido configuradas, você pode fazer essa configuração á partir do arquivo /etc/network/interfaces, conforme segue abaixo:

root@servidor:/# vi /etc/network/interfaces

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface (interface de acesso a internet, ligada a um modem ou cable modem)

allow-hotplug eth0

iface eth0 inet static

address 200.xxx.xxx.xxx

netmask 255.255.255.xxx

network 200.xxx.xxx.xxx

broadcast 200.xxx.xxx.255

gateway 200.xxx.xxx.xxx

# dns-* options are implemented by the resolvconf package, if installed

dns-nameservers 200.204.0.10 200.204.0.138

dns-search servidor.dominio.com.br

#Interface de acesso a rede interna

allow-hotplug eth1

iface eth1 inet static

address 192.168.0.1

netmask 255.255.255.0

network 192.168.0.0

Com as placas de rede configuradas, partimos para a instalação e configuração do servidor proxy, só que para isso devemos verificar se os espelhos utilizados para baixar novos pacotes e atualizar do sistema, estão configurados. Então abra o arquivo /etc/apt/sources.list e verifique se espelhos abaixo estão presentes no arquivo:

deb http://linorg.usp.br/debian/ etch main

deb-src http://linorg.usp.br/debian/ etch main

deb http://security.debian.org/ etch/updates main contrib

deb-src http://security.debian.org/ etch/updates main contrib

deb http://ftp.de.debian.org/debian stable main contrib non-free

Caso esteja tudo ok, vamos atualizar nossa lista de pacotes, utilizando o comando:

root@servidor:/# apt-get update.

Após atualizado o sistema, seguimos com a instalação do servidor proxy Squid (http://www.squid-cache.org), mas lembre-se que para isso você deverá está logado como root.

root@servidor:/#aptitude install squid.

Se tudo correu bem, o sistema será instalado e inicializado automaticamente.

Com o servidor de proxy rodando, agora podemos fazer as configurações conforme nossas necessidades, isto costuma mudar de acordo com as regras de cada empresa, por isso não irei entrar em detalhes. Essas configurações são feitas á partir do arquivo /etc/squid/squid.conf, onde podemos criar as acl´s (listas de controle de acesso), configurar a porta na qual o servidor irá ouvir requisições, etc.

Após configurado o esquid.conf, partimos para a configuração de um firewall, uma vez que o servidor está conectado a internet e vulnerável á ataques de pessoas mal intencionadas. Para isso, verificamos se o iptables (http://www.netfilter.org/) encontra-se instalado com o comando:

root@servidor:/#iptables –v

Se o mesmo estiver instalado, você terá uma resposta parecida com esta (hoje a versão atual é a 1.3.8) iptables v1.3.8.

Agora criamos um arquivo chamado firewall dentro do diretório /etc/init.d e damos a ele permissão de execução:

root@servidor:/# touch /etc/init.d/firewall (criação do arquivo)

root@servidor:/# chmod +x /etc/init.d/firewall (dando permissão de execução)

root@servidor:/# vi /etc/init.d/firewall(abrindo o arquivo para edição)

Este script monta um firewall básico, pois assim como a configuração do squid, as regras variam de acordo com cada empresa.

#!/bin/bash

echo "Carregando o firewall"

#variaveis

IPT="/sbin/iptables"

REDEINT="192.168.0.0/24"

IPFW="192.168.0.1"

# Habilitando o recurso de IP forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

#Limpa as regras ativas

$IPT -F

$IPT -t nat -F

$IPT -A INPUT -p tcp -i lo -j ACCEPT

#Libera o acesso via ssh na porta 30200

$IPT -A INPUT -p tcp --sport 1024: --dport 30200 -j ACCEPT

#Libera a porta do DNS

$IPT -A INPUT -p udp --sport 1024: -d $IPFW --dport 53 -j ACCEPT

#Libera o acesso a internet na porta 3128

$IPT -A INPUT -p tcp --sport 1024: -d $IPFW --dport 3128 -j ACCEPT

$IPT -A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

#Faz nat para a rede interna

$IPT -t nat -F POSTROUTING

$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#Libera as portas de e-mail

$IPT -A FORWARD -p tcp --dport 25 -j ACCEPT

$IPT -A FORWARD -p tcp --dport 110 -j ACCEPT

#Bloqueia a porta 80

$IPT -A FORWARD -p tcp --dport 80 -j DROP

#Protege contra o ping da morte

$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#Protege contra ataques do tipo syn-flood, dos, etc

$IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

#Protege contra port scanners avancados Ex: nmap

$IPT -A FORWARD -p tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#Protege contra pacotes que podem procurar e obter informações da rede interna

$IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

#Protege contra todos os pacotes danificados ou com defeito

$IPT -A FORWARD -m unclean -j DROP

#Bloqueando o traceroute

$IPT -A INPUT -p udp -s 0/0 -i ppp0 --dport 33435:33525 -j DROP

#Protege contra ataques

$IPT -A INPUT -m state --state INVALID -j DROP

Pronto, seu sistema está instalado e configurado para compartilhar o acesso a internet via proxy.

Algumas configurações adicionais são recomendadas para que o servidor tenha um pouco mais de segurança, conforme segue:

- Evitar que o usuário root faça login

Edite o arquivo /etc/ssh/sshd_config e adicione linha:

PermitRoorLogin no

- Mudar a porta de acesso via ssh, que por padrão é 22

Edite o arquivo /etc/sshd_config e altera a linha:

Port 22 para por exemplo Port 30200

- Bloquear respostas ao comando ping, mantendo o servidor escondido

Edite o arquivo /etc/sysct1.conf e adicione a linha:

net.ipv4.icmp_echo_ignore_all = 1


Bibliografia:

Ferreira, Rubem E. Linux Guia do Administrador do Sistema Novatec editora

http://www.debian.org/

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=7384

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=5644

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=8539