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