FreeBSD Links

Freebsd.org

OpenPacket Blog

Arquivos

30/08/2005   03/09/2005   06/09/2005   09/09/2005   10/09/2005   03/10/2005  

This page is powered by Blogger. Isn't yours?

<body>

  Guia sobre Squid/Proxy Transparente

Guia sobre Squid/Proxy Transparente
-----------------------------------

Stéfano Martins

Versão 1.2 - sábado, 07 de agosto de 2004.


-------------------------------------------------------------------------------


Sobre o guia
------------

Este guia tem como seu objetivo ser o mais simples possível,
abordando o assunto nem de maneira superficial demais ou
aprofundada demais, sempre mantendo este nível. Estou escrevendo
pois estava sem fazer nada pela comunidade GNU/Linux, somente
sugando informação.
Como todos podem ver, o estilo do meu guia é similar ao do Guia
Foca Linux, que está disponível em
http://focalinux.cipsga.org.br. Fiz isso por quatro motivos:
1 - Eu gosto do estilo do guia;
2 - Aprendi mais com o autor daquele guia do que com a maioria
dos meus professores;
3 - Para os que já estavam acostumados a utilizar o Guia Foca
Linux, irão ficar mais entrosados;
4 - Porquê eu quis.
Não garanto que esse guia vá possuir inúmeras versões
melhoradas, mas é claro que de vez em quando eu posso
adicionar novos features nele, mas ele irá sempre continuar
com esse mesmo layout. Com um pouco de sorte quem sabe esse
guia passe de 50 páginas!

