Gateway com autenticação pelo Samba

Saiba como autenticar seus usuários Windows para acesso a internet através de seu firewall a partir de suas contas num domínio controlado pelo Samba num servidor Linux. Este artigo mostra como funciona a dobradinha Samba + iptables.

[ Hits: 63.206 ]

Por: Lacier Dias em 01/12/2003 | Blog: http://br.linkedin.com/in/lacierdias/


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 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:\linuxsamba /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
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O servidor Linux
   3. Configuração do firewall
   4. Configuração do Samba
   5. Configuração da estação Windows
Outros artigos deste autor

Controle sua banda de maneira simples e inteligente com CBQ

Configurando o Samba de maneira simples e funcional

NAT com firewall - simples, rápido e funcional

Leitura recomendada

Integrando Servidores Linux no Active Directory com Samba

Micro curso Samba

Servidor Samba completo

Ubuntu 12.04 autenticando no Active Directory com Samba/Kerberos/Winbind

Configurando o Samba no Red Hat

  
Comentários
[1] Comentário enviado por cidadeveloz em 02/12/2003 - 18:44h

Caro Lacier Dias, esse artigo é realmente seu???Receio que não seja seu pois eu
conheço pessoalmente o desenvoveldor dessa solução!!!!!!

[2] Comentário enviado por fischerdouglas em 17/01/2005 - 16:06h

Gostei, e acho que vai servir!
Só uma duvida, no samba existe a opção "Keep Alive" que serve para verificar se por um acaso as estações não travaram, ou foram desligadas incorretamente e etc... E o recurso aqui mostrado tem a nescesidade da execução do script de logoff(netlogoff.bat por exemplo).
Se a maquina "saiu da rede" por vias não covencionais, ela não executou o script de logoff, certo??
E então como ficam as atualizações para o iptables??
A pergunta é um tanto o quanto idiota mas acredito que é cabivel!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts