Squid autenticado com acesso autorizado em uma lista de computadores por grupos e um login por vez.
Vou mostrar aqui como resolver um problema de compartilhamento de senha pelos usuários do Squid, mas descreverei apenas o que foi acrescentado em uma configuração funcional do Squid autenticado. Assim, não disponibilizarei o ".conf" completo.
Senário: tenho um servidor proxy Squid configurado como proxy autenticado que provê acesso à Internet a cerca de 300 usuários.
Há um filtro de bloqueio por URL, site e palavra-chave externo
DansGuardian, mas não vou entrar neste assunto agora.
Voltando ao Squid, com o sistema em produção, notamos alguns desvios de conduta dos usuários, sendo:
Do total de usuários dos computadores, nem todos possuíam acesso à Internet, assim, em um mesmo computador, temos usuários com acesso liberado e outros sem acesso, e o controle feito pelo uso de autenticação.
Durante um bom tempo isto foi o suficiente, mas os usuários passaram a salvar suas senhas nos computadores, assim, qualquer um que utilizasse o computador tinha acesso à Internet. Havia casos onde uma mesma senha estava salva em vários computadores e até em setores de trabalho diferentes.
Também verificamos o uso compartilhado de senha, ou seja, um usuário informava seu login e senha para outros usuários.
Para resolver os problemas, foram aplicadas duas regras ao Squid, que dependem que a configuração dos IPs das estações sejam estáticos.
1. Limitamos o tempo de login em 6 minutos e permitimos apenas um login por vez, assim, para um usuário trocar de computador para acesso à Internet, ele deve fechar qualquer programa que esteja acessando a Internet em seu login e aguardar 6 minutos até poder acessar em outro computador.
#Configurações do squid
authenticate_ip_ttl 6 minutes
acl maxlogin max_user_ip -s 1
http_access deny maxlogin
2. Foi criada uma pasta contendo grupos de usuários e computadores, sendo:
- nome_do_grupo.usuarios
- nome_do_grupo.maquinas
E um script para verificação destes arquivos:
#configurações do squid
external_acl_type usuarios children=10 %LOGIN %SRC /etc/squid/checa.sh
acl checar external usuarios
http_access deny !checar
Script shell "checa.sh":
#!/bin/bash
CAMINHO="/etc/squid/grupos"
RETORNO="ERR"
LISTA=$( ls $CAMINHO/*.maquinas )
while read linha ; do
NOME=$( echo $linha | cut -f1 -d" ")
IP=$( echo $linha | cut -f2 -d" ")
if cat $CAMINHO/planejamento_informatica.usuarios | grep -iq ^$NOME$ ; then
RETORNO="OK"
else
for GRUPOS in $LISTA; do
GRUPO=`expr match "$GRUPOS" '\(.*\.\)'`
USUARIOS="$GRUPO""usuarios"
MAQUINAS="$GRUPO""maquinas"
if [ -e $USUARIOS ] && [ -e $MAQUINAS ] ; then
if cat $USUARIOS | grep -iq ^$NOME$ && \
cat $MAQUINAS | grep -iq ^$IP$; then
RETORNO=OK
fi
fi
done
fi
if [ $RETORNO == "OK" ] ; then
echo "Sucesso `date` Nome->$NOME IP->$IP">>/var/log/squid/login.log; echo OK
else
echo "Falha `date` Nome->$NOME IP->$IP">>/var/log/squid/login.log ; echo ERR
fi
done
Aquivos de grupos criados em uma pasta chamada "grupos" dentro das configurações do Squid:
- informatica.usuarios
- informatica.maquinas
- contabilidade.usuarios
- contabilidade.maquinas
- atendimento.usuarios
- atendimento.maquinas
- rh.usuarios
- rh.maquinas
- almoxarifado.usuarios
- almoxarifado.computadores
O conteúdo dos arquivos de grupos são, para os usuários o nome que o usuário autentica e para as máquinas os IPs de cada computador, sendo um item por linha, exemplo:
arquivo "contabilidade.usuarios":
maria
jose
arquivo "contabilidade.maquinas":
192.168.1.10
192.168.1.15
192.168.1.33
192.168.1.78
Assim, o acesso pelo Squid ficou limitado a um login por vez e restrito a um grupo de computadores ao qual o usuário pertence.
Também o script gera um log em
/var/log/squid/login.log, contendo os acessos aceitos e bloqueados.
Este é meu primeiro tutorial no Viva o
Linux.
Desde já, obrigado.
Ronaldo Maia.