Nota: Nos últimos dias um amigo meu, Guilherme,
disponibilizou um espaço em seu servidor para a hospedagem
do guia, o endereço de tal servidor é
(http://www.facic.fuom.br/~guilherme/stefano). Grato
Guilherme!


Nota de Copyright
-----------------

Copyleft (C) 2004 - Stéfano Martins.

Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.1 or any later version published by the
Free Software Foundation; A copy of the license is included
in the section entitled "GNU Free Documentation License".


-------------------------------------------------------------------------------


Conteúdo
--------

1. Introdução
1.1. O que é Squid?
1.2. Proxy
1.3. Tipos de Proxy
1.4. Vantagens e desvantagens
1.5. Outros servidores Proxy para GNU/Linux e
Windows

2. Instalação do Squid
2.1. Instalação via pacotes .rpm
2.2. Instalação via código-fonte
2.3. Instalação via pacotes .deb
2.4. Instalação em freeBSD
2.5. Instalação em openBSD
2.6. Instalação em Microsoft Windows 2000

3. O arquivo squid.conf
3.1. Introdução
3.2. Limpando o arquivo squid.conf
3.3. Algumas das tags mais importantes
3.3.1. http_port
3.3.2. cache_mem
3.3.3. cache_dir
3.3.4. cache_access_log
3.3.5. cache_mgr
3.3.6. cache_effective_user
3.3.7. cache_effective_group

4. Access Control Lists (ACL's, aka Listas de Controle de
Acesso)
4.1. Introdução
4.2. Tipos de ACL's
4.3. Definindo ACL's
4.4. A tag http_access

5. Casos
5.1. Habilitando o Squid
5.2. Restringindo o acesso ao Squid
5.3. Bloqueando sites indevidos no proxy
5.4. Configurando o Squid para solicitação de
autenticação
5.4.1. O módulo de autenticação
nsca_auth
5.4.2. O módulo de autenticação
smb_auth
5.5. Restringindo o horário de acesso
5.6. O chefe pentelho
5.7. Utilizando Squid com Proxy Transparente
5.7.1. Squid com IPChains
5.7.2. Squid com IPTables
5.8. Redirecionamento de portas
5.9. Segurança

6. Relatórios
6.1. Criando um script de relatório simples
6.2. Utilizando o SARG
6.2.1. Instalação
6.2.2. Configuração
6.2.3. Gerando relatórios
6.2.4. Dica

7. Utilizando o Proxy Transparente
7.1. IP Masquerade
7.2. Configurando o Kernel
7.3. IP Masquerade com IPChains
7.4. IP Masquerade com IPTables
7.5. Utilizando o IPChains no Kernel 2.4

8. Configurando os clientes
8.1. Configurando um cliente Windows
8.2. Configurando um cliente GNU/Linux

9. Outros
9.1. Sobre esse guia
9.2. O que você precisa para utilizar esse guia?
9.3. Sobre o autor
9.4. Agradecimentos
9.5. Referências
9.6. Críticas? Sugestões? Ajuda?
9.7. Atualizações do guia
9.8. Alterações
9.9. ToDo


-------------------------------------------------------------------------------


1. Introdução
-------------

Hoje em dia, os servidores proxy deixaram de ser um simples
privilégio das empresas e se tornaram uma necessidade. Nesse
guia eu darei uma introdução ao assunto e explicarei como montar
os dois tipos de proxy existentes: o Proxy Transparente e o
Proxy Controlado.


1.1. O que é o Squid?
---------------------

O Squid foi originado de um projeto denominado Harvest entre
o governo americano e a Universidade do Colorado - para
saber mais, veja o FAQ do Squid no seu site oficial
(http://www.squid-cache.org).
Atualmente é o proxy mais popular, possuindo mais
co-projetos.
É geralmente disponibilizado por padrão pela maioria das
distribuições GNU/Linux, fornecendo todas as funcionalidades
apresentadas anteriormente, permitindo atuar como proxy para
os protocolos HTTPS, HTTP, FTP e gopher.

Por exemplo: Se o usuário X visita o site da GNU
(http://www.gnu.org), a página é exibida normalmente para
ele e armazenada em cache. Quando o usuário Y fr ver o mesmo
site, ele irá ver o site armazenado em cache, diretamente do
servidor Squid, não sendo feita outra requisição para a
internet.


1.2. Proxy
----------

A tradução de *proxy* para o português é *intermediário*. E é
exatamente isso que o Squid é, um _intermediário entre a rede
local e a _internet_.
Os proxies servem para conectar uma rede interna de computadores
à internet, compartilhando o acesso à ela. Imagine só se você
tivesse que pagar duas linhas ADSL em sua residência só porquê
você tem dois computadores? Foi para esse fim que surgiu o Squid.
Geralmente, nós podemos chamar o computador que está rodando o
Squid de _Gateway_, que é o nosso portão para a internet. Alguns
profissionais da área também consideram o Squid como uma espécie
de roteador, pois ele permite que duas redes diferentes
conversem e troquem informações entre si.


1.3. Tipos de proxy
-------------------

Existem basicamente dois tipos de proxy: o Proxy
Transparente e o Proxy Controlado. Veja a seguir as
diferenças:

Proxy Transparente
------------------
nele é simplesmente feito um repassamento de pacotes vindos da
internet para uma máquina que es´ta na rede interna.

Proxy Controlado
----------------
Essa é a categoria dos softwares especializados em agir como
servidores proxy, como o próprio Squid. Eles possuem mais opções
que o Proxy Transparente para facilitar o controle de quem pode
ou não utilizar o proxy, solicitação de autenticação, proxy para
SSL e o uso de listas de controle de acesso (ACL's) que nós
veremos mais à frente.

1.4. Vantagens e desvantagens
-----------------------------

Claro que dependendo do seu caso como um administrador de redes,
você vai ter que decidir qual tipo de proxy você vai utilizar.
Vão existir casos em que um Proxy Transparente vai lhe
oferecer o suficiente para fazer o que você quer fazer e vão
existir casos em que você vai precisar de funções que
somente um Proxy Controlado está disposto a lhe oferecer.
Conheça aqui algumas vantagens e desvantagens do Proxy
Transparente e do Proxy Controlado.

Proxy Transparente
------------------
É mais simples de ser configurado quando já está habilitado no
Kernel. O cliente é obrigado a passar pelo proxy, programas como
ICQ funcionam plenamente com ele e não precisa que as máquinas
clientes sejam configuradas.

Proxy Controlado
----------------
Com ele você pode utilizar listas de controles de acesso (ACL's)
para controlar quem usa e quem não usa o seu proxy, pode ser
utilizado para uso com SSL< pode servir para liberação de
internet mediante autenticação do usuário e, principalmente,
possui um sistema de caching, possuindo um desempenho na rede
geralmente melhor.

Agora as desvantagens:

Proxy Transparente
------------------
Possui menos recursos que um Proxy Controlado. Precisa de
configurações no Kernel e, em alguns casos, é necessária a
recompilação do Kernel do sistema. Não possui nenhuma segurança
de acesso e não possui um sistema de cachnig, o que o torna mais
lento em uma rede.

Proxy Controlado
----------------
Programas como ICQ e o protocolo SMTP não funcionam muito
bem com ele. Pode ocorrer dos usuários removerem as
configurações do proxy assim que você tiver saído da sala e
a sua configuração é bem mais complicada.


1.5. Outros servidores PRoxy para GNU/Linux e Windows
-----------------------------------------------------

É claro que o Squid não é o único servidor Proxy para
GNU/Linux. Aqui eu irei listas outros conhecidos tanto para
GNU/Linux e para Windows.

Delegate (http://www.delegate.org)
----------------------------------
Este também é um proxy interessante, de autoria de Yutaka Sato,
suportando uma variedade muito grande de protocolos (HTTP, FTP,
NNTP, POP, IMAP, SMTP, Telnet, Wais, X, LDAP, LPR, Socks, ICP,
SSL, etc). É um projeto mais recente que o Squid, pois surgiu em
1994, mas tem evoluído muito rapidamente.

OOPS! (http://zipper.paco.net/~igor/oops.eng/features.html)
-----------------------------------------------------------
É um proxy mais simples que o anterior, surgiu como uma
alternativa ao Squid.

Internet Connection Sharing (ICS)
---------------------------------
É o proxy oficial da Microsoft que é utilizado nos sistemas
operacionais Windows. Possui uma facilidade em sua utilização e
configuração, porém possui poucas opções e vários bugs que
prejudicam sua segurança e funcionamento. As vezes acontecem
problemas qeu você simplesmente não entende o que é.


-------------------------------------------------------------------------------


2. Instalação do Squid
----------------------

A instalação do Squid pode ser feita de várias maneiras. Tanto
pode ser feita por mei de compilação do código-fonte quanto pode
ser feita por pacotes disponíveis para a sua distribuição. Para
cada distribuição, podem existir pacotes que possuem uma
performance melhor ou que possuem patches de segurança próprios
para a mesma, por isso eu recomendo que você puxe sempre que
possível o pacote que é para a sua distribuição.


2.1. Instalação via pacotes .rpm
--------------------------------

As instalações que utilizam os pacotes .rpm, que possuem o
padrão Red Hat são feitas da seguinte maneira:

# rpm -ivh squid-x.y.z.rpm


2.2. Instalação via código-fonte
--------------------------------

As instalações via código-fonte possuem a vantagem de
compilações mais específicas como, por exemplo, se você
desejar utilizar o Squid junto com endereçamento MAC, o que
é muito útil se vocÊ está utilizando o Squid conjuntamente
com DHCP. A compilação básica é feita da seguinte maneira:

# cp squid-x.y.z-src.tar.gz /usr/local/src
# cd /usr/local/src
# tar xvfz squid-x.y.z-tar.gz
# cd squid-x.y.z
# ./configure
# make all
# make install


2.3. Instalação via pacotes .deb
--------------------------------

Este particularmente é o método mais fácil de se instalar
qualquer programa, porém só está disponível para a distribuição
Debian (http://www.debian.org).

# apt-get install squid


2.4. Instalação em freeBSD
--------------------------

Se você instalou o diretório de ports no freeBSD, a instalação
será simples, bastando utilizar os comandos abaixo:

# cd /usr/ports/www/squid25/
# make
# make all install

Ou por meio de um pacote pré-compilado:

# mount /cdrom #CD de instalação do freeBSD
# mkdir /usr/ports/distfiles
# cp /cdrom/packages/All/squid-x.y.z.tgz /usr/ports/distfiles/
# pkg_add -v /usr/ports/distfiles/squid-x.y.z.tgz

Detalhe: x.y.z é a versão do Software.


2.5. Instalação em openBSD
--------------------------

Baixe o pacote já compilado no site do openBSD
(http://www.openbsd.org) e depois:

# pkg_add squid-x.y.z.tgz


2.6. Instalação em Microsoft Windows 2000
-----------------------------------------

Baixe o setup do site do Cygwin (http://www.cygwin.com) e
selecione o pacote do Squid durante a instalação. Proceda como
faria qualquer instalação em plataforma Microsoft (Next, Next,
Finish).


-------------------------------------------------------------------------------


3. O arquivo squid.conf
-----------------------


3.1. Introdução
---------------

Quase todas as configurações do Squid permanecem nesse
arquivo. É um arquivo que, se olharmos por um ângulo
diferente, é um arquivo e também o manual dele mesmo. Ele
possui cerca de 2 mil linhas.


3.2. Limpando o arquivo squid.conf
----------------------------------

Pode parecer uma futilidade para a maioria dos
administradores, mas é recomendável ua limpeza no
squid.conf, pois ele vem com muitas opções e comentários
(que são as explicações das tags) e que geralmente não tem
tanta utilidade se você possuir um guia ao seu lado ou
simplesmente sabe o que está fazendo.
Para fazer uma limpeza no seu squid.conf, execute os
seguintes comandos:

# cp /etc/squid/squid.conf /etc/squid/squid.conf.default
# egrep -v "^#|^$" squid.conf.default > squid.conf


3.3. Algumas das tags mais importantes
--------------------------------------

Aqui eu vou descrever as tags mais básicas para o
funcionamento do Squid. Aqui ainda não serão citadas as
Listas de Controle de Acesso (ACL's). Quero lembrar que um
proxy que rode somente com essas configurações ainda não é
um proxy funcional.


3.3.1. http_port
----------------

Padrão: http_port 3128
----------------------
Este parâmetro define a porta em que o serviço Squid irá escutar
requisições. Por padrão esta opção estará comentada, não
necessitando ser descomentada caso não desejando alterá-la


3.3.2. cache_mem
----------------

Padrão: cache_mem 8M
--------------------
Este parâmetro define a quantidade de memória que o servidor
Squid usará. Caso sua máquina seja dedicada ao proxy, é
recomendável configurar esse valor para 50% de sua memória
física. Quanto maior a quantidade de memória disponível,
melhor será a performance do proxy.


3.3.3. cache_dir
----------------

Padrão: cache_dir ufs /var/spool/squid 100 16 256
-------------------------------------------------
Este parâmetro define o diretório onde o Squid alocará os
arquivos para cache. Nesse caso será o diretório
*/var/spool/squid*. A opção _ufs_ define uma forma de
armazenamento do cache, podendo se utilizar outros formatos,
somente por questões de otimização. Outra opção de formato
de cache é a _aufs_, esta última não é muito utilizada e
está disponível somente para algumas plataformas - veja
arquivo *squid.conf* para saber sobre outras opções de
formato. A opção _100_ define o tamanho máximo do diretório
e é dado em MB. A opção _16_ especifíca a quantidade de
sub-diretórios que o diretório */var/spool/squid* pode ter.
A opção _256_, por sua vez, especifíca a quantidade de
sub-diretórios que os explicados anteriormente poderão ter.


3.3.4. cache_access_log
-----------------------

Padrão: cache_access_log /var/log/squid/access.log
--------------------------------------------------
Define o arquivo de log do Squid. Caso queira saber quem
acessou determinada página da internet, é através deste
arquivo que descobrirá.


3.3.5. cache_mgr
----------------

Padrão: cache_mgr email
-----------------------
Este parâmetro tem a finalidade de especificar o e-mail do
administrador do proxy. CAso o serviço Squid venha a ser
terminado de forma anormal, o usuário do correio eletrônico
especificado será alertado através de um e-mail. Este e-mail
também é informado quando alguma página de erro é mostrada
ao usuário cliente.


3.3.6. cache_effective_user
---------------------------

Padrão: cache_effective_user squid
----------------------------------
Informa ao Squid com qual *nome de usuário* ele deve rodar.
É recomendável não utilizar qualquer tipo de servidor
rodando como o usuário root, uma vez que se o servidor for
invadido, o invador possuirá privilégios de root no sistema.
Nas últimas versões do Squid foi criado um bloqueio que
impede que o mesmo seja executado como root.


3.3.7. cache_effective_group
----------------------------

Padrão: cache_effective_group squid
-----------------------------------
Informa ao Squid com qual *grupo* ele deve rodar.


-------------------------------------------------------------------------------


4. Access Control Lists (ACL's, aka Listas de Controle de Acesso)
-----------------------------------------------------------------


4.1. Introdução
---------------

As Listas de Controle de Acesso (Access Control Lists) ou
simplesmente ACL's são os meios que o Squid nos dá para
fazerum filtro e um controle melhor dos "quem pode", "quem
não pode", etc.
É por aqui que nós iremos trabalhar melhor no nosso proxy,
filtrando os conteúdos e travando os usuários de verem sites
indevidos ou fazerem coisas que não deveriam na internet.
Conclusão: Dá pra fazer muita coisa legal com as ACL's.


4.2. Tipos de ACL's
-------------------

Existem vários tipos de ACL's, cada uma tendo uma finalidade
diferente, é claro. São essas as mais conhecidas:

src
---
Endereço IP de origem, utilizado para restringir quais
clientes podem fazer uso do proxy ou para identificar um
um host.

dst
---
Endereço IP de destino, utilizado para restringir quais
hosts remotos podem serem acessados ou para identificar um
host remoto.

dstdomain
---------
Domínio de destino, utilizado para restrinfir acesso à um
determinado domínio ou para identificar um domínio de
destino.

time
----
Hora e dia da semana, controla quando o proxy poderá ser
utilizado e quando não poderá.

port
----
Número da porta de destino, usado para restringir acesso a
determinada porta de um servidor.

url_regex
---------
Utilizado para restringir determinadas URL's de acesso, a
comparação de URL é baseada em expressão regular. Esse é um
tipo de ACL que você irá utilizar muito.

proto
-----
Protocolo de transferência.

ident
-----
Nome de usuário.

proxy_auth
----------
Utilizado para requerer autenticação dos usuários e para
especificar determinado suários dentro das ACL's.


4.3. Definindo ACL's
--------------------

Dentro do arquivo de configuração do Squid, o squid.conf,
você vai encontrar uma área que é a mais ideal para declarar
as suas ACL's. Este espaço é onde as ACL's começam a ser
definidas, facilmente identificada pela presença das mesmas.
Para declarar ACL's, a sintaxe básica é a seguinte:

acl "arquivo>"

Um exemplo prático de ACL:

acl palavra_proibida url_regex -i sexo

A ACL acima bloqueia todos os sites que contenham em seu
endereço a palavra "sexo".
Outros exemplos serão dados mais à frente, dependendo do
tipo da ACL.


4.4. A tag http_access
----------------------

É simplesmente inútil o uso de ACL's sem o uso da tag
http_access. É ela que trava ou libera o que a ACL está
estipulando.
Exemplo:

http_access deny proibido

Se nós considerarmos o conjunto ACL + http_access, ficaria:

acl proibido url_regex -i sexo
http_access deny proibido

O que o conjunto acima faz é proibir que qualquer site queq
possua em seu endereço a palavra "sexo" seja exibido para o
requisitante.
Nem sempre você vai utilizar um http_access para cada ACL
que você fizer, às vezes você pode combinar duas ACl's em um
único http_access.


-------------------------------------------------------------------------------


5. Casos
--------

Bom, aqu eu vou citar alguns casos e alguns modos principais
para se configurar o seu Squid. É nesse capítulo que nós
vamos entrar mais a fundo na prática do Squid.


5.1. Habilitando o Squid
------------------------

Essa é a coisa mais fácil a se fazer com o proxy, botar ele
para funcionar sem filtro nenhum. Claro que se você optou
por fazer isso, eu sugiro que você utilize um proxy
transparente.
Para botar o Squid para rodar, basta encontrar a linha
_http_access deny all_, alterar o "deny" para "allow" e
reiniciar o serviço entrando em */etc/init.d* e digitando o
seguinte comando:

# ./squid restart

Pronto! Seu Squid já está compartilhando a sua conexão!
Voilá!


5.2. Restringindo o acesso ao Squid
-----------------------------------

Se nós quisermos que somente uma rede da nossa empresa
acesse o proxy, nós podemos definir faixas de IP's ou redes
inteiras para a utilização do proxy. As opções de relay
serão tratadas na seção "5.9. Segurança".
Quando você encontrar a linha *http_access allow all*, ela
vai estar dizendo que todos os usuários estarão aptos a
utilizar o proxy, podemos controlar isso da seguinte
maneira:
Encontre a linha:

http_access allow all

Comente-a, adicionando uma cerquilha ou joguinho-da-velha
(#) antes do primeiro caractere, para que ela fique assim:

#http_access allow all

Agora crie uma nova ACL do tipo _src_ especificando a origem
da sua rede, desse modo:

acl redeinterna src 192.168.1.0/24

Agora autorize a ACL que você acabou de criar, por meio do
http_access:

http_access allow redeinterna

Como nós especificamos acima, somente os usuários da rede
local tesão direito a utilizarem o proxy.
Para determinar faixas de IP's, você pode fazer assim:

acl faixa_adm src 192.168.1.10-192.168.1.15/24
http_access allow faixa_adm


5.3. Bloqueando sites indevidos no proxy
----------------------------------------

Esse exemplo já foi citado lá em cima, mas de qualquer
jeito, vamos abrangê-lo um pouco mais.
O tipo de ACL *url_regex* serve para nós compararmos termos
dentro de uma URL para que possamos permitir que os usuários
acessem ou não determinada página.
Nós utilizamos muito isso quando desejamos queq sites
pornográficos não sejam vistos por clientes dentro de uma
empresa.
Vamos ao exemplo:
Adicione a seguinte ACL:

acl palavra url_regex -i sex

Agora bloqueie o acesso HTTP com o http_access:

http_access deny palavra

Com esse exemplo, todos os sites que possuam a palavra "sex"
no meio não serão abertos pelos clientes. O parâmetro
especificado (-i) serve para que ele não distingua entre
maiúsculas e minúsculas.
Mas você já parou para pensar: "E se eu quiser que uma lista
de palavras sejam bloqueadas?"? Então! Vamos olhar como se
faz:
Crie um arquivo de texto em "/etc/squid/blocked" e dê
permissões de leitura para ele:

# touch /etc/squid/lists/blocked
# chmod 755 /etc/squid/lists/blocked

Nele insira todas as palavras proibidas. Lembre-se que você
deve adicionar uma palavra por linha. Após isso nós criamos
a mesma ACL, só fazendo uma pequena modificação nela:

acl palavra url_regex -i "/etc/squid/blocked"

Agora bloqueie o acesso HTTP com o http_access:

http_access deny palavra

Simples, não é?
É importante saber que a leitura desse arquivo é feita de
cima para baixo, então deve-se prestar muita atenção na
ordem que são colocadas as ACL's. Sempre é interessante
raciocinar exatamente e interpretar a ordem das ACL's para
saber que a coisa está funcionando exatamente como deveria.
Às vezes quando você utiliza o controle por palavras no
proxy, são bloqueados alguns sites que não eram para serem
bloqueados, por conterem essas palavras. Imagine se voce
está bloqueando a palavra "sexo" (www.sexo.com.br) mas
também estará bloqueando o site (www.sexologia.org). Para
isso nós iremos criar uma excessão à regra.
Primeiramente, crie uma lista chamada *unblocked* e dê à ela
as mesmas permissões que você deu à lista *blocked*.

# touch /etc/squid/lists/unblocked
# chmod 755 /etc/squid/lists/unblocked

Nessa lista, você irá colocar todos os sites que são uma
excessão para as listas, portando inclua o
"www.sexologia.org" nele. Um site por linha, não se esqueça.
Após isso, você deverá criar a seguinte regra no seu
squid.conf:

http_access allow blocked !unblocked

E reinicie o serviço ou as configurações:

# ./squid restart
ou
# squid -k reconfigure

Pronto! Está funcionando!

5.4. Configurando o Squid para solicitação de autenticação
----------------------------------------------------------

Este é um caso muito interessante.
Acontece nesse caso que quando nós configuramos o Squid
dessa maneira, nós cadastramos os usuáris em um banco de
dados no servidor e sempre que o usuário abre o navegador, é
solicitado a ele o seu login e a sua senha, para que seja
liberada a navegação. Se o usuário fecha o navegador e abre
novamente, ele é obrigado a se autenticar novamente.
Geralmente isso é utilizado em ambientes acad}emicos ou
escritórios onde os usuáris não possuem um micro definido ou
podem optar por usar qualquer um.
O Squid, ao ser instalado, vem com um módulo chamado
*ncsa_auth*, que e o responsável por fazer essa
autenticação. Existem também outros módulos de autenticação,
como o smb_auth, que funciona conjuntamente com o Samba.
Quando o Samba está afindo como um PDC, o usuário ao se
logar no Windows já se loga no proxy também. Nós iremos
tratar de abos os métodos de autenticação nesse guia. Aqui
nós iremos utilizar também um simples exemplo de
autenticação, mas que é que é utilizado em 90% por dos
ambientes.


5.4.1. O módulo de autenticação ncsa_auth
-----------------------------------------

Para utilizar o módulo de autenticação ncsa_auth, execute os
seguintes passos:
Antes de mais nada, queria falar que dependendo do pacote
que você está utilizando e da distribuição, o módulo do
ncsa_auth pode estar já compilado ou não e sua localização
pode variar, portanto execute o comando *find* para
localizá-lo.

# find / -name ncsa_auth

Após encontrado, copie-o para o /bin:

# cp ncsa_auth /bin

Agora nós teremos queq editar o squid.cnf e adicionar três
linhas. Encontre a linha chamada *auth_param basic* (ela vai
ser uma linha que está comentada) e a altere para:

auth_param basic program /bin/ncsa_auth
/etc/squid/squid_passwd

Nota: A linha acima ocupa uma única linha.

O que essa linha nos indica é o seguinte: Nosso programa de
autenticação será o *ncsa_auth* que está localizado no */bin* e
nós utilizaremos o arquivo de senhas *squid_passwd* que se
encontra em */etc/squid*.
Agora nós iremos adicionar mais duas tags, que são a
*auth_param basic children* e a *auth_param basic realm*.
Elas funcionam respectivamente para dizer ao Squid quantos
processos de autenticação ele vai iniciar e uma mensagem que
vai ser mostrada para os seus clientes quando lhes forem
solitadas as autenticações.
Nestas duas linhas, vocE pode colocar o seguinte:

auth_param basic children 5
auth_param basic realm Digite o usuário e a senha

Agora nós teremos que adicinoar um usuário no arquivo,
utilizando o comando _htpasswd_:

# htpasswd -c /etc/squid/squid_passwd stefano

As próximas execuções do htpasswd não vão necessitar do
parâmetro "-c". O parâmetro "-c" serve para especificar a
criação de um novo arquivo de senhas. Após isso nós
utilizaremos o seguinte para a criação de usuários:

# htpasswd /etc/squid/squid_passwd cassio

Depois de feito isso, nós devemos adicionar uma ACL no
squid.conf:

acl autenticacao proxy_auth REQUIRED

E liberar utilizando:

http_access allow autenticacao

Essa ACL tem por finalidade permitir o uso do proxy somente
se a pessoa tiver executado uma autenticaão válida. Caso
contrario seu acesso é negado.
Após feito tudo isso, é necessário reiniciar o serviço,
entrando no diretório /etc/init.d e executando:

# ./squid restart

Nota: O Squid a princípio parece que funciona conjuntamente
com autenticação e Proxy Transparente, MAS NÃO FUNCIONA! Até
hoje eu espero que alguém me dê uma boa justificativa sobre
isso...


5.4.2. O módulo de autenticação smb_auth
----------------------------------------

Essa é uma opção um pouco mais complicada de ser
implementada, porém que funciona melhor quando você possui
um PDC - Controlador Primário de Dominio (no caso, o Samba).
Aqui eu não irei tratar da configuração do Samba nesse
aspecto e estou considerando que você já o configurou
corretamente.
Uma das principais vantagens disso é que o cliente não tem
que ficar se autenticando toda vez que fechar e abrir o
navegador e que isso nem vai ser perguntado, já que a
autenticação do Samba é a mesma autenticação do Proxy, você
tem uma administração mais fácil, pois só estará utilizando
uma mesma senha para ambos os serviços. Inclusive o usuário
pode alterar a sua senha do proxy sem o uso de cgi-bin's.
Para fazer a configuração, faça o seguinte:
Primeiramente crie um arquivo chamado *proxyauth* no
diretório especificado na seção [netlogon] do seu PDC.
Lembre-se que esse diretório deve ser criado no Windows ou
utilizando o *vi*. Se estiver utilizando o vi, em modo de
inserção digite o seguinte:

:set ff=dos

A seguir, você deverá adicionar nesse arquivo somente a
palravra "allow" (sem aspas) e nada mais.

Nota 1: Caso você possuia BDC's na sua rede, replique o
arquivo nos mesmos.
Nota 2: Quando você cria o arquivo no Windows, ele
infelizmente coloca a extensão .txt no final. Para consertar
isso, renomeie o mesmo no DOS da seguinte maneira:

ren proxyauth.txt proxyauth

Em seguida, adicione a permissão de leitura à todos os
usuários ou grupos que puderem acessar a internet através do
proxy.
Se você desejar o acesso de vários domínios ao proxy, repita
os passos acima para os outros domínios.

Agora vamos para as configurações que devem ser feitas no
squid.conf:
Localize a linha *auth_param basic program* e a deixe da
seguinte maneira:

auth_param basic program /usr/local/bin/smb_auth -W dominio
-U 192.168.1.1

Nota: As linhas acima são uma só.
O parâmetro -W é onde você especifica em qual domínio o
cliente irá se logar e o -U é o endereço do servidor PDC.
Você pode estipular o IP onde o Samba está rodando, mesmo
que seja na própria máquina. Se quiser saber as outras
opções que o smb_auth aceita, entre no seu site
(http://www.hacom.nl/~richard/software/smb_auth_pt_br.html).
Você não precisa especificar as tags *auth_param basic
realm* e *auth_param basic children*, já que a autenticação
será feita na hora que o usuário se logar na rede e que quem
vai gerar os processos de autenticação será o Samba, e não o
Squid.
Em seguida, você deverá jogar a ACl que força a autenticação
dos usuários para que eles possam utilizar o proxy:

acl autenticacao proxy_auth REQUIRED
http_access allow proxy_auth

Pronto! Está funcionando. Para mais informações sobre o
módulo de autenticação smb_auth, visite o seu site em
(http://www.hacom.nl/~richard/software/smb_auth_pt_br.html).


5.5. Restringindo o horário de acesso
-------------------------------------

Aqui é onde nós citamos outro tipo interessante de controle
que nós podemosimplementar em um escritório ou em um meio
acadêmico. O controle por meio de horário.
Para nós fazermos isso, nós fazemos uso da ACL de tipo
_time_.
Exemplo:

acl horariodeacesso time MTWHF 08:00-18:00
http_access allow horariodeacesso

Esta ACL diz para o Squid que o proxy só será liberado das
oito da manhã às seis da tarde nas segundas, terças,
quartas, quintas e sextas-feiras. Qualquer tentativa de
acesso ao proxy fora desse horário será negada.
Aqui nós estipulamos os dias da semana por siglas, que são:

S - Sunday (domingo)
M - Monday (segunda)
T - Tuesday (terça)
W - Wednesday (quarta)
H - Thursday (quinta)
F - Friday (sexta)
A - Saturday (sábado)


5.6. O chefe pentelho
---------------------

Acontece com todos. É fato. Nenhum chefe gosta de tentar acessar
uma página da internet e aparecer para ele um grande "Acesso
Negado" na cara dele. Para falar a verdade, nem eu gosto
muito. Pode acontecer também que você queira criar um
controle que, dependendo do login utilizado, o cliente possa
ver determinadas páginas que o outro usuário não possa e/ou
vice-versa. Vamos ver os dois casos.

Caso 1 - Seu chefe gosta de ver site proibido no trabalho
---------------------------------------------------------
Esse exemplo é quando você não utiliza autenticação e quando
o seu chefe gosta de ver alguns sites que estão proibidos em
uma "lista negra". Faça o seguinte:
Primeiro, crie uma ACL especificando o IP do computador do
seu chefe, no nosso exemplo, vamos supor que seja
192.168.1.50.

acl maodevaca src 192.168.1.50/24

Estou supondo que você já tenha declarado a sua ACL com a
lista negra e que ela se chama *blocked*.
A seguir, na hora que você for colocar o http_access, você
faz da seguinte maneira:

http_access allow blocked maodevaca

Em seguida, reconfigure o Squid ou reinicie o serviço da
seguinte maneira:

# squid -k reconfigure
ou
# ./squid -restart

Pronto! Funcionando! É recomendável que você posicione as
ACL's citadas aqui acima das demais, senão você vai acabar
liberando o seu bloqueio normal para todos os usuários.

Caso 2 - Estagiário só vê o site da empresa
-------------------------------------------
Nesse exemplo é quando o pessoal provavelmente não tem uma
máquina fixa e só tem acesso ao site da empresa. É um pouco
mais difícil de ser implementado, mas nada impossível.
Primeiramente, você deverá especificar o site da sua empresa
por via de ACL's.

acl sitedaempresa dstdomain zica.com.br

Logo após isso, você declara os usuários com uma ACL do tipo
proxy_auth:

acl raleh proxy_auth "/etc/squid/lists/raleh"

Depois você combina as duas ACL's com um único http_access:

http_access deny !sitedaempresa raleh

Veja que eu utilizei novamente o símbolo de exclamação, que
significa "excessão". Interpretando a regra ficaria mais ou
menos assim: "Bloquear todos os sites, COM EXCESSÃO ao site
da empresa para a ralé.".

5.7. Utilizando Squid com Proxy Transparente
--------------------------------------------

Como dito anteriormente, o Squid não sporta todos os
protocolos que são necessários para o pleno funcionamento da
sua rede, dependendo das necessidades que a mesma irá
possuir, como é o caso do ICQ e do protocolo SMTP.
para tanto, é necessário criar conjuntamente com o Squid um
Proxy transparente.
As requisições utilizando o protocolo SMTP serão tratadas
pelo Proxy Transparente enquanto as requisições HTTP serão
tratadas pelo Squid.
O método utilizado é bem simples e não é uma implementação
difícil de ser implementada, bastando para tanto seguir
alguns pequenos passos.


5.7.1. Squid com IPChains
-------------------------

Essa forma, utilizada nos Kernels da linha 2.2,
desenvolve-se da seguinte maneira.
Os comandos que você deve executar são os seguintes:

# echo 1 > /proc/sys/net/ipv4/ip_forward
# ipchains -A input -j REDIRECT 3128 -p tcp -d 0/0 80 -l
# ipchains -A input -j REDIRECT 3128 -p udp -d 0/0 80 -l
# ipchains -A forward -s 192.168.10.0/24 -d 0.0.0.0/0 -j MASQ -l

É interessante colocar essas regras em um script de
inicialização.
Agora vêm as configurações que devem ser feitas dentro do
seu arquivo de configuração do Squid, o squid.conf:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Pronto, o problema que você poderia estar passando com os
protocolos que o squid não abrange se foram.


5.7.2. Squid com IPTables
-------------------------

Essa forma, utilizada nos Kernels da linha 2.4 e 2.6,
desenvolve-se da seguinte maneira.
Os comandos que você deve executar são os seguintes:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Nota: Eu estou supondo que eth0 seja a sua interface de
saída para a internet. A mesma pode ser alterada para eth1,
eth2, eth3, ppp0, etc, conforme a sua necessidade.
E faça com que as configurações dentro do seu squid.conf
fiquem desse jeito:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Pronto, o problema que você poderia estar passando com os
protocolos que o Squid não abrange se foram.


5.8. Redirecionamento de portas
-------------------------------

Aqui está um recurso extremamente interessante. O
redirecionamento de porta é o que realmente garante que os
usuários irão passar pelo Proxy Controlado (no nosso caso, o
Squid), independente do que ele faça para não passar,
incluíndo trocar as configurações de proxy em seu navegador.
Isso acontece porque o redirecionamento de portas faz com
que todas as requisições com destino à porta 80 sejam
encaminhadas para a porta 3128, que é a porta do Squid (por
padrão). É um ótimo recurso para garantir a segurança da sua
rede e não ter que configurar todas as máquinas clientes da
sua rede.
Para a implementação de tal esquema, são necessários os
seguintes passos:
Primeiro, adicione as seguintes entradas no seu squid.conf:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Nota: Para que você faça o redirecionamento de portas, é
interessante que você crie também o Proxy Transparente
conjuntamente com o seu Squid. Sendo assim, essas
configurações já estarão setadas.
Em seguida, você deverá executar a seguinte regra de
IPTables:

# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j
REDIRECT --to-port 3128

Nota 1: As linhas acima são uma só.
Nota 2: Caso você deseje que essa linha seja adicionada ao
iniciar a máquina, você deverá adicioná-la no seu script de
firewall, o qual será executado na inicialização. Na regra
acima, estou levando em consideração que a eth1 do seu
servidor é a niterface queq se comunica com a rede niterna,
podendo ser trocada conforme a necessidade.
Nota 3: Para que o redirecionamento de portas funcione
corretamente, setando a segurança desejada, o gateway
(gargalo para a internet) e o Squid deverão estar na mesma
máquina.
Nota 4: Não obti muito sucesso com os logs gerados pelo SARG
após a implementação do redirecionamento de portas.


5.9. Segurança
--------------

Todo servidor, independente de plataforma ou serviço que
executa, precisa de certas configurações de segurança. Ele
pode ser um servidor NFS, Samba, Apache, Squid, NIS, tanto
faz, ele irá sempre precisar de um ou outro macete de
segurança para que o mesmo não sofra ataques.
Ao longo do tempo que eu mexo com GNU/Linux, eu aprendi que
o mesmo é um sistema extremamente seguro. Eu ousaria dizer
que é quase impossível de ser invadido. Ineflizmente, por
mais perfeita que seja uma máquina, enquanto ela for
manuseada por um ser humano, sempre poderão haver problemas.
As máquinas podem ser à prova de falhas, mas nós humanos,
infelizmente não somos.
É por isso que eu digo que não adianta nada você ter um
canhã se você não sabe atirar. Do que adianta você ter um
dual Xeon de 3.06 GHz se você não sabe utilizar todo o poder
que ele pode te dar? É a mesma coisa com qualquer tipo de
servidor. Conheço pessoas que possuem servidores
poderosíssimos, porém com desempenho inferor a um K6-2 com
450 MHz e 64 de RAM. Tudo porque não sabiam configurar.
Mas, experiências de vida à parte, voltemos a falar de
Squid.
Aqui eu vou abordar somente quatro falhas de segurança, que
eu julgo serem mais importantes.
O Squid, como vários outros serviços, pode rodar tanto para
a internet quanto para a rede interna da sua empresa. É um
erro comum dos administradores não fechar o mesmo para ser
utilizado somente pela rede interna da empresa. Então
acontece de um belo da você receber um e-mail estranho do
seu provedor, avisando que pessoas estão reclamando de spams
que em seus cabeçalhos possuem o seu endereço IP como
endereço IP de envio daquele e-mail.
É essa a hora que você faz as seguintes perguntas ou
afirmações (não necessariamente nessa ordem):
"Meu Deus! Fui invadido!"
"Mas que diabos!?"
"Será que algum usuário está fazendo coisas que não deveria?"
"Mas como isso aconteceu?"
"Vou checar os logs!"
"Ah! Mas se eu descubro quem foi..."
Infelizmente, os administradores não enxergam o quadro
inteiro, alguns vão trabalhar em outras áreas e acabam nem
descobrindo o que aconteceu. Não sabem quqe, na realiade, o
que aconteceu ali foi quqe eles deixaram seus proxies
abertos para a internet e pintou algum abelhudo que passou
um portscanner em uma rede inteira para procurar um servidor
proxy em que o relay estivesse aberto. Essa tática é
conhecida como IP Spoofing, muito utilizada para disfarçar o
seu IP na internet.
Você deve estar pensando nesse exato momento: "Como é que eu
resolvo esse problema?".
Vamos antes de mais nada encontrar os problemas no arquivo
de configuração do Squid, o squid.conf:

Erro 1
------
http_port 3128
--------------

Aqui, para trancar o Squid para rodar somente na rede
interna, devemos falar para ele escutar somente no endereço
interno, então deveríamos trocar a tag *http_port 3128*
para:

http_port 192.168.1.1:3128

Isso resolveria qualquer problema que você poderia ter em
saber para onde o seu proxy está rodando. Se ainda lhe
restam dúvidas disso, passe um portscanner na sua máquina,
como o nmap (http://www.insecure.org/nmap).


Erro 2
------
acl all src 0/0
---------------
http_access allow all
---------------------

Preste atenção no que essas duas tags estão lhe falando.
Aqui elas estã falando que todos os IP's poderão ter acesso
a seu proxy, incluindo os IP's provenientes da internet.
A princípio, você poderá comentar essa linha, mas não
é necessário caso você tenha arrumado o primeiro erro.
Fique atento sempre nos seus arquivos de configuração.
Procure entendê-los acima de tudo, mesmo que pareçam sem
nexo total.


Erro 3
------
http_access deny all
--------------------

É importante sempre adicionar essa linha no final da parte
do arquivo squid.conf, onde estão descritos os http_access.
Isso é por causa do modo que o Squid interpreta os arquivos.
Ele lê todas as regras de cima para baixo.
Ele vai tentando encaixar as ocasiões dentro das ACL's.
Se ele nã encontrar uma regra que bata com a requisição, por
padrão ele permite o acesso, se a linha http_access deny all
não estiver presente no final de onde estão declarados os
http_access, o Squid irá aceitar qualquer conexão, vinda de
qualquer host da internet!


Erro 4
------

Muitas vezes, você se preocupa demais com o seu servidor e
esquece de algo MUITO, mas MUITO importante: OS CLIENTES.
Cerca de 70% dos ataques de invasão são executados por
funcionários ou ex-funcionários da empresa quqe, se tiverem
razoável conhecimento em informática, passarão por bloqueios
impostos com mais facilidade, por conhecerem o funcionamento
do sistema.
É muito comum que os usuários da empresa passem por cima das
configurações impostas pelo proxy, simplesmente alterando as
configurações do navegador, sobretudo quando um Proxy
Transparente é utilizado conjuntamente com o Squid.
Existem modos de você bloquear isso nos clientes.
O principal é alterando o registro ou utilizar o
redirecionamento de portas descrito anteriormente. No
primeiro caso, o que é feito é o travamento da possibilidade
do usuário estar mudando as configurações do proxy no
navegador. Não irei abordar isso à fundo, mas um ótimo link
é o site (http://www.regedit.com). Lá você encontrará
informações interessantes como bloquear e alterar várias
opções do Microsoft Windows.


-------------------------------------------------------------------------------

6. Relatórios
-------------

O Squid possui vários programas externos para uma
interpretação melhor do access.log, que é o arquivo onde é
registrado os acessos ao proxy.
Entre eles estão o Calamaris, o SARG e o Squid Graph.
Podemos também criar simples scripts com o uso de shell
script, filtrando os dados que mais nos interessam e
mandá-los para o nosso e-mail ou por SMS para os nossos
celulares.
Nesse capítulo, serão abordadas as utilizações de scripts
simples e o uso do SARG. Escolhi abordar o SARG por três
motivos:

1 - Foi feito por um brasileiro;
2 - É o melhor de todos os geradores de relatórios que eu já
vi;
3 - Porquê eu quis.


6.1. Criando um script de relatório simples
-------------------------------------------

Para a criação de um script de relatório que nos envie por
e-mail as últimas requisições negadas pelo porxy, devemos
criar um arquivo e branco:

# touch /bin/relatoriosquid.sh

E então escrever nele o seguinte:

#!/bin
#########################################################
# Script de relatório feito por Stéfano Martins para o #
# guia. Este script pode ser copiado, alterado, e #
# distribuído livremente, conforme a licença GPL, #
# disponível em (http://www.gnu.org). #
#########################################################
cat /var/log/squid/access.log | grep DENIED | tail -n 60 |
mail root

Nota do autor: As duas linhas acima são uma só.

Mude as permissões do arquivo para:

# chmod 700 relatoriosquid.sh

Mais interessante ainda é agendar a execução desse script no
crond para que o mesmo seja executado uma vez por dia:

# crontab -e
30 21 * * * relatoriosquid.sh

Pronto! Todos os dias às nove e meia da noite será gerado o
relatório de acessos negados pelo Squid e eles vão estar
dentro da caixa de e-mail do administrador do sistema.


6.2. Utilizando o SARG
----------------------

Desenvolvido pelo brasileiro Pedro Orso, ele gera uma página
HTML a partir do arquivo de log do squid (access.log por
default).


6.2.1. Instalação
-----------------

Para instalar o SARG, você precisa puxar do site oficial
(http://sarg.sourceforge.net) o pacote no formato mais
apropriado para a sua distribuição ou o código-fonte.


Instalando via pacote .deb
--------------------------

Execute o seguinte:

# dpkg -i sarg-x.y.z.deb


Instalando via pacote .rpm
--------------------------

Execute o seguinte:

# rpm -ivh sarg-x.y.z.rpm

Instalando via código-fonte
---------------------------

A compilação é feita da seguinte maneira:

# tar xvfz sarg-x.y.tar.gz
# cd sarg-x.y
# ./configure
# make
# make install


6.2.2. Configuração
-------------------

Por padrão, o SARG é instalado em /usr/local/sarg. Nesse
diretório nós encontramos o sarg.conf e entre muitas opções,
recomendo as seguintes:

* language Portuguese
* access_log /var/log/squid/access.log
* title "Relatório de uso da internet"
* temporary_dir /tmp
* output_dir /var/www/squid-reports
* resolve_ip no
* user_ip no
* topuser_sort_field BYTES reverse
* topsites_num 100
* max_elapsed 28800000

Sendo importante destacar:

* access.log - Indica o arquivo de log do Squid;
* output_dir - Indica onde será gerado o seu relatório. É
recomendável que seja um diretório onde o seu Apache tenha
acesso;
* reslve_ip - Habilita/desabilita a resolução de nomes;
* user_ip - Se você estiver utilizando um proxy autenticado,
coloque *yes*, caso contrário coloque *no*.
* topsites_num - Quantidade de sites que vocÊ deseja que
apareçam como os TOP de acessos.

Nota: Dependendo da distribuição, tal arquivo pode se
encontrar em outro lugar, bastando procurá-lo utilizando o
comando *find*:

# find / -name sarg.conf


6.2.3. Gerando relatórios
-------------------------

Essa é a parte mais simples, para gerar os relatórios, vocÊ
simplesmente executa o comando:

# sarg


6.2.4. Dica
-----------

Os relatórios do SARG ocupam um enorme espaço em disco,
principalmente por não possuir um rotate ou comprimir os
HTML's gerados. Para contornar esse problema, nós podemos
colocar os seguintes comandos para serem executados em um
determinado horário no crontab.

# find /var/www/squid-reports/ -name "*.html" -type f -mtime
+30 -exec bzip2 {}
# find /var/www/squid-reports/ -name "*.bzip2" -type f
-mtime +180 -exec rm -rf {}


------------------------------------------------------------------------------


7. Utilizando o Proxy Transparente
----------------------------------

Como eu já disse anteriormente, o Proxy Transparente não
necessita de nenhum programa externo para o seu
funcionamento. Você apenas define regras de firewall para
que os pacotes sejam repassados para uma determinada máquina
na rede. As vantagens principais são que com o Proxy
Transparente, você força as máquinas da sua rede à passarem
pelo proxy.


7.1. IP Masquerade
------------------

O IP Masquerade, também conhecido como NAT (Network Address
Translator), tem a finalidade de compartilhar a internet e
fazer com que todas as máquinas de uma rede interna se
conectem através de um servidor que possui um único IP
válido.
O NAT trabalha em outro nível da camada OSI, diferente do
Squid.
Nós sabemos que em uma rede interna, os endereços IP's
atribuídos não são válidos na internet, e ainda sabemos que
todo pacote no protocolo TCP/IP deve ser retornado até o
hospedeiro de origem, no sentido de estabelecer uma
comunicação. Logo nos questionamos: Como uma máquina na
internet retornaria um pacote para uma máquina em uma rede
interna que não possui endereço IP válido? Entre outras
funcionalidades, esta é uma função do IP Masquerade. Quando
um pacote é direcionado à internet, passará pelo gateway que
está provendo o NAT, então o pacote, na verdade, atinge o
hospedeiro de destino com o número da gateway que, por sua
vez, faz o repassamento do pacote para a máquina da rede
interna.
O IP Masquerade suporta perfeitamente serviços como WWW e
e-mail, o que explica o seu grande uso, pois estes serviços
são os mais utilizados. Entretanto, o IP Masquerade não
possui nenhuma funcionalidade de auditoria, autenticação e
segurança de acesso. o NAT pode ser utilizado sem o proxy,
simplesmente permitindo total acesso à internet.
O NAT tem a desvantagem de não prover um cache para o
serviço WEB e as ACL's.


7.2. Configurando o Kernel
--------------------------

Todo o processo de repassagem de pacotes é uma
funcionalidade do Kernel. Por isso às vezes temos que
recompilar o mesmo para habilitar essa funcionalidade. Estas
são as opções do Kernel que você deve habilitar:

1 - Em General Setup Networking, habilite o Sysctl support;
2 - Em Networking Options, habilite Network packet filtering
TCP/IP;
3 - Em Networking Options > IP: Netfilter Configuration,
habilite Connection tracking IP tables support Full NAT
REDIRECT target support;
4 - Em File Systems, habilite o /proc filesystem support.

Essas configurações são válidas somente para o Kernel 2.4 e
2.6, pois os mesmos utilizam IPTables. Caso o seu Kernel não
suporte essas opções ou seja um Kernel da linha 2.2,
recomendo que você pegue uma versão mais nova do mesmo e
compile-a.


7.3. IP Masquerade com IPChains
-------------------------------

A configuração do NAT com o IPChains é muito simples, para
falar a verdade, é muito mais simples configurar um proxy
utilizando NAt do que utilizando um Squid, tudo se resume a
três ou quatro comandinhos:
Aqui nós habilitamos o suporte a IP Forwarding:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Aqui é onde nós inserimos a linha dentro do IPChains. É
importante ressaltar que o primeiro número IP que aparece
(no caso 192.168.1.0) deve ser o número IP da sua rede
interna.

# ipchains -A FORWARD -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ

Para ver as regras de IPChains que estão ativas no momento,
digite o seguinte:

# ipchains -L

IMPORTANTE: Quando você reiniciar a sua máquina, essas
regras não mais estarão ativas. Portanto, nós devemos criar
um script para que essas regras iniciem junto com o
computador ou adicionar essas regras dentro do seu script de
firewall, se você já possuir algum.


7.4. IP Masquerade com IPTables
-------------------------------

A finalidade do IPTables é a mesma do IPChains, a diferença
é apenas a linha dos Kernels que eles utilizam. Enquanto
IPTables funciona para os Kernels mais novos, como o 2.4 e o
2.6, o IPChains só funciona para os Kernels da linha 2.2.
Não há excepcionais diferenças entre o IPChains e o IPTables
na hora de implementar um NAT, veja como se faz:
Carregue os módulos (se já não estiverem carregados):

# modprobe ip_tables
# modprobe iptable_nat

Ative o IP Forwarding:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Agora adicione a regra do IPTables:

# iptables -t nat -A POSTOURING -o ppp0 -j MASQUERADE

Onde *ppp0* é a sua conexão com a internet. Você pode também
utilizar eth0, eth1, etc. Tudo depende do seu caso.
Para ver as regras de IPTables que estão ativas no momento,
digite o seguinte:

# iptables -t nat -L

Assim como o IPChains, o IPTables perde as suas regras assim
que a máquina é reinicializada. Portanto, você deverá criar
um script de firewall o adicionar os comandos acima em algum
script já existente.


7.5. Utilizando o IPChains no Kernel 2.4
----------------------------------------

Para configurar o IPChains no Kernel da linha 2.4, vocÊ deve
carregar o seu respectivo módulo:

# modprobe ipchains

A partir daí você já poderá utilizar o IPChains no Kernel
2.4.


-------------------------------------------------------------------------------


8. Configurando os clientes
---------------------------

No caso de você estar utilizando um Proxy Controlado sem o
redirecionamento de portas, você deverá também fazer uma
simplória configuração nos clientes:


8.1. Configurando um cliente Windows
------------------------------------

Abra o Internet Epxlorer;
Entre no menu "Ferramentas" > Opções da Internet;
Entre na guia "Conexões";
Clique em "Configurações da LAN";
Na nova janela que se abrirá, desmarque:

"Detecte automaticamente as configurações"
"Usar script de configuração automática"

E marque:

"Usar um serbvidor proxy para a rede local (estas
configurações não se aplicam a conexões dial-ip ou VPN)"

Preencha os campos com o IP do seu servidor Squid e sua
respectiva porta (por padrão 3128).

Desmarque a caixa:

"Não utilizar proxy para endereços locais"

Feche e abra o Internet Explorer e veja se está navegando.


8.2. Configurando um cliente GNU/Linux
--------------------------------------

Para configurar o proxy no GNU/Linux, eu vou utilizar o
exemplo do Netscape, porém, se você utiliza qualquer outro
navegador, as configurações são semelhantes.
Configurando:

Entre em:
Editar > Preferência > Avançado > Servidores Proxy

Marque a opção "Configuração Manual do Proxy" e clique em
Ver.

Na nova janela que vai se abrir:

Preencha o campo "Proxy HTTP" com o IP do seu servidor proxy
e o campo "Porta" com a respectiva porta (por padrão 3128).

Pronto1 Configurado! Feche e abra novamente o seu browser e
ele estará navegando na internet.


-------------------------------------------------------------------------------


9. Outros
---------

Aqui é onde eu irei colocar algumas informações sobre o guia,
em geral informações alheias ao assunto normal do mesmo.


9.1. Sobre esse guia
--------------------

Bom, eu comecei a escrever o guia porque eu estava em um
final de semana prolongado extremamente maçante. Além do
fato de eu não estar namorando na época, aquela versão do
guia foi carinhosamente apelidado de "Valentine's Day" pela
data em que foi lançado.
Tento nesse guia ser o mais simples possível, abordando
casos pelos quais eu já passei em carreira profissinoal.
Como alguns dos leitores devem ter notado (e notaram, se
estão lendo essa parte), esse guia é muito similar (no
aspecto de layout, não conteúdo, plágio é muito, muito feio)
ao Guia Foca Linux, escrito por Gleydson Mazioli da Silva.
Fiz isso para que os leitores que já leram aquele guia se
sentissem mais confortáveis lendo esse e porque o autor
ainda não havia lançado um guia falando exclusivamente sobre
Squid (pelo menos não até a data de publicação desse Guia).
Espero sinceramente que o meu guia se torne uma fonte de
referência para outras publicações, talvez mais bem
editadas.
A versão em texto puro do guia foi 100% escrita utilizando
VIM (Vi IMproved). A versão HTML foi escrita utilizando
txt2tags e VIM também.


9.2. O que você precisa para utilizar esse guia?
------------------------------------------------

Para utilizar esse guia você precisa:

* Saber ler em português (por enquanto, logo estarei
lançando uma versão em inglês);
* Ter um QI acima de 30;
* Ter uma noção sobre des em GNU/Linux, ainda que seja
modesta;
* Saber utilizar o sistema em si.


9.3. Sobre o autor
------------------

Para os que não me conhecem, meu nome é Stéfano Martins,
resido na cidade de Pindamonhangaba (UFA! Nominho grande
hein?) - SP e tenho 18 anos.
Tomo conta do servidor da Escola Técnica João Gomes de
Araújo, aqui na minha cidade, onde eu estudei e continuo
estudando.
Escrevo diariamente nos fóruns da underlinux
(http://www.underlinux.com.br) e na lista de discussão
debian-user-portuguese
(debian-user-portuguese@lists.debian.org), além de ser
Community Manager da "Debian GNU/Linux Brazil", comunidade
do Orkut (http://www.orkut.com) destinada à sanar as dúvidas
dos usuários que estão migrando ou que já utilizam a
distribuição Debian já faz algum tempo.
Palestrei algumas vez, sobretudo falando sobre
software-livre, projetos de migrações, redes e Debian.


9.4. Agradecimentos
-------------------

Cássio, meu irmão mais velho, que além de ser o melhor
programador em C/C++ que eu já conheci, é o meu melhor
amigo. FOi ele que me apoiou sempre que eu precisei, exceto
dessa vez, pois ele viajou para ver a namorada e nem sabe
que eu estou escrevendo o guia no computador dele.
Guilherme Mesquita, grande amigo e help-desk via ICQ, sempre
me ajuda qunado eu estou com algum problema aparentemente
insolúvel, sem falar que é o punk mais cult que eu já
conheci!
Yuri Kropotkin, o ucraniano que é o cara que eu mais ajudei
na internet. Você me ajudou a fixar os meus conhecimentos,
sem falar que é um ótimo amigo!
Thiago Klein, professor de GNU/Linux. Sinto que a partir de
um determinado ponto, deixamos de ser aluno e professor e
passamos a ser amigos!
Sofia, grande amiga, sempre me apoiou e sempre se preocupou
com o autor do guia, mesmo quando os dois estavam brigados.
Guaraná Piracaia, o qual eu bebi cerca de 30 litros enquanto
eu ia escrevendo esse guia.
Lista de discussão debian-user-portuguese
(debian-user-portuguese@lists.debian.org). Quer tirar uma
dúvida sobre Debian? É para lá que você tem que escrever!
Pessoal da underlinux (http://www.underlinux.com.br). Me
divirto à beça escrevendo no fórum!
Gleyson Mazioli da Silva, autor do Guia Focalinux, parabéns

<< Início
Site Meter