quinta-feira, 26 de junho de 2014

Configurando proxy Squid com autenticação com niveis de acesso parte III

Olá, postarei  hoje como criar e gerenciar grupos de usuários autenticados
com autenticação tipo NCSA  no Squid. No post anterior ensinei quais as ACLS e configurações necessárias para podermos implantar a autenticação de forma básica.
Porém, todos sabemos que os usuários possuem perfis de acesso diferentes.
Seja em casa, empresa. Você não vai querer bloquear o acesso do diretor ao facebook, não vai liberar acesso total ao pessoal do escritório correto para eles passarem o dia inteiro baixando mp3 e consumindo sua preciosa banda correto? Como vamos solucionar o problema ?  Facilmente, criando grupos de usuários com perfis diferentes para acessarem o proxy. Então chega de blá, blá blá !  e vamos lá!
Partindo do principio que você seguiu ou  pelo menos leu  os tutoriais anteriores.  Você já sabe criar os usuários e implementar a  autenticação.
A ideia aqui é que você vá lendo post a post e no decorrer das etapas, desenvolvendo seu conhecimento. Por isto é muito importante se você deseja adquirir um conhecimento mais completo sobre o Squid ou os demais assuntos que serão postados aqui. É desejável  que você sempre leia a sequência completa dos posts sobre um assunto.
Nos posts anteriores, você já aprendeu o que é o Squid,  como funciona,  para o que ele server, o que são ACLs quais são os principais tipos e como elas funcionam e outros conceito importantes.

OBS: Este tutorial é valido para Debian e derivados porém, nada impede de aplicar os conceitos e algumas configurações aprendidas aqui em outras distribuições.

Primeiro vamos instalar com o comando abaixo o pacote apache2-utils com o qual geraremos nosso arquivo contendo os usuários..

# apt-get install apache2-utils

Agora vamos instalar o squid com o comando abaixo:

# apt-get install squid3

Agora  criaremos o arquivo que contém as senhas e os usuários.  Faremos isso com o comando abaixo:

# htpasswd -c passwd ribeiro

Ao digitar o comando a cima o comando pede a senha e sua confirmação.
você pode digita a senha que  você quiser neste caso teste01

 Em nosso tutorial, para fins didáticos criaremos 10 Usuários para nós. Dividiremos eles em  5 grupos,
Operacional, suporte, diretoria, adm, full. Com estes grupos criaremos níveis de acesso que atenderão
as necessidades do nosso cenário.

Você pode e deve criar quantos usuários e grupos achar necessário.
Os demais usuário serão criados com os comandos abaixo:

# htpasswd -c passwd secretaria1
# htpasswd -c passwd secretaria2
# htpasswd -c passwd diretor1
# htpasswd -c passwd diretor2 antonio
# htpasswd -c passwd jose
# htpasswd -c passwd suporte1
# htpasswd -c passwd suporte2
# htpasswd -c passwd sysadmin1

OBS:  passwd aqui, não é o comando passwd e sim, o nome do nosso arquivo de senhas. Poderíamos chamar ele com o nome que quisermos, basta substituir passwd pelo nome que preferirmos.
Agora dentro do diretório /etc/squid3/ criaremos os arquivos referentes aos grupos que vão conter os usuários. Com o comandos abaixo:

# touch  full  administracao suporte operacional diretoria

Agora, com nosso editor de texto favorito, vamos adicionar os usuários ao respectivos arquivos dos grupos. Não vou usar editor de texto aqui por que como neste caso são só dois usuários por grupo usarei o comando echo  com redirecionamento para adicionar os usuários aos arquivos.
  
# echo "secretaria1" >> /etc/squid3/administracao
# echo "secretaria2"  >> /etc/squid3/administracao
# echo "diretor1"  >> /etc/squid3/diretoria
# echo "diretor2"  >> /etc/squid3/diretoria
# echo "antonio"  >> /etc/squid3/operacional
# echo "jose"  >> /etc/squid3/operacional
# echo "suporte1"  >> /etc/squid3/suporte
# echo "suporte2"  >> /etc/squid3/suporte
# echo "sysadmin1"  >> /etc/squid3/full
# echo "ribeiro"  >> /etc/squid3/full

Agora vamos instalar o squid com o comando abaixo:
Criaremos o diretório /etc/squid3/listas/  
Ele vai conter as listas de bloqueio que o Squid ira usar para delimitar o acesso dos grupos de usuários. Para isso, basta usar o comando abaixo:

# mkdir /etc/squid3/listas/

Agora, com o diretório listas criado vamos rntrar nele e criar os arquivos de listas com os comandos abaixo:

#  cd /etc/squid3/listas

# touch sexo_regex extensoes redes_sociais_regex stream_regex sexo redes_sociais diversos stream

Usaremos este arquivos,  para criarmos as ACLS que controlarão o acesso dos usuários.
Estes arquivos conterão os sites a serem bloqueados. Vejamos alguns exemplos de lista de bloqueio abaixo:

