Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > UnderLinux Wiki
Wiki Classificados Galeria Reviews Jogos Comunidades RSS Feeds FAQ Termos de Uso Sobre
Cadastre-se FotosBlogs Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Imagem:qmail.png

Squid 2.5 / SARG / NCSA / HTPASSWD



Tabela de conteúdo

Introdução

Antes de mais nada vou colocar todos os links dos sites que vc vai precisar pegar os arquivos de instalação, lembre sempre de pegar a versão estável (stable) dos programas:

  • NCSA --- vem junto com o Squid

Durante toda a apostila vc deverá usar o usuário root.

Essa apostila foi elaborada por Thiago Tassele - firekeyboard (thiagotassele@yahoo.com.br) e Tiago Durante - replicante (replicante.slack@uol.com.br), entao se vc for xingar alguém é a gente mesmo! :-)


Instalação

Squid

Entre na pasta onde o arquivo tar.gz ou tar.bz2 que vc fez download no site, os dois são iguais, só muda o tanto que o compactador "aperta" as letrinha. :-)

Descompacte-o, com a opçao para qual arquivo vc pegou:

    * tar.gz

      # tar -xvzf squid-2.5.STABLE4.tar.gz



    * tar.bz2

      # tar -xvjf squid-2.5.STABLE4.tar.bz2

Entre na pasta criada depois da descompactação, e vamos compilar.

# ./configure --enable-default-err-language=Portuguese --prefix=/usr/local/

# make all

# make install

Pronto! O Squid está instalado.


1. Diretórios, arquivos e usuário do Squid

Vamos lá, antes de mais nada vc deve ter um usuário para administar o Squid, aqui vou usar o squidadm como exemplo, mas vc pode usar o que vc quizer, de preferencia um user sem poderes de root.

# useradd squidadm

# passwd squidadm (coloque a senha que vc quizer)

Temos que criar uma pasta para servir de cache para o Squid:

# mkdir /usr/local/squid/cache

Agora vamos transformar o squidadm como dono das pastas do Squid, isso deve ser feito com atenção pois se ele nao puder gravar nos arquivos de log (var/logs) o Squid nao vai subir.

# cd /usr/local/

# chown -R squidadm squid/

# chmod -R 775 squid/

Quando o Squid é instalado ele coloca seus binários em squid/sbin vamos colocado em squid/bin:

# cp /usr/local/squid/sbin/squid /usr/local/squid/bin/

ATENÇAO! Na pasta squid/var/ e squid/var/logs ficam os arquivos de log do squid, nunca deixe esses arquivos atingirem um tamanho muito grande ou seu squid pode travar! Na parte do SARG colocarei um script para isso. :-)


Configuração do Squid - squid.conf

A configuarçao do Squid é bem simples mas deve-se prestar bastante atençao para nao morrer de ódio. Acredite, por experiencia própria, vc está no Linux se alguma coisa der errado verifique as configuraçoes que vc fez e pára de querer reiniciar o computador! :-)

Preste bastante atenção na ACLs, lembre-se sempre que elas são lidas da esquerda para a direita e de cima para baixo.

Vamos configurar o arquivo squid/etc/squid.conf:

# vi /usr/local/squid/etc/squid.conf

Vou passar as configurações básicas para ter um servidor rodando legal, com bloqueio a sites de pornografia, bate-papos e downloads de arquivos .mp3.

As linhas do squid.conf são comentadas (em inglês) com uma explicação detalhada das outras opções, não é dificil descubrir sozinho como se configura ele. :-)

Primeiro vamos na linha onde tem o endereço da porta por onde será compartilhada a net, para descomentar é só tirar o # que está na frente da TAG, descomente a linha:

http_port 3128

Aqui vc pode colocar a porta que você preferir, caso for fazer um proxy transparente nao vai fazer muita diferença, pois vc vai setar o pedido via firewall.

Agora a linha da cache, que vai estar assim:

cache_dir ufs /usr/local/squid/var/cache 100 16 256

E vc vai deixar assim, não esqueça de descomentar:

cache_dir ufs /usr/local/squid/cache 100 64 64

