Revista Do Linux
 
  
  
 

OUTRAS SEÇÕES
  Cartas
  Variedades
  Rádio Linux
  Mensagem ao Leitor
  CD do Mês
  Coluna do Augusto
  Dicas e Truques
  Opinião
 

Gateway com autenticação pelo Samba

Saiba como montar um firewall/gateway que modifica as próprias regras sob demanda, quando os usuários fazem login/logout de suas estações Windows, sendo a autenticação feita por um controlador de domínio SAMBA

Imagine que você tenha que construir um gateway de acesso à internet para estações Windows, e precise de um sistema de autenticação por usuário. A primeira solução em que se pensa é o Squid. Ótima solução, quando acessar apenas http e ftp é suficiente para os usuários. Mas se precisar permitir o acesso a outros serviços como pop, smtp, ssh ou banco de dados, você pensa logo em implementar algo via NAT ou IP MASQUERADE. Mas e a autenticação por usuário?

Vou tentar, neste documento, mostrar como se faz um gateway para fazer NAT ou IP MASQUERADE para estações Windows. Use sua imaginação para modificar e atingir o nível desejado de gerenciamento de acesso à sua rede. Você pode usar este esquema para definir ou negar acesso a serviços, servidores ou sub-redes. Tudo isto definido no nível do usuário.

O que você precisa ter instalado no seu servidor Linux:

~U Samba;
~U IPtables;
~U Uma linguagem de script;

O servidor Linux

Não há nada crítico, você só precisa de um kernel da série 2.4, se quiser seguir os exemplos abaixo, e usar o Iptables. Se preferir um kernel da série 2.2 com o IPchains, sinta-se à vontade para adaptar os scripts conforme a sua necessidade.

É claro que será preciso instalar as ferramentas de usuário do IPtables, um servidor HTTP como o Apache (se você pretende rodar uma aplicação CGI para troca de senhas de usuário) e, obviamente, os pacotes do SAMBA. O kernel deve ter suporte a Firewall, embutido ou em módulos.

Instalações padrão da maioria das distribuições Linux comerciais já são suficientes para executar os exemplos deste texto sem problemas. Apenas certifique-se de que o SAMBA e as ferramentas do IPtables estão instalados.

Hierarquias de diretórios adicionais

Serão necessários alguns diretórios adicionais para rodar o exemplo deste documento. Para acompanhar os usuários e endereços IP, use: /var/run/mgate/. Coloque os scripts de atualização de regras para cada usuário em: /etc/smbgate/users/. O diretório do compartilhamento netlogon é: /home/samba/netlogon/, e o diretório do compartilhamento de rastreamento é: /home/samba/samba/.

Configuração do firewall

Você precisa de um firewall básico para que o gateway funcione. Recomendo a leitura do IPTABLES Tutorial. É uma leitura muito interessante e vai lhe dar total controle sobre seu filtro de pacotes do kernel. Se você não dispõe de tempo, o código abaixo fará o seu gateway rodar.

#!/bin/sh

IPTABLES=/usr/sbin/iptables
/sbin/depmod -a
/sbin/insmod ip_tables
/sbin/insmod ip_conntrack
/sbin/insmod ip_conntrack_ftp
/sbin/insmod ip_conntrack_irc
/sbin/insmod iptable_nat
/sbin/insmod ip_nat_ftp

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

$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F

Se você leu a documentação do IPTABLES, deve ter notado que este código não faz nada além de carregar os módulos do kernel relacionados a NAT e filtragem de pacotes, ligar o roteamento do kernel e definir as regras padrão do firewall. Você pode e deve ter regras codificadas aqui para dar ao seu firewall um comportamento padrão decente, mas a grande mágica vai ser feita pelos scripts chamados pelo daemon do SAMBA.

Configuração do SAMBA

Precisamos configurar o SAMBA como controlador de domínio primário. Recomendo-lhe que leia a Samba How-to Collection e aprenda tudo que puder sobre um controlador de domínio. Como eu não tenho a intenção de reescrever a documentação do SAMBA, aqui vai um smb.conf como exemplo:

# Global parameters

[global]
workgroup = DOMAIN
netbios name = LINUX
server string = Linux PDC
encrypt passwords = Yes
map to guest = Bad Password
passwd program = /usr/bin/passwd
unix password sync = Yes
max log size = 50
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
logon script = netlogon.bat
domain logons = Yes
os level = 64
lm announce = True
preferred master = True
domain master = True
dns proxy = No
printing = lprng

[homes]
comment = Home Directories
path = /home/%u
read only = No

