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