Esse 100 64 64 na frente do endereço significa o seguinte:

    * 100 é o tamanho em megas que vai ser desponibilidado para o cache.
    * 64 é o número de pastas que poderam ser criadas no squid/cache
    * 64 é o número de sub-pastas que poderam ser criadas sob os diretorios criados anteriormente

Agora coloque o squidadm, aquele usuário que a gente criou, como administrador do Squid. Para isso descomente a linha chace_effective_user e deixe ela assim:

cache_effective_user squidadm

ACL - HTTP_ACCESS

As acls são as regras para o funcionamento do Squid, são nelas que vc vai setar, por exemplo, um grupo de usuários que terá autorização para entrar em sites entre outras coisas mais.

A configuração das acls não são dificeis, mas vc deve ficar atento em relação a ordem em que os comando vão aparecer, lembre-se sempre que as acls são lidas de CIMA para baixo e da ESQURDA para a direita.

A string para criar acls é assim:

acl nome_da_acl comando parametros;parametros
http_access (deny|allow) nome_da_acl

Veja alguns tipos de acls:

  • ACL
  • Utilização
  • Exemplo
src 	        Determina um endereço ip 	                                                acl teste src 192.168.100.1
url_regex 	Determina um texto na url do site 	                                        acl teste url_regex uol.com.br
urlpath_regex 	Determina uma subpasta na url 	                                                alc teste urlpath_regex .br/sexo
urlpath_regex 	Determina por tipo de arquivo 	                                                acl teste urlpath_regex .mp3$ .exe$ .zip$
proxy_auth 	Determina que o login deve ser efetuado, precisa do NCSA 	                acl teste proxy_auth user01 user02
port 	        Determina um porta 	                                                        acl teste port 8080
time 	        Determina um horário especifico 	                                        acl teste time dia_semana hr_inicial-hr_final
                                                                                                    -> acl almoco MTWHF 12:00-13:00
arp 	        Determina MAC address, para usar adicione 
                --enable-arp-acl no configure 	                                                acl teste arp 01:02:03:04:05:06

Você pode usar um arquivo onde estarão os parâmetros, que eu acho bem mais limpo e deixa o squid.conf mais fácil de ler. Para fazer isso basta colocar um "link" para fora do arquivo, eu costumo criar uma pasta listas/ dentro da squid/etc/, fica assim:

acl teste url_regex "/usr/local/squid/etc/listas/teste.txt"

Exemplo de uma regra de acl que vai proibir acesso a sites de pornografia, download de mp3 e acesso total para os usuário do ip 192.168.100.2 e 192.168.100.3. Para fazer essa configuração você deve baixar os arquivos porn e noporn no link:

<nowiki>
    * Blocking Porn http://web.onda.com.br/orso/
<nowiki>

Baixe as duas listas e coloque-as no diretório squid/etc/listas, para isso crie o diretório:

# mkdir /usr/local/squid/etc/listas
# chown -R squidadm /usr/local/squid/etc/listas

Primeiro procure no arquivo squid.conf pelas linhas:

#Recomended minimum configuration:

Coloque as suas acls após a ultima acl da lista, que deve ser acl CONNECT method CONNECT:

## Minhas Acls
acl acesso_total src 192.168.100.2 192.168.100.3
acl mp3 urlpath_regex .mp3$
acl porno url_regex "/usr/local/squid/etc/listas/porn"
acl noporno url_regex "/usr/local/squid/etc/listas/noporn"

Pronto as acls foram colocadas, mas agora vc deve colocar as regras das acls para dizer se elas vão liberar ou proibir. Ainda dentro do squid.conf encontre a linha onde está:

<nowiki>
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
<nowiki>

Coloque suas regras logo abaixo esse comentário, o que está depois do # é um comentário e não precisa ser colocado no squid.conf:

http_access allow diretoria # Libera o acesso para a acl diretoria
http_access deny mp3 # Nega acesso a alc mp3
http_access deny porno # Nega acesso a alc porn, que busca seu conteudo em um arquivo de fora
http_access allow noporn all # Libera o acesso para a acl noporn que busca o conteudo em um arquivo de fora