# vi /etc/squid3/listas/extensoes
.exe$
.com$
.zip$
.rar$
.iso$
.ace$
.bat$
.pif$
.scr$
.mp3$

.cmd$


# vi /etc/squid3/listas/redes_sociais
.facebook.com
.twitter.com
.orkut.com

.tumblr.com

# vi /etc/squid3/listas/redes_sociais_regex
facebook
orkut
twwitter

tumblr

# vi /etc/squid3/listas/sexo
.pornobuceta.com
.redtube.com
.batepapo.uol.com.br
.playboy.com.br
.sexy.com.br
.sandrinha.
.galinhas.

# vi /etc/squid3/listas/sexo_regex
sexo
hardcore
ninfeta
penis
suruba
sexy
gostosa
peituda
playboy
puta
buceta

# vi /etc/squid3/listas/stream
.youtube.com
.youtube.com.br
.metacafe.com

# vi /etc/squid3/listas/stream_regex

xhamster

youtube

kboing

megavideo

dailymotion

          
# vi /etc/squid3/listas/diversos

.uolk.uol.com.br/
.justfilmeseseriados.org
.melhoresfilmes.net
.filmesprabaixar.com
.filmeshd.tv
.downfilmes.net
.filmesdiarios.org
.baixarsofilmes.com
.brfilmes.org
.freedownz.110mb.com
.portalfilmes.org
.filmesparadownloads.com
.cubodown.com
.melhordocinema.com
.cuberfilmes.org
.baixarfilmes.ws
.baixandolegal.org
.baixargratis.net
.filmesparabaixar.org
.torradeira.net/*
.rededownload.com
.baixarofilme.net
.filmes-rmvb.blogspot.com
.sormvb.net
.degracaemaisgostoso.org
.baixarfilmesfree.net
.filmes-gratis.org
.topcine.net
.baixeturbo.org
###########################################################################

Vale Lembrar que, devemos manter as listas  o menor possível. Pois minha experiência, mostra que 
lista grandes afetam diretamente o desempenho do Squid. Para filtrar conteúdo  sugiro outras ferramentas que trabalham em conjunto com o Squid. Como o Dansguardian ou Squidguard os quais , demostrarei depois, como se configura cada um deles.  
Agora vamos editar o arquivo, /etc/squid3/squid.conf  deixando ele com o seguinte conteúdo
Caso você não queira copiar e colar basta fazer o  download  do arquivo aqui

Vamos edita-lo com o comando abaixo:

# vi /etc/squid3/squid.conf

# porta padrão do squid onde o proxy escutará
http_port 192.168.101.1:3128
# No meu caso 192.168.101.1 a porta padrão do squid é a 3128 mas você
#pode substitui-la por qualquer  outra de sua preferência como por exemplo a 8080
###### linhas referentes autenticação  por usuários ############
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd
# processos simultaneos de autenticação  em nosso caso 10 mas isso
# depende da capacidade do seu  servidor
auth_param basic children 10
# menssagem que aparecera ao usuário solicitando autenticação
auth_param basic realm Digite seu logim e senha
 # tempo que a autenticação é valida por janela de navegador
auth_param basic credentialsttl 3 hours
# opção case sensitive nas senhas  tem gente que aconselha desabilitar eu 
#por segurança sou contra  Usuário tem que aprender digitar a senha
auth_param basic casesensitive on
#########################################
# opções de cache e outras
# Diretório padrão onde será criado o cache do squid

coredump_dir /var/spool/squid3
# Tamanho do cache de memória varia de acordo  com a capacidade do seu # equipamento
cache_mem 128 MB
# tamanho do cache de memoria RAM usado pelo squid lembre-se quanto
# mais memoria para cache melhor # mas devemos respeitar os limites do
# hardware
cache_dir ufs /var/spool/squid3 5120 64 64
# diretório e quantidades de subdiretórios do squid
maximum_object_size_in_memory 64 KB
maximum_object_size 700 KB
minimum_object_size 0 kB

#  tamanhos máximo e mínimo de objetos no cache do squid
# limite minimo de ocupação do cache

cache_swap_low 85
# limite maximo de ocupação do cache
cache_swap_high 95
# opções diversas  sobre refresh  em outros protocolos explicarei em outra oportunidade
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# definições da rede na qual o servidor proxy ira trabalhar
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Log de acesso a paginas
access_log /var/log/squid3/access.log
#Diretório de Paginas de erros
error_directory /usr/share/squid3/errors/Portuguese
# você pode personalizar as sua paginas de erro sempre uma ótima opção
#Portas consideradas seguras pelo servidor proxy

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http

################## ACLS Autenticação ##################
acl usuarios proxy_auth REQUIRED
acl usuarios proxy_auth  "/etc/squid3/passwd"
acl usuarios_full proxy_auth  "/etc/squid3/full"
acl usuarios_diretoria proxy_auth  "/etc/squid3/diretoria"
acl usuarios_suporte proxy_auth  "/etc/squid3/suporte"
acl usuarios_operacional proxy_auth  "/etc/squid3/operacional"
acl usuarios_adm proxy_auth "/etc/squid3/administracao"

################ Fim ###############################
######### Regras para controle do acesso dos grupos ############
# blacklist
acl sexo_regex  url_regex -i "/etc/squid3/listas/sexo_regex"
acl extensoes  urlpath_regex -i "/etc/squid3/listas/extensoes"
acl redes_sociais_regex url_regex -i "/etc/squid3/listas/redes_sociais_regex"
acl stream_regex url_regex -i "/etc/squid3/listas/stream_regex"

acl sexo dstdomain  "/etc/squid3/listas/sexo"
acl redes_sociais dstdomain "/etc/squid3/listas/redes_sociais"
acl diversos dstdomain "/etc/squid3/listas/diversos"
acl stream dstdomain "/etc/squid3/listas/stream"

# Fim Black list

############### FIM ###########################
acl CONNECT method CONNECT
acl lan src 192.168.101.0/24

# acls Básicas do squid
# aqui vai uma dica muito importante  a ordem das ACLs é fundamental uma 

#vez que o squid interpreta as ACLs de cima para baixo ou seja se a anterior #bloqueia um coisa não adianta embaixo libera-la que ela ainda estará #bloqueada.
# ACLs que criam os grupos  e níveis de acesso de usuários autenticados na # rede

http_access allow usuarios_full  !sexo !sexo_regex
http_access allow usuarios_diretoria  !sexo !extensoes
http_access allow usuarios_suporte !sexo !sexo_regex
http_access allow usuarios_operacional !sexo !sexo_regex !extensoes !redes_sociais !redes_sociais_regex  !stream !stream_regex
http_access allow usuarios_adm !sexo !sexo_regex !extensoes !stream !stream_regex

##################### FIM ######################
http_access allow manager localhost
http_access allow localhost
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny manager

# A ACL abaixo é muito importante pois ela nega o acesso a quem não se enquadrar na condições
# anteriores ela é muito importante quando o assunto é segurança. explicarei o
#  porque depois
http_access deny all                 
#################### Fim do arquivo ###################



Com este arquivo, temos um Proxy Squid com   autenticação NCSA e níveis de acessos diferentes.
Uma para Cada área da empresa. Nos próximos posts, irei ensinar como integrar a autenticação do squid  com o AD e com o MYsql ou o MariaDB.
Agora é somente autenticar e testar os usuários. Como ensinado nos posts anteriores a verificar os níveis de acesso.
Desde já agradeço e peço qualquer duvida ou comentário e só comentar aqui que eu ajudarei
o mais rápido possível.


  





sábado, 14 de junho de 2014

Configurando Um proxy Squid com autenticação parte II ( mãos a obra)

Olha eu postando novo.
Neste post, mostrarei  passo a passo como se configura um proxy Squid com autenticação tipo NCSA  o mesmo tipo que o apache  servidor WEB usa.

Aqui, vou presumir que você seguiu os passos de instalação do tutorial anterior. Depois mostrarei outras formas de autenticação no Squid.
Vamos relembrar as cores das linhas do arquivo de configuração squid.conf abaixo para fins didáticos.
As linhas em  azul são comentários.
As linhas em vermelho são as configurações adicionadas por mim no tutorial anterior.
As linhas em verde são as que contém, as configurações necessárias para a autenticação deste how-to funcionar. 

Nossa configuração é recomendada para um cenário de uma rede pequena. Onde a maquina com o Squid está configurada como gateway de nossa rede.  Porém, vale lembrar que para rede maiores, geralmente é indicada a configuração do Squid com integração domínio, base de dados LDAP ou base de dados SQL. 


Para utilizarmos a autenticação NCSA no Squid, além do Squid, precisaremos instalar o pacote apache2-utils. Ele nos fornecera o comando htpasswd  com o qual, criaremos os usuários. Este pacote que gera o arquivo criptografado que conterá os usuários. Instalamos o pacote apache2-utils com o comando:

# apt-get install apache2-utils


Vemos mais abaixo, o arquivo de configuração do Squid e os passos adicionais de configuração. Caso não queira ler o post anterior ensinando como instalar o Squid  ou já saiba como. Pule a etapa abaixo:
instalamos o Squid da mesma maneira que ensinando anteriormente com o comando abaixo:
 
# apt-get install squid3

Não podemos esquecer de habilitar o repasse de pacotes como demonstrado abaixo. Editar o arquivo /etc/sysctl.conf:


# vi /etc/sysctl.conf

Encontrar e descomentar a linha contendo:

net.ipv4.ip_forward=1
Aqui, lanço novamente uma observação, para evitar que os usuários burlem seu proxy, devemos usar regras de iptables. Essas regras e suas explicações, eu postarei explicando mais a frente.
 
Agora com o Squid já instalado, o repasse devidamente  habilitado, criaremos o arquivo que contém as senhas e os usuários.  Faremos isso com o comando abaixo:

# htpasswd -c passwd ribeiro

Ao digitar o comando a cima o comando pede a senha e sua confirmação.
você pode digita a senha que  você quiser neste caso teste01

Notemos que passwd aqui, não é o comando passwd e sim, o nome do nosso arquivo de senhas. Poderíamos chamar ele com o nome que quisermos, basta editarmos esta linha no arquivo de configuração do Squid:

acl usuarios proxy_auth "/etc/squid3/passwd"

Poderíamos mudar o nome do seu arquivo para alcatra por exemplo
(Sempre detestei exemplos  com nome de vegetais rs).
para isso teríamos que criar nosso arquivo com o seguinte comando:

# htpasswd -c alcatra ribeiro
 
Nossa ACL ficaria assim:

acl usuarios proxy_auth "/etc/squid3/alcatra"


Obs: O comando htpasswd, cria o arquivo no diretório corrente, ou seja
no diretório onde estamos trabalhando na hora que ele é executado.
Por uma questão de organização o eu criei o arquivo do diretório /etc/squid3/


 Agora vamos dar uma verificada no conteúdo do arquivo criado.


root@squidteste:~# cat /etc/squid3/passwd
ribeiro:$apr1$vPDVWkqe$QeTVr3EMnXSO3P.5D//Qg.
diaadia:$apr1$UTcDf0yv$o6XeTu750xWDm4B/MpFu5/
Notamos as senhas em vermelho estão criptografas. Isto resolve um pouco do nosso problema de segurança. Temos maneiras melhores e mais eficazes de guardar as senhas. Estas, serão demostradas em outros posts.

Para adicionarmos mais usuários, usamos o mesmo comando sem a opção -c. Pois se usarmos ela de novo, destruiremos o arquivo e seu conteúdo.

Com o comando abaixo criamos novos usuarios:

# htpasswd  passwd diaadia

Digitamos o comando acima, agora para criar mais usuários.  O comando novamente pedira a senha do usuário  e sua confirmação.
você pode digita a senha que  você quiser neste caso linux.(recomendo uma senha melhor).
Agora já criamos os usuários. Então, vamos  trabalhar com o Squid propriamente dito.
Vamos editar o arquivo de configuração do Squid, usando nosso editor favorito. Em meu caso o vi. caso não quera copiar e colar o conteúdo, basta  baixar o arquivo aqui.
 Não vamos esquecer que as configurações referentes a sua rede você deve alterar com seu IP, mascara e etc.. 

# vi  /etc/squid3/squid.conf

# porta padrão do squid onde o proxy escutará
http_port 192.168.101.1:3128
# No meu caso 192.168.101.1 a porta padrão do squid é a 3128 mas você pode substitui-la por qualquer # outra de sua preferência como por exemplo a 8080
######## linhas referentes autenticação  por usuários  ############
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd
auth_param basic children 5
auth_param basic realm Digite sua senha
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on
########################################################################
# opções de cache e outras
coredump_dir /var/spool/squid3
cache_mem 1024 MB
# tamanho do cache de memoria RAM usado pelo squid lembrese quanto mais memoria para cache melhor # mas devemos respeitar os limites do hardware
cache_dir ufs /var/spool/squid3 5120 64 64
# diretório e quantidades de subdiretórios do squid
maximum_object_size_in_memory 64 KB
maximum_object_size 700 KB
minimum_object_size 0 kB
#  tamanhos máximo e mínimo de objetos no cache do squid
# limite minimo de ocupação do cache
cache_swap_low 85
# limite maximo de ocupação do cache
cache_swap_high 95
# opções diversas  sobre refresh  em outros protocolos explicarei em outra oportunidade
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# definições da rede na qual o servidor proxy ira trabalhar
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Log de acesso a paginas
access_log /var/log/squid3/access.log

#Diretório de Paginas de erros
error_directory /usr/share/squid3/errors/Portuguese
# você pode personalizar as sua paginas de erro sempre uma ótima opção
#Portas consideradas seguras pelo servidor proxy
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
############# ACLS Autenticação #####################
acl usuarios proxy_auth REQUIRED
acl usuarios proxy_auth "/etc/squid3/passwd"
############ Fim ###############################
acl CONNECT method CONNECT
acl lan src 192.168.101.0/26
# acls Básicas do squid
# aqui vai uma dica muito importante  a ordem das ACLs é fundamental uma vez que o squid 
# interpreta as ACLs de cima para baixo ou seja se a anterior bloqueia um coisa não adianta #embaixo libera-la que ela ainda estará bloqueada
# ACL que libera o acesso para  os usuários autenticados na rede
http_access allow usuarios
################### FIM #################################################
http_access allow manager localhost
http_access allow localhost
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny manager

#   A ACL abaixo é muito importante pois ela nega o acesso a quem não se enquadrar nas
#  condições anteriores ela é muito importante quando o assunto é segurança. explicarei o
#  porque depois
http_access deny all
############################# Fim do arquivo ###############################

Agora só basta reinicializar o Squid com o comando abaixo:

# service squid3 restart



Agora e só testar e configuramos nosso navegador para acessar a internet através do proxy. Como podemos ver nas figuras abaixo:

1º Configuramos o navegador para acessar através do proxy.















 2º  Agora se tudo correu bem ao acessar qualquer pagina o navgador solicitará seu usuário e senha. Como podemos ver nas 3 figuras abaixo:














































Se tudo deu certo é só correr pro abraço.
Espero que este tutorial tenha ajudado.
Referências:
Linux manpages
Arquivo de configuração do Squid.






























quarta-feira, 11 de junho de 2014

Download de Videos do youtube no Debian Wheezy


Estou aqui para um post rapidinho.
Como o nome deste blog é "dia a dia linux"  hoje eu vou postar sobre algo que mais cedo
ou mais tarde, a gente acaba precisando em nosso dia a dia.
Sobre um programa muito útil, para quem quer baixar de forma simples e descomplicada videos do youtube.

Esse programa se chama nomnom, ele esta disponível  nos repositórios do Debian.
Instalamos ele com o comando abaixo:

# apt-get install nomnom

O programa tem  a interface bem simples como vemos abaixo:











Para inserirmos a URL de download basta digitarmos ctrl + A
Como vemos abaixo:











Após inserirmos a URL, o aplicativo perguntara qual o formato desejado e outras opções.
Para acessarmos as demais opções de configuração clicamos com o botão direito no aplicativo.











Espero que este post tenha sido útil aqui é um programa bem simples e fácil de usar.
Qualquer duvida ou sugestão é só comentar aqui.





domingo, 8 de junho de 2014

Configurando um proxy Squid com autenticação. Parte I (bate papo)

Olá, estou aqui de novo e novamente, como diria o "Grande Pensador Biro Biro".
Como prometido, estou aqui para adicionar mais recursos ao nosso proxy Squid. O qual, post anterior fizemos somente uma configuração básica. Lembra ?
Antes de colocarmos a mão na massa gostaria de primeiro bater um pequeno papo sobre Squid proxy no geral. Mas se você só precisa de um how-to de como configurar um proxy com autenticação simples, pode ir direto a parte II deste post.
Um servidor proxy  ou intermediário em uma tradução bem literal. 
 Seu papel é  atender e intermediar  as requisições de  acesso  a um serviço determinado feitas pelo usuário. 
 No caso do Squid estamos falando de um web Proxy ou Proxy de caching  HTTP 
Ai você me pergunta caching HTTP o  que é?  E pra que serve isto?
Vamos por partes para a explicação ficar mais simples, vamos imaginar o seguinte cenário na empresa em que você trabalha. Os usuários acessam para fazer o seu trabalho basicamente os mesmo sites. Esta empresa tem a banda limitadíssima  (Coisa que quase não acontece rsrs). 
Não seria ótimo se a cada acesso que os usuários fizessem eles não tivessem que baixar a pagina inteira da web ? Economizando sua banda e tornando o processo mais rápido. Ai eu digo seus problemas acabaram !! Um  proxy de cache HTTP como o Squid  funciona criando um cache das paginas acessadas pelos usuário
vale ressaltar que esse cache é somente dos arquivos estáticos das páginas.  
Como funciona esse processo? Cada vez que o cliente requisita uma pagina web  que recebe primeiro essa requisição, e é feita ao servidor proxy o qual recebe a pagina e a repassa imediatamente ao usuário e  copia ela em seu cache. 
Em uma segunda requisição feita desta pagina o servidor em vez de solicita-la novamente  ao servidor web o proxy desta vez envia ao cliente a cópia que ele tem salva em seu cache em um processo muito mais rápido e que ainda economiza banda de conexão. 
Como vou saber se o proxy não esta me exibindo uma pagina desatualizada ?
Pode ficar tranquilo, o squid possui um mecanismo de verificação para saber se a pagina solicitada foi atualizada.
Quais mecanismos são estes ?
Bom calma, Pequeno Gafanhoto isto é assunto para outro POST.
Agora que sabemos o que é um proxy cache HTTP, vamos descobrir o que o proxy Squid pode fazer:
Vamos agora responder umas perguntinhas sobre o Squid faz:
O Squid faz cache de paginas web ?
O Squid pode controlar o horário que os usuário acessam a internet na minha rede?
O Squid trabalha com autenticação em base de dados Ldap, mysql, SQL 
Funciona como proxy transparente ?
Podemos criar filtros baseados em regex para bloquear/liberar  paginas com o squid ?
Podemos controlar o acesso dos usuário via MAC ADDRESS ou IP
O Squid tem suporte a HTTPS, FTP e mais algum outro protocolo ?
Você vai ensinar a fazer tudo isso ? Resposta:  Sim, Sim  amigão. A resposta para todas as peguntas acima é Sim.
O Squid pode controlar as paginas que os meus usuários podem acessar através de listas  de URLs?
Resposta: Sim  mas, a experiência me traz algumas ressalvas quanto a isso. As quais explicarei em outra oportunidade.
O Squid pode gerar relatórios completos das paginas acessadas pelos usuários
Resposta: Sim em conjunto com o Squidguard, e outras ferramentas, ou através de seus logs de acesso.
 O squid Faz pipoca, pizza ou café ?  Infelizmente não. 

Vamos deixar de blá, blá blá e ir direto explicando como o Squid funciona. O funcionamento do Squid é Baseado em ACLs.
Acsess
Control
Lists

Traduzindo Listas de controle de acessos

Vou falar brevemente apenas sobre os tipos mais utilizados de ACLs no Squid
Primeiro vamos definir ACL como regras para a navegação através de um proxy.
Segundo vamos mostra abaixo como as ACLs são declaradas das seguintes formas:

acl nome_da_acl  tipo _da_acl parâmetro

acl nome_da_acl tipo_da_acl "/caminho_completo/arquivo/de_configuração_da_acl"



Vale lembrar que por default as acls são case sensitive caso precise de acls case insensitives use a opção -i
na ACL como no exemplo abaixo:

acl sua_acl_case_insensitive  tipo _da_acl -i parâmetro

Os principais tipos de ACLs do squid:

src  ACL tipo origem(source)  ela trabalha com um ip ou um range de ips os quais os clientes chegam no proxy

Exemplos:

ACL tratando de um ip específico usando este IP como parâmetro

acl DESKTOP_DIRETOR src 192.168.101.30/255.255.255.255

acl tratando de um range de ips usando estes IPs como parâmetro

acl DIRETORIA src 192.168.101.2 192.168.101.3 192.168.101.4

acl tratando de um range de ips  obtendo estes ips de um arquivo de texto

acl DIRETORIA src "/etc/squid3/ips.txt"

Vale ressaltar que quando usamos o conteúdo só arquivo de texto que vai servir como parâmetros para nossa ACL de ter somente um parâmetro por linha neste caso nosso parâmetro são os números de IPs

dstdomain   ACL tipo destino de domínio como o nome diz trata do domínio de  destino da navegação.

Exemplos:

acl SITE_A_LIBERAR_OU_BLOQUEAR dst 200.200.201.202/255.255.255.255

acl SITE_A_LIBERAR_OU_BLOQUEAR dstdomain .diaadialinux.blogspot.com.br

acl SITE_A_LIBERAR_OU_BLOQUEAR dstdomain "/etc/squid3/bloqueados.txt"

Com as ACLs acima estamos bloqueando domínios específicos a primeira um único IP, a segunda  a partir do domínio. e a terceira a partir de  uma lista de domínios ou IPs em um arquivos txt organizados um por linha. Aqui cabe uma ressalva muito importante, usar o Squid  para bloqueio baseado em listas, afeta diretamente o desempenho. Não recomendo usar este recurso. Ele é recomendado apenas para bloquear ou liberar  no máximo, uns poucos sites. Pois, se essa lista crescer muito o Squid em vez de acelerar sua conexão vai acabar deixando ela mais lenta, consumindo muitos recursos da sua maquina. Para bloqueio baseado em listas eu recomendo usar em conjunto com o squid,   ferramentas como o Dansguardian ou Squidguard. Ferramentas essas que se integram muito com squid facilitam a vida para ele  e para quem administra ele.  ;>) e tem opções de controle de acesso muito melhores e mais flexiveis.

proxy_auth     ACL referente a autenticação no proxy utilizada para tratar o login com o qual o cliente se autentica no proxy. Para ela funcionar a configuração de autenticação deve estar habilitada.
Uma pratica muito comum e combinar esta ACL com outras. Sim amigão, as acls podem ser combinadas,
conforme a sua criatividade. Tornando o Squid uma ferramenta muito poderosas e flexível.

Exemplo: 

acl DIRETOR proxy_auth ribeiro

time  ACL do tipo tempo ela bloquei ou libera acessos baseados em um período de tempo.
As ACLs deste tipo gerenciam o tempo baseadas em dia da semana e hora.

Exemplo:

acl ALMOCO time MTWHFA 12:00-13:00 

A ACL acima trata o horário de almoço de segunda a sábado  das 12:00 as 13:00.
Os dia da semana são escritos de forma abreviada abaixo segue a relação completa de dias da semana:

Abreviação Dia da semana 
S                  Domingo         
M                 Segunda-feira 
T                  Terça-feira      
W                Quarta-feira   
H                 Quinta-feira      
F                  Sexta-feira       
A                 Sábado            

Vale lembrar que uma ACL pode ter dois valores deny ou allow ou seja negar ou liberar.
isto será  explicado mas a frente.

url_regex  este tipo de ACL trabalha com expressões regulares encontradas nas URLs. É possível fazer expressões regulares que tratem de varias URLs porém aqui devemos ter muito cuidado.

Exemplo:

acl extensao_bloqueada url_regex -i \.mp3$

Neste exemplo tratamos URLs que fornecem download de arquivos mp3.
Vale lembrar que nem  todos os link de download de mp3 contém a expressão mp3  no seu conteúdo mas a maioria contém o que já ajuda a bloquear downloads de vários sites.

port este tipo de ACL trata de uma porta  específica de destino da navegação.
muito boa para bloquear sites de jogos  os quais você conhece a porta de conexão.

Exemplo:

acl SITE_5656 port 5656

arp   este tipo de acl faz bloqueio ou liberação de acesso baseado em MAC ADDRESS. Devemos ter muita atenção com esta ACL.  Pois para ela funcionar, o squid deve ser compilado de forma especial com o opção  –enable-arp-acl  (veremos compilação e usos desta ACL mas a frente)

acl MAC_LIBERADO arp “/etc/squid3/squid/mac_liberado.txt”

Valores e regras  para ACLs 

Acima eu disse que as ACLs tinha dois valores e que poderiam ser combinadas. Bom vamos explicar isso com calma agora que vou explicar um pouco destas feitiçarias.
Vou começar pelos valores das ACLs. Uma ACL é composta de duas linha na verdade eu até agora só mostrei uma uma ACL completa tem o seguinte formato:

Definição de nome e parâmetros da ACL:

acl DESKTOP_DIRETOR src 192.168.101.30/255.255.255.255

Definição de Valor da acl:

http_access allow DESKTOP_DIRETOR

Os valores das ACLs podem ser allow liberar ou deny negar por exemplo na linha acima estamos liberando o acesso da estação de trabalho do diretor a internet através do valor ALLOW.  Se mudarmos o valor da linha acima para deny  Bloqueamos o acesso da estação do Diretor a internet e ninguém  quer isso certo?
Agora vamos aprender a combinar as ACLs. Você já ouviu aquele ditado que "Uma andorinha só não faz verão"?  Assim são as ACLs apesar de dar para fazer muita coisa com as ACLs separadamente. Em conjunto fazem um trabalho muito melhor.

Veremos um exemplo disto abaixo:

acl BLOQUEADOS dstdomain "/etc/squid3/bloqueados.txt"

acl ALMOCO time MTWHFA 12:00-13:00 

http_access allow BLOQUEADOS ALMOCO

 As linhas acima, desbloqueiam temporariamente o acesso a lista de sites bloqueados. Somente no horário de almoço das 12:00 as 13:00 horas.
É muito importante lembrar que as ACLs são executadas na ordem em que são escritas de cima para baixo.
ou seja, se você bloquear alguma coisa com uma ACLS acima ela será bloqueada. Mesmo que tenha uma ACL abaixo liberando. Uma vez que algo foi liberado ele não será bloqueado abaixo ou vice e versa.
Por essa razão devemos ter muita atenção.

Espero que este bate papo tenha esclarecido algumas duvidas sobre a estrutura básica do Squid.
Qualquer duvida comentário ou erro que tenha  encontrado aqui é só comentar aqui que eu ficarei muito agradecido espero ter ajudado.

Referências:

Squid manpage.
Arquivo de configuração  do Squid.

segunda-feira, 2 de junho de 2014

Tutorial como configurar Proxy Squid basico Ou squid a dorê

Olá a todos a coisa andava meio abandonada aqui devido a boa e velha correria Faculdade, Filhos, emprego e etc.. Mas agora que sossegou um pouco vamos lá! 
Neste tutorial  vou ensinar como configurar uma proxy Squid básico nos próximo ensinarei a adicionar 
mas recursos a nosso proxy. no post de hoje será mais rápido e fácil que preparar Lula a Dorê.

Vamos partir do ponto que você já  o que é um servido proxy e para o que ele server e que só busca uma
receita para configuração rápida desta Lula ;)

A distribuição que vamos utilizar e o Debian Wheezy  versão 7.5 mas esse how-to vale para qualquer 
distribuição baseada em Debian como por exemplo Ubuntu, Linux Mint e etc...

O arquivo de configuração do Squid  e auto explicável ele vem todo comentado com suas 
5780 linhas  ai você  me pergunta 5780 LINHAS !??? Eu preciso disso tudo ???
E eu respondo calma gafanhoto a resposta e sim e não depende  do que  você precisa implementar
 não hoje em nosso tutorial  prometo que não vamos passar das 64 linhas contando com as linhas em branco
Mas não espere que nada de grandioso saia daqui. mas lembre-se  uma passo de cada vez.

A versão instalado servidor proxy squid  será a versão 3 (Licença GPL) com o comando:

# apt-get install squid3

Agora vamos gerar bacukp do arquivo de configuração original do squid com comando

 # cp /etc/squid3/squid.conf /etc/squid3/squid.conf_old

Lembra das 5780 linhas que eu falei que não íamos precisar de todas o squid tem um conceito chamado 
politicas padrões ou seja algumas ACLs sem as quais ele não funciona. essas vem descomentadas prontas para usar, as restantes vem todas comentadas vamos nos livrar delas por enquanto lembre-se de fazer um backup antes pois elas serão uteis futuramente.

geramos novo squid.conf com as politicas padrões

#  grep -v ^["#"] /etc/squid3/squid.conf_old > /etc/squid3/squid.conf

Com o comando acima geramos um novo squid.conf contendo somente as linhas sem comentários ou seja 
as ACLS basicas do squid.

Agora vamos visualizar abaixo nosso arquivo de configuração:

# cat /etc/squid3/squid.conf

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1


acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
########################  FIM DO ARQUIVO #############

O seu arquivo de configuração terá esse conteúdo com  a diferença que ele terá muitas linha em branco a mais eu removi para dar maior clareza
Agora chegou a hora da verdade para termos um proxy funcional e com a função de cache precisamos de adicionar algumas linhas.
Para fins didáticos as linhas em vermelho são as que eu adicionei
e as linhas começadas com # em azul são comentários no arquivo de configuração, as linhas em preto fazem parte das ACLS padrão do squid.
O carácter cerquilha na frente dos comando indicam que eles devem ser aplicados como usuário root.
Decidi por comentar o máximo possível de opções no arquivo de configuração, por acreditar que dessa maneira facilite o entendimento e as alterações para a sua realidade.

Edite o arquivo de configuração com seu editor favorito no meu caso o VI.

Segue abaixo como ficou o arquivo de configuração.
você pode copiar e colar e alterar o exemplo abaixo ou pode simplesmente  baixar  o arquivo pronto a partir do link de download: squid.conf:

# vi /etc/squid3/squid.conf

 # porta padrão do squid onde o proxy escutará
http_port 192.168.101.1:3128
# No meu caso 192.168.101.1 a porta padrão do squid é a 3128 mas você pode substitui-la por qualquer # outra de sua preferência como por exemplo a 8080

# opções de cache e outras
coredump_dir /var/spool/squid3
cache_mem 1024 MB
# tamanho do cache de memoria RAM usado pelo squid lembrese quanto mais memoria para cache melhor # mas devemos respeitar os limites do hardware
cache_dir ufs /var/spool/squid3 5120 64 64
# diretório e quantidades de subdiretórios do squid
maximum_object_size_in_memory 64 KB
maximum_object_size 700 KB
minimum_object_size 0 kB
#  tamanhos máximo e mínimo de objetos no cache do squid
# limite minimo de ocupação do cache
cache_swap_low 85
# limite maximo de ocupação do cache
cache_swap_high 95
# opções diversas explico na próxima
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# definições da rede na qual o servidor proxy ira trabalhar
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Log de acesso a paginas
access_log /var/log/squid3/access.log

#Diretório de Paginas de erros
error_directory /usr/share/squid3/errors/Portuguese
# você pode personalizar as sua paginas de erro sempre uma ótima opção

#Portas consideradas seguras pelo servidor proxy
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
##############################################################

acl CONNECT method CONNECT
acl lan src 192.168.101.0/26


# acls Básicas do squid
# aqui vai uma dica muito importante  a ordem das ACLs é fundamental uma vez que o squid 
# interpreta as ACLs de cima para baixo ou seja se a anterior bloqueia um coisa não adianta embaixo #libera-la que ela ainda estará bloqueada

http_access allow manager localhost
http_access allow localhost
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny manager
http_access deny all
                                                                                                                                             #################### Fim do arquivo ###################

Agora que terminamos de editar o arquivo de configuração do squid só  falta reiniciarmos o serviço.
 com o comando abaixo:    

# service squid3 restart

OBS: Para o servidor proxy funcionar corretamente devemos habilitar o repasse de pacotes
através da maquina dos seguintes passos:

Editar o arquivo /etc/sysctl.conf:

# vi /etc/sysctl.conf

Encontrar e descomentar a linha contendo:

net.ipv4.ip_forward=1


Aqui lanço uma observação, para evitar que os usuários burlem seu proxy devemos usar regras de iptables.
Essas regras e suas explicações eu postareis mais a frente.




Agora configuramos nosso web Broswer para acessar a internet através do proxy.
No meu caso o navegador iceweasel.
Como vemos em figura abaixo:
No menu editar ---> preferências--> avançado --> Rede
Selecionar a opção configuração manual de proxy
Preencher com o endereço do seu servidor proxy
marcar a opção usar esse proxy para todo os protocolos.
Clicamos em OK e fechar



















Agora se você fez tudo certinho  e só testar em nosso navegador e navegar normalmente como vemos abaixo:















Referências:
 Linux  squid manpage
 Arquivo de configuração do squid

OBS: aqui temos uma configuração básica do Squid sem autenticação, filtro de URLs, proxy transparente e outros recursos suportados pelo mesmo. Nos próximos post usaremos esse arquivo de configuração como base para implantamos outros recursos.