Mudanças entre as edições de "Projeto Integrador - 2010.1 - Dicas de GAR"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 201: Linha 201:
 
==Componentes==
 
==Componentes==
  
==Gerente==
+
===Agentes===
 +
===Gerente===
  
 
==Aplicando...==
 
==Aplicando...==

Edição das 20h58min de 14 de junho de 2010

Organização

<graphviz>

digraph Serviços { splines = true

subgraph clusterRede { label = "Rede" DHCP }

subgraph clusterAplicacao { label = "Aplicação" DNS HTTP MySQL SMTP IMAP }

DHCP -> DNS -> HTTP MySQL -> HTTP -> MySQL DNS -> SMTP -> HTTP DNS -> IMAP -> HTTP }

</graphviz>

Modificação de Conteúdo Web

Uma das formas de se alterar dinamicamente uma página Web, antes de entregá-la ao cliente que a solicitou, é através de proxies. Com eles, é possível ler a requisição antes mesmo de encaminhá-la ao servidor Web - economizando recurso de rede - além da possibilidade de modificar o conteúdo (payload) após o processamento e resposta do mesmo servidor.

Componentes

No exemplo abaixo foram utilizados os seguintes componentes:

  • Cliente Web: sem qualquer configuração adicional. Ferramenta utilizada: qualquer navegador com suporte a HTTP versão 1.1 (Firefox, Chrome, etc.).
  • Firewall: através de regras de modificação dos pacotes IP, redirecionará, de forma transparente, os pedidos para o Analisador de Conteúdo. Ferramenta utilizada: netfilter, popularmente conhecido como iptables.
  • Analisador de Conteúdo: filtra e modifica conteúdo (payload) da camada de Aplicação, como páginas HTML, imagens e outros. Ferramenta utilizada: Dansguardian.
  • Proxy: elemento intermediário nas requisições e respostas na camada de Aplicação, podendo atuar como filtro de conteúdo. Ferramenta utilizada: Squid.
  • Servidor Web: monta dinamicamente as páginas HTML usando programação interpretada e banco de dados. Ferramenta utilizada: servidor Web Apache versão 2.2 com suporte à linguagem de programação PHP e banco de dados MySQL.

Fluxograma dos pacotes

<graphviz>

digraph Navegacao {

Firewall [shape=plaintext] subgraph clusterCliente { label=Cliente Socket_C [label=Navegador,shape=Mrecord] } subgraph clusterAnalisador { label="Analisador de Conteúdo" Socket_A [label=Servidor,shape=Mrecord] Socket_AA [label=Cliente,shape=Mrecord] Filtragem_A [label=Filtragem,shape=Mrecord] Modificação_A [label=Modificação,shape=Mrecord] } subgraph clusterProxy { label=Proxy Socket_P [label=Servidor,shape=Mrecord] Socket_PP [label=Cliente,shape=Mrecord] Filtragem_P [label=Filtragem,shape=Mrecord] } subgraph clusterSite { label=Site Socket_S [label=Socket,shape=Mrecord] Montagem_S [label="Montagem do conteúdo dinâmico",shape=Mrecord] }

Socket_C -> Firewall -> Socket_A [label=1,color=red] Socket_A -> Filtragem_A [label=2,color=red] Filtragem_A -> Socket_AA [label=3,color=red] Socket_AA -> Socket_P [label=4,color=red] Socket_P -> Filtragem_P [label=5,color=red] Filtragem_P -> Socket_PP [label=6,color=red] Socket_PP -> Socket_S [label=7,color=red] Socket_S -> Montagem_S [label=8,color=red] Montagem_S -> Socket_S [label=9,color=blue] Socket_S -> Socket_PP [label=10,color=blue] Socket_PP -> Filtragem_P [label=11,color=blue] Filtragem_P -> Socket_P [label=12,color=blue] Socket_P -> Socket_AA [label=13,color=blue] Socket_AA -> Filtragem_A [label=14,color=blue] Filtragem_A -> Modificação_A [label=15,color=blue] Modificação_A -> Socket_A [label=16,color=blue] Socket_A -> Firewall -> Socket_C [label=17,color=blue] }

</graphviz>

Instalação e Configuração do Cenário

