O compartilhamento netlogon é o lugar onde as estações Windows pegam o 
script de logon que executam quando o usuário faz logon no controlador de 
domínio. Nós 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 e 
com certeza vai precisar de uma na sua configuração do SAMBA: 
logon script = netlogon.bat
Esta linha vai dizer à estação Windows para pegar e executar o script 
chamado netlogon.bat. Este script deve ser colocado no compartilhamento 
netlogon. Então vamos precisar de um script chamado netlogon.bat para as 
estações Windows. Você pode usar o exemplo listado a seguir e gravar 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. 
Muito simples! Mas não é o suficiente... 
Como você pode ver, nós precisaremos de um compartilhamento de 
rastreamento, que, neste exemplo, eu 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
Se você leu a documentação do SAMBA ou se tem boa imaginação, notou que 
as linhas root preexec e root postexec 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. Note o %u no fim das linhas. 
Estes scripts são quem executam os scripts o programas que modificam as 
regras do firewall. 
Examine os scripts netlogon.sh e netlogoff.sh listados a seguir: 
#!/bin/sh
#
# netlogon.sh
#
# usage:
# netlogon.sh <username>
#
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 <username>
#
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 (netlogoff.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