Projeto Integrador - 2010.1 - Dicas de GAR

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

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=record] 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:

language = '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 da linha:
http_port 3128

com:

http_port 3128 transparent

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/squid3 start
/etc/init.d/dansguardian 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: Monitoramento e Contabilização

Para o cenário proposto para este Projeto Integrador, são necessárias as gerências de monitoramento e contabilização. Em ambas, o protocolo SNMP é suficiente para atendê-las.

Obs.: alguns conceitos são importantes em SNMP:

  1. MIB
  2. Comunidade
  3. PDU

Componentes

Em SNMP, há três componentes:

  • Dispositivo gerenciado: equipamento sob supervisão externa. No cenário, são os equipamentos intermediários (roteadores, switches e outros) e terminais de rede (estações, servidores e outros).
  • Agente: aplicação que roda no dispositivo gerenciado para troca de mensagens SNMP. Em boa parte dos equipamentos intermediários, hoje em dia, há um agente SNMP disponível; nos terminais, tem-se a disposição diversas implementações de agente, como por exemplo o NET-SNMP.
  • Sistemas de gerência da rede (network management system ou NMS): aplicação que roda o gerente, o qual centralizará as mensagens em um ponto central da rede. No nosso caso, usaremos o Cacti pela sua facilidade de configuração e uso.

Fluxograma dos Pacotes

A coleta periódica dos dados pode ocorrer de forma sequencial:

<graphviz>

digraph SNMPsingleThread { Gerente [shape=record] subgraph clusterDispositivo_1 { label=Dispositivo Agente_1 [shape=Mrecord,label=Agente] } subgraph clusterDispositivo_2 { label=Dispositivo Agente_2 [shape=Mrecord,label=Agente] } subgraph clusterDispositivo_3 { label=Dispositivo Agente_3 [shape=Mrecord,label=Agente] }

Gerente -> Agente_1 [label=1,color=red] Agente_1 -> Gerente [label=2,color=blue] Gerente -> Agente_2 [label=3,color=red] Agente_2 -> Gerente [label=4,color=blue] Gerente -> Agente_3 [label=5,color=red] Agente_3 -> Gerente [label=6,color=blue] }

</graphviz>

ou em paralelo, uma vez que há identificação dos remetentes e destinatários:

<graphviz>

digraph SNMPmultiThread { Gerente [shape=record] subgraph clusterDispositivo_1 { label=Dispositivo Agente_1 [shape=Mrecord,label=Agente] } subgraph clusterDispositivo_2 { label=Dispositivo Agente_2 [shape=Mrecord,label=Agente] } subgraph clusterDispositivo_3 { label=Dispositivo Agente_3 [shape=Mrecord,label=Agente] }

Gerente -> Agente_1 [label=1,color=red] Gerente -> Agente_2 [label=2,color=red] Gerente -> Agente_3 [label=3,color=red] Agente_1 -> Gerente [label=4,color=blue] Agente_2 -> Gerente [label=5,color=blue] Agente_3 -> Gerente [label=6,color=blue] }

</graphviz>

Em qualquer caso, fica nítida a centralização das tarefas no gerente, onde cabe ao agente - que está rodando no dispositivo gerenciado - responder às consultas do primeiro.

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

A instalação de agentes depende do equipamento e do seu sistema operacional ou firmware. Para o nosso caso, assumiremos que:

  • Em equipamentos intermediários, dedicados, como roteadores e switches, usaremos o agente disponível se houver. Caso não haja, o equipamento não será gerenciado.
  • Em equipamentos terminais, todos operando GNU/Linux, será instalado o agente específico da distribuição.

Agentes

A instalação e configuração são relativamente simples.

  • Primeiro, o pacote do agente:
aptitude install snmpd
  • Em seguida, a configuração de acordo com a comunidade de gerência no arquivo /etc/snmp/snmpd.conf:
rocommunity pi20101
syslocation Laboratório de Redes I
syscontact professor@redes.sj.ifsc.edu.br
sysservices 72

onde os três primeiros valores podem ser modificados - o último especifica o equipamento como um equipamento terminal.

  • Como o agente rodará em rede, deve-se retirar o endereço 127.0.0.1 do arquivo /etc/default/snmpd:
sed -i s/127.0.0.1//g /etc/default/snmpd
  • (Re)Inicie o serviço:
/etc/init.d/snmpd restart

Gerente

A instalação do gerente é igualmente difícil:

aptitude install cacti

O pacote instalará as dependências:

  • apache2: servidor Web.
  • php5: pacote base para a linguagem PHP versão 5.
  • php5-cli: uso da linguagem em linha de comando (shell).
  • mysql-server: servidor de banco de dados.
  • php5-mysql: suporte da linguagem para o banco.
  • dbconfig-common: configuração facilitada de bases de dados.
  • snmp: comandos SNMP.
  • php5-snmp: suporte da linguagem para o protocolo.
  • rrdtool: aplicativo para gerar manipular séries de informação.

O restante da configuração é através da interface Web: http://<SERVIDOR>/cacti, desde os parâmetros do sistema até a escolha dos equipamentos de rede a serem monitorados.

Aplicando...

O pacote cacti já se encarregará de agendar a coleta periódica de dados (5min) via cron: /etc/cron.d</cacti. Para confirmar que há comunicação possível entre agente e gerente, pode-se testar aquele a partir deste:

snmpwalk -v2c -cpi20101 <ALVO> .1

Assumindo que a comunidade SNMP é pi20101.

Contudo, é extremamente salutar acompanhar os gráficos gerados pelo sistema. O pacote original não gera alertas ao administrador de sistema...

Bibliografia



Voltar para Página principal do Projeto