Acho que ficou bem fácil de entender, mas mesmo assim vamos dar mais uma olhada:

    * Se for diretoria pode tudo
    * Se for qualquer outro tem 3 opções
      -- Se tentar pegar mp3 não passa
      -- Se o conteudo do site tiver alguma das palavra do porn ele não passa
      -- Se o conteudo do site tiver ou nao alguma palavra do noporn ele passa

Essa é uma configuração bem simples de acls para o Squid, depois mesmo se vc não for colocar autenticação no Squid, dê uma olhada na parte do NCSA porque lá tem uma configuração um pouco mais arrojada das acls.


NCSA

Agora vamos instalar o NCSA. A instalaçao do NCSA não é obrigatória para o funcionamento do Squid, mas muitas vezes vc pode acabar precisando.


Você vai precisar do HTPASSWD, se vc tiver o Apache instalado ele provavelmente já vai estar istalado também. Ele normalmente fica dentro de /usr/bin/ ou /usr/sbin, caso você não o tenha mesmo pegue-o em:

    * HTPASSWD http://www.squid-cahe.org/related-software.html

Na pasta onde o Squid foi descompactado entre no diretório:

<nowiki>
# cd helpers/basic_auth/NCSA
<nowiki>

Compile o NCSA agora:

# make

# make install

Copie o autenticador para a pasta de binários do Squid:

# cp ncsa_auth /usr/local/squid/bin

Agora temos que editar o arquivo squid/etc/squid.conf

# vi /usr/local/squid/etc/squid.conf

Siga até a linha onde está:

#auth_param basic program

Subistitua e descomente por:

auth_param basic program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd

Descomente também esta linha, ela define o número de autenticações simultaneas:

auth_param basic children 5

Agora vamos configurar os usuários que poderão ter acesso ao Squid, agora o negocio começa a ficar mais legal! :-)

Primeiro temos que criar o arquivo passwd na pasta squid/etc, como foi especificado dentro do squid.conf. Os usuários e as senhas vão ficar dentro do passwd. Na primeira vez que você for usá-lo deve ser assim:

# htpasswd -c passwd usuário

Nas vezes seguintes use assim:

# htpasswd passwd usuário

Caso queira alterar a senha de algum usuário é só dar o mesmo comando com o nome do usuário que voce quer alterar a senha.

Esses usuários devem estar dentro de uma lista onde vc vai dizer que tipo de permissão ele vai ter, aqui vou criar duas listas uma com acesso total e uma que bloqueia porno e multimedia (mp3, mov, mpeg, mpg, avi). Se vc for fazer um Squid em um lugar onde cada usuário tem o seu computador não acho muito necessario criar autenticação. Acho mais interessante usar essa configuração em algum lugar onde as pessoas trocam muito de computador e tem alguns niveis de permissão diferentes.

Voltando a explicação... Vc vai ter 2 arquivos que vão ficar dentro de squid/etc/listas, um arquivo sera o auto e o outro o noauto. A cada usuário que vc criar vc terá que adiciona-lo ou em auto que serão os users que poderão fazer de tudo na internet ou no arquivo noauto que são os "mortais". Eu acho q seria um saco ficar adicionando user por user entao fiz este script que ajuda um pouco na hora de fazer os cadastros.

#!/bin/bash

