1 de 12 4/2/2007 14:41 Squid Plus com AD, redirector, controle de banda e relatórios Autor: Alvaro Mendes de Oliveira <alvaro at mendes.oliveira.nom.br> Data: 01/06/2006 Introdução Guia de Instalação do Squid no Debian By Alvaro M Oliveira (alvaro@mendes.oliveira.nom.br) Funcionalidades: Autenticação integrada com AD usando Samba3 e protocolo NTLM. Controle de Banda usando "delay pools" do Squid. Filtro de Controle de Conteúdo através do Redirector. Uso das listas negras do BIGBLACKLIST usando o Blackimp. Importação dos logs de acesso para BD usando o SquidLogToMySQL. Relatórios de uso da Internet, escritos em PHP. Resumo: Instalação do SQUID usando autenticação integrada usando o AD, através de um grupo chamado InternetWebDefault, onde colocaremos todos os usuários com permissão de acesso a Internet em tempo integral e outro grupo, InternetWebMeioDia, onde colocaremos os usuários com permissão de usarem somente no horário de meio-dia. Todo acesso é analisado e filtrado se necessário usando as listas negras/brancas controladas pelo redirector, listas estas que podem ser carregadas através das listas disponíveis no BIGBLACKLIST. Também existe a possibilidade de criar usuários ou IPs privilegiados, que não sofrerão nenhuma restrição de conteúdo. Programação do Squid para controle de banda, para que downloads em horário comercial tenha menor consumo de banda. Importação de todos os logs de acesso para banco de dados (MySQL) para permitir que se possa tirar relatórios de uso e para isto uma aplicação em PHP é também disponibilizada, contendo vários relatórios. Início Instale o Debian somente com os recursos mínimos, rede funcionando e com acesso à Internet liberado.
2 de 12 4/2/2007 14:41 Instalação de pacotes básicos Instalação do pacote de compilação: # apt-get install apt-build Instalação do servidor web e BD com módulo PHP: # apt-get install apache2 # apt-get install mysql-server # apt-get install php4-mysql # apt-get install libphp-adodb # /etc/init.d/apache2 restart Criação do usuário manager para uso futuro: # htpasswd -c /etc/apache2/passwd manager (*) OBS: Neste tutorial, o IP do servidor de proxy é 172.16.220.35, troque este IP pelo de sua máquina. Instalando o Samba 3 O Samba 3 será baixado da Internet e compilado manualmente com as opções necessárias. Do pacote do Samba, só precisaremos do WINBINDD, pois ele é o responsável por fazer a autenticação usando NTLM. # cd /usr/local/src # wget http://us5.samba.org/samba/ftp/stable/samba-3.0.21c.tar.gz # tar xvfz samba-3.0.21c.tar.gz # cd samba-3.0.21c/source Configurando as opções desejadas do Samba: #./configure --bindir=/bin \ --sbindir=/usr/sbin \ --with-winbind --with-winbind-auth-challenge Compilando e instalando: # make # make install Instalação de biblioteca para o nsswitch: # cd nsswitch # cp libnss_winbind.so /lib # ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2
3 de 12 4/2/2007 14:41 Inicialização: # cd../.. # cp packaging/debian/debian-sarge/winbind.init /etc/init.d/winbind # chmod 755 /etc/init.d/winbind Configuração do Samba: No arquivo smb.conf, substitua os parâmetros logo abaixo, pelos que representam sua rede: workgroup = nome NETBIOS de seu domínio; server string = comentário que identifica seu servidor de proxy; netbios name = nome NETBIOS de seu servidor de proxy. Neste exemplo o nome NETBIOS do: Domínio = SMS Servidor de Proxy = SRVPROXY # vi /usr/local/samba/lib/smb.conf [global] workgroup = SMS server string = Servidor de Proxy netbios name = SRVPROXY log file = /var/log/samba/%m.log max log size = 50 debug level = 1 security = domain encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd username map = /etc/samba/smbusers socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 unix charset = iso-8859-1 password server = * winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /dev/null template shell = /dev/null winbind use default domain = yes passdb backend = smbpasswd [homes] comment = Home Directories browseable = no writable = yes Criando alias por questões de funcionalidades: # ln -s /usr/local/samba/lib/smb.conf /etc/smb.conf Agora que tudo já está configurado, iremos adicionar nosso servidor de proxy ao domínio, usando o comando net do pacote do Samba3: net rpc join DOMÍNIO -S server -Uadministrator Ex:
4 de 12 4/2/2007 14:41 # net rpc join SMS -S smscpds03 -Ualvaromo password: Joined domain SMS. Pronto! Máquina adicionada ao domínio. Inicializando o winbind: # /etc/init.d/winbind start Testando o funcionamento do winbind: # wbinfo -t checking the trust secret via RPC calls succeeded Se a mensagem acima apareceu, tudo Ok, senão, revise os passos. Configurando o nsswitch (adicionar winbind em passwd e group): # vi /etc/nsswitch.conf passwd: compat winbind group: compat winbind Testando sua instalação: Exibir todos as contas do domínio: # getent passwd Exibir todos os grupos do domínio: # getent group Pronto! O Samba3 está instalado. Instalando o Squid 2.5 O Squid 2.5 será baixado da Internet e compilado manualmente com as opções necessárias. Iremos compilar para modo português, autenticação e controle de banda. # cd /usr/local/src # wget http://www.squid-cache.org/versions/v2/2.5/\ squid-2.5.stable12.tar.gz # tar xvfz squid-2.5.stable12.tar.gz # cd squid-2.5.stable12 Configurando as opções desejadas do Squid: #./configure --sbindir=/usr/sbin \ --enable-default-err-language=portuguese \
5 de 12 4/2/2007 14:41 --enable-auth="ntlm,basic" \ --enable-external-acl-helpers="winbind_group,wbinfo_group" \ --enable-snmp \ --enable-linux-netfilter \ --enable-delay-pools Compilando e instalando: # make # make install Criando alias por questões de funcionalidades: # ln -s /usr/local/squid/etc/squid.conf /etc/squid.conf Dando permissões ao usuário de execução (nobody): # cd /usr/local # chown -R nobody.nogroup squid Criando o cache do Squid: # su - nobody -c "/usr/sbin/squid -z" Dando permissão ao usuário de execução do Squid no winbind: # chgrp nogroup /usr/local/samba/var/locks/winbindd_privileged Configurando o Squid para usar autenticação: # vi /etc/squid.conf OBS: Remova as tags "auth_param basic" existentes. # TAG: auth_param auth_param ntlm program /bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm use_ntlm_negotiate off auth_param ntlm children 10 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 5 minutes auth_param basic program /bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 5 auth_param basic realm Proxy SMS auth_param basic credentialsttl 2 hours Configurando o grupo InternetWebDefault para acesso a Internet: Localize o texto: # INSERT YOUR OWN RULE(S) HERE TO ALLOW
6 de 12 4/2/2007 14:41 E insira logo abaixo este texto: # Acesso via autenticação external_acl_type NT_global_group children=10 %LOGIN /usr/local/squid/libexec/wbinfo_group.pl acl ProxyUsers external NT_global_group InternetWebDefault http_access allow ProxyUsers # Horário Comercial acl day time MTWHF 08:00-17:00 # Acesso via autenticação no horário de meio dia. acl ProxyUsersMeioDia external NT_global_group InternetWebMeioDia http_access allow ProxyUsersMeioDia day Correção do script wbinfo_group.pl: # vi /usr/local/squid/libexec/wbinfo_group.pl sub check { local($user, $group) = @_; $groupsid = `wbinfo -n "$group"`; $groupsid = substr($groupsid, 0, index($groupsid, ' ') + 1); chop $groupsid; $groupgid = `wbinfo -Y "$groupsid"`; chop $groupgid; return 'OK' if(`wbinfo -r Q$userE` =~ /^$groupgid$/m); return 'ERR'; } Execute o Squid: # squid Configure o proxy no IE: Proxy: IP do seu servidor de proxy Porta 3128 Teste o acesso a Internet e acompanhe no log do Squid: # tail -f /usr/local/squid/var/logs/access.log O log contém entre outras informações o IP, a URL e usuário. Pronto! O Squid está instalado. Instalando o redirector (filtro de conteúdo)
7 de 12 4/2/2007 14:41 O redirector é um filtro de conteúdo para o Squid que permite trabalhar com várias classes, onde em cada classe podemos adicionar domínios, URL e expressões. Também é possível criar exceções para usuários e IPs. O redirector é totalmente escrito na linguagem C e usa o MySQL como repositório de suas listas negras/brancas. O redirector é compatível com todas as listas do bigblacklist através do programa blackimp. O bigblacklist pode ser obtido em: http://urlblacklist.com Ele pode ser usado independente da autenticação, isto é, ele pode ser usado como filtro de conteúdo independente para o Squid. Criação do banco de dados proxy: # mysqladmin -u root create proxy Criação do usuário proxy (iremos usar a senha "proxy"): # mysql -u root proxy mysql> grant all on proxy.* to proxy@localhost identified by 'proxy'; mysql> quit # mysql -uproxy -pproxy proxy mysql> CREATE TABLE logg ( data date default NULL, hora varchar(5) default NULL, duracao int(10) default NULL, ip varchar(14) default NULL, resultado varchar(25) default NULL, bytes int(10) default NULL, metodo varchar(10) default NULL, url varchar(100) default NULL, usuario varchar(15) default NULL, tipo varchar(20) default NULL, dominio varchar(50) default NULL, KEY idx_loggdata (data), KEY loggusuario (usuario), KEY loggip (ip) ); mysql> CREATE TABLE redirector ( TABLENAME varchar(15) NOT NULL default '', VALUE varchar(100) NOT NULL default '', PRIMARY KEY (TABLENAME,VALUE) ); mysql> quit # cd /usr/local/src # wget ftp://200.164.88.171/redirector.tar.gz # tar xvfz redirector.tar.gz # cd redirector
8 de 12 4/2/2007 14:41 Arquivo de configuração: # cp redirector.cfg /etc Instalação dos aplicativos: # cp blackimp /sbin # cp squidlogtomysql /sbin # cp redirector /sbin Página de erro: # cp err_access_denied.php /var/www Configurando o Squid para usar o redirector: A sintaxe do redirector é: redirector classe1, classe2,..., classen # vi /etc/squid.conf # TAG: redirect_program redirect_program /sbin/redirector ads audio-video blocked hacking jogos porn proxy Isto, irá bloquear conteúdo: propaganda (ads) áudio/vídeo (audio-video) genérica (blocked) material de hacker (hacking) jogos (jogos) pornográfico (porn) sites de proxy anônimos (proxy) Reconfigure o Squid: # squid -k reconfigure Carregando as listas negras (do bigblacklist): http://urlblacklist.com/cgi-bin/...file=bigblacklist # tar xvfz bigblacklist.tar.gz Listas negras: blackimp adsd blacklists/ads/domains blackimp adsu blacklists/ads/urls blackimp audio-videod blacklists/audio-video/domains
9 de 12 4/2/2007 14:41 blackimp audio-videou blacklists/audio-video/urls blackimp hackingd blacklists/hacking/domains blackimp hackingu blacklists/hacking/urls blackimp jogosd blacklists/games/domains blackimp jogosd blacklists/onlinegames/domains blackimp jogosu blacklists/onlinegames/urls blackimp pornd blacklists/porn/domains blackimp pornu blacklists/porn/urls blackimp proxyd blacklists/proxy/domains blackimp proxyu blacklists/proxy/urls Expressões: # mysql -uproxy -pproxy proxy < redirector.sql Pronto! Seu Squid está configurado com filtro de conteúdo. Teste novamente o acesso a Internet, acessando: http://www.playboy.com.br Criando um usuário privilegiado: Ex: Fazer com que o usuário alvaromo não sofra restrições de conteúdo. # vi /etc/redirector.cfg userpriv=alvaromo Reconfigure o Squid: # squid -k reconfigure Instalando o squidlogtomysql OBS: É necessário que a tabela logg (do item anterior) no MySQL. Sintaxe do squidlogtomysql: squidlogtomysql <arquivo de log> Primeiro, vamos rotacionar o log para não usar o corrente: # squid -k rotate Executando: # squidlogtomysql /usr/local/squid/var/logs/access.log.0
10 de 12 4/2/2007 14:41 Removendo o log: # rm -f /usr/local/squid/var/logs/access.log.0 Observe quantas linhas foram importadas. Criando um agendamento para a importação: # vi /etc/cron.hourly/import_squid_log_mysql #!/bin/sh # # Import Squid Log To MySQL # squid -k rotate cd /usr/local/squid/var/logs echo Esperando rotação... while true; do if [ -f access.log.0 ]; then break; fi done squidlogtomysql access.log.0 rm -f *.log.0 echo Importação finalizada! # chmod 755 /etc/cron.hourly/import_squid_log_mysql Relatórios de uso da Internet Visualizando os logs (é necessário que o squidlogtomysql esteja ok): # cd /var/www # wget ftp://200.164.88.171/proxy-report.tar.gz # tar xvfz proxy-report.tar.gz OBS: Edite o arquivo proxy/top.php e coloque o nome de sua empresa. # vi proxy/top.php Altere o texto Título/Nome da Sua Empresa a seu gosto! Acessando os relatórios via IE (The Best Browser!): http://ipdoseuproxy/proxy
11 de 12 4/2/2007 14:41 Ex: http://172.16.220.35/proxy Nesta aplicação estão disponíveis relatórios de uso e acesso a edição da lista negra. Lista Negra Log de Acesso Top10 Download Top10 Domínio por Trafego de Banda Top10 Domínio por Quantidade de Acesso Top10 Usuário por Tempo de Uso Top10 Usuário por Trafego de Banda Top10 Usuário por Quantidade de Aceso Domínio do Usuário por Trafego de Banda Por exemplo: Vamos remover o uol.com.br da lista negra da classe JOGOS 1. Acesse a opção lista negra 2. Selecione a tabela jogosd (tabela de domínios para jogos) 3. Digite o valor uol.com.br no campo valor 4. Clique no botão <pesquisar> 5. Clique no item excluir 6. Confirme a exclusão. OBS: Não precisa reiniciar ou reconfigurar o Squid, já fica valendo. Controle de banda Vamos usar o recurso de delay pools do próprio Squid. Neste exemplo iremos usar o Squid para usar somente 512k em horário comercial, 64k para certos downloads em horário comercial. # vi /etc/squid.conf # Extensões com limite de 64k acl limited url_regex -i.exe.mp3.vqf.tar.gz.gz.rpm.zip.rar.avi.mpeg.mpe.mpg.qt.ram.rm.iso.raw.wav.mov.iso delay_pools 3 # Classe 1 - acesso a Intenet em Internet comercial delay_class 1 1 delay_parameters 1 64000/64000 delay_access 1 allow day!limited delay_access 1 deny!day delay_access 1 allow!limited # Classe 2 - downloads em horário de expediente delay_class 2 1 delay_parameters 2 8000/8000
12 de 12 4/2/2007 14:41 delay_access 2 allow day limited delay_access 2 deny!day delay_access 2 allow limited # Classe 3 - acesso a Internet fora do horário comercial delay_class 3 1 delay_parameters 3-1/-1 delay_access 3 allow!day delay_access 3 deny day delay_access 3 allow all # squid -k reconfigure Pronto! Controle de banda configurado. Fim Fim do guia! Os programas redirector, blackimp, squidlogtomysql e a aplicação de relatórios são de minha autoria. Dúvidas: Entre em contato via email. (*) Dever de casa: 1. Coloque está aplicação para ser acessada via senha através do apache, usando o usuário manager criado anteriormente. 2. Configurar o winbind e o Squid como serviço. http://www.vivaolinux.com.br/artigos/verartigo.php?codigo=4716 Voltar para o site