Projeto Integrador - 2010.2 - Equipe Celtics
Celtics
Projeto Integrador - Celtics
Dia: 23/11/2010
- Apresentação do projeto pelo professor Ederson Torresini.
- Verificado alguns dos serviços finais que a solução deve prover a usuário.
- ADSL para usuários.
- DSLAM 8 portas por equipe.(DHCP,DNS.)
- Vigilância IP (ferramenta de streaming, sistema de controle de autenticação.)
- Segurança nos dados:(BACKUP, Filtro de Conteúdo/pacotes.)
- Redes separadas(VLAN).Um por administrador e um por cada cliente.)
- Escolhido o nome da equipe Celtics.
Dia: 24/11/2010
Cabeamento
- Passado os cabos do Patch Panel do Armário Principal para o Armário Celtics.
- Feitos os pontos (um no chão, na parede e aéreo) de acesso (Tomadas).
- Padrão 568B.
Gerência de Rede
- Instalação do Sistema Operacional Ubuntu Server.
- 80GB de HD.
- 01GB de Memória RAM.
- Configurações de particionamento de Disco
- 40GB para partição / (raiz)
- 20GB para partição /var
- 15GB para partição /home
- 01GB para swap.
Dia: 25/11/2010
- Recebemos o equipamento DSLAM que ficou disponível para estudo.
- Realizado a certificação dos cabos.
- Teste de continuidade.
- Instalado SSH: Acesso remoto.
root@techspot:~# aptitude install ssh-server.
</syntaxhighlight>
Dia: 26/11/2010
- Não teve aula...
Dia: 29/11/2010
Cabeamento
- Realizado os testes de continuidade no cabeamento estruturado, feitas as terminações nos pontos exigidos (aéreo, piso e parede) e no Patch panel, efetuado também terminações no rack principal.
- Finalizado cabeamento estruturado.
Gerência de rede
- Não realizamos nenhuma atividade, pois o laboratório apresentou problemas, não foi possível configurar o servidor estávamos sem rede.
Dia: 30/11/2010
Gerência de rede
- Rede Celtics:
Rede externa:
IP: 200.135.37.102 Mascara: 255.255.255.192 Broadcast: 200.135.37.127
Rede: 1°IP valido: Ultimo IP valido:
Gateway: 200.135.37.126
</syntaxhighlight>
Rede interna:
IP: Mascara: Broadcast:
Rede: 1°IP valido: Ultimo IP valido:
Gateway:
</syntaxhighlight>
Rede Wireless(Acces Point):
IP: Mascara: Broadcast:
Rede: 1°IP valido: Ultimo IP valido:
Gateway:
</syntaxhighlight>
- configuração de rede:
Arquivo /etc/network/interfaces: Configuração das interfaces de rede.
- 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
- Rede externa:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 200.135.37.102
netmask 255.255.255.192
gateway 200.135.37.126
</syntaxhighlight>
DNS
- DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído que permite a "tradução" de nomes de "maquinas" em endereços IP.
Portas utilizadas: 53 UDP/TCP
Instalação e configuração de servidor DNS(BIND9[1])
- Instalar
- aptitude update; aptitude install bind9
</syntaxhighlight>
Arquivo /etc/bind/named.conf.options:
options {
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
listen-on { any; };
allow-recursion {127.0.0.0/8; 192.168.1.19; };
allow-query { any; };
};
</syntaxhighlight>
Arquivo /etc/bind/named.conf.local:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "celtics.sj.ifsc.edu.br" {
type master;
file "/etc/bind/celtics.sj.ifsc.edu.br";
};
zone "/etc/bind/200.in-addr.arpa" {
type master;
file "/etc/bind/200/etc/bind/200.in-addr.arpa";
};
</syntaxhighlight>
Arquivo/etc/bind/celtics.sj.ifsc.edu.br: Configurações do domínio.
$TTL 86400
@ IN SOA dns.celtics.sj.ifsc.edu.br. rafael.celtics.sj.ifsc.edu.br. (
2010113000 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; negative cache ttl
)
@ IN NS dns
@ IN A 200.135.37.102
dns IN A 200.135.37.102
ns1 IN A 200.135.37.102
mail IN A 200.135.37.102
www IN A 200.135.37.102
smtp IN CNAME mail.celtics.sj.ifsc.edu.br.
pop IN CNAME mail.celtics.sj.ifsc.edu.br.
imap IN CNAME mail.celtics.sj.ifsc.edu.br.
ss1 IN CNAME www.celtics.sj.ifsc.edu.br.
</syntaxhighlight>
Arquivo/etc/bind/db100.64-127.37.135.200.in-addr.arpa: Configurações do DNS.
$TTL 86400
@ IN SOA dns.celtics.sj.ifsc.edu.br. rafael.celtics.sj.ifsc.edu.br. (
2010113000 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; negative cache ttl
)
@ IN NS dns.celtics.sj.ifsc.edu.br.
102 IN PTR dns.celtics.sj.ifsc.edu.br.
</syntaxhighlight>
NTP
- NTP(Protocolo de Tempo para Redes). Protocolo que permite a sincronização dos relógios dos dispositivos de uma rede como servidores, estações de trabalho, roteadores e outros equipamentos à partir de referências de tempo confiável. Portas 123UDP/TCP.
- Instalando:
- aptitude update; aptitude install ntp
</syntaxhighlight>
Arquivo /etc/ntp.conf: Arquivo de configuração:
</syntaxhighlight>
Dia: 01/12/2010
- Configurado DHCP:
DHCP é um protocolo para configuração dinâmica de parâmetros de rede como endereço IP, DNS, Gateway etc. Porta 67/UDP.
Instalando:
- aptitude update; aptitude install dhcp3-server
</syntaxhighlight>
Arquivo:/etc/dhcp3/dhcpd.conf configurações do servidor dhcp.
- 2010120102 Termino da configuração
- Realizado por: Gabriel , Lucas , Cleidiane
- Aceitar atualização dinâmica vinda dos clientes?? Não.
ddns-update-style none;
- Criar subnet
subnet 192.168.20.0 netmask 255.255.255.0 {
#IP
range 192.168.1.1 192.168.1.100;
#Máscara
#option subnet-mask 255.255.255.0;
#Broadcast
#option broadcast-address 192.168.1.255;
#Rota padrão
option routers 192.168.1.19;
#Servidor DNS
option domain-name-servers 200.135.37.102;
option domain-name "celtics.sj.ifsc.edu.br";
#Tempo de empréstimo
default-lease-time 3600;
masc-lease-time 14400;
}
</syntaxhighlight>
- SNMP - É um protocolo de gerência típica de redes UDP, da camada de aplicação, que facilita o intercâmbio de informação entre os dispositivos de rede, como placas e comutadores. O SNMP possibilita aos administradores de rede gerenciar o desempenho da rede, encontrar e resolver seus eventuais problemas, e fornecer informações para o planejamento de sua expansão, dentre outras.
Instalando:
- aptitude update; aptitude install snmpd
</syntaxhighlight>
• O arquivo/etc/snmp/snmpd.conf foi zerado e reconfigurado de acordo com a comunidade de gerência.
rocommunity celtics
syslocation celtics-TI
syscontact root@celtics.sj.ifsc.edu.br
sysservices 72# example here.
</syntaxhighlight>
Dia: 02/12/2010
Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos. Foi desenvolvido para ser flexível de modo a se adaptar facilmente a diversas necessidades, bem como ser robusto e fácil de usar. Monitora o estado de elementos de rede e programas bem como largura de banda utilizada e uso de CPU.
Pode-se utilizar também o protocolo SNMP para consultar informações em elementos de redes e/ou programas que suportam tal protocolo.
- Instalação do Cacti
apt-get install cacti
• Após instalar a configuração foi feita através da interface web no endereço http://www.celtics.sj.ifsc.edu.br/cacti/
• Para confirmar que existe comunicação entre agente e gerente, pode se testar a partir do seguinte comando:
snmpwalk -v2c -cplugincafe 200.135.37.102
- MySQL - O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface.
Instalação dos serviços PHP, PHPmyadmin, Mysql
apt-get install php5 mysql-server phpmyadmin
- NAT - NAT também conhecido como masquerading é um protocolo que, como o próprio nome diz, faz a tradução dos endereços Ip e portas TCP da rede local para a Internet. Ou seja, 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 substituindo o ip da rede local validando assim o envio do pacote na internet, no retorno do pacote a mesma coisa, o pacote chega e o ip do servidor é trocado pelo Ip da estação que fez a requisição do pacote.
- Cofiguração do NAT: Criar um arquivo com o nome "nat" na pasta "init.d"
• Arquivo/etc/init.d/nat:
- !/bin/bash
- "Limpeza" das regras antigas
iptables -t nat -F
- Criação de uma regra generica para NAT, considerando a interface eth1 como externa
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
</syntaxhighlight>
• Mudança das permissões do arquivo "nat":
chmod 700 /etc/init.d/nat
</syntaxhighlight>
- Ativando o roteamento para o NAT:
• Abrir o arquivo/etc/sysctl.conf: Ir até as linhas entre 25 e 30 do arquivo "sysctl.conf" e descomentar (apagar a #) na linha que tem o comando "#net.ipv4.ip_forward=1"
net.ipv4.ip_forward=1
Dia: 03/12/2010
- Feito o cabo de ligação do patch panel com o dslan. (cabo manga).
Dia: 06/12/2010
- Colocado o Cacti no ar.
- Gráficos sobre o servidor funcionando.
Dia: 07/12/2010
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.
- Instalando o DansGuardian:
aptitude install dansguardian
Arquivo: /etc/dansguardian/dansguardian.conf:
- Comentar a linha abaixo.
- UNCONFIGURED
</syntaxhighlight>
- alterar as mensagens para português:
language = 'ptbrazilian'
</syntaxhighlight>
Proxy
O serviço de proxy consiste em manter, em uma área de acesso rápido, informações já acessadas por outro usuário, evitando assim a retransmissão destas informações e deixando-as disponíveis ao usuário num tempo bem menor.
- Instalação do proxy Squid versão 3
aptitude install squid3</syntaxhighlight>
Arquivo /etc/squid3/squid.conf:
Adicionar ao final da linha:
http_port 3128 transparent
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</syntaxhighlight>
- Ativando o roteamento através do comando:
sed -i 's/.*net.ipv4.ip_forward.*/net.ipv4.ip_forward=1/g' /etc/sysctl.conf</syntaxhighlight>
- Em seguida fizemos algumas alterações no script do arquivo NAT para redirecionamento das requisições HTTP. Seguindo o caminho /etc/init.d/nat.
- !/bin/bash
- 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
</syntaxhighlight>
- Por último 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 .</syntaxhighlight>
Dia: 08/12/2010
RADIUS
- Instalando o radius:
- Pesquisado o Zoneminder Software de gerenciamento de câmeras via rede.
Dia: 09/12/2010
Aplicação
- Página de entrada do site, onde será feita autenticação do usuário (index.html):
<?
session_start();
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo2.jpg') fixed no-repeat center;
background-color: #000000;
}
</style>
<font face="courier new"Autenticação de Usuários
<FORM name="autenticacao" method="POST" action="autentica_bd.php">
Nome de usuário:
<INPUT type="text" name="usuario">
Senha:
<INPUT type="password" name="senha">
<INPUT type="submit" name="botao" value="Enviar">
</form>
</html>
</syntaxhighlight>
- Página de autenticação do admin, verifica o login (autentica_bd.php):
<html>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<?
session_start();
$nome = $_POST['usuario'];
$password = $_POST ['senha'];
$conexao = mysql_connect ("localhost", "root", "celta");
$base_ok = mysql_select_db("celtics_users",$conexao);
$consultar = "select id from admin where login = '$nome' && senha = '$password'";
$resultado = mysql_query ($consultar,$conexao);
$linhas = mysql_num_rows($resultado);
mysql_close($conexao);
If ($linhas == 1)
{
$_SESSION['usuario']=$nome;
echo "<script>window.location='principal.php';</script>";
}else{
echo "<script>window.location='erro.php';</script>";
}
?>
</html>
</syntaxhighlight>
- Pagina principal do site (vi principal.php):
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
}
</style>
<font face="courier new"Centro Comercial Celtics
<a href="http://www.celtics.sj.ifsc.edu.br/listar.php">Listar usuários cadastrados</a>
<a href="http://www.celtics.sj.ifsc.edu.br/cadastro.php">Cadastrar novos usuários</a>
<a href="http://celtics.sj.ifsc.edu.br:8080/?action=stream">Monitoramento</a>
<a href="http://www.celtics.sj.ifsc.edu.br/sair.php"><button>Sair</button></a>
</html>
<?
}else{
header("Location:index.php");
}
?>
</syntaxhighlight>
- Pagina de cadastro de usuários do site onde o admin fará o cadastro (cadastro.php):
<?
session_start();
if(isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
}
</style>
Centro Comercial Celtics
Cadastro de usuários:
<form name="formTeste" action="add.php" method="post">
Nome:
<input type:"text" name="Xnome">
Login:
<input type:"text" name="Xlogin">
Senha:
<input type="password" name="Xsenha">
<input type="submit" name="b_enviar" value="Gravar">
<a href="http://www.celtics.sj.ifsc.edu.br/principal.php">Voltar</a>
</body>
</html>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
- Depois de informados os dados do usuário o admin é redirecionado para outra pagina onde será feita a conexão com o banco de dados mysql para inserir os dados nas tabelas. Segue o código (add.php):
<?
session_start();
if(isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
color:#FFFFFF;
}
a:link {
color:#FFFFFF;
text-decoration:none;
}
a:visited {
color:#FFFFFF;
text-decoration:none;
}
a:hover {
color:#FFFFFF;
text-decoration:underline;
}
a:active {
color:#FFFFFF;
text-decoration:underline;
background-color:#000000;
}
</style>
<font face="courier new"Centro Comercial Celtics
<?
$ID=$_POST['Xid'] ;
$NOME=$_POST['Xnome'] ;
$LOGIN=$_POST['Xlogin'] ;
$SENHA=$_POST['Xsenha'] ;
if (!empty ($NOME) && !empty ($LOGIN) && !empty ($SENHA))
{
$conexao = mysql_connect("localhost","root","celta") ;
$base_ok = mysql_select_db("celtics_users",$conexao) or die ("erro 1");
$inserir = "INSERT INTO user (NOME, LOGIN, SENHA) VALUES ('$NOME', '$LOGIN', '$SENHA')";
$cadastrar = mysql_query($inserir,$conexao) or die("erro 2");
mysql_close($conexao) or die("Erro fechar conexao");
if($cadastrar==true)
{
echo "
Usuário cadastrado com sucesso
";
echo "<a href='http://www.celtics.sj.ifsc.edu.br/listar>Lista de usuários</a>";
}else
{
echo "Erro ao cadastrar usuário";
echo "<a href='http://www.celtics.sj.ifsc.edu.br/listar.php>Lista de usuários</a>";
}
}else
{
echo "
Erro, favor preencher todos os campos.
";
echo "<a href='http://www.celtics.sj.ifsc.edu.br/cadastro.php'>Cadastrar novo usuário</a>";
}
?>
</body>
</html>
<?
}else
{
header("Location: index.php");
}
?>
</syntaxhighlight>
Dia: 10/12/2010
Listagem de usuários cadastrados
- Na página listar.php é feita a conexão com o banco de dados e também a consulta nas tabelas, para fazer a listagem dos usuários já cadastrados, e através dessa página pode-se selecionar um usuário o qual deseja editar ou excluir. Segue o código (listar.php):
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
color: #FFFFFF;
}
a:link {
color:#FFFFFF;
text-decoration:none;
}
a:visited {
color:#FFFFFF;
text-decoration:none;
}
a:hover {
color:#FFFFFF;
text-decoration:underline;
}
a:active {
color:#FFFFFF;
text-decoration:underline;
background-color:#000000;
}
</style>
<body>
<font face="courier new"Centro Comercial Celtics
Lista de usuários:
<?
$conexao = mysql_connect("localhost","root","celta") or die ("ERRO");
if($conexao)
{
mysql_select_db("celtics_users") or die ("erro 1");
$query = "SELECT * FROM user" or die ("erro 2");
$dados = mysql_query($query,$conexao) or die ("erro 3");
echo "";
echo "";
echo "";
while($linha=mysql_fetch_array($dados,MYSQL_ASSOC))
{
$id = $linha["ID"];
echo "" ;
echo "" ;
//echo "" ;
echo "";
}
echo "ID Login " . $linha["ID"] . " " . $linha["NOME"] . " " . $linha["SENHA"] . " <a href='certeza.php?id=$id'><button>Excluir</button></a> ";
echo "<a href='editar.php?id=$id'><button>Editar</button></a>
";
mysql_close($conexao) or die ("erro 5");
}
?>
<a href='http://www.celtics.sj.ifsc.edu.br/cadastro.php'>Incluir novo usuário</a>
<a href="http://www.celtics.sj.ifsc.edu.br/principal.php">Voltar</a>
</font:
</body>
</html>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
Editando e atualizando usuários
- Depois de selecionado um usuário na página de listagem o admin é direcionado para a página de edição de usuários. E então são mostrados os dados que já estão cadastrados do usuário selecionado, podendo alterar a senha do mesmo e depois apertando no botão gravar que é direcionado para a página onde será feita a atualização do banco de dados. Segue o código da página de edição de usuários (editar.php):
<?
session_start();
if(isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
color: #FFFFFF;
}
</style>
Centro Comercial Celtics
Editando usuários:
<?
$id = $_GET['id'];
$conexao = mysql_connect("localhost","root","celta") ;
mysql_select_db("celtics_users") or die ("erro 1");
$query = ("select * from user where ID=$id");
$dados = mysql_query($query,$conexao);
$linha=mysql_fetch_array($dados,MYSQL_ASSOC);
mysql_query($linha);
?>
<form name="formTeste" action="add2.php?id=<? echo $id ?>" method="post">
ID:
<input type:"readonly" name="id" value="<? echo $linha['ID'] ?>">
Senha:
<input type="password" name="senha" value="<? echo $linha['SENHA'] ?>">
<input type="submit" name="b_enviar" value="Gravar">
<a href="http://www.celtics.sj.ifsc.edu.br/listar.php">Voltar</a>
</body>
</html>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
- Código onde é realizado a atualização do banco de dados (add2.php):
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8">
<style type="text/css">
body {
background: url('fundo.jpg') fixed no-repeat center;
background-color: #000000;
color: #FFFFFF;
}
a:link {
color:#FFFFFF;
text-decoration:none;
}
a:visited {
color:#FFFFFF;
text-decoration:none;
}
a:hover {
color:#FFFFFF;
text-decoration:underline;
}
a:active {
color:#FFFFFF;
text-decoration:underline;
background-color:#000000;
}
</style>
<font face="courier new"Centro Comercial Celtics
<body>
<?
$conexao = mysql_connect("localhost","root","celta") ;
$base_ok = mysql_select_db("celtics_users",$conexao);
$id = $_GET['id'];
$senha=$_POST['senha'];
if (!empty ($id) && !empty ($senha))
{
$update=mysql_query("UPDATE user SET SENHA='$senha' WHERE ID=$id",$conexao);
if($update==true)
{
echo "
Dados atualizados com sucesso
";
echo "<a href='http://www.celtics.sj.ifsc.edu.br/listar.php>Lista de usuários</a>";
}else
{
echo "Erro ao Atualizar";
"<a href='http://www.celtics.sj.ifsc.edu.br/listar.php>Lista de anúncios</a>";
}
}else
{
echo "
Erro, campos vazios
";
echo "<a href='http://www.celtics.sj.ifsc.edu.br/listar.php'>Voltar</a>";
}
?>
</body>
</html>
<?
}else
{
header("Location: index.php");
}
?>
</syntaxhighlight>
Dia: 13/12/2010
Dia: 14/12/2010
Dia: 15/12/2010
Dia: 16/12/2010