clear
while true
do
clear
echo -e "
Opcao Acao
====================================================================
1 Adicionar usuário com permissão total
2 Adicionar usuário com permissao controlada
3 Alterar senha de usuário (qualquer permissao)
4 Listar usuário cadastrados - permissao total
5 Listar usuário cadastrados - permissao controlada
0 Sair
====================================================================
Escolha uma das opcoes acima (0-5): c"
read Opcao
case "$Opcao"
in
1) echo -e " Entre com o nome: c"
read nome
if cat /usr/local/squid/etc/passwd | grep "$nome:" 1>/dev/null 2>/dev/null
then
echo "ERRO! Usuário já cadastrado"
sleep 2
else
htpasswd /usr/local/squid/etc/passwd "$nome"
echo "$nome" >> /usr/local/squid/etc/listas/auto
echo "Cadastro efetuado com sucesso!"
sleep 2
fi
;;
2) echo -e " Entre com o nome: c"
read nome
if cat /usr/local/squid/etc/passwd | grep "$nome:" 1>/dev/null 2>/dev/null
then
echo "ERRO! Usuário já cadastrado"
sleep 2
else
htpasswd /usr/local/squid/etc/passwd "$nome"
echo "$nome" >> /usr/local/squid/etc/listas/noauto
echo "Cadastro efetuado com sucesso!"
sleep 2
fi
;;
3) echo -e " Entre com o nome: c"
read nome
if cat /usr/local/squid/etc/passwd | grep "$nome:" 1>/dev/null 2>/dev/null
then
htpasswd /usr/local/squid/etc/passwd "$nome"
echo "Senha alterada com sucesso!"
sleep 2
else
echo "ERRO! Usuário não existe"
sleep 2
fi
;;
4) echo "Usuário com acesso total"
echo "------------------------"
cat /usr/local/squid/etc/listas/auto
echo "------------------------"
;;
5) echo "Usuário com acesso controlado"
echo "------------------------"
cat /usr/local/squid/etc/listas/noauto
echo "------------------------"
;;
0) echo "Até logo..."
exit
;;
*) echo " Somente sao validas opcoes entre 0 e 5"
sleep 2
;;
esac
done
exit

Coloque o script no /bin com o nome de addsquid e de permissao de execuçao:

# chmod +x /bin/addsquid

Para rodar o script basta dar o comando:

# addsquid

ATENÇÃO! Voce não é obrigado a fazer esse script, é só uma dica! :-)


Acls de Autenticação

Agora é necessário criar as acls para que o Squid peça a senha. A pré-configuração já foi feita, que era a parte se setar o NCSA dentro do squid.conf e criar os usuários.

Eu vou fazer assim, como vc já conseguiu entender um pouco de acl depois de chegar até aqui entao eu vou colocar as regras todas aqui em baixo com um comentário na frente explicando o que ela faz, acho que fica mais dinamico.

No arquivo squid.conf:

# Acls
acl diretoria src 192.168.100.1 192.168.100.2
acl auto proxy_auth "/usr/local/squid/etc/listas/auto"
acl noauto proxy_auth "/usr/local/squid/etc/listas/noauto"
acl mult urlpath_regex .mp3$ .mpeg$ .mpg$ .mov$ .avi$
acl noporn url_regex "/usr/local/squid/etc/listas/noporn"
acl porn url_regex "/usr/local/squid/etc/listas/porn"

# Regras
http_access allow diretoria # A diretoria tem computadores pessoais entao nao precisa logar, acesso total
http_access allow auto # Faz com que quem tenha a senha de permissao total tenha net sem passas por outras acls
http_access deny noauto # Vai fazer com que quem esteja na lista noauto tenha que passar pelas acls abaixo
http_access deny mult # Proibe acesso aos tipos de arquivos setados
http_access allow noporn # Libera lista de palavras que parecem porno mas naum sao
http_access deny porn # Segura sites com pornografia
http_access allow all # O que não ficar preso nas regras acima pode ser usado


SARG

Nota

A instalaçao do SARG é realmente muito simples, mas tem alguns detalhes a que se deve dar atençao como:

  • O SARG deve ser rodado todo dia no mesmo horário
  • Não podemos deixar os arquivos de log do Squid muito grande


Imagino que vc já pegou o SARG que eu pedi logo no inicio do tutorial, se não pegou pegue agora porque vc vai precisar. :-)

Lá tem o SARG para todas as matrizes, Slackware, Debian e RedHat. Aqui eu vou ensinar a instalação do pacote .tar.gz, que ae serve para todo mundo. Mas caso vc queira pegar o pacote da sua distro é só instalar com o comando que vc usa para instalar seus pacotes (lógico). :-)

Isso é só se vc for usar o .tar.gz:

# tar -xvzf sarg-1.4.1.tar.gz
# cd sarg-1.4.1
# ./configure
# make
# make install


