How to install Samba + Squid + squidGuard using NTLM transparent auth (Active Directory) on Ubuntu 16.04.3 LTS
Acredito que qualquer organização que deixe o acesso à internet totalmente liberado para os seus colaboradores, além de perder em produtividade, está perdendo dinheiro. Até porque, tempo é dinheiro.
Além disso, dependendo do ambiente da empresa, pode ser necessário filtrar o acesso dependendo do usuário, departamento e etc. Este é o caso da empresa onde atualmente trabalho e devido a largura de banda ser pequena somado à quantidade de dispositivos na rede e usuários acessando simultaneamente, foi necessário bloquear o acesso à maioria dos sites desnecessários ao desempenho do trabalho dos colaboradores.
Preferi por filtrar a navegação utilizando grupo de acesso no AD, assim, quando quero liberar o acesso total à internet para um determinado usuário, basta adicioná-lo a este grupo e o acesso será irrestrito.
Para você ter chegado até aqui, acredito que já tenha o conhecimento necessário para instalar e configurar o Ubunto, utilizar editores de texto, visualizar logs e etc., pois não abordarei essas questões.
Depois de muito procurar uma configuração que de fato funcionasse e precisei juntar informações de diversos sites, resolvi guardar e publicar aqui para que, caso eu precise novamente no futuro ou alguém que também esteja passando pela mesma dificuldade que passei, possa utilizar como fonte de consulta. Enfim, vamos ao que interessa.
Detalhando o ambiente
Domínio Active Directory: dominio.local
Servidor Active Directory: ad.dominio.local / IP: 10.0.0.1
Usuário Administrador do domínio: dominio\administrador
Senha do usuário administrador do domínio: 123456
Grupo no AD com acesso total à internet: Internet-Liberada
Conjunto de blacklists utilizado no squidGuard: http://shallalist.de/downloads/shallalist.tar.gz
Neste exemplo, optei por utilizar a árvore padrão do Active Directory, sendo assim, os usuários e os grupos deverão ser criados dentro da OU Users. Para o usuário desejado tenha acesso irrestrito à internet, adicione-o ao grupo Internet-Liberada, para que seu acesso seja restrito, remova-o do grupo.
Obviamente, você precisa alterar os detalhes do ambiente para que reflita à sua realidade.
Adicione o servidor Samba no DNS do Active Directory
Para que a comunicação entre o Samba/Winbind e o Active Directory ocorra sem problemas, é necessário que você adicione o seu servidor Samba no DNS do seu Active Directory.
No seu controlador de domínio (ad.dominio.local), abra o console de gerenciamento do DNS, expanda a ‘zona de pesquisa direta’ e adicione a entrada do tipo ‘Novo Host (A ou AAAA)’ informando o nome como ‘proxy’ e o IP como ‘10.0.0.2’. Deixe marcado a opção para criar o registro PTR.
Atualizando o Ubuntu
IMPORTANTE: Antes de instalar qualquer pacote na sua distribuição, é necessário atualizar o repositório para garantir que os pacotes em sua ultima versão serão instalados corretamente e não irá gerar nenhum erro de dependência.
Atualize o Ubuntu com o comando:
Instalando e configurando os pacotes básicos e necessários
Instale os pacotes necessários utilizando comando abaixo:
Edite o arquivo /etc/hosts
Abra o arquivo /etc/hosts e ajuste o endereço do seu servidor proxy e seu servidor Active Directory nele:
Edite o arquivo /etc/samba/smb.conf
Abra o arquivo /etc/samba/smb.conf e deixe conforme a configuração abaixo:
Inserindo o Samba no domínio
Insira o servidor Samba no domínio com o comando:
Insira a senha do administrador do domínio, neste exemplo é 123456.
Edite o arquivo /etc/init.d/winbind
Modifique a linha 43 do arquivo /etc/init.d/winbind para que toda vez que inicie, modifique o grupo do diretório /var/run/samba/winbindd_privileged e /var/lib/samba/winbindd_privileged para root:proxy.
No Ubuntu o usuário do Squid é ‘proxy’.
Altere a permissão do arquivo /usr/bin/ntlm_auth para que possa ser executado como root. Para isso, utilize o comando:
Então, reinicie o Samba e o Winbind com o comando:
Testando a comunicação do Samba/Winbind com o servidor Active Directory
Para assegurar que o seu servidor Samba/Winbind está comunicando perfeitamente com o servidor Active Directory, execute os comandos abaixo. Cada comando deverá retornar exatamente como exibido:
Será solicitada a senha do usuário administrador duas vezes e então deverá retornar a saída abaixo:
Caso tudo tenha ocorrido como esperado até aqui, prossiga para os próximos passos. Caso contrário, reveja as configurações pois algo pode ter passado despercebido ou algum arquivo ter sido configurado errado.
Configurando o Squid
Edite o arquivo /etc/squid/squid.conf
Abaixo deixei a configuração do meu arquivo /etc/squid.conf, apague o arquivo /etc/squid.conf que vem com a instalação e deixe igual o meu abaixo:
Edite o arquivo /etc/squid/whitelist.txt
Como comentado anteriormente, o arquivo /etc/squid/whitelist.txt é responsável por liberar o acesso sem autenticação para os domínios que estejam listados nele. Como aqui utilizamos o Office 2016 e Office 365, foi necessário liberar os domínios da MS e do Office por fora da autenticação para que funcionasse corretamente. Você vai precisar criá-lo e inserir os domínios que deseja liberar como eu fiz abaixo:
Modifique o proprietário e grupo do diretório do squidGuard
Para que o squid tenha acesso e possa executar o squidGuard, será necessário alterar o proprietário e o grupo do diretório /etc/squidguard, para isso, execute o comando:
Configurando o squidGuard
Baixe e descompacte a blacklist
Vamos baixar a blacklist do site shallalist e descompactar para dentro do diretório /var/lib/squidguard/db/ com o comando abaixo:
Edite o arquivo /etc/squidguard/squidGuard.conf
Apague o conteúdo padrão do arquivo /etc/squidguard/squidGuard.conf e deixe conforme abaixo. Você pode negar o acesso ao site de determinada categoria, adicionando à categoria o operador !, ex: !adv. O arquivo de configuração está comentado para facilitar o entendimento:
Feito isso, nosso Samba, squid e squidGuard já estão configurados para autenticar e liberar o acesso à internet conforme o grupo do usuário. O último passo será gerar o database da blacklist utilizada e alterar o grupo dela para que o squid/squidGuard possa utilizar.
Gerando o database da Blacklist e alterando o proprietário/grupo
Utilize o comando abaixo para que o squidGuard faça a leitura dos arquivos de domínio e URL da blacklist utilizada e gere o database necessário para execução:
O parâmetro -C all significa que o squidGuard irá ler e gerar o database para todas as categorias de blacklists que foram configuradas no arquivo /etc/squidguard/squidGuard.conf. Caso insira ou remova algum domínio ou URL de alguma categoria de blacklist, será necessário gerar o database novamente. Neste caso, você pode gerar o database de uma categoria específica com o comando:
Será necessário setar o proprietário e o grupo dos databases todas as vezes que gerá-los, sendo assim, execute o comando abaixo:
Tudo feito! Hora de rodar!
Após seguir todos os passos, é hora de rodar o squid para que nossos computadores possam navegar na internet. Para isso, execute:
Se tudo foi configurado corretamente, basta configurar o IP:PORTA do proxy nos computadores que deseja que utilizem o proxy. No caso dessa nossa configuração, o IP do proxy é 10.0.0.2 e a porta configurada no squid é 8080!
Considerações finais
Como estamos utilizando Active Directory, você pode criar uma GPO para que configure o proxy automaticamente nas estações de trabalho. Além disso, também pode utilizar seu servidor DHCP para configurar automaticamente o servidor proxy através do arquivp WPAD.DAT.
Abordarei como proceder com essa configuração em um proximo artigo.
Espero que tenha tido sucesso e caso tenha alguma dúvida ou sugestão de melhoria, deixe seu comentário aí embaixo!