Como no nosso cenário não é interessante configurar os clientes HTTP dos usuários, seja pela dificuldade técnica bem como esforço da equipe de T.I., é preciso uma solução transparente para modificar o conteúdo das páginas - para adicionar a propaganda do estabelecimento comercial. Para tanto, segue abaixo uma proposta de solução desse problema.

Firewall

  • Instalação do netfilter:
aptitude install iptables
  • Ativação do roteamento:
sed -i 's/.*net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
  • Criação/alteração de script para redirecionamento das requisições HTTP: arquivo /etc/init.d/nat.
#!/bin/sh

# Interfaces
IFACE_INTERNA="eth0"
IFACE_EXTERNA="eth1"

# NAT
iptables -t nat -A POSTROUTING -o ${IFACE_EXTERNA} -j MASQUERADE
 
# Redirecionamento para o Analisador de Conteúdo
iptables -t nat -A PREROUTING -i ${IFACE_INTERNA} -p tcp --dport 80 \
-j REDIRECT --to-port 8080
 
# Bloqueio para acesso direto ao Proxy
iptables -A INPUT -m tcp -p tcp -s ! 127.0.0.1 --dport 3128 -j DROP

exit 0

Garanta que o script iniciará junto com o sistema, de preferência o mais cedo possível. No caso abaixo, o script nat iniciará em primeiro lugar (01) nos níveis de execução 2 a 5 (2 3 4 5).

update-rc.d nat start 01 2 3 4 5 .

Analisador de Conteúdo

  • Instalação do DanGuardian:
aptitude install dansguardian

As configurações "de fábrica" assumem que firewall, analisador de conteúdo e proxy rodam na mesma máquina. No nosso caso, isso também acontece. Portanto, não será preciso alterar a configuração geral do DansGuardian, exceto alguns detalhes do pacote específico para Debian/Ubuntu. No arquivo /etc/dansguardian/dansguardian.conf, deve-se comentar essa linha:

UNCONFIGURED

e, se achar interessante, alterar as mensagens para português do Brasil:

portuguese = 'ptbrazilian'
Logo do IF-SC.
  • Aqui, um exemplo de configuração do modificador de conteúdo (content) baseado em uma lista de expressões regulares (regular expression list):
vi /etc/dansguardian/lists/contentregexplist

com a seguinte adição de uma linha ao final do arquivo:

"(<body[^>]*[^>]*>)"->"\1

<img src="Logoifsc.png"/>

"

</syntaxhighlight> Essa linha acima, por exemplo, adiciona o logo do IF-SC no início da página, após a marcação <body>; ou seja, no topo da página.

Proxy

  • Instalação do proxy Squid versão 3:
aptitude install squid3
  • Como no analisador de conteúdo, a configuração "de fábrica" atende às nossas necessidades, exceto pelo fato de que haverá proxy em modo transparente; ou seja, o usuário não precisa configurá-lo em seu sistema (nem saber que há um proxy :-). No arquivo /etc/squid3/squid.conf, basta adicionar ao final do arquivo:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Aplicando...

Para testar o cenário, é preciso aplicar todas as configurações em ordem inversa - por questões de dependência. Primeiro, parando os serviços:

/etc/init.d/dansguardian stop
/etc/init.d/squid3 stop

e depois iniciando-os novamente:

/etc/init.d/dansguardian start
/etc/init.d/squid3 start
/etc/init.d/nat
sysctl -w net.ipv4.ip_forward=1

Por último, o teste: com um navegador sem qualquer configuração de proxy, devem aparecer todas as páginas com o logo no topo das páginas. Caso haja algum problemas, acompanhe os registros (logs) dos serviços:

  • /var/log/dansguardian/access.log
  • /var/log/squid/access.log

e o tráfego da rede na interface local (loopback) e portas:

  • 80/TCP
  • 3128/TCP
  • 8080/TCP

A ferramenta Wireshark é mais que apropriada para tal - com o filtro:

tcp.port == 80 or tcp.port == 3128 or tcp.port == 8080

para evitar "pontos de fuga"...

Bibliografia

Gerência de Rede com Cacti

O Cacti é um gerente de rede baseado em SNMP.

Componentes

Agentes

Gerente

Aplicando...

Bibliografia


Voltar para Página principal do Projeto