Configuração

Depois de instalado vamos configurar, aqui nos temos que dizer:

- Onde devem ser gerados os relatórios

- Onde esta o access.log

- lingua padrão

- Definir IP

- Relatórios que queremos

O arquivo onde se configura o SARG fica em:

/usr/local/sarg/sarg.conf

Para determinar onde os relatórios deverão ser gerados procure pela linha:

output_dir /www/docs/relatorios/

Aqui eu mandei ele criar os relatórios dentro da pasta do Apache, que ae eu já posso ver os relatórios em qualquer micro da rede.

O access.log é o arquivo em que o Squid joga todos os pedidos que chegaram a ele e o resultado do pedido, se foi negado ou não e de onde veio. Para configurar procure a linha access_log e deixe como está aqui em baixo:

access_log /usr/local/squid/var/logs/access.log

Para determinar a lingua padrao que o SARG vai usar basta colocar Portuguese na tag language e descomenta-la assim:

language Portuguese

Voce deve colocar para o SARG resolver o ip das maquinas, assim vc sabe de onde vieram os pedidos do Squid, basta descomentar a tag resolve_ip yes:

resolve_ip yes

E por último, porem mais importante, vamos dizer o que nos queremos no nosso relatorio. Para isso vamos editar a tag:

#TAG: repot_type type
# What kind of reports to gererage

E na linha onde está:

#report_type topsites users_sites sites_users date_time denied auth_failures site_user_time_date

É só descomentar e pronto. Ficando assim nossa tag:

report_type topsites users_sites sites_users date_time denied auth_failures site_user_time_date

Pronto a configuração básica está feita, mas se vc deixar só assim não vai resolver nada, vc tem que adicionar um comando no crontab para gerar esse relatório diariamente, para isso eu fiz mais um scriptzinho que ajuda um pouco. Ele faz um backup do relatório do dia e manda gerar o novo relatório. Veja como fica o script:

#!/bin/bash
## Gera variavel do dia
dia=`date +%Y"-"%b"-"%d`

## Cria a pasta do dia e copia os arquivos
mkdir /usr/local/squid/var/logs/backup/"$dia"
cp /usr/local/squid/var/logs/access.log /usr/local/squid/var/logs/backup/"$dia"/access.log
cp /usr/local/squid/var/logs/cache.log /usr/local/squid/var/logs/backup/"$dia"/cache.log
cp /usr/local/squid/var/logs/store.log /usr/local/squid/var/logs/backup/"$dia"/store.log

## Inicia o Sarg
sarg

## Apaga os arquivos antigos
>/usr/local/squid/var/logs/access.log
>/usr/local/squid/var/logs/cache.log
>/usr/local/squid/var/logs/store.log

É muito importante deixar os aquivos de log com pouco tamanho, porque quando ficam muito grandes o Squid começa a demorar muito para conseguir abri-los, pensa que o usuário não tem permissão e trava.

Com esse script os logs não são deletados, eles apenas ficam em um backup separado, quando vc quizer consultar eles estão lá. Isso vai tomar espaço em seu disco mas é o mesmo espaço que tomaria se ficasse em um arquivo só. Se vc não precisar do backup é só comentar as linhas onde o scrip faz backup.

Coloque o script no /bin com o nome de relat_backup e de permissao de execucao:

# chmod +x /bin/relat_backup

Bem, vamos adicionar esse script no crontab, de o comando do crontab e adicione a linha que eu vou colocar aqui:

# crontab -e

Agora adicione a linha:

40 23 * * * /bin/relat_backup 1> /dev/null

O crontab lê primeiro os minutos depois as horas entao isso siguinifica que todo dia as 23:40 ele vai rodar o scritp.


Epílogo

Bom é isso! Chegamos ao fim...

Qualquer dúvida, sugestão ou se vc for uma mina muito gata e esteja solitária manda um e-mail! :-)


Créditos


Imagem:Avatar olhos spawn 2.jpg --Duca 18:32, 9 Janeiro 2006 (BRDT)

Horários baseados na GMT -3. Agora são 20:32.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.