Mudanças entre as edições de "Projeto Integrador - 2010.1 - Dicas de GAR"
(17 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 160: | Linha 160: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * 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 [http://tldp.org/HOWTO/TransparentProxy.html transparente]; ou seja, o usuário não precisa configurá-lo em seu sistema (nem saber que há um proxy :-). No arquivo <tt>/etc/squid3/squid.conf</tt>, basta adicionar ao final | + | * 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 [http://tldp.org/HOWTO/TransparentProxy.html transparente]; ou seja, o usuário não precisa configurá-lo em seu sistema (nem saber que há um proxy :-). No arquivo <tt>/etc/squid3/squid.conf</tt>, basta adicionar ao final da linha: |
− | + | http_port 3128 | |
− | + | com: | |
− | + | http_port 3128 transparent | |
− | |||
===Aplicando...=== | ===Aplicando...=== | ||
Linha 174: | Linha 173: | ||
e depois iniciando-os novamente: | e depois iniciando-os novamente: | ||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/squid3 start | ||
/etc/init.d/dansguardian start | /etc/init.d/dansguardian start | ||
− | |||
/etc/init.d/nat | /etc/init.d/nat | ||
sysctl -w net.ipv4.ip_forward=1 | sysctl -w net.ipv4.ip_forward=1 | ||
Linha 303: | Linha 302: | ||
===Gerente=== | ===Gerente=== | ||
− | ===Aplicando...=== | + | A instalação do gerente é igualmente difícil: |
+ | <syntaxhighlight lang=bash> | ||
+ | aptitude install cacti | ||
+ | </syntaxhighlight> | ||
+ | O pacote instalará as dependências: | ||
+ | * <tt>apache2</tt>: servidor Web. | ||
+ | * <tt>php5</tt>: pacote base para a linguagem PHP versão 5. | ||
+ | * <tt>php5-cli</tt>: uso da linguagem em linha de comando (''shell''). | ||
+ | * <tt>mysql-server</tt>: servidor de banco de dados. | ||
+ | * <tt>php5-mysql</tt>: suporte da linguagem para o banco. | ||
+ | * <tt>dbconfig-common</tt>: configuração facilitada de bases de dados. | ||
+ | * <tt>snmp</tt>: comandos SNMP. | ||
+ | * <tt>php5-snmp</tt>: suporte da linguagem para o protocolo. | ||
+ | * <tt>rrdtool</tt>: aplicativo para gerar manipular séries de informação. | ||
+ | |||
+ | O restante da configuração é através da interface Web: <tt><nowiki>http://<SERVIDOR>/cacti</nowiki></tt>, desde os parâmetros do sistema até a [http://www.cacti.net/downloads/docs/html/graph_howto.html escolha dos equipamentos de rede a serem monitorados]. | ||
+ | |||
+ | ==Aplicando...== | ||
+ | O pacote <tt>cacti</tt> já se encarregará de agendar a coleta periódica de dados (5min) via <tt>cron</tt>: <tt>/etc/cron.d</cacti</tt>. Para confirmar que há comunicação possível entre agente e gerente, pode-se testar aquele a partir deste: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | snmpwalk -v2c -cpi20101 <ALVO> .1 | ||
+ | </syntaxhighlight> | ||
+ | Assumindo que a comunidade SNMP é <tt>pi20101</tt>. | ||
+ | |||
+ | Contudo, é '''extremamente salutar''' acompanhar os gráficos gerados pelo sistema. O pacote original não gera alertas ao administrador de sistema... | ||
==Bibliografia== | ==Bibliografia== | ||
− | + | * BERRY, I. et al. [http://www.cacti.net/downloads/docs/html/index.html The Cacti Manual]. 2010. Acessado em: 18/06/2010. | |
+ | * Net-SNMP Project. [http://www.net-snmp.org/wiki/index.php/Tutorials Tutorials - NET-SNMP Wiki]. 2008. Acessado em: 18/06/2010. | ||
{{Voltar|Projeto Integrador - 2010.1#Gerência de Rede|Página principal do Projeto}} | {{Voltar|Projeto Integrador - 2010.1#Gerência de Rede|Página principal do Projeto}} |
Edição atual tal como às 03h06min de 18 de junho de 2010
Organização
- Usem mapas mentais ou grafos direcionados (dígrafos) para ver/compreender a relação entre camadas e serviços de rede. Exemplo:
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
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'
- 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="
"/>
"
</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
- DansGuardian Team. DansGuardian Documentation Wiki: pattern_matching. Acessado em 14/06/2010.
- KIRACOFE, D. Transparent Proxy with Linux and Squid mini-HOWTO. 2002. Acessado em: 14/06/2010.
- MORIMOTO. C. Redes e Servidores: usando o DansGuardian para barrar páginas impróprias. GDH Press. ed. 2. cap. 5. 2009. Acessado em: 14/06/2010.
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:
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
- BERRY, I. et al. The Cacti Manual. 2010. Acessado em: 18/06/2010.
- Net-SNMP Project. Tutorials - NET-SNMP Wiki. 2008. Acessado em: 18/06/2010.