Mudanças entre as edições de "Projeto Integrador - 2010.1 - Dicas de GAR"
(91 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 30: | Linha 30: | ||
=Modificação de Conteúdo Web= | =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 | + | 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== | ==Componentes== | ||
Linha 40: | Linha 40: | ||
* Servidor Web: monta dinamicamente as páginas HTML usando programação interpretada e banco de dados. Ferramenta utilizada: servidor Web [http://httpd.apache.org Apache] versão 2.2 com suporte à linguagem de programação [http://php.net PHP] e banco de dados [http://www.mysql.org MySQL]. | * Servidor Web: monta dinamicamente as páginas HTML usando programação interpretada e banco de dados. Ferramenta utilizada: servidor Web [http://httpd.apache.org Apache] versão 2.2 com suporte à linguagem de programação [http://php.net PHP] e banco de dados [http://www.mysql.org MySQL]. | ||
− | ==Fluxograma dos | + | ==Fluxograma dos Pacotes== |
<center><graphviz> | <center><graphviz> | ||
digraph Navegacao | digraph Navegacao | ||
{ | { | ||
− | Firewall [shape= | + | Firewall [shape=record] |
subgraph clusterCliente | subgraph clusterCliente | ||
{ | { | ||
Linha 53: | Linha 53: | ||
subgraph clusterAnalisador | subgraph clusterAnalisador | ||
{ | { | ||
− | label=Analisador | + | label="Analisador de Conteúdo" |
Socket_A [label=Servidor,shape=Mrecord] | Socket_A [label=Servidor,shape=Mrecord] | ||
Socket_AA [label=Cliente,shape=Mrecord] | Socket_AA [label=Cliente,shape=Mrecord] | ||
Linha 94: | Linha 94: | ||
==Instalação e Configuração do Cenário== | ==Instalação e Configuração do Cenário== | ||
− | Como no nosso cenário não é | + | 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''=== | ===''Firewall''=== | ||
Linha 102: | Linha 102: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * Ativação do roteamento | + | * Ativação do roteamento: |
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
− | sed -i s/.*net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf | + | sed -i 's/.*net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf |
</syntaxhighlight> | </syntaxhighlight> | ||
− | * Criação de script para redirecionamento das requisições HTTP: arquivo <tt>/etc/init.d/nat</tt>. | + | * Criação/alteração de script para redirecionamento das requisições HTTP: arquivo <tt>/etc/init.d/nat</tt>. |
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
#!/bin/sh | #!/bin/sh | ||
Linha 123: | Linha 123: | ||
# Bloqueio para acesso direto ao Proxy | # Bloqueio para acesso direto ao Proxy | ||
− | iptables -A INPUT -m tcp -p tcp -s | + | iptables -A INPUT -m tcp -p tcp ! -s 127.0.0.1 --dport 3128 -j DROP |
exit 0 | exit 0 | ||
+ | </syntaxhighlight> | ||
+ | Garanta que o ''script'' iniciará junto com o sistema, de preferência o mais cedo possível. No caso abaixo, o script <tt>nat</tt> iniciará em primeiro lugar (<tt>01</tt>) nos [http://focalinux.cipsga.org.br/guia/avancado/ch-deb.htm#s-deb-runlevels níveis de execução] 2 a 5 (<tt>2 3 4 5</tt>). | ||
+ | <syntaxhighlight lang=bash> | ||
+ | update-rc.d nat start 01 2 3 4 5 . | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Analisador de Conteúdo=== | ===Analisador de Conteúdo=== | ||
+ | * Instalação do DanGuardian: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | aptitude install dansguardian | ||
+ | </syntaxhighlight> | ||
+ | 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 <tt>/etc/dansguardian/dansguardian.conf</tt>, deve-se comentar essa linha: | ||
+ | UNCONFIGURED | ||
+ | e, se achar interessante, alterar as mensagens para português do Brasil: | ||
+ | language = 'ptbrazilian' | ||
+ | |||
+ | [[Imagem:Logoifsc.png|thumb|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''): | ||
+ | <syntaxhighlight lang=bash> | ||
+ | vi /etc/dansguardian/lists/contentregexplist | ||
+ | </syntaxhighlight> | ||
+ | com a seguinte adição de uma linha ao final do arquivo: | ||
+ | <code> | ||
+ | "(<body[^>]*[^>]*>)"->"\1<div><img src="http://wiki.sj.ifsc.edu.br/images/2/24/Logoifsc.png"/></div>" | ||
+ | </syntaxhighlight> | ||
+ | Essa linha acima, por exemplo, adiciona o logo do IF-SC no início da página, após a marcação <tt><nowiki><body></nowiki></tt>; ou seja, no topo da página. | ||
===Proxy=== | ===Proxy=== | ||
+ | * Instalação do proxy Squid versão 3: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | aptitude install squid3 | ||
+ | </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 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: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/dansguardian stop | ||
+ | /etc/init.d/squid3 stop | ||
+ | </syntaxhighlight> | ||
+ | e depois iniciando-os novamente: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/squid3 start | ||
+ | /etc/init.d/dansguardian start | ||
+ | /etc/init.d/nat | ||
+ | sysctl -w net.ipv4.ip_forward=1 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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: | ||
+ | * <tt>/var/log/dansguardian/access.log</tt> | ||
+ | * <tt>/var/log/squid/access.log</tt> | ||
+ | e o tráfego da rede na interface local (''loopback'') e portas: | ||
+ | * 80/TCP | ||
+ | * 3128/TCP | ||
+ | * 8080/TCP | ||
+ | A ferramenta [http://www.wireshark.org 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== | ==Bibliografia== | ||
* DansGuardian Team. [http://contentfilter.futuragts.com/wiki/doku.php?id=pattern_matching&DokuWiki=3ce871753f23ff18b2f473c0c61d51c5 DansGuardian Documentation Wiki: pattern_matching]. Acessado em 14/06/2010. | * DansGuardian Team. [http://contentfilter.futuragts.com/wiki/doku.php?id=pattern_matching&DokuWiki=3ce871753f23ff18b2f473c0c61d51c5 DansGuardian Documentation Wiki: pattern_matching]. Acessado em 14/06/2010. | ||
− | * MORIMOTO. C. [http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap5-18 Redes e Servidores]. [http://www. | + | * KIRACOFE, D. [http://tldp.org/HOWTO/TransparentProxy.html Transparent Proxy with Linux and Squid mini-HOWTO]. 2002. Acessado em: 14/06/2010. |
+ | * MORIMOTO. C. [http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap5-18 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 - 2010.1|Projeto Integrador]], são necessárias as gerências de monitoramento e contabilização. Em ambas, o protocolo [http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol SNMP] é suficiente para atendê-las. | ||
+ | |||
+ | Obs.: alguns conceitos são importantes em SNMP: | ||
+ | # [http://en.wikipedia.org/wiki/Management_information_base MIB] | ||
+ | # Comunidade | ||
+ | # [http://en.wikipedia.org/wiki/Protocol_data_unit 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 [http://www.net-snmp.org 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 [http://cacti.net Cacti] pela sua facilidade de configuração e uso. | ||
+ | |||
+ | ==Fluxograma dos Pacotes== | ||
+ | A coleta periódica dos dados pode ocorrer de forma sequencial: | ||
+ | <center><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></center> | ||
+ | |||
+ | ou em paralelo, uma vez que há identificação dos remetentes e destinatários: | ||
+ | <center><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></center> | ||
+ | |||
+ | 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: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | aptitude install snmpd | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Em seguida, a configuração de acordo com a comunidade de gerência no arquivo <tt>/etc/snmp/snmpd.conf</tt>: | ||
+ | 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 <tt>127.0.0.1</tt> do arquivo <tt>/etc/default/snmpd</tt>: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | sed -i s/127.0.0.1//g /etc/default/snmpd | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * (Re)Inicie o serviço: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/snmpd restart | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Gerente=== | ||
+ | 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== | ||
+ | * 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.