Projeto Integrador - 2010.1 - Equipe Coffee Break

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Índice

Diario do Projeto

Projeto 2010.1

Equipe CoffeBreak

Subdominio coffeebreak.sj.ifsc.edu.br

IP Válido 200.135.37.103

Alunos: Caroline, Jesse, Mario Andre, Rodolfo


8/6/10 - Terça-feira

Física

  • Separado os RACK's por equipe
    • Nossa equipe recebeu um RACk 20U
  • Colocado dois Path Panel(para conexão cruzada) e um organizador no RACK da equipe
    • Os path panel posuuiam 24 portas e eram 1U
    • O organizador era 1U
  • Não tínha cabos comprido o suficiente para alcançar o nosso RACK

Enlace e Rede

  • Não foi feito nada nesse dia

Aplicação - Gerencia

  • Escolhido nosso servidor

Img10.jpg

  • Instalado o Ubuntu Server 10.04 LTS
  • Instalado os aplicativos
    • SSH ( com o sistema operacional )
    • apache2
      • bind9
      • dhcp3-server

Aplicação - Programação

  • Não foi feito nada nesse dia

9/6/10 - Quarta-feira

Física

  • Passamos 3 Cabos do RACK principal até o RACK da nossa equipe
    • Os cabos escolhidos foram cabos UTP categoria 5e

Img20.jpg Img21.jpg Img19.jpg

  • Os cabos foram crimpados no Path Panel do RACK da equipe
    • O padrão escolhido para as conexao dos cabos Foi o padrão 568A

Img16.jpg

  • Instalado 3 áreas de trabalho (na parede)
    • Na ponta da area de trabalho foi colocado conectores RJ45 femêa
    • Para a conexão das pontas foi estabelecido o padrão 568A

Img14.jpg Img15.jpg

Enlace e Rede

  • Não foi feito nada nesse dia

Aplicação - Gerencia

  • Configurado DHCP
  • Configurado NTP
    • O NTP é um protocolo usado para a sincronização do relógio do sistema. Ele é muito importante, pois inúmeros serviços em rede dependem diretamente desse serviço.
    • Para a utilização do NTP, devemos primeiro começar com sua instalação, seguindo o comando:
apt-get install ntpdate

Depois basta sincronizar o relogio, usando o seguinte comando:

ntpdate <IP/ou dominio do servidor>

No nosso caso ficou assim:

ntpdate ntp.cais.rnp.br

Mas como de vez enquanto o relogio pode se desregular, e voce não perceber ou não descobrir a tempo, e um serviço não funcionar direito porque dependia dessa sincronização, é bom que alguém faça essa sincronização todo dia para voce. Mas voce pode se perguntar "quem irá fazer isso para mim?". A solução para isso é o crontab um serviço de agenda de tarefas que irá resolver o seu problema. Para isso vá na pasta /etc/crontab e coloque uma determinada tarefa para que ele a realize em determinado minuto/hora/dia/mês/dia da semana(m h dom mon dow). No nosso caso colocamos a tarefa - ntpdate -s ntp.cais.rnp.br - nas ultimas três linhas como mostrado abaixo:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) * 7 * * * root ntpdate -s ntp.cais.rnp.br * 15 * * * root ntpdate -s ntp.cais.rnp.br * 23 * * * root ntpdate -s ntp.cais.rnp.br
  • Testado NTP OK

Aplicação - Programação

  • Não foi feito nada nesse dia

10/6/10 - Quinta-feira

Física

  • Crimpado os cabos no Path Panel do armário principal
    • Como ja mencionado o padrão escolhido para as conexao dos cabos Foi o padrão 568A

Img22.jpg

  • Testado todos os cabos, conexão com Path Panel e Área de trabalho

Enlace e Rede

  • Não foi feito nada nesse dia

Aplicação - Gerencia

  • Testado DHCP
  • Configurado NAT
    • O NAT(network address translation) é um protocolo que faz a tradução dos endereços Ip e portas TCP da rede local para a Internet. Assim o pacote enviado ou a ser recebido de sua estação de trabalho na sua rede local, vai até o servidor onde é trocado pelo ip do mesmo, validando assim o envio do pacote na internet. No retorno do pacote, acontece a mesma coisa, só que o inverso, o pacote chega e o ip do servidor é trocado pelo Ip da estação que fez a requisição do pacote. Como na instalação padrão do Ubuntu não há um arquivo específico para configurar NAT, foi criado um como mostrado abaixo:

Crie o arquivo nat seguindoo caminho /etc/init.d/ através do comando

touch /etc/init.d/nat

E depois de cria-lo modifique-o como abaixo:

#!/bin/bash
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Mudança das permissões, uma vez que se trata de um arquivo executável:

chmod 700 /etc/init.d/nat

Referência do script para um nível de execução. Por predefinição o nível comum é 2. Portanto, é recomendável uma ligação simbólica à cópia do arquivo original - para facilitar a manutenção do arquivo:

cd /etc/rc2.d
ln -s ../init.d/nat S01nat
  • Configurado Roteamento
    • Para ativar o roteamento é só realizar o comando:
sysctl -p /etc/sysctl.conf

Aplicação - Programação

  • Foi iniciado o processo de criação
  • A estrutura do bando de dados MySQL foi projetada e implantada

Segue a estrutura do banco de dados:

--
-- Banco de Dados: `coffeebreak`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `anuncio`
--

CREATE TABLE IF NOT EXISTS `anuncio` (
  `aid` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `titulo` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `texto` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `link` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `visualizacoes` int(11) NOT NULL,
  `visitas` int(11) NOT NULL,
  `expira_em` datetime NOT NULL,
  `expirado` char(1) NOT NULL,
  PRIMARY KEY (`aid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49 ;

-- --------------------------------------------------------

--
-- Estrutura da tabela `banner`
--

CREATE TABLE IF NOT EXISTS `banner` (
  `bid` int(11) unsigned zerofill NOT NULL,
  PRIMARY KEY (`bid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Estrutura da tabela `login`
--

CREATE TABLE IF NOT EXISTS `login` (
  `id` int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `usuario` varchar(100) NOT NULL,
  `senha` varchar(255) NOT NULL,
  `ultimo_ip` varchar(100) NOT NULL,
  `ultima_data` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

11/6/10 - Sexta-feira

Física

  • Não foi feito nada nesse dia

Enlace e Rede

  • Manobrado os cabos do servidor direito até o switch do RAK Central para conexão com a COINF

Aplicação - Gerencia

  • Configurado o Ip Válido
    • Seguindo o caminho /etc/network/interfaces, foi configurado as duas interfaces do sistema, eth0 e eth1 como segue abaixo:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface auto lo iface lo inet loopback
# IP Interno auto eth0 iface eth0 inet static address 192.168.103.1 netmask 255.255.255.0 post-up route add -net 192.168.203.0/24 gw 192.168.103.254
# IP Valido auto eth1 iface eth1 inet static address 200.135.37.103 netmask 255.255.255.192 gateway 200.135.37.126

Após a configuração do arquivo, deve-se reiniciar a rede através do comando:

/etc/init.d/networking restart
  • Configurado e Testado o DNS
    • O DNS(Domain Name System) é um serviço usado para a tradução de endereços IP para nomes de domínios. Assim, é possível atribuir nomes a um IP numérico, pois o DNS será responsável por efetuar a interpretação das palavras que foram utilizadas e transformá-las em números, de forma que o computador as compreenda e devolva o caminho correto por meio do acesso bem sucedido.

Para utilizarmos os serviços do DNS, primeiro temos que instalar-mos ele através do comando:

apt-get install bind9

Depois começarmos com a cofiguração do DNS, vamos começar modificando o arquivo named.conf.options seguindo o caminho /etc/bind/named.conf.options:

options {
       ...
       listen-on-v6 { any; };
       listen-on { any; };
       allow-recursion { 127.0.0.0/8; 192.168.203.0/24; 192.168.103.0/24; };
       allow-query { any; };
       };

O proximo arquivo a ser modificado é o named.conf.local onde será criado o domínio coffeebreak.sj.ifsc.edu.br e seu reverso, através do caminho /etc/bind/named.conf.local

...
zone "coffeebreak.sj.ifsc.edu.br" {
       type master;
       file "/etc/bind/coffeebreak.sj.ifsc.edu.br";
};
zone "/etc/bind/200.in-addr.arpa" {
       type master;
       file "/etc/bind/200/etc/bind/200.in-addr.arpa";
};

O proximo passo é criar o arquivo coffeebreak.sj.ifsc.edu.br dentro da pasta bind que esta dentro de etc, para isso faça o comando:

touch /etc/bind/coffeebreak.sj.ifsc.edu.br

E depois de criado o arquivo é só modificalo como segue abaixo:

$TTL 86000
@ IN SOA ns1.coffeebreak.sj.ifsc.edu.br. rodolfo.coffeebreak.sj.ifsc.edu.br. ( 2010061102  ; serial 1d  ; refresh 1h  ; retry 1w  ; expire 1d  ; negative cache ttl )
@ IN NS ns1 ns1 IN A 200.135.37.103 www IN CNAME ns1 servidor IN CNAME ns1
@ IN MX 0 mail.coffebreak.sj.ifsc.edu.br. mail IN A 200.135.37.103 imap IN CNAME mail smtp IN CNAME mail

O ultimo passo é quase igual ao passo anterior. É criado o arquivo 200.in-addr.arpa dentro da pasta bind que esta dentro da pasta etc, fanzendo o seguinte comando:

touch /etc/bind/200.in-addr.arpa

E depois de o arquivo está criado é só modificalo como segue abaixo:

$TTL 86000
@ IN SOA ns1.coffeebreak.sj.ifsc.edu.br. rodolfo.coffeebreak.sj.ifsc.edu.br. ( 2010062400  ; serial 1d  ; refresh 1h  ; retry 1w  ; expire 1d  ; negative cache ttl )
@ IN NS ns1.coffeebreak.sj.ifsc.edu.br. 103.37.135 IN PTR ns1
  • Colocado o servidor no armário da direita no laboratório de Redes 1

Img23.jpg Img3.jpg

Aplicação - Programação

  • Foi feito a conexão ao banco de dados orientado a objetos.

Segue o código (mysql.php):

<?
// Nome da classe que faz conexão com o banco de dados
class conMysql {

// Variáveis da classe
 var $servidor = "localhost";
 var $usuario = "root";
 var $senha = "4coffee4";
 var $database = "coffeebreak";
 var $validacao = "TGHDFEU1H5N5cUo2fHfUeHe1bUrheeaukghdyuGHEgh443256gyfegR";

 var $query;
 var $link;
 var $resultado;

// Método que faz a conexão com o banco de dados MySQL 
function conectar() {
$this->link = mysql_connect($this->servidor,$this->usuario,$this->senha);

// Verifica se conectou
if (!$this->link) {
echo "Falha na conexao com o Banco de Dados!<br />";
echo "Erro: " . mysql_error();
die();

// Verifica se selecionou o base de dados
} elseif (!mysql_select_db($this->database, $this->link)) {
echo "O Banco de Dados solicitado não pode ser aberto!<br />";
echo "Erro: " . mysql_error();
die();
}
} // Fim da função conectar

function desconectar() {
return mysql_close($this->link);
}

// Metodo que executa uma pedido e fecha a conexão.
function executeQuery($query) {
$this->conectar();
$this->query=$query;
if($this->resultado=mysql_query($this->query)) {
$this->desconectar();
return $this->resultado;
} else {
echo "Ocorreu um erro na execução da SQL";
echo "Erro :" . mysql_error();
echo "SQL: " . $query;
die();
desconectar();
		}
	}
} // fecha class
?>

Instanciando e executando a Query:

require 'admin/mysql.php'; // Faz o requerimento da classe conMysql
$conexao = new conMysql(); // Faz o instanciando
$conexao->executeQuery("select * from anuncio where expirado = 'n'"); // Executa a Query (pedido).

14/6/10 - Segunda-feira

Física

  • Iniciado a confecção dos pacth cord

Enlace e Rede

  • Fomos informados pelo professor Casagrande que os patch cord prontos(que são do laboratório de Redes 1), usados na conexão cruzada nos RACKs das equipes tem que ser trocados, por path cord confeccionados pelas mesmas

Aplicação - Gerencia

Aplicação - Programação

  • Foi implementado a página inicial do sistema. Página:
// <table> Cria a tabela
<table id="box-table-a" summary="Coffee Break">
    // Cria um cabeçalho
    <thead>
       <tr>
         <th scope="col">Título</th>
         <th scope="col">Cliques</th>
         <th scope="col">Tempo Restante</th>
         <th scope="col">Expirado</th>
         <th scope="col">Editar</th>
         <th scope="col">Excluir</th>
       </tr>
    </thead>
<tbody>

<?
        // Instanciamento
	$conexao = new conMysql();
	
        // Função que transforma o formato de data aaaa/mm/dd em dias faltantes
	function transData($dataMySQL) {

        // Variável pega data no formato 2010/07/31 22:30:21
	$agora = date("Y-n-j H:i:s");

        // Separa a data do horário, pois, entre o horário e a data há um espaço em branco (' ')
	$data_atual = explode(' ', $agora);
	
	$data_de_cadastro = explode(' ', $dataMySQL);
	
        // Tranforma a difença entre as datas que estão no formato aaaa/mm/dd em dias faltantes.
	$time_inicial = strtotime($data_atual[0]);
	$time_final = strtotime($data_de_cadastro[0]);
	$diferenca = $time_final - $time_inicial;
	$dias = (int)floor( $diferenca / (60 * 60 * 24));
		if ($dias <= 0) {
		$dias = "";
		} elseif ($dias == 1) {
		$dias .= " dia";
		} else {
		$dias .= " dias";
		}
        return $dias;
	}

	// Se o banner estiver expirado, o mesmo é atualizado e a página do sistema é atualizada.
	function atualizaBD($dataBD,$aid,$expirado) {
	$agora = date("Y-n-j H:i:s");
	$tempo_transcorrido = (strtotime($agora)-strtotime($dataBD));
		if (($tempo_transcorrido > 0) && ($expirado != "s")) {
				$conexao = new conMysql();
				$conexao->executeQuery("update anuncio set expirado='s' where aid='$aid'");
                                
                                // Atualiza a página, redirecionando-a para ela mesma
				echo("<script>window.location = 'sistema.php';</script>");
			}
	} // Fim da função atualizaBD
	
	// Busca e ordena os banners por data de expiração, de forma decrescente
        $resultado = $conexao->executeQuery("select * from anuncio order by expira_em desc");
	
	// Gera as linhas da tabela
        while ($busca = mysql_fetch_object($resultado)) {
	
        // Chama a função atualizaBD e envia os parametros
	atualizaBD($busca->expira_em,$busca->aid,$busca->expirado);

	// Troca "n" ou "s" por "Sim" ou "Não". 	
	if ($busca->expirado == n) {
			$expirado = "Não";
		} else {
			$expirado = "Sim";
		}
			
                        // Imprimi linha da tabela
			echo '<tr>
			<td><a href="' . $busca->link . '">' . $busca->titulo . '</a></td>
			<td>' . $busca->visitas . '</td>
			<td>' . transData($busca->expira_em) . ' </td>
			<td>' . $expirado . '</td>
			<td><a href="sistema.php?action=editar&editar=' . $busca->aid . '">
                        <img src="imagens/edit.png" width="16" height="16" /></a></td>
			<td><a href="excluir.php?action=excluir&excluir=' . $busca->aid . '" onClick="return confirmar();">
                        <img src="imagens/delete.png" width="16" height="16" /></a></td>
			</tr>';
}
?>
</tbody>
</table>

15/6/10 - Terça-feira

Física

  • confeccionado 4 path cord para conexão cruzada, para o RACK da equipe
    • Nas pontas foram usados conectores RJ45 macho
    • O padrão escolhido para as conexao dos cabos Foi o padrão 568A

Img17.jpg

  • Testado os quatro path cord
  • Colocados os quatro path cord no RACK da equipe

Img7.jpg Img8.jpg

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

Formulário de cadastro:

        // onSubmit é uma função do JavaScript que é ativada antes do formulário ser enviado
	<form name="cadastrar" onSubmit="return formularios();" method="post" action="enviar.php?action=novo">
    <table id="box-table-b" summary="Coffee Break">
    <thead>
       <tr>
         <th scope="col" align="left">Cadastro de Anúcio</th>
         <th scope="col" align="right"><? $data = date("j/n/Y"); $hora = date("H:i:s"); echo "Data: $data - Horário: $hora"; ?></th>
       </tr>
     </thead>
     <tbody>
     <tr>
     <td><div class="encapsulador-300"><b>Título: </b><br /><input class="input-1" type="text" name="titulo"></div></td>
     <td><div class="encapsulador-300"><b>Link: </b><br /><input class="input-1" type="text" name="link"></div></td>
     </tr>
     <tr>
	 <td colspan="2"><div class="encapsulador-680"><b>Texto: </b><br />
         <textarea class="textarea-1" rows="10" name="texto"></textarea></div></td>
     </tr>
     <tr>
     <td><div class="encapsulador-200"><b>Expira em: </b>
     <input class="input-2" id="date" type="text" name="expira_em"></div></td>
     <td><div class="encapsulador-200"><b>Expirado? </b>
     <input type="radio" name="expirado" value="n" checked> Não - 
     <input type="radio" name="expirado" value="s"> Sim</div></td>
     </tr>
     <tr>
	 <td colspan="2"><div class="encapsulador-150-center">
         <input name="enviar" type="submit" value="    Enviar    "></div></td>
     </tr>
     </tbody>
</table>
</form>

Formulário de edição:

	$conexao = new conMysql();

        // Seleciona para editar a linha da tabela onde ID é igual
	$busca = mysql_fetch_object($conexao->executeQuery("select * from anuncio where aid='$editar'"));
		if ($busca->expirado == n) {
			$marcacao_ex = "<input type=\"radio\" name=\"expirado\" value=\"n\" checked> Não -
                        <input type=\"radio\" name=\"expirado\" value=\"s\"> Sim"; 
		} else {
			$marcacao_ex = "<input type=\"radio\" name=\"expirado\" value=\"n\"> Não -
                        <input type=\"radio\" name=\"expirado\" value=\"s\" checked> Sim";
		}
?>
	<form name="atualizar" onSubmit="return formularios();" method="post" action="atualizar.php?action=atualizar">
    <table id="box-table-b" summary="Coffee Break">
    <thead>
       <tr>
         <th scope="col" align="left">Cadastro de Anúcio</th>
         <th scope="col" align="right"><? $data = date("j/n/Y"); $hora = date("H:i:s"); echo "Data: $data - Horário: $hora"; ?></th>
       </tr>
     </thead>
     <tbody>
     <tr>
     <td><div class="encapsulador-300"><b>Título: </b><br />

     // Imprimi dentro do INPUT TEXT o campo encontrado no MySQL
     <input class="input-1" type="text" name="titulo" value="<? echo $busca->titulo ?>"></div></td>
     <td><div class="encapsulador-300"><b>Link: </b><br />
     <input class="input-1" type="text" name="link" value="<? echo $busca->link ?>"></div></td>
     </tr>
     <tr>
	 <td colspan="2"><div class="encapsulador-680"><b>Texto: </b><br />
         <textarea class="textarea-1" rows="10" name="texto"><? echo $busca->texto ?></textarea></div></td>
     </tr>
     <tr>
     <td><div class="encapsulador-200"><b>Expira em: </b>
     <input class="input-2" id="date" type="text" name="expira_em" value="<? echo $busca->expira_em ?>"></div></td>
     <td><div class="encapsulador-200"><b>Expirado? </b><? echo $marcacao_ex ?></div></td>
     </tr>
     <tr>
	 <td colspan="2"><div class="encapsulador-150-center">
         <input type="hidden" name="atualizar" value="<? echo $editar ?>">
         <input name="enviar" type="submit" value="    Atualizar    "></div></td>
     </tr>
     </tbody>
</table>
</form>

Foi implementado nos formulários do sistema funções JavaScript para verificação dos campos. Exemplo:

// onSubmit é uma função do JavaScript que é ativada antes do formulário ser enviado
<form name="enviar" onSubmit="return formularios();" method="post" action="atualizar.php?action=atualizar">
<input type="text" name="titulo">
<input name="enviar" type="submit" value="Enviar">
</form>

<script language="JavaScript">
	function formularios(){
	if (document.enviar.titulo.value=="") {
		alert( "Entre com um título!" );
		document.enviar.titulo.focus();
		return false;
	}
	return true;
	}
</script>

16/6/10 - Quarta-feira

Física

  • Confeccionado 4 pacth cord para conexão cruzada, para o RACK principal
    • Nas pontas foram usados conectores RJ45 macho
    • O padrão escolhido para as conexao dos cabos Foi o padrão 568A

Img18.jpg

  • Testado os quatro path cord
  • Colocado os path cord no RACK principal(para fazer a conexão cruzada entre o path panel e o switch)

Enlace e Rede

Aplicação - Gerencia

  • Instalados e configurados: Dansguardian, Squid, Firewall.
    • Firewall

O firewall é usado na filtragem de pacotes, por meio de um conjunto de regras estabelecidas. Essas regras determina que endereços IPs e dados podem estabelecer comunicação e/ou transmitir/receber dados. Para utilizarmos o firewall, temos que instala-lo através do comando:

aptitude install iptables

Depois ativamos o roteamento através do comando:

sed -i 's/.*net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf

Em seguida fizemos algumas alterações no script do arquivo NAT para redirecionamento das requisições HTTP. Seguindoo o caminho /etc/init.d/nat. As alterações feitas são adicionar algumas intruções logo apos as intuções de NAT, como mostrado abaixo:

#!/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

E por ultimo temos que fazer com que o script inicie em primeiro lugar(01) nos niveis de execução de 2 a 5 (2 3 4 5). Assim o script irá iniciar junto com o sistema. Segue o comando abaixo:

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

O DansGuardian é um filtro de conteúdo destinado a trabalhar junto com o Squid, filtrando páginas pornográficas e com outros tipos de conteúdo indesejado. Ele inclui um conjunto de regras prontas, que contém palavras, frases e tipos de arquivos freqüentemente usados neste tipo de página e endereços de páginas conhecidas. Cruzando estas informações, ele consegue fazer um excelente trabalho, realmente bloqueando quase todas as páginas indesejadas, em várias línguas, com relativamente poucos falsos-positivos. Para utilizar mos o dansguardian vamos começar instalando ele, através do comando:

aptitude install dansguardian

Depois de instalado vamos configurar seu arquivo de configuração.A unica coisa que se precisa fazer é que no arquivo /etc/dansguardian/dansguardian.conf, deve-se comentar a linha que aparece:

UNCONFIGURED

Após a configuração é so seguir o caminho /etc/dansguardian/lists/contentregexplist e nesse aquivo colocar o que voce quer que apareça não apareça ou seja trocado, quando entrar em qualquer site

Aplicação - Programação

  • Foi feito a página de atualizacao.php para receber dados do formulário de edição:
<?

// Recebe a variável que é enviada através de GET
$action = $_GET['action'];

// Recebe a variável que é enviada através de POST
$atualizar = $_POST['atualizar'];
$titulo = $_POST['titulo'];
$texto = $_POST['texto'];
$link = $_POST['link'];
$expira_em = $_POST['expira_em'];
$expirado = $_POST['expirado'];

$hora = date("H:i:s");
$nova_data = "$expira_em $hora";

if ($action == "atualizar") {
$conexao = new conMysql();

// Atualiza os dados da tabela com os novos dados enviados através do formulário editar
$conexao->executeQuery("update anuncio set titulo='$titulo',texto='$texto',link='$link',
expira_em='$nova_data',expirado='$expirado' where aid='$atualizar'");

echo "<center><b>Anúncio atualizado com sucesso!</b></center>";
echo "<center><a href=sistema.php>Voltar</a></center>";

// If $action for diferente de "atualizar" é impresso a mensagem abaixo
} else {
	echo "<center><b>Não há variáveis a serem processadas!</b></center>";
	echo "<center><a href=sistema.php>Voltar</a></center>";
}
?>

Foi feito a página enviar.php para receber dados do formulário de cadastro:

<?
$action = $_GET['action'];

$titulo = $_POST['titulo'];
$texto = $_POST['texto'];
$link = $_POST['link'];
$data = $_POST['expira_em'];
$expirado = $_POST['expirado'];

$hora = date("H:i:s");

// Concatena o horário atual com a data de expiração do banner
$expira_em =  "$data ". $hora;

if ($action == "novo") {
	$conexao = new conMysql();
	$conexao->executeQuery("insert into anuncio values(null,'$titulo','$texto','$link','0','0','$expira_em','$expirado')");
	echo "<center><b>Anúncio cadastrado com sucesso!</b></center>";
	echo "<center><a href=sistema.php>Voltar</a></center>";
} else {
	echo "<center><b>Não há variáveis a serem processadas!</b></center>";
	echo "<center><a href=sistema.php>Voltar</a></center>";
}
?>

17/6/10 - quinta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Função do item excluir que verifica se usuário tem certeza:
<script language='javascript'>
function confirmar() {
  if( confirm( 'Tem certeza que deseja deletar?' ) ) {
	  return true;
  } else {
	  return false;
  }
}
</script>

Item deletar:

<td><a href="excluir.php?action=excluir&excluir=' . $busca->aid . '" onClick="return confirmar();">
<img src="imagens/delete.png" width="16" height="16" /></a></td>

Exemplo da ação:

Certeza deletar.gif

18/6/10 - Sexta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foi implantado um item de calendário nos formulários de Edição e Cadastro

Instalação e ativação:

<head>
    <link rel="stylesheet" type="text/css" href="calendario/calendar.css">
    <script type="text/javascript" src="calendario/mootools.js"></script>
    <script type="text/javascript" src="calendario/calendar.js"></script>

    // Ativa a função do calendário quando for incluído no INPUT 
    <script type="text/javascript">
    window.addEvent('domready', function() { myCal = new Calendar({ date: 'Y-m-d' }); });
    </script>	
</head>

Uso (id="data" no INPUT utiliza a função do calendário em JavaScript):

<input class="input-2" id="date" type="text" name="expira_em">

Exemplo da ação:

Calendario.gif

21/6/10 - Segunda-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foi criado o design do sistema

Logo Coffee Break:

Logo coffeebreak.gif

Página de login do sistema:

Pagina login.jpg

Página inicial do sistema:

Pagina inicial.jpg

22/6/10 - terça-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foi feita a página para autenticação do usuário no sistema
<?  session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Coffee Break</title>
</head>
<body>
<? 
require 'mysql.php';
$action = $_GET['action'];
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];

	if ($action == "login") {
		$conexao = new conMysql();
		$busca = mysql_fetch_object($conexao->executeQuery("select * from login"));
		
        // Verifica se usuário e senha são iguais aos dados encontrados no MySQL
	if (($busca->usuario == $usuario) && ($busca->senha == $senha)) {

                // Cria uma sessão para verificação nas páginas do sistema
		$_SESSION['usercod'] = "$conexao->validacao$busca->usuario";

                // Gera uma sessão com a data atual
		$_SESSION["ultimoAcesso"] = date("Y-n-j H:i:s"); 
		echo("<script>window.location = 'index.php';</script>");
		
	} else {
		echo("<script>
     	alert(\"Usuário ou senha não conferem!\");
     	window.location = 'index.php';
     	</script>");
		
	}
} else {
		echo("<script>
     	alert(\"Nada a ser processado!\");
     	window.location = 'index.php';
     	</script>");
	}
?>
    </body>
</html>
  • Em cada página importante do sistema foi incluso um código que verifica se o usuário é válido e se a sessão está expirada
$conexao = new conMysql();
$busca = mysql_fetch_object($conexao->executeQuery("select * from login"));

	if ($_SESSION['usercod'] != "$conexao->validacao$busca->usuario") {
		echo("<script>
     	alert(\"Você não está logado no sistema.\");
     	window.location = 'index.php';
     	</script>");
	} else {
		$dataSalva = $_SESSION["ultimoAcesso"]; 
		$agora = date("Y-n-j H:i:s");
		$tempo_transcorrido = (strtotime($agora)-strtotime($dataSalva));
	 		if($tempo_transcorrido >= 600) {

     			// Se passou 10 minutos ou mais, a sessão é destruída e o usuário desconectado
      			session_destroy();
      			echo("<script>
				alert(\"Sessão expirada!\");
				window.location = 'index.php';
				</script>");
			}else {

                        // Renova o tempo da sessão
			$_SESSION["ultimoAcesso"] = $agora;
			}
	}

23/6/10 - Quarta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Nada foi feito

24/6/10 - Quinta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Nada foi feito

25/6/10 - Sexta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foi colocado uma página com a logo da Equipe Coffee Break na pasta /var/www

- Endereço: http://www.coffeebreak.sj.ifsc.edu.br

- Observação: A página do sistema encontra-se no endereço: http://www.coffeebreak.sj.ifsc.edu.br/admin

Código da página:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>Coffee Break</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta name="description" content="Grupo CoffeeBreak - IFSC - Projeto Integrador do Tec.
        Telecomunicações com ênfase em redes. IFSC">
	<meta name="keywords" content="coffeebreak, coffee, break, ifsc, cefet, cefetsc, projeto, integrador, grupo">
	<meta name="author" content="coffeebreak">
	<meta http-equiv="Language" content="Pt-Br">
	<meta name="Robots" content="all">
<style type="text/css">
    html, body {
    width: 100%;
    height: 100%;
    margin: 0px;
    padding: 0px;
    }

    #table {
    width: 100%;
    height: 100%;
    display: table;
    background: #f1f1f1;
    }

    #cell {
    vertical-align: middle;
    display: table-cell;
    _position: absolute;
    _top: 50%;
    }

    #conteudo {
    width: 500px;
    margin: auto;
    padding: 20px;
    _position: relative;
    _top: -50%;
    text-align: center;
    }
</style>
</head>
<body>
<div id="table">
<div id="cell">
<div id="conteudo">
<img src="logo_coffeebreak.gif" width="293" height="293" />
</div>
</div>
</div>
</body>
</html>

28/6/10 - Segunda-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Desenvolvimento da página que gera a imagem banner.png
// Página: banner_imagem.php
<?
require 'admin/mysql.php';
$agora = date("Y-n-j H:i:s");

	$conexao = new conMysql();
	$resultado = $conexao->executeQuery("select * from anuncio where expirado = 'n'");
	$linhas = mysql_num_rows($resultado);
	$linhas--;
	$linha_aleatoria = rand(0, $linhas);
		
	mysql_data_seek($resultado, $linha_aleatoria);
	$busca = mysql_fetch_array($resultado, MYSQL_ASSOC);

	$tempo_transcorrido = (strtotime($agora)-strtotime($busca[expira_em]));
		
	// Verifica se o banner está expirado
        if ($tempo_transcorrido < 0) {

// definindo as dimensoes da imagem: largura , altura
$imagem = imagecreate( 800, 70 );

// definindo a cor de fundo e do texto
$fundo = imagecolorallocate( $imagem, 102, 51, 0 );
$corTexto = imagecolorallocate( $imagem, 255, 255, 255 );

// cor de uma linha
$corLinha = imagecolorallocate( $imagem, 153, 102, 51 );

// Configuração da função imagettftext(imagem,tamanho,ângulo,X,Y,cor,arquivo da fonte,texto)
imagettftext($imagem, 12, 0, 10, 18, $corTexto, "/usr/share/fonts/truetype/freefont/FreeSans.ttf", $busca[titulo]);

        // Conta 140 caracteres e inclui o restante na segunda linha
	$texto = wordwrap($busca[texto], 140, "<br>");
	$linha = explode("<br>", $texto);

// Configuração da função imagettftext(imagem,tamanho,ângulo,X,Y,cor,arquivo da fonte,texto)
imagettftext($imagem, 9, 0, 10, 43, $corTexto, "/usr/share/fonts/truetype/freefont/FreeSans.ttf", "$linha[0]");
imagettftext($imagem, 9, 0, 10, 59, $corTexto, "/usr/share/fonts/truetype/freefont/FreeSans.ttf", "$linha[1]");

// desenhando uma linha de largura 2px abaixo do texto
imagesetthickness ( $imagem, 2 );
imageline( $imagem, 5, 25, 790, 25, $corLinha );

// gravando o arquivo no subdiretorio imagens
// o usuario www-data deve ter permissao de escrita neste diretorio
imagepng( $imagem, "/var/www/imagens/banner.png" );

// retirando a figura da memoria
imagedestroy( $imagem );

// Salvando id do contador
$conexao->executeQuery("update banner set bid = '$busca[aid]'");

	} else {

        // Atualiza o banner se o mesmo estiver expirado
	$conexao->executeQuery("update anuncio set expirado='s' where aid='$busca[aid]'");
	}
?>

29/6/10 - Terça-feira

Física

  • CONCLUIDO

Enlace e Rede

  • Escolhido access point

Img1.jpg

  • Configurado access point

Img11.jpg Img12.jpg Img13.jpg

  • Acces point colocado no RACK da equipe e pronto para ser usado quando a parte de enlace estiver terminada

Img2.jpg

Aplicação - Gerencia

Aplicação - Programação

  • Desenvolvimento da página que realiza a contagem dos cliques nos banners e faz o redirecionamento
// Página: contador.php
<?
require 'admin/mysql.php';
$action = $_GET['action'];

if ($action == "go") {

// Paga BID da tabela banner (banner que está sendo visualizado)
	$conexao = new conMysql();
	$resultado = $conexao->executeQuery("select bid from banner");
	$bid = mysql_fetch_array($resultado, MYSQL_ASSOC);

// Executa um Query do banner gerado
        $resultado = $conexao->executeQuery("select * from anuncio where aid='$bid[bid]'");
        $busca = mysql_fetch_array($resultado, MYSQL_ASSOC);

// Adiciona +1 em vizualização
        $visitas = $busca['visitas'];
        $visitas++;
        $conexao->executeQuery("update anuncio set visitas='$visitas' where aid='$bid[bid]'");

// Faz o redirecionamento para link do banner
        header("Location: $busca[link]");
}
?>

30/6/10 - Quarta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foram realizado alguns ajustes no sistema.

01/7/10 - Quinta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

  • Configurado arquivo de BACKUP
    • foi feito um script para realizar o BACKUP, como segue abaixo:
#!/bin/bash
#diretorio onde sera feito o backup DIRBKP=/var/backup #nome do arquivo compactado NOMEARQUIVO=coffeebreak-backup-local.tar.bz2
mkdir -p $DIRBKP cd $DIRBKP
tar -cvpjf $NOMEARQUIVO --exclude=/lost+found/* --exclude=/dev/* --exclude=/sys/* --exclude=/proc/* --exclude=/tmp/* --exclude=/var/tmp/* --exclude=$DIRBKP --exclude=/mnt/* /

Aplicação - Programação

  • Configuração do servidor para gerar o banner

- Incluído um agendamento no /etc/crontab para gerar um novo banner.png a cada 3 minutos:

0-59/3 * * * *  root    wget -q http://localhost/banner_imagem.php > /dev/null

- Incluído o código HTML no DansGuardian para incluir o banner em todas as páginas que o cliente acessar.

Arquivo de configuração: /etc/dansguardian/lists/contentregexplist

"(<body[^>]*[^>]*>)"->"\1<center><div style="background-color: rgb(102,51,0)">
<a href="http://www.coffeebreak.sj.ifsc.edu.br/contador.php?action=go">
<img src="http://www.coffeebreak.sj.ifsc.edu.br/imagens/banner.png" border="0"></a></div></center>"

02/7/10 - Sexta-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Foram realizados testes para verificação de possíveis erros no sistema
  • Foi desenvolvida a documentação do sistema

05/7/10 - Segunda-feira

Física

  • CONCLUIDO

Enlace e Rede

Aplicação - Gerencia

Aplicação - Programação

  • Sistema concluído

Estrutura final da topologia

Topfis.jpg

Resumo

Física

Enlace e Rede

Para a ligação dos dois ambientes ( Sala de Meios de Telecom e Laboratório de Redes 1 ) utilizamos 2 pares de Modem conectados com um cabo UTP categoria 6 utilizando 2 pares para cada modem, sendo um par para TX e outro para RX. Cada par de modem configurado com uma velocidade, 2Mbps e 64Kbps. Como o objetivo é que mesmo utilizando os mesmos switchs e os mesmos roteadores cada um dos grupos não conseguisse a comunicação interna com os outros, apenas pela rede externa, é utilizado um recurso chamado VLAN que tem que ser configurado tanto nos switchs como nos proprios routeadores


Começando a configuração: Comunicação entre os roteadores Para um roteador se comunicar com o outro ele passa pelo modem que se comunica com o seu par para depois sair para o outro modem, a comunicação entre o roteador NR2G e o Modem é com o Padrão ISO2110 em ambos os lados, sendo assim teriamos um cabo pino a pino e como não possuimos cabos desse tipo no laboratorio utilizamos cabos que tem entrada ISO2110 com o outro padrão Telebras, e depois um adaptador que transforma o padrão Telebras novamente para ISO2110. O NR2G tem duas portas para a comunicação WAN que é a utilizada para comunicação entre esses roteadores. Roteadores precisam de endereço IP para se comunicarem então entramos no NR2G para a configuração de endereço IP das portas WAN via Console e usamos os seguintes comandos:

Redes1>SET WAN WAN0 PROTO PPPS IP 10.0.0.1 MASK 255.255.255.252 CLOCK EXTERNAL UP
Redes1>SET WAN WAN1 PROTO PPPS IP 10.0.1.1 MASK 255.255.255.252 CLOCK EXTERNAL UP
Meios>SET WAN WAN0 PROTO PPPS IP 10.0.0.2 MASK 255.255.255.252 CLOCK EXTERNAL UP
Meios>SET WAN WAN1 PROTO PPPS IP 10.0.1.2 MASK 255.255.255.252 CLOCK EXTERNAL UP

Para o teste usamos o comando

Redes1>SHOW WAN WAN0 ALL
Redes1>SHOW WAN WAN1 ALL
Meios>SHOW WAN WAN0 ALL
Meios>SHOW WAN WAN1 ALL

Analizando o números de erros e não se notando o crescimento do mesmo com o status como UP o LINK esta funcionando normalmente

Criação das VLAN no Switch Diferente dos roteadores as configurações nos dois switchs são idênticas

DES-3526>create vlan 100 tag 100
DES-3526>create vlan 101 tag 101
DES-3526>create vlan 102 tag 102
DES-3526>create vlan 103 tag 103
DES-3526>config vlan 100 add untagged 1-6
DES-3526>config vlan 100 add tagged 24
DES-3526>config vlan 101 add untagged 7-12
DES-3526>config vlan 101 add tagged 24
DES-3526>config vlan 102 add untagged 13-18
DES-3526>config vlan 102 add tagged 24
DES-3526>config vlan 103 add untagged 19-23
DES-3526>config vlan 103 add tagged 24

Configurando as VLAN nos Roteadores Roteador da sala de Redes

Redes1>SET LAN LAN0.100 IP 192.168.100.254 MASK 255.255.255.0 UP
Redes1>SET LAN LAN0.101 IP 192.168.101.254 MASK 255.255.255.0 UP
Redes1>SET LAN LAN0.102 IP 192.168.102.254 MASK 255.255.255.0 UP
Redes1>SET LAN LAN0.103 IP 192.168.103.254 MASK 255.255.255.0 UP

Roteador da sala de Meios

Meios>SET LAN LAN0.100 IP 192.168.200.254 MASK 255.255.255.0  UP
Meios>SET LAN LAN0.101 IP 192.168.201.254 MASK 255.255.255.0  UP
Meios>SET LAN LAN0.102 IP 192.168.202.254 MASK 255.255.255.0  UP
Meios>SET LAN LAN0.103 IP 192.168.203.254 MASK 255.255.255.0 UP

Configurando Rotas estaticas

Redes1>SET ROUTES DEFAULT PURGE
Redes1>SET ROUTES ROUTE0 DEVICE WAN1 NET 192.168.200.0 MASK 255.255.255.0 GATEWAY 10.0.1.1 UP
Redes1>SET ROUTES ROUTE1 DEVICE WAN1 NET 192.168.201.0 MASK 255.255.255.0 GATEWAY 10.0.1.1 UP
Redes1>SET ROUTES ROUTE2 DEVICE WAN1 NET 192.168.202.0 MASK 255.255.255.0 GATEWAY 10.0.1.1 UP
Redes1>SET ROUTES ROUTE3 DEVICE WAN1 NET 192.168.203.0 MASK 255.255.255.0 GATEWAY 10.0.1.1 UP
Meios>SET ROUTES DEFAULT PURGE
Meios>SET ROUTES ROUTE0 DEVICE WAN1 NET 192.168.100.0 MASK 255.255.255.0 GATEWAY 10.0.1.2 UP
Meios>SET ROUTES ROUTE1 DEVICE WAN1 NET 192.168.101.0 MASK 255.255.255.0 GATEWAY 10.0.1.2 UP
Meios>SET ROUTES ROUTE2 DEVICE WAN1 NET 192.168.102.0 MASK 255.255.255.0 GATEWAY 10.0.1.2 UP
Meios>SET ROUTES ROUTE3 DEVICE WAN1 NET 192.168.103.0 MASK 255.255.255.0 GATEWAY 10.0.1.2 UP

Outro modo de configuração das rotas é utilizando o RIP, que tem identifica quando um dos links para de funcionar e coloca o outro no lugar para continuar o roteamento. Com os seguintes comandos em ambos os roteadores:

SET RIP REDIST-STATIC TRUE REDIST-CONNECTED TRUE REDIST-OSPF FALSE DEFAULTMETRIC 1 VERSION 2
SET RIP LAN0 ENABLED TRUE TYPE ACTIVE
SET RIP LAN0 AUTH TYPE NONE
SET RIP LAN0.100 ENABLED TRUE TYPE ACTIVE
SET RIP LAN0.100 AUTH TYPE NONE
SET RIP LAN0.101 ENABLED TRUE TYPE ACTIVE
SET RIP LAN0.101 AUTH TYPE NONE
SET RIP LAN0.102 ENABLED TRUE TYPE ACTIVE
SET RIP LAN0.102 AUTH TYPE NONE
SET RIP LAN0.103 ENABLED TRUE TYPE ACTIVE
SET RIP LAN0.103 AUTH TYPE NONE
SET RIP WAN1 ENABLED TRUE TYPE ACTIVE
SET RIP WAN1 AUTH TYPE NONE
SET RIP UP

Aplicação - Gerencia

A parte de gerência não é algo complicado, em resumo fizemos a instação e configuração de alguns serviços, são eles:

  • Servidor Linux - Ubuntu Server 10.04 LTS
  • Fixado o IP Válido e o IP interno
    • IP Válido que pode ser acessado de qualquer local conectado à internet
    • IP interno para a conexão do servidor com os computadores do Cyber Café
  • SSH Server
    • Utilizado para acessar de forma remota o servidor com a informação criptografida
  • Bind9
  • Dhcp3-server
    • Servidor DHCP - Que acabou não sendo utilizado no projeto pois em virtude das mudanças na matéria de IER foi passado para o Access Point
  • NTP
    • Sincronismo de horário
    • Agendado no Crontab
  • NAT
    • Recebe os pacotes da interface interna e enviar para a interface externa mascarando o endereço IP
  • Roteamento
  • Dansguardian
  • Squid
  • Cacti
    • Gera gráficos sobre o servidor (Uso do processador, memória, interfaces, número de usuários logados, processos)
  • Script para Backup de arquivos diario
    • Faz o backup dos arquivos de configuração e do sites durante um dia e depois compacta e salva no diretório /var/backup/
  • Script que cria relatórios
    • Descreve
      • Modelo do Processador
      • Memória Livre e Total
      • Status do HD
      • Usuários Ativos
      • Interfaces de Rede
      • Rotas
      • Servidor DNS local

Aplicação - Programação