[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
available = No

[netlogon]
comment = NetLogon ShARE
path = /home/samba/netlogon
guest account =

[samba]
comment = login tracking share
path = /home/samba/samba
root preexec = /usr/local/bin/netlogon.sh %u
root postexec = /usr/local/bin/netlogoff.sh %u

O compartilhamento netlogon é o lugar onde as estações Windows pegam o script executado quando o usuário faz logon no controlador de domínio. Precisamos deste compartilhamento para colocar um script de logon que vai dizer à estação Windows para montar um outro compartilhamento, que vai ser usado para rastrear o endereço IP do usuário.

Você deve ter notado uma linha como a seguinte no smb.conf de exemplo:

logon script = netlogon.bat

Esta linha dirá à estação Windows para pegar e executar o script chamado netlogon.bat. Este script deve ser colocado no compartilhamento netlogon. Vamos precisar, então, de um script chamado netlogon.bat para as estações Windows. Use o exemplo listado a seguir e grave com o nome de netlogon.bat no diretório do compartilhamento netlogon, neste caso, em /home/samba/netlogon/netlogon.bat.

REM NETLOGON.BAT
net use z:\\linux\samba /yes

Este script vai dizer à estação Windows para montar especificamente o compartilhamento SAMBA, e, assim, poderemos rastrear o usuário e o endereço IP de sua estação através da saída do programa smbstatus, que faz parte do pacote do SAMBA.

Como você pode ver, nós precisaremos de um compartilhamento de rastreamento, que, neste exemplo, chamei de samba. Dê uma olhada na seção do smb.conf que trata da configuração do compartilhamento de rastreamento:

[samba]
comment = login tracking share
path = /home/samba/samba
root preexec = /usr/local/bin/netlogon.sh %u
root postexec = /usr/local/bin/netlogoff.sh %u

Note as linhas root preexec e root postexec. Elas dizem ao daemon do SAMBA para executar os scripts indicados quando um usuário monta e desmonta o compartilhamento. Neste caso, estamos passando o nome do usuário como parâmetro para o script executado.

Examine os scripts netlogon.sh e netlogoff.sh listados a seguir:

#!/bin/sh
# netlogon.sh
# usage:
# netlogon.sh 

smbstatus | grep $1 | grep samba | gawk '// { print
substr($6,2,length($6)-2)}' > /var/run/smbgate/$1
IPTABLES='/usr/sbin/iptables'
EXTIF='ppp0'
COMMAND='-A'
ADDRESS='cat /var/run/smbgate/$1'

/etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF

Este script (netlogon.sh) será executado quando o usuário fizer login e filtrará a saída do programa smbstatus, extraindo o endereço IP do usuário, que será escrito em um arquivo no diretório /var/run/smbgate. O arquivo levará o nome do usuário e será usado depois, quando o usuário fizer logoff. O endereço IP extraído será passado como argumento para o script no diretório /etc/smbgate/users com o nome do usuário, e este script vai finalmente atualizar o firewall.

#!/bin/sh
# netlogoff.sh

# usage:
# netlogoff.sh 

IPTABLES='/usr/sbin/iptables'
EXTIF='ppp0'
COMMAND='-D'
ADDRESS='cat /var/run/smbgate/$1'

/etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF
rm -f /var/run/smbgate/$1

Este script (netlogon.sh) será executado quando o usuário fizer logoff e pegará o endereço do arquivo /var/run/smbgate/user. Este endereço será passado como argumento para o script /etc/smbgate/users/user, que atualizará o firewall, restaurando as regras para a forma de repouso.

O que segue é um script de exemplo para /etc/smbgate/user/user:

#!/bin/sh
#

COMMAND=$1
ADDRESS=$2
EXTIF=$3
IPTABLES='/usr/sbin/iptables'
$IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o
$EXTIF -j MASQUERADE

Configuração da estação Windows

Protocolos de rede: Primeiro, a menos que você realmente precise, remova todos o protocolos, à exceção de TCP/IP.

Una-se ao domínio do servidor LINUX: Configure as estações Windows para unirem-se a um domínio e dê o nome do domínio do seu servidor LINUX. Isto é essencial para o funcionamento do gateway.

Editor de políticas do sistema: Existe um utilitário chamado Editor de Políticas, que vem no CD de instalação do Windows. O nome do arquivo é poledit.exe. Esta ferramenta permite que você crie um arquivo com políticas de sistema e de usuários.

Infelizmente, esta ferramenta não gera um arquivo de configuração em texto plano, de maneira que não tenho como colocar um exemplo aqui.

Use o poledit.exe para criar uma política para as suas estações e usuários. É interessante que você desabilite o cache de senhas, tanto local como de domínio, de forma que você consiga um mínimo de segurança. Grava o arquivo de política com o nome config.pol no compartilhamento netlogon do seu servidor LINUX. Desta forma, as estações Windows vão pegar o arquivo e usá-lo para definir sua política. Claro que esta tarefa precisa ser feita de uma estação Windows.

Gerenciamento de usuários

Adicionando usuários: Adicionar um usuário no sistema LINUX de forma normal e depois definir a senha do SAMBA com o smbpasswd normalmente funciona. Se tiver alguma dúvida, veja a documentação do SAMBA.

Gerenciamento de senhas: Experimente o pacote: changepassword.sourceforge.net/. O changepassword é um programa CGI que permite trocas de senhas pelo WEB browser da estação do usuário.

Para saber mais:
Samba Autheticated How-To: makeashorterlink.com/?Z4FD21F33
Textos relacionados podem ser encontrados em www.tldp.org
IPTABLES Tutorial - www.netfilter.org/documentation/tutorials/blueflux/iptables-tutorial.html
Samba How-To Collection - www.samba.org/samba/docs/Samba-HOWTO-Collection.html


Ricardo Alexandre Mattar - ricardo.mattar@bol.com.br

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux