Sunteți pe pagina 1din 5

SYSADMIN

Proxy HTTP com cache e filtragem de conteúdo em bridge

Filtro na ponte
Proxies com cache lembram-se de páginas e as servem localmente, economizando
tempo e dinheiro. Os membros mais inteligentes dessa família também
apagam conteúdo perigoso e oferecem bridging transparente.
por Tobias Eggendorfer

Q uando vários usuários na mesma rede acessam a


mesma página da Internet diversas vezes, paga-
se um preço de tempo e banda. Um proxy com
cache reduz o tráfego, guardando páginas web pedidas
xy pode tanto bloquear o acesso a páginas indesejadas,
como as de conteúdo adulto em escolas, por exemplo,
quanto manter softwares mal intencionados fora de uma
rede corporativa.
pelos usuários e servindo-as quando requisitado.
Um proxy HTTP com cache como o Squid [1] roda
na camada 7 do modelo OSI (Open Systems Intercon- Mudanças chatas
nection); em outras palavras, o servidor proxy Squid Se você instalar um proxy legado em sua rede, pode es-
“fala” o protocolo da aplicação e consegue reconhecer perar uma pilha de tarefas de configuração. É necessário
os dados trafegados. Com isso, o proxy é capaz de ve- informar os detalhes do proxy em cada navegador, ou man-
rificar o conteúdo da página e oferecer a filtragem do dá-los utilizar a auto-configuração, e modificar o firewall
conteúdo. Dependendo da direção do destino, um pro- para negar tentativas de rotear HTTP. Como alternativa,

68 http://www.linuxmagazine.com.br
Squidbridge SYSADMIN

Servidor web
Bridge com
Roteador/ filtro de conteúdo
Firewall
Internet

Figura 1 O filtro de conteúdo está instalado em uma bridge, neste cenário. Essa configuração cabe facilmente numa rede pré-existente sem a necessidade de
reconfigurar o roteador ou os clientes.

pode-se instalar um proxy transparente Configuração básica [2]). Ao compilarmos o kernel, é im-
usando uma regra de firewall para re- Para instalar o proxy, provavelmente portante termos certeza de selecionar
direcionar para o proxy todo o tráfego o melhor é começar instalando um os drivers apropriados às controladoras
HTTP que sai. Entretanto, mais uma sistema Linux mínimo. A máquina de rede e de disco rígido. Além disso, o
vez é necessário modificar o firewall. precisa de duas placas de rede, que kernel deve obrigatoriamente suportar
Seria muito mais elegante sim- não receberão endereços IP por en- o bridging (figura 2). Administradores
plesmente conectar o proxy à rede quanto. Como geralmente será ne- cuidadosos com a segurança certa-
– atrás do último switch e à frente do cessário recompilar o kernel (para mente instalarão patches como o GR
roteador. Essa solução, que elimina a ativar o bridging), e aproveitando que Security [3].
necessidade de se modificar os nave- é recomendável compilar e instalar Depois de iniciar o sistema com o
gadores dos clientes ou o roteador, é o Squid e o DansGuardian a partir novo kernel, precisaremos configurar
um resquício do papel de uma bridge do código-fonte (veja abaixo), serão uma bridge: o comando brctrl addbr
ou switch. O objetivo original de uma necessários os respectivos pacotes de br0 adiciona um novo dispositivo de
bridge era organizar o tráfego da rede desenvolvimento no sistema. Antes rede chamado br0. Como uma bridge
baseado em endereços MAC, conse- de se colocar a bridge para funcionar, exige duas placas de rede, é necessá-
qüentemente segmentando a rede. deve-se limpar a máquina e remover rio associar duas placas a ela, com os
Porém, o kernel Linux atual permite quaisquer pacotes que não sejam mais seguintes comandos:
que os administradores sofistiquem o necessários.
funcionamento da bridge incluindo o brctrl addif br0 eth0
papel de firewall invisível baseado na brctrl addif br0 eth1

filtragem na camada TCP. Questões do kernel


Para tornar o sistema mais seguro, o Em seguida, usamos o comando ip para
melhor é compilarmos um kernel es- iniciar as placas de rede e a bridge:
Conveniente tático sem suporte a módulos. Essa

e prático configuração desabilita a interface de ip link up eth0


módulos explorada por diversos rootkits ip link up eth1
ip link up br0
Uma abordagem prática é rodar um de kernel (veja mais sobre rootkits em
filtro na camada da aplicação em uma
bridge (figura 1). Esse casal bizarro
pode ser facilmente integrado a uma
rede pré-existente sem obrigar o admi-
nistrador ou os usuários a modificar a
configuração dos roteadores, clien-
tes ou aplicativos. A única forma de
atravessar o proxy é usando um túnel,
como SSH ou OpenVPN. Entretanto,
a opção do tunelamento está sempre
aberta, independente da solução que
se use, e pressupõe que se tenha um
maior conhecimento e se dedique mais
trabalho. Quem quer que crie um tú-
nel para evitar o proxy necessita de
um servidor baseado na Internet para
servir como ponto de destino do túnel, Figura 2 A opção BRIDGE em Networking | Networking support | Networking options |
e deve ter a possibilidade de instalar 802.1d Ethernet Bridging especifica se o kernel (2.6.17.7, nesse caso) suportará o
softwares na outra ponta do túnel. modo bridge.

Linux Magazine #25 | Novembro de 2006 69


SEÇÃO | Assunto

Servidor web
� Para o servidor � Requisição
� Resposta ao servidor Squid � Website

Internet � OK � Para o redirecionador

� Para o servidor Redirecionador


� Resposta do servidor
do Clam AV

Figura 3 Buscando vírus com o redirecionador do ClamAV.

Já podemos testar a bridge agora. Depois, prosseguimos descompac- não terão muito o que fazer nesse ar-
Vamos simplesmente ligá-la à rede. tando e configurando o Squid: ./con- quivo – a porta onde o Squid ouvirá é
Ela deve passar pacotes entre os dois figure --enable-linux-netfilter só uma questão de gosto; o padrão é a
segmentos da rede, mas podemos usar --disable-ident-lookups . O pri- 3128. Se preferirmos mudar a porta, é
uma ferramenta de análise de rede meiro parâmetro desabilita o suporte só acrescentarmos a seguinte linha à
como o tcpdump [4] para verificar ao Netfilter do Linux no Squid. Esse configuração do Squid:
se isso está funcionando. Se preferir- passo é necessário se quisermos usar
mos, podemos configurar agora um o Squid como um proxy transparente. http_port 127.0.0.1:65080
firewall com iptables, e Physdev-Ma- O segundo parâmetro desativa requi-
tch ou ebptables. sições de Ident feitas pelos clientes, Isso faz o proxy escutar na porta
apesar de normalmente o Ident nem 65080. O comando também configura
estar instalado, ou ser bloqueado pela o Squid para garantir que somente o
Instalação do Squid maioria dos firewalls. Dependendo proxy na máquina local vai reagir a
É necessário instalarmos o Squid pri- da nossa preferência, podemos usar conexões. Isso é necessário para a fil-
meiro, para o proxy. Para baixar o có- o parâmetro --prefix=/usr/local/ tragem posterior de conteúdo.
digo-fonte de [1], o sistema de bridge squid para colocar tudo isso em um O Squid suporta o protocolo ICP
precisa de um endereço IP e uma diretório. Depois, completamos com (Inter Cache Protocol), que permite que
entrada de gateway padrão na tabela os comandos para compilar e instalar proxies troquem conteúdo do cache entre
de roteamento. Os comandos a seguir o Squid: make && make install. si. Esse suporte é irrelevante em nosso
cuidam disso: O próximo passo é modificar os caso, e podemos desativá-lo facilmente:
arquivos de configuração do Squid icp_port 0. Além disso, uma entrada
ifconfig br0 192.0.2.8 de acordo com nossas necessidades. de ACL (Lista de Controle de Acessos,
➥ netmask 255.255.255.0 O prefixo mencionado acima instala na sigla em inglês) garante que só a
route add default
➥ gw 192.0.2.1
o arquivo squid.conf no diretório /usr/ máquina local possa acessar o Squid:
local/squid/etc . Os administradores http_access allow localhost.

Servidor web

Requisição
Internet Squid Dansguardian
Website

Cache

Figura 4 Colocar o filtro de conteúdo DansGuardian entre os usuários e o proxy de cache Squid garante que o DansGuardian aplicará as regras de filtragem a todas
as requisições.

70 http://www.linuxmagazine.com.br
Squidbridge SYSADMIN

Filtragem de download gera o dobro do tráfego

conteúdo – que é exatamente o que quería-


mos evitar com o uso de um proxy
O proxy ainda está rodando sem com cache.
um filtro de conteúdo. Temos di- Usando alguns macetes, podemos
versas opções aqui, mas elas se tor- convencer o redirecionador a deixar
nam fáceis quando decidimos o que o Squid cuidar do download. Esse
queremos que o filtro faça. O mais passo envolve configurar o Squid
comum costuma ser “proteger má- para evitar passar pedidos da máquina
quinas Windows® inseguras contra local para o SquidClamAVRedirec-
programas mal-intencionados que tor, e portanto o travamento num
tentem chegar a elas através de res- laço infinito. Mas essa abordagem é
postas HTTP.” problemática quando em conjunto
Em outros ambientes, talvez pre- com um proxy transparente, pois,
cisemos de um filtro para bloquear na visão do Squid, todos os pedi-
o acesso a certos tipos de conteúdo e dos parecem vir da máquina local.
websites indesejáveis. Por exemplo, Adicione a isso uma configuração
escolas costumam estipular que si- desleixada e provavelmente você
tes com conteúdo adulto ou ilegal concordará que essa não é a melhor
devem ser bloqueados. Vamos tentar abordagem.
nos manter fora da discussão sobre a
utilidade e a efetividade desse tipo
de ação, pelo menos por enquanto Corrente de proxies
– o exemplo a seguir não leva nada A alternativa é adicionar um proxy de
disso em conta, concentrando-se na filtragem de conteúdo na frente ou
luta contra vírus malévolos. atrás do Squid. O DansGuardian [6]
Novamente, nossa escolha de é um candidato possível. O melhor
antivírus é uma questão de gosto. local para colocar o DansGuardian é
Em um ambiente todo de Código entre o proxy e a rede interna (figura
Aberto, um antivírus igualmente 4, apesar de ambas as tarefas pode-
aberto como o ClamAV [5] costu- rem ser executadas em uma única
ma ser o preferido. As etapas para máquina). Isso significa que pedidos
configurar outros antivírus são se- vindos da rede interna primeiro serão
melhantes; escolher um deles ou enviados ao DansGuardian, que os
até mais de um deve ser uma tarefa repassa para o Squid e recebe uma
suficientemente simples. resposta do mesmo Squid – possi-
Há várias soluções para integrar velmente do cache, se o Squid já
o filtro de conteúdo com o Squid: viu esse pedido antes – e verifica a
a interface do redirecionador é resposta em busca de vírus, worms
uma opção bastante popular. O e outras pragas.
Squid passa a URL baixada e todos Em teoria, seria possível inverter
os parâmetros para esse script. De- a ordem, colocando o proxy de fil-
pendendo do valor retornado pelo tragem de programas maliciosos do
script, o Squid busca o documento lado de fora e o proxy de cache do
apontado pela URL. Isso faz sentido lado de dentro (figura 5). A vantagem
se o filtro simplesmente inspecionar dessa abordagem é que o antivírus só
a URL, e não o documento para o precisa verificar uma vez cada arquivo
qual ela aponta. baixado. Essa configuração minimi-
za a busca de programas maliciosos,
mas também impõe um problema
Obstáculos ao de segurança. Se o antivírus deixar

redirecionador um vírus passar, essa praga se esta-


belece no cache do proxy, a salvo de
No caso de antivírus, cuja interface detecções futuras, mesmo que uma
pode ser fornecida pelo SquidCla- atualização das assinaturas de vírus
mAVRedirector, o redirecionador possa revelar a ameaça. Se o proxy
não é uma boa solução. Primeira- de filtragem estiver entre o usuário e
mente, ele baixa a URL, evitando o proxy de cache, conseguirá varrer
o Squid nesse processo; depois, ele vírus em todas as páginas pedidas,
analisa o conteúdo e dá ao Squid sem importar se a página está sendo
o aval para que ele peça a página servida diretamente pelo cache ou
( figura 3 ). Em outras palavras, cada por um servidor externo.

Linux Magazine #25 | Novembro de 2006 71


SEÇÃO | Assunto

Servidor web

Requisição
Internet Antivírus Squid Website

Cache

Figura 5 Colocar o filtro de conteúdo no lado da Internet é menos seguro. Cada arquivo só é verificado uma vez. Se um vírus conseguir chegar ao cache, nunca
será descoberto, mesmo após a atualização das assinaturas de vírus.

Instalação do servidor web da intranet e redire- Máquina limpa


DansGuardian cionar o navegador para essa pági-
na. Como alternativa, poderíamos
Com a filtragem de programas
maliciosos e um cache na bridge,
Precisamos nos certificar de que usar um servidor externo para servir a rede interna fica bem protegida
instalamos o ClamAV antes de co- uma página com a mensagem. O contra vírus e worms que tentem
meçarmos a instalar o DansGuar- DansGuardian oferece uma página explorar o HTTP. A instalação sim-
dian. O ClamAV é bastante fácil de exemplo em share/dansguar- ples torna a bridge fácil de usar.
de instalar. O website do ClamAV dian.pl . A diretiva accessdenie- Depois de configurar a máquina,
possui binários para a maioria das daddress no arquivo de configura- simplesmente conecte-a a qualquer
principais distribuições de Linux. ção do DansGuardian informa qual rede sem modificar a configuração
Se você preferir compilar a partir mensagem mostrar. dos clientes. ■
dos fontes, os passos normais serão
suficientes: ./configure && make
&& make install . Quando insta- Ativação do filtro
lamos o DansGuardian, precisa- Atualmente, o DansGuardian não Mais Informações
mos especificar uma opção para o consegue ver realmente pedidos de
[1] Proxy web Squid:
script configure incluir o suporte clientes – as requisições saem direto
ao ClamAV. Se preferirmos, pode- da bridge para os servidores de destino. http://www.squid-cache.org
mos mover o pacote compilado para Uma regra do Netfilter redireciona o [2] Amir Alsbih, “Arma secreta: Rootkits
um diretório próprio. Isso nos dei- tráfego para o filtro:
para o kernel Linux 2.6”, Linux
xa com o seguintes três comandos
Magazine 22, Agosto/2006, pg. 28
para instalar: iptables -t nat
➥ -A PREROUTING
➥ -m physdev [3] GR-Security:
./configure
➥ --enable-clamav ➥ --physdev-in eth0 -p tcp http://www.grsecurity.org
➥ --prefix=/usr/local/dansguardian ➥ --dport 80 -j REDIRECT
➥ --to-port 8080 [4] Tcpdump: http://www.tcpdump.org
make
make install
O alvo physdev restringe o uso do [5] ClamAV: http://www.clamav.net
proxy aos clientes de dentro da bridge. [6] DansGuardian:
A configuração proxyport = 8080 Se não tivéssemos um firewall para
http://dansguardian.org
no dansguardian.conf informa que o proteger a bridge, seria bem fácil
filtro escutará na porta 8080. Além um agressor externo explorar o proxy
disso, o filtro precisa saber em qual como um proxy aberto.
porta o Squid está escutando: fil- Se tudo isso funcionar, todas as O autor
terport = 65080 . Por último, talvez requisições web para redes externas
Tobias Eggendorfer é consultor e profes-
tenhamos que descomentar a linha devem ser gravadas nos registros do sor freelancer de TI, baseado em Munique.
contentscanner que aponta para o Cla- proxy. O sistema é completamente Ele não aprecia reconfigurar seu próprio
mAV e modificar a configuração, se transparente, quando visto de dentro. hardware, e espera que novos recursos de
necessário. O proxy estabelece uma nova conexão segurança suportem a integração fácil e
O próximo passo é definir a men- para pedir uma página, fornecendo transparente. Apesar de a bridge com Squid
sagem de erro que os usuários vêem seu próprio endereço IP como fonte. ter como objetivo proteger sistemas Win-
ao pedir conteúdo bloqueado. A for- Os desenvolvedores estão trabalhando dows®, que Tobias normalmente não usa,
ele não pretende baixar e testar programas
ma mais fácil de produzir a mensa- para eliminar esse antigo resquício
malévolos para ver se rodam no Qemu.
gem é colocar uma página em nosso de proxy não transparente.

72 http://www.linuxmagazine.com.br

S-ar putea să vă placă și