Projeto Integrador - 2009.2 - Equipe Iguana

De MediaWiki do Campus São José
Revisão de 15h45min de 16 de dezembro de 2010 por Kalvim (discussão | contribs) (→‎Código PHP)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Descrição das atividades por datas

Dia 23/11/2009

Apresentação do Projeto Integrador e das equipes.

Dia 24/11/2009

  • Criação do nome da equipe: Iguana.
  • Criação da conta na página Wiki.
  • Planejamento da estrutura física.
  • Instalação do Ubuntu versão 9.10.
  • Configuração da interface eth1:
auto eth1
iface eth1 inet static
   address 200.135.37.111
   netmask 255.255.255.192
   broadcast 200.135.37.127
   gateway 200.135.37.126
   network 200.135.37.64

SSH

O Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma unidade remota. Possui as mesmas funcionalidades do Telnet, com a vantagem da conexão entre o cliente e o servidor ser criptografada.

  • Instalação do SSH:
apt-get install ssh

Dia 25/11/2009

  • Atualização dos pacotes dos repositórios:
apt-get update

APACHE

O servidor Apache ou Servidor HTTP Apache é o mais bem sucedido servidor web livre. Suas funcionalidades são mantidas através de uma estrutura de módulos, permitindo inclusive que o usuário escreva seus próprios módulos.

  • Instalação do APACHE2:
apt-get install apache2

PHP

O Personal Home Page ou PHP é uma linguagem que permite criar sites web dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e links. A diferença de PHP com relação à linguagens semelhantes a Javascript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor

  • Instalação do PHP5:
apt-get install php5

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. É atualmente um dos bancos de dados mais populares, com mais de 10 milhões de instalações pelo mundo.

  • Instalação do MYSQL:
apt-get install mysql-server

DHCP

O DHCP ("Dynamic Host Configuration Protocol" ou "protocolo de configuração dinâmica de endereços de rede"), é um protocolo de serviço TCP/IP que oferece configuração dinâmica de terminais, com concessão de endereços IP de host e outros parâmetros de configuração para clientes de rede, ou seja, permite que todos os micros da rede recebam suas configurações de rede automaticamente a partir de um servidor central, sem que você precise ficar configurando os endereços manualmente em cada um.

  • Instalação do DHCP3:
apt-get install dhcp3-server

DNS

O DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições: examinar e atualizar seu banco de dados e resolver nomes de domínios em endereços de rede (IPs). Permite a localização de hosts em um domínio determinado. Num sistema livre o serviço é implementado pelo software BIND.

  • Instalação do DNS:
apt-get install bind9

POSTFIX

O Postfix é um agent de transferência de emails (MTA), um software livre para envio e entrega de emails. Apresenta-se como uma alternativa segura ao Sendmail, sendo rápido e fácil de administrar.

  • Instalação do POSTFIX:
apt-get install postfix
apt-get install dovecot-imapd (Possibilita que os email's possam ser baixados)

CACTI

Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos. Monitora o estado de elementos de rede e programas bem como a largura de banda utilizada e uso de CPU.

  • Instalação do CACTI:
apt-get install snmp snmpd
apt-get install cacti
  • Configuração do arquivo /etc/resolv.conf:
nameserver 192.168.1.254
nameserver 200.135.37.65
  • Definição do IP da rede interna:
172.11.0.0/16
  • Criação do script para ajuste da interface eth1 para desabilitar a alto-negociação:
/etc/init.d/ajusta_eth1.sh
#!/bin/bash
ethtool -s eth1 speed 100 autoneg off duplex half

Dia 26/11/2009

  • Interligação do servidor com o switch DES-3526.
  • Realização do projeto da planta baixa do laboratório de Meios e a vista frontal do RAC01.
  • Foi verificado um problema no servidor referente as duas placas de rede. Solicitaremos um novo servidor para dar continuidade ao projeto.

Dia 27/11/2009

  • Servidor foi testado e apresentou problema novamente.
  • Servidor foi trocado, porém o HD foi mantido.
  • A interface eth1 foi substituida pela interface eth2.
  • Configuração do DHCP
# /etc/dhcp3/dhcpd.conf
default-lease-time 14400;
max-lease-time 86400;
subnet 172.11.1.0 netmask 255.255.255.0 {
      # IP
      range 172.11.1.1 172.11.1.253;
      # Máscara
      option subnet-mask 255.255.255.0;
      # Broadcast
      option broadcast-address 172.11.1.255;
      # Rota-padrão
      option routers 172.11.1.254;
      # DNS
      option domain-name "ouro.iguana.sj.ifsc.edu.br";
      option domain-name-servers 172.11.1.254;
}
subnet 172.11.2.0 netmask 255.255.255.0 {
      # IP
      range 172.11.2.1 172.11.2.253;
      # Máscara
      option subnet-mask 255.255.255.0;
      # Broadcast
      option broadcast-address 172.11.2.255;
      # Rota-padrão
      option routers 172.11.2.254;
      # DNS
      option domain-name "prata.iguana.sj.ifsc.edu.br";
      option domain-name-servers 172.11.2.254;
}
subnet 172.11.3.0 netmask 255.255.255.0 {
      # IP
      range 172.11.3.1 172.11.3.253;
      # Máscara
      option subnet-mask 255.255.255.0;
      # Broadcast
      option broadcast-address 172.11.3.255;
      # Rota-padrão
      option routers 172.11.3.254;
      # DNS
      option domain-name "bronze.iguana.sj.ifsc.edu.br";
      option domain-name-servers 172.11.3.254;
}
subnet 172.11.4.0 netmask 255.255.255.0 {
      # IP
      range 172.11.4.1 172.11.4.253;
      # Máscara
      option subnet-mask 255.255.255.0;
      # Broadcast
      option broadcast-address 172.11.4.255;
      # Rota-padrão
      option routers 172.11.4.254;
      # DNS
      option domain-name "wifi.iguana.sj.ifsc.edu.br";
      option domain-name-servers 172.11.4.254;
}
  • Configuração do DNS
# /etc/bind/named.conf.local 
zone "iguana.sj.ifsc.edu.br" {    
	type master;  
	file "/etc/bind/iguana.sj.ifsc.edu.br";  
 };    
# /etc/bind/iguana.sj.ifsc.edu.br
$TTL    86400
;
@    IN    SOA    dns1.iguana.sj.ifsc.edu.br. iguana.iguana.sj.ifsc.edu.br. (
 2009112701        ; Serial
 1d        ; Refresh
 4h        ; Retry
 1w        ; Expire
 1d )    ; Negative Cache TTL
;
; Name Server: servidores DNS 
@    IN    NS    dns1
@    IN    NS    dns2
@    IN    MX    0 mail
;
; Address: endereço
dns1    IN      A       200.135.37.111
dns2    IN      A       200.135.37.111
mail    IN      A       200.135.37.111
www     IN      A       200.135.37.111
ftp     IN      A       200.135.37.111
ouro    IN      A       172.11.1.254
prata   IN      A       172.11.2.254
bronze  IN      A       172.11.3.254
wifi    IN      A       172.11.4.254
;
; Canonical Name: "apelido"
web    IN    CNAME    www
  • Configuração das interfaces de rede:
# /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
#Rede externa
auto eth2
iface eth2 inet static
       address 200.135.37.111
       netmask 255.255.255.192
       broadcast 200.135.37.127
       gateway 200.135.37.126
       network 200.135.37.64
#Rede interna
auto eth0
iface eth0 inet static
       address 172.11.0.1
       netmask 255.255.0.0
       broadcast 172.11.255.255
       network 172.11.0.0
#Vlan ouro
auto vlan101
iface vlan101 inet static
       address 172.11.1.254
       netmask 255.255.255.0
       network 172.11.1.0
       vlan_raw_device eth0
#Vlan prata
auto vlan102
iface vlan102 inet static
       address 172.11.2.254
       netmask 255.255.255.0
       network 172.11.2.0
       vlan_raw_device eth0
#Vlan bronze
auto vlan103
iface vlan103 inet static
       address 172.11.3.254
       netmask 255.255.255.0
       network 172.11.3.0
       vlan_raw_device eth0
#Vlan wifi
auto vlan104
iface vlan104 inet static
       address 172.11.4.254
       netmask 255.255.255.0
       network 172.11.4.0
       vlan_raw_device eth0

ROUNDCUBE

RoundCube é um sistema de Webmail e cliente IMAP multilingual baseado nos padrões pré-definidos do protocolo com uma interface parecida de uma aplicação normal. Foi escrito em PHP e requer um banco de dados MySQL.

  • Instalação do ROUNDCUBE:
apt-get install roundcube
  • Configuração do POSTFIX:
/etc/postfix/main.cf
(...)
myhostname = mail.iguana.sj.ifsc.edu.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = iguana.sj.ifsc.edu.br
mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost
(...)
  • Realização de testes enviando e-mail's, confirmando o funcionamento do DNS e do POSTFIX.
  • Configuração do SNMP:
/etc/snmp/snmpd.conf
rocommunity iguana
syscontact iguana@iguana.sj.ifsc.edu.br
syslocation laboratório de redesI
  • Realização da configuração do CACTI, criação dos gráficos e foi constatado sucesso na geração dos gráficos.

Dia 30/11/2009

  • Verificado defeito na interface off-bord. Realizada a troca da interface.
  • Configuração das VLANS no switch do Lab. de Redes I:
vlan101 -> iguanaouro
vlan102 -> iguanaprata
vlan103 -> iguanabronze
vlan104 -> iguanawifi
porta 01 tagged nas vlans 101, 102, 103 e 104 -> vlan01 untagged
porta 26 tagged nas vlans 101, 102, 103 e 104 -> vlan26 untagged
  • Configuração do webmail ROUNDCUBE:
apt-get install roundcube
apt-get install php-mdb2-driver-mysql
  • Descomentado as duas primeiras linhas do arquivo /etc/roundcube/apache.conf
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube
(...)

FIREWALL

Firewall é o nome dado ao dispositivo de uma rede de computadores que tem por objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Sua função consiste em regular o tráfego de dados entre redes distintas e impedir a transmissão e/ou recepção de acessos nocivos ou não autorizados de uma rede para outra.

  • Criação da script do FIREWALL:
/etc/init.d/firewall.sh
#!/bin/bash
# Regras aplicadas para interface ETH0
IFACE="eth2"
# Ativar o roteamento
sysctl -w net.ipv4.ip_forward=1
# Ativar o nat
iptables -t nat -A POSTROUTING -o ${IFACE} -j MASQUERADE
# Limpando as regras do iptables
iptables -F
# Política padrão, portas de entrada bloqueadas e saída liberada.
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Liberar interface Loopback
iptables -A INPUT -i lo -j ACCEPT
# Liberar solitações do servidor local
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Liberando portas necessárias
# Liberar porta para SSH
iptables -A INPUT -p tcp --dport 2240 -j ACCEPT
# Liberar porta para Telnet
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
# Liberar porta para HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Liberar porta HTTPS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Liberar porta POP3
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# Liberar porta SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# Liberar porta IMAP
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
# Liberar porta mysql
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
  • Configurado o firewall para rodar na inicialização da máquina:
root@iguana:/etc/rc2.d# ls -lt|grep fire
lrwxrwxrwx 1 root root  23 2009-11-30 22:04 S70firewall -> /etc/init.d/firewall.sh

Dia 01/12/2009

  • Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas.

Dia 02/12/2009

NOCAT

O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha.

  • Instalação do NOCAT:
Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz
Extrair o arquivo
tar xzf NoCatAuth-nightly.tar.gz
Navegar até o diretório onde o software foi extraido
cd NoCatAuth-nightly
Instalação:
make gateway
make PREFIX=/usr/local/nocat/authserv authserv
make PREFIX=/usr/local/nocat/authserv pgpkey
  • Configuração do NOCAT:
vi /usr/local/nocat/nocat.conf
AuthServiceAddr     200.135.37.111
AuthServiceURL    http://$AuthServiceAddr/cgi-bin/login
LogoutURL           http://$AuthServiceAddr/logout.html
AllowedWebHosts     200.135.37.111
RouteOnly 1
Executar o gateway
/usr/local/nocat/bin/gateway
  • Configuração do AUTHSERV:
/usr/local/nocat/authserv/nocat.conf
DocumentRoot        /usr/local/nocat/authserv/htdocs
DataSource        Passwd
UserFile        /usr/local/nocat/authserv/etc/passwd
GroupUserFile        /usr/local/nocat/authserv/etc/group
GroupAdminFile    /usr/local/nocat/authserv/etc/groupadm
LocalGateway        200.135.37.111
  • Configuração do APACHE2 para execução do GCI do AUTHSERV:
/etc/apache2/sites-enabled/000-default
Include /usr/local/nocat/authserv/httpd.conf #Linha inclusa no arquivo.
Copiar o arquivo trustedkeys.gpg
/usr/local/nocat/authserv/trustedkeys.gpg para o
diretório /usr/local/nocat/pgp.
cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/pgp
  • Criação de usuário e senha para utilizar a página do NOCAT:
/usr/local/nocat/authserv/bin/admintool -c usuário senha
/usr/local/nocat/authserv/bin/admintool -a usuário Nome_de_um_grupo
  • Testes e finalização da instalação de cabeamento estruturado.

03/12/2009

  • Realizado ajustes no DNS, nas partes físicas e testes com o DHCP.

04/12/2009

  • Ajustes na instalação de cabeamento estruturado.
  • Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais.
  • Problemas com o servidor! Perda total das configurações do servidor.
  • Realização de todos os serviços anteriormente postados.

06/12/2009 (domingo)

  • Criação das tabelas que serão usadas no MYSQL:
#TABELA usuario#
mysql> create table usuario (
   -> uID int not null auto_increment primary key,
   -> uNome varchar (45)not null,
   -> uSenha varchar (45)not null)
   -> TYPE=INNODB;
#TABELA  estandes#
mysql> create table estandes (
   -> eID int not null auto_increment primary key,
   -> usuario_uID int,
   -> eNome varchar(45) not null,
   -> ePortas varchar(45) not null,
   -> FOREIGN KEY (usuario_uID) REFERENCES usuario(uID) ON DELETE CASCADE)
   -> TYPE=INNODB;
#TABELA usuarioswifi#
mysql> create table usuarioswifi (
   -> wID int not null auto_increment primary key,
   -> estandes_eID int,
   -> wLogin varchar(45) not null,
   -> wSenha varchar(45) not null,
   -> FOREIGN KEY (estandes_eID) REFERENCES estandes(eID) ON DELETE CASCADE)
   -> TYPE=INNODB;

07/12/2009

  • Criação do organograma da instalação de Cabeamento Estruturado:

<graphviz>

  Digraph PI {
           "Servidor Iguana" -> "ETH0 192.168.1.103"
                            
           "ETH0 192.168.1.103" -> "Porta DC06 Rack Central"
   
           "Servidor Iguana" -> "ETH1 200.135.37.111"
   
           "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita"
     
           "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I"
           "Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios"
      
           "Porta DC06 Rack Direita" ->  "Porta 01 Switch Lab Redes I"
           "Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC"
           "Porta 26 Switch Lab Meios" -> "Porta 01 Switch"
           "Porta 26 Switch Lab Meios" -> "Porta 02 Switch"
           "Porta 01 Switch" -> "Porta 21 Patch Panel do Switch"
            
           "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch"
        
           "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01"
           "Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01"
           "Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02"
           "Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02"
           "Porta 05 Patch Panel 02" -> "Tomada E1T01"
           "Porta 06 Patch Panel 02" -> "Tomada E2T01"
           "Porta 26 Switch Lab Meios" -> "Porta 03 Switch"
           "Porta 03 Switch" -> "Porta 23 Patch Panel"
           "Porta 23 Patch Panel" -> "Access Point"

} </graphviz>


  • Criação da página web Iguana.

HTTPS

HTTPS (HyperText Transfer Protocol Secure), é uma implementação do protocolo HTTP sobre uma camada SSL ou do TLS. Essa camada adicional permite que os dados sejam transmitidos através de uma conexão criptografada e que se verifique a autenticidade do servidor e do cliente através de certificados digitais. Ele evita que uma informação transmitida entre o cliente e o servidor seja visualizada por terceiros.

  • Instalação das bibliotecas necessárias para o serviço HTTPS:
apt-get install openssl ssl-cert
  • Habilitado Módulo SSL no APACHE2:
a2enmod ssl
  • Criando Certificado:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem
  • Movendo a chave criada:
mv apache.pem /etc/apache2/apache.pem
   
  • Alterando as permissões:
chmod 600 /etc/apache2/apache.pem
  • Criando arquivo VirtualHost:
vi /etc/apache2/sites-enablesd/svn
NameVirtualHost *:443
<VirtualHost *:443>
       SSLEngine on
       ServerSignature On
       SSLCertificateFile /etc/apache2/ssl/apache.pem
#      RedirectMatch ^/$ https://iguana.sj.ifsc.edu.br/
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>
#      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       Include /usr/local/nocat/authserv/httpd.conf
       <Directory "/usr/lib/cgi-bin">
               AllowOverride None
               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
               Order allow,deny
               Allow from all
       </Directory>
       ErrorLog /var/log/apache2/error.log
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn
       CustomLog /var/log/apache2/access.log combined
   Alias /doc/ "/usr/share/doc/"
   <Directory "/usr/share/doc/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>
</VirtualHost>
  • Habilitando o site com SSH:
a2ensite ssl
  • Reiniciando o APACHE:
/etc/init.d/apache2 restart

08/12/2009

  • Devido a uma confusão na identificação de algumas portas de um patch panel, houve a necessidade de mudar a posição de alguns cabos para solucionar o problema.
  • Certificação da instalação de Cabeamento Estruturado.
  • Script de BACKUP:
/etc/init.d/backup.sh 
#!/bin/bash
data=`date +%F`

tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc
echo "Cópia do Backup do /etc."|mutt kalvims@gmail.com -a /home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data"

tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www
echo "Cópia do Backup do www."|mutt kalvims@gmail.com -a /home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data"
  • Inserido no /etc/crontab:
0  3    * * *   root    /etc/init.d/backup.sh
  • Relatório sobre o funcionamento do servidor:
/etc/init.d/
#!/bin/bash
echo "Relatório servidor iguana"
data=`date +%d-%m-%y_%k-%M`
## Definições das variáveis ###
DIRETORIO="/tmp/relatorio"
ARQ="/tmp/relatorio/rede.txt"
ARQ2="/tmp/relatorio/processo.txt"
###
# Remover o diretório se já criado ...
rm -rf $DIRETORIO >> /dev/null
# Criar diretório e arquivos necessários
mkdir $DIRETORIO
touch $ARQ
# Começo do Script
echo "-----------------------------------------------------" >> $ARQ;
echo " ###  Relatório servidor IGUANA  $data   ###" >> $ARQ;
echo " " >> $ARQ;
echo " ###  Relatório servidor IGUANA  $data   ###" >> $ARQ2;
echo " " >> $ARQ2;
echo "# Informações referentes ao processador #" >> $ARQ2;
echo " " >> $ARQ2;
processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2`
echo "$processador" >> $ARQ2;
echo " " >> $ARQ2;
echo "-----------------------------------------------------" >> $ARQ2;
echo "# Informações referentes aos discos #" >> $ARQ2;
echo " " >> $ARQ2;
echo "Discos: `df -hT`" >> $ARQ2;
echo " " >> $ARQ2;
echo "-----------------------------------------------------" >> $ARQ2;
echo " " >> $ARQ2;
MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2`
echo "Memória Total: $MEMTOTAL" >> $ARQ2;
MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2`
echo "Memória Livre: $MEMFREE" >> $ARQ2
echo "-----------------------------------------------------" >> $ARQ2;
echo "# Informações referente a DHCP #" >> $ARQ;
echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ;
echo "" >> $ARQ;
cat /etc/dhcp3/dhcpd.conf >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a DNS #" >> $ARQ;
echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ;
cat /etc/bind/named.conf.local >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ;
cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Firewall #" >> $ARQ;
echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ;
iptables -L >> $ARQ
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Roteamento #" >> $ARQ
route -n >> $ARQ
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Crontab #" >> $ARQ;
cat /etc/crontab >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
mv $ARQ /tmp/relatorio/redes_"$data".txt
cat /tmp/relatorio/redes_"$data".txt | mail -s redes_"$data" iguana.ifsc@gmail.com
mv $ARQ2 /tmp/relatorio/processo_"$data".txti | mail -s processo_"$data" iguana.ifsc@gmail.com
echo "Relatório enviado com exito para $ARQ"

Dia 09/12/2009

  • Organograma da disciplina de Instalação de Equipamentos de Rede:

<graphviz>

  Digraph PI {
       "Internet - IFSC" -> "Switch 3Com 2824"
       "Switch 3Com 2824" -> "Servidor Iguana"
       "Servidor Iguana" -> "Switch D-Link 3526 do Lab. de Redes I"
       "Switch D-Link 3526 do Lab. de Redes I" ->  "Switch D-Link 3526 do Lab. de Meios"
       "Switch D-Link 3526 do Lab. de Meios" -> "Access Point"
       "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E1T01"
       "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E2T01"
    

} </graphviz>


  • Inicio dos diagramas da rede mostrando a topologia física e a topologia lógica das instalações no programa Dia.

Dia 10/12/2009

  • Testes com o NOCAT e o Access Point.
  • Continuação dos diagramas da rede da disciplina de IER.

Diagrama de Rede - Topologia Física:

Fisica.png

Diagrama de Rede - Topologia Lógica:

Logica.png

Dia 11/12/2009

  • Definição das subredes de acordo com as classes:
Classe ouro: 172.11.1.0 à 172.11.10.0
Classe prata: 172.11.11.0 à 172.11.20.0
Classe bronze: 172.11.21.0 à 172.11.30.0

Dia 14/12/2009

  • Problemas encontrados no NOCAT:
    • O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento.
    • Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações.
  • Elaboração dos slides para a apresentação do projeto - Parte de Programação.
  • Testes no Access Point e NOCAT.
  • Teste/Certificação da instalação de Cabeamento Estruturado.

Dia 15/12/2009

  • Apresentação da instalação de Cabeamento Estruturado e entrega da documentação exigida pela disciplina.
  • Elaboração dos slides para a apresentação exigida pela disciplina de Programação.

Cabeamento Estruturado

  • Realização do projeto da planta baixa do laboratório de Meios e a vista frontal do RAC01.
  • Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas.
  • Testes e finalização da instalação de cabeamento estruturado.
  • Ajustes na instalação de cabeamento estruturado.
  • Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais.

Organograma da instalação de cabeamento estruturado.

<graphviz>

  Digraph PI {
           "Servidor Iguana" -> "ETH0 192.168.1.103"
                            
           "ETH0 192.168.1.103" -> "Porta DC06 Rack Central"
   
           "Servidor Iguana" -> "ETH1 200.135.37.111"
   
           "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita"
     
           "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I"
           "Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios"
      
           "Porta DC06 Rack Direita" ->  "Porta 01 Switch Lab Redes I"
           "Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC"
           "Porta 26 Switch Lab Meios" -> "Porta 01 Switch"
           "Porta 26 Switch Lab Meios" -> "Porta 02 Switch"
           "Porta 01 Switch" -> "Porta 21 Patch Panel do Switch"
            
           "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch"
        
           "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01"
           "Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01"
           "Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02"
           "Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02"
           "Porta 05 Patch Panel 02" -> "Tomada E1T01"
           "Porta 06 Patch Panel 02" -> "Tomada E2T01"
           "Porta 26 Switch Lab Meios" -> "Porta 03 Switch"
           "Porta 03 Switch" -> "Porta 23 Patch Panel"
           "Porta 23 Patch Panel" -> "Access Point"

} </graphviz>


  • Certificação da instalação.

Instalação de Equipamentos de Rede

Diagrama de Rede - Topologia Física:

Fisica.png

Diagrama de Rede - Topologia Lógica:

Logica.png

Definição das subredes de acordo com as classes:

Classe ouro: 172.11.1.0 à 172.11.10.0
Classe prata: 172.11.11.0 à 172.11.20.0
Classe bronze: 172.11.21.0 à 172.11.30.0

Identificação das VLANs (contendo seus VID):

Classe ouro: 101 à 110
Classe prata: 111 à 120
Classe bronze: 121 à 130
Wifi: 131

NOCAT

O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha.

  • Instalação do NOCAT:
Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz
Extrair o arquivo
tar xzf NoCatAuth-nightly.tar.gz
Navegar até o diretório onde o software foi extraido
cd NoCatAuth-nightly
Instalação:
make gateway
make PREFIX=/usr/local/nocat/authserv authserv
make PREFIX=/usr/local/nocat/authserv pgpkey
  • Configuração do NOCAT:
vi /usr/local/nocat/nocat.conf
AuthServiceAddr     200.135.37.111
AuthServiceURL    http://$AuthServiceAddr/cgi-bin/login
LogoutURL           http://$AuthServiceAddr/logout.html
AllowedWebHosts     200.135.37.111
RouteOnly 1
Executar o gateway
/usr/local/nocat/bin/gateway
  • Problemas encontrados no NOCAT:
    • O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento.
    • Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações.

Gerência de Redes

  • Sistema Operacional:
Ubunto Server 9.10
  • Particionamento dos discos:
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1824    14651248+  83  Linux
/dev/sda2            1825        1946      979965   82  Linux swap / Solaris
/dev/sda3            1947        4865    23446867+  8e  Linux LVM
  • Configuração da rede:
/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address 192.168.1.103
   netmask 255.255.255.0
   network 192.168.1.0

auto eth1
iface eth1 inet static
   address 200.135.37.111
   netmask 255.255.255.192
   network 200.135.37.64
   gateway 200.135.37.126

auto vlan131
iface vlan131 inet static
   address 172.11.31.1
   netmask 255.255.255.0
   network 172.11.31.0
   vlan_raw_device eth0

auto vlan132
iface vlan132 inet static
   address 172.11.32.1
   netmask 255.255.255.0
   network 172.11.32.0
   vlan_raw_device eth0

Obs: Essas interfaces são fixas. A configuração das outras vlans são automáticas pelo site.
  • Pacote necessário para configuração das vlans:
vlan

Scripts de Manutenção

backup.sh

#!/bin/bash 
data=`date +%F`
tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc
echo "Copia do Backup do /etc."|mutt iguana.ifsc@gmail.com -a
/home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data"    
tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www
echo "Copia do Backup do www."|mutt iguana.ifsc@gmail.com -a
/home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data"
  
  • Pacote necessário para o script backup.sh enviar o backup como anexo para o e-mail:
mutt
    • ajustaRelogio.sh:
#!/bin/bash
ntpdate -s ntp.cais.rnp.br
  • Pacote necessário para a script ajustaRelogio.sh:
ntpdate
  
    • validaVlan.sh:
#!/bin/bash 
#habilita
for vlan in `grep "auto v" /etc/network/interfaces |cut -d " " -f2`; do
   ver=`ifconfig|grep $vlan`
   if test -z "$ver" ; then
       ifconfig $vlan up
   fi
done

#desabilita
for oldVlan in `ifconfig|grep vlan |cut -d " " -f1` ; do
   olha=`grep $oldVlan /etc/network/interfaces`
   if test -z "$olha" ; then
       ifconfig $oldVlan down
   fi
done
    • Diretório /etc/init.d:
#!/usr/bin/perl
use strict;
use warnings;
use RRDs;
use Cwd;
use Data::Dumper;
# Deal with the output from the `tc` command in an attempt to
# build up a functional hierarchy of traffic control classes
# for some kind of graphing.  If the configuration changes while
# this script is running in a loop, it will break horribly.
# The logic for associating qdiscs and classes with each other
# is from tc-graph.pl by Andreas Klauer (Andreas.Klauer@metamorpher.de)
# v0.13.
# It's possible to walk through %parent_hash and %child_hash and
# determine the hierarchy structure, although I am not certain why
# you would want to do this ever.  Since it works, I am going to
# leave all that code here anyway.
# 20060307 v1.05
# Fixed incomplete hfsc support (no, really...)
# Removed extra debug statements
# 20060302 v1.04
# Added support for wrr (Lee Sanders)
# Added additional debugging (Lee Sanders)
# Added support for hfsc qdisc
# Fixed memory leak in commandline mode (Lee Sanders)
# Fixed regex for matching qdisc output (reported by Mike Hughes)
# Changed RRDs update to use --template
# 20051003 v1.03
# Added support for pulling readable names for class minor ids from ENV
# Added support for stacked graphs, but set default to LINE2
# Added the graph into the network group for Munin (Xavier Dutoit, sydesy ltd)
# Changed graph to be stacked with areas instead of lines (Xavier Dutoit, sydesy ltd)
#
# 20050128 v1.02
# Fixed pattern matching for htb root classes
# Fixed pattern matching for variable height htb classes
# Fixed debug output with appropriate newlines
# Added colors with a default grey when all have been used
#
# 20041027 v1.01
# Fixed pattern matching for htb classes
#
# 20041023 v1.0
# Added support for pfifo / bfifo (i.e. added to regexp)
#
# 20041021
# Added support for classful tbf qdisc in 2.6.1 and later kernels
#
# 20041009
# Project initiated
# RRDTool links
# http://www.cuddletech.com/articles/rrd/ar01s02.html
# http://martybugs.net/linux/hddtemp.cgi
# Broken Link -> http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/tutorial/cdeftutorial.html
# Broken Link -> http://faq.mrtg.org/RPN.html
### CONFIGURATION
# Where do you want the RRD files to live?
my $rrd_path = getcwd;
#my $rrd_path = '/var/www/tc';
my @hostname = `hostname`;
# Create graphs?
my $do_graph = 1;
# Use STACK and AREA instead of LINE2 for each traffic classs
my $do_stack = 0;
# You'll want to specify your path to the `tc` binary
my $BIN_TC="/sbin/tc";
# Pick some nice colours (Borrowed from Munin)
my @colors = qw(
22ff22 0022ff ff0000 00aaaa ff00ff
ffa500 cc0000 0000cc 0080C0 8080C0 FF0080
800080 688e23 408080 808000 000000 00FF00
0080FF FF8000 800000 FB31FB
);
# You could change this to 1 for debugging output in the form
# of lots of print statements.
sub debug { 0 }
# Fetch real names for our minor handles from environment for
# initial Munin autoconfig and for commandline mode.
my @tcnames;
my %tcnames;
if( exists $ENV{names} ) {
@tcnames = split( /\./, $ENV{names} );
@tcnames = map { /([^:]*):(.*)/;defined($1 && $2) && $1,$2 } @tcnames;
@tcnames = grep { defined } @tcnames;
die "Odd number of arguments in names environment variable"
if @tcnames & 1;
%tcnames = @tcnames;
}
my %parent_hash;
my %child_hash;
my %stats;
my $do_munin;
my $do_munin_conf;
# I'm lazy, so it's a package global
our $DEV;
sub parse_tc_qdisc {
my( $bytes, $pkts, $drop, $over );
my( $name, $id );
my @qdisc = `$BIN_TC -s qdisc show dev $DEV`;
for( my $x = 0; $x < scalar(@qdisc); $x++ ) {
next unless $qdisc[$x] =~ m/qdisc/;
if( $qdisc[$x] =~ m/qdisc pfifo_fast 0:/i ) {
# Sanity check
die "traffic control configuration was removed!";
}
if( $qdisc[$x] =~ m/(?:htb|hfsc|prio|sfq|tbf|pfifo|bfifo)/i ) {
( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)\s+/i );
( $bytes, $pkts, $drop, $over ) = (
$qdisc[$x+1] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i
);
# $x++;
$stats{ $id } = {
bytes => $bytes,
pkts => $pkts,
drop => $drop,
over => $over
};
}
elsif( $qdisc[$x] =~ m/wrr/i ) {
( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)/i );
( $bytes, $pkts, $drop, $over ) = (
$qdisc[$x+5] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i
);
# $x+=5;
$stats{ $id+5 } = {
bytes => $bytes,
pkts => $pkts,
drop => $drop,
over => $over
};
}
if( ! defined $id && debug ) {
die "Unmatched handle for tc qdisc output:\n$qdisc[$x]\n";
}
$child_hash{ $id } = [] if defined $id;
#		push( @{$child_hash{ $id }}, 0 );
#		pop( @{$child_hash{ $id }} );
}
}
sub parse_tc_class {
my( $bytes, $pkts, $drop, $over );
my( $name, $id, $type, $qdisc );
my( $parent_id, $leaf, $leaf_id );
my( $address );
my @class = `$BIN_TC -s class show dev $DEV`;
for( my $x = 0; $x < scalar(@class); $x++ ) {
# Try to gather information about class relationship hierarchy.
# Really should just grab lines with 'class' keyword and then strip out
# $qdisc $n:\d? parent $m:\d? || $qdsic $n:\d? root
# Really should be that simply for most classes.  WRR seems to be an
# exception.
next unless $class[$x] =~ m/class/;
# Handle the specifics of the htb|hfsc classes
if( $class[$x] =~ m/(?:htb|hfsc)/i ) {
if( $class[$x] =~ m/root/i ) {
# This is wrong; But fortunately we don't care much since its root
( $name, $id, $type ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)/i );
}
else {
if( $class[$x] =~ m/htb/ ) {
( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~                                                                       m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
}
else {
( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
}
}
}
# Handle prio classes
elsif( $class[$x] =~ m/prio/i ) {
( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
}
# Deal with tbf classes, which appear in Linux 2.6.1 and later
elsif( $class[$x] =~ m/tbf/i ) {
# Someone overwrote the tbf default
if( $class[$x] =~ m/leaf/i ) {
( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
}
# It's old style tbf without a leaf
else {
( $name, $id, $type, $qdisc, $leaf ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
}
#			next;
}
elsif( $class[$x] =~ m/^\s+$/ ) {
# We found any empty line; This is generally ok
next;
} 
###################################
# Deal with WRR class
elsif( $class[$x] =~ m/wrr/i ) {
( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i );
($leaf,$leaf_id)= split(/:/,$id);
if (defined $class[$x+1] && $class[$x+1] =~ m/address:/) {
( $address ) = ( $class[$x+1] =~ m/^\s+\(address:\s+(.*)\)/i );
$tcnames{$leaf_id} = $address;
$leaf_id = $leaf_id.":";
# $x+=4;
} else { # unused class 
$tcnames{$leaf_id} = "$leaf_id undef";
$leaf_id = $leaf_id.":";
}
}
###################################
else {
# Empty line or unrecognized class type.
debug && print "Came across unrecognized class\n";
next;
}
if( $type eq "root" ) {
# Root class. No parent class, but parent qdisc.
# We get the parent qdisc handle by removing Y from X:Y.
$parent_id = $id;
$parent_id =~ s/:.*/:/;
# Tell qdisc that this is its child_hash.
$parent_hash{$id} = $parent_id;
push(@{$child_hash{$parent_id}}, $id);
}
elsif($type eq "parent") {
# Child class with parent class.
$parent_id = $qdisc;
# Tell parent that it has a child_hash.
$parent_hash{$id} = $parent_id;
push(@{$child_hash{$parent_id}}, $id);
}
if($leaf) {
# Yo cool we got a leaf here.
$parent_hash{$leaf_id} = $id;
#push( @{$child_hash{ $id }}, $leaf_id );
# lets just say that you can only have one child leaf and this solves the bug
# where the number of items in the child_hash increases with each script loop.
$child_hash{ $id } = [$leaf_id] ;
}
}
}
sub update_rrd {
if( ! -e "$rrd_path/" . "$DEV-tc.rrd" ) {
my @ds;
foreach my $key (sort keys %stats) {
$key =~ s/:/-/g;
push( @ds, "DS:$key:DERIVE:60:0:U" );
}
# Track for 24 hours
RRDs::create(
"$rrd_path/" . "$DEV-tc.rrd",
'--step=10',
@ds,
'RRA:AVERAGE:0.5:1:8640'
);
die RRDs::error . "\n" if RRDs::error;
}
debug && print "N:" . join( ':', map { $stats{$_}->{bytes} } sort keys %stats ) , "\n";
# Perform actual update
RRDs::update(
"$rrd_path/" . "$DEV-tc.rrd",
'--template='. join( ':', map { my $a = $_ ; $a =~ s/:/-/; $a } sort keys %stats ),
'N:' . join( ':', map { $stats{$_}->{bytes} } sort keys %stats )
);
die RRDs::error . "\n" if RRDs::error;
}
sub do_graph {
# Time periods to graph, in hours.
# (Obviously you can get away with fractions here, like 0.25)
my @times = qw(
1 24
);
foreach my $period (@times) {
my $x;
my $cur_time = time();
my $end_time = $cur_time;
my $start_time = $end_time - ($period * 60 * 60);
my @graph_rrd;
push( @graph_rrd, "--imgformat","PNG" );
push( @graph_rrd, "--title", "Traffic Control Leafs" );
push( @graph_rrd, "--vertical-label", "bps" );
push( @graph_rrd, "--no-minor" );
push( @graph_rrd, "--start", $start_time );
push( @graph_rrd, "--end", $end_time );
push( @graph_rrd, "--width", 600 );
push( @graph_rrd, "--height", 400 );
$x = 0;
my $first = 1;
foreach my $key (sort keys %stats) {
if( ! defined $colors[$x] ) { $colors[$x] = 'cccccc'; }
$key =~ s/:/-/g;
push( @graph_rrd, "DEF:id$x=$rrd_path/$DEV-tc.rrd:$key:AVERAGE" );
# Deal with huge negative value from resetting `tc` configuration
# Multiply the value by 8
push( @graph_rrd, "CDEF:cdef$x=id$x,0,LT,UNKN,id$x,8,*,IF" );
if( $key !~ m/\d$/ ) {
$key =~ s/-//g;
}
if( exists $tcnames{$key} ) {
$key = $tcnames{$key};
}
if( $do_stack ) {
if( $first ) {
push( @graph_rrd, "AREA:cdef$x#$colors[$x]:$key" );
$first = 0;
}
else {
push( @graph_rrd, "STACK:cdef$x#$colors[$x]:$key" );
}
}
else {
push( @graph_rrd, "LINE2:cdef$x#$colors[$x]:$key" );
}
$x++;
}
push( @graph_rrd, 'COMMENT:\s', 'COMMENT:\s' );
$x = 0;
foreach my $key (sort keys %stats) {
$key =~ s/:/-/g;
if( $key !~ m/\d$/ ) {
$key =~ s/-//g;
}
if( exists $tcnames{$key} ) {
$key = $tcnames{$key};
}
push( @graph_rrd, "GPRINT:cdef$x:LAST:$key \\: %6.0lf bps" );
$x++;
}
debug && print join(" \n", @graph_rrd ) , "\n";
RRDs::graph(
"$rrd_path/" . "$DEV-$period-tc.png",
@graph_rrd
);
die RRDs::error . "\n" if RRDs::error;
}
}
# Let's pretend we're autoconf capable for Munin.
if( defined $ARGV[0] && $ARGV[0] eq 'autoconf' ) {
if( scalar( keys %stats ) ) {
print "yes\n";
exit 0;
}
else {
print "no\n";
exit 1;
}
}
# Get down to business
if( defined @ARGV and $ARGV[0] eq 'test' ) {
$do_munin = 0;
$do_munin_conf = 0;
}
elsif( defined @ARGV and $ARGV[0] eq 'config' ) {
$do_munin = 1;
$do_munin_conf = 1;
}
else {
$do_munin = 1;
$do_munin_conf = 0;
}
# This assumes, of course, that you don't have the script
# running from a directory with an underscore ( _ ) in it.
# If you do, this'll break hard.
$0 =~ m/polltc_([^_]*)$/;
$DEV = $1;
do {
parse_tc_qdisc;
parse_tc_class;
debug && print "Parent Assocations ->\n";
debug && print Dumper( \%parent_hash );
debug && print "Child Associations ->\n";
debug && print Dumper( \%child_hash );
# Delete things that aren't leaf nodes
foreach my $id (keys %stats) {
if( scalar( @{ $child_hash{ $id } } ) > 0 ) {
debug && print "Deleted ID $id [ ". scalar( @{ $child_hash{ $id } } )." kids  ]\n";
delete $stats{$id};
}
}
debug && print "Found ". scalar( keys %stats ) ." leafs\n";
if( $do_munin ) {
if( $do_munin_conf ) {
print "graph_title Controle de Trafego - Folhas\n";
print "graph_category network\n";
print "graph_args --base 1000 -l 0\n";
print "graph_vlabel bps\n";
}
my $firstband = 1;
foreach my $key (sort keys %stats) {
my $k = $key;
$key =~ s/:/-/g;
if( $key !~ m/\d$/ ) {
$key =~ s/-//g;
}
if( $do_munin_conf ) {
my( $name );
if( exists $tcnames{$key} ) {
$name = $tcnames{$key};
}
else {
$name = $key;
}
print "$key.label $name\n";
if( $do_stack ) {
if( $firstband ) {
print "$key.draw AREA\n";
$firstband = 0;
}
else {
print "$key.draw STACK\n";
}
}
else {
print "$key.draw LINE2\n";
}
print "$key.type DERIVE\n";
print "$key.min 0\n";
print "$key.max 12500000\n";
print "$key.cdef $key,0,LT,UNKN,$key,8,*,IF\n";
}
else {
print "$key.value ", $stats{$k}->{bytes}, "\n";
}
}
exit 0;
}
else {
update_rrd;
do_graph if $do_graph;
sleep 10;
}
} until( $do_munin > 0 );
    • firewall.sh:
#!/bin/bash 
case $1 in
	stop) 
	# Antigas regras de NAT."
	# Antigas regras de filtro de pacotes."
	iptables -F
	#Política padrão para NAT."
	iptables -t nat -P PREROUTING ACCEPT
	iptables -t nat -P POSTROUTING ACCEPT
	iptables -t nat -P OUTPUT ACCEPT  
	#Política padrão para filtro de pacotes."
	iptables -P INPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -P OUTPUT ACCEPT  
	# Roteamento
	sysctl -w net.ipv4.ip_forward=1 > /dev/null
	#NAT para as redes internas."
 	iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 
	;;	
	start) 
# NOCAT
iptables -P INPUT ACCEPT
/usr/local/nocat/bin/clear.fw 
# Limpando as regras do iptables
iptables -t filter -F
iptables -t nat -F
# Ativando o roteamento
sysctl -w net.ipv4.ip_forward=1 
# Ativar o nat
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 
# Política padrão, portas de entrada bloqueadas e saída liberada.
iptables -P INPUT DROP 
# Liberar interface Loopback
iptables -A INPUT -i lo -j ACCEPT 
# Liberar solitações do servidor local
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
# Liberando portas necessárias  
# Liberar porta para SSH
iptables -A INPUT -p tcp --dport 2240 -j ACCEPT 
#Liberar porta para Telnet
iptables -A INPUT -p tcp --dport 23 -j ACCEPT 
# Liberar porta para HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT 
# Liberar porta HTTPS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT 
# Liberar porta SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT 
# Liberar porta IMAP
iptables -A INPUT -p tcp --dport 143 -j ACCEPT 
# Liberar porta mysql
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT 
#libera porta DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT 
# libera porta DHCP
iptables -A INPUT -p udp --dport 67 -j ACCEPT 
# libera porta NOCAT
iptables -I INPUT 3 -p tcp -i vlan131 --dport 5280 -j ACCEPT 
# ativa o gate
/usr/local/nocat/bin/gateway 
# Proteções diversas
# Proteção contra alguns ataques DoS
iptables -A INPUT -m state --state INVALID -j DROP 
# Proteção contra nmap -sX
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP  
;;
esac
    • relatorio.sh:
#!/bin/bash 
echo "Relatório servidor iguana"
# Comecando o monitoramento do TC
#watch tc -s -d class show dev eth1 &
#pid_tc=`pidof watch -s`
data=`date +%d-%m-%y_%k-%M`
## Definições das variáveis ###  
DIRETORIO="/tmp/relatorio"
ARQ="/tmp/relatorio/rede.txt"
ARQ2="/tmp/relatorio/processo.txt"
### 
# Remover o diretório se já criado ...
rm -rf $DIRETORIO >> /dev/null 
# Criar diretório e arquivos necessários
mkdir $DIRETORIO
touch $ARQ 
# Começo do Script  
echo "-----------------------------------------------------" >> $ARQ;
echo " ###  Relatório servidor IGUANA  $data   ###" >> $ARQ;
echo " " >> $ARQ;
echo " ###  Relatório servidor IGUANA  $data   ###" >> $ARQ2;
echo " " >> $ARQ2;
echo "# Informações referentes ao processador #" >> $ARQ2; 
echo " " >> $ARQ2;
processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2`
echo "$processador" >> $ARQ2;
echo " " >> $ARQ2; 
echo "-----------------------------------------------------" >> $ARQ2;
echo "# Informações referentes aos discos #" >> $ARQ2; 
echo " " >> $ARQ2;
echo "Discos: `df -hT`" >> $ARQ2;
echo " " >> $ARQ2;
echo "-----------------------------------------------------" >> $ARQ2;
echo " " >> $ARQ2;
MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2`
echo "Memória Total: $MEMTOTAL" >> $ARQ2; 
MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2`
echo "Memória Livre: $MEMFREE" >> $ARQ2 
echo "-----------------------------------------------------" >> $ARQ2;
echo "# Informações referente a DHCP #" >> $ARQ;
echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ;
echo "" >> $ARQ;
cat /etc/dhcp3/dhcpd.conf >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a DNS #" >> $ARQ;
echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ;
cat /etc/bind/named.conf.local >> $ARQ;  
echo "-----------------------------------------------------" >> $ARQ;
echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ;
cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ;
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Firewall #" >> $ARQ;
echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ;
iptables -L >> $ARQ
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Roteamento #" >> $ARQ
route -n >> $ARQ
echo "-----------------------------------------------------" >> $ARQ;
echo "# Informações referente a Crontab #" >> $ARQ;
cat /etc/crontab >> $ARQ;  
echo "-----------------------------------------------------" >> $ARQ;
mv $ARQ /tmp/relatorio/redes_"$data".txt
echo "Relatorio de redes" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/redes_"$data".txt -s "Relatorio_rede_"$data"" 
mv $ARQ2 /tmp/relatorio/processo_"$data".txt
echo "Relatorio de processos" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/processo_"$data".txt -s "Relatorio_processo_"$data"" 
echo "Relatório enviado com exito para $ARQ"
####
#echo "Gerando imagem do tráfego TC..."
#sleep 1
#echo "Redirecionando para o diretório /etc/init.d"
#cd /etc/init.d
#perl polltc_eth1 test &
#PIDOF=`pidof perl polltc_eth1 -s`
#echo "Capturando tráfego na rede"
#sleep 10
#echo "Trafego capturado"
# Matando o processo polltc_eth1
PIDOF=`pidof perl polltc_eth1 -s`
kill -9 $PIDOF
#### 
# Apagando o diretório se existir
rm -rf /home/iguana/TC
# Criando o diretório
mkdir /home/iguana/TC
# Movendo todos arquivos .png para o diretório criado
mv /etc/init.d/*.png /home/iguana/TC
# Apagando se existir a pasta trafego
rm -rf /home/iguana/TC/trafego
# Criando a pasta trafego
mkdir /home/iguana/TC/trafego
# Indo até a pasta TC 
cd /home/iguana/TC
# Movendo os arquivos criado para pasta trafego
mv eth1-1-tc.png /home/iguana/TC/trafego/1-$data
mv eth1-24-tc.png /home/iguana/TC/trafego/2-$data
# Compactando os arquivos
tar -cf trafego.tar trafego
# Enviando por email
echo "Enviando .png" | mutt iguana.ifsc@gmail.com -a /home/iguana/TC/trafego.tar -s "Tráfego_$data" 
# Deixar monitorando o TC até a próxima captura 
cd /etc/init.d
perl polltc_eth1 test &
    • tc.sh:
#!/bin/bash  
# variaveis  
TAXA=4000 # 4Mbps
UMPOR=`expr $TAXA / 100`  
OURO=`expr $UMPOR \* 60` # 60% da taxa de transmissao
PRATA=`expr $UMPOR \* 25` # 25% da taxa de transmissao
BRONZE=`expr $UMPOR \* 15` # 10% da taxa de transmissao
#WIFI=`expr $UMPOR \* 5` # 5% da taxa de transmissao  
DEV=eth1
 
# ----------- TC ------------------#
# eliminando as regras anteriores
tc qdisc del dev ${DEV} root 2>/dev/null
 
# adicionando a disciplina de fila na raiz
tc qdisc add dev ${DEV} root handle 1:0 htb default 12
 
# criando a classe pai para limitar a velocidade
tc class add dev ${DEV} parent 1:0 classid 1:1 htb rate ${TAXA}kbps ceil ${TAXA}kbps
 
# criando 3 classes (ouro, prata e bronze)
tc class add dev ${DEV} parent 1:1 classid 1:10 htb rate ${OURO}kbps ceil ${TAXA}kbps
tc class add dev ${DEV} parent 1:1 classid 1:11 htb rate ${PRATA}kbps ceil ${TAXA}kbps
tc class add dev ${DEV} parent 1:1 classid 1:12 htb rate ${BRONZE}kbps ceil ${TAXA}kbps
#tc class add dev ${DEV} parent 1:1 classid 1:13 htb rate ${WIFI}kbps ceil ${TAXA}kbps
  
# adicionando qdisc para cada classe
tc qdisc add dev ${DEV} parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev ${DEV} parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev ${DEV} parent 1:12 handle 12: sfq perturb 10
#tc qdisc add dev ${DEV} parent 1:13 handle 13: sfq perturb 10
 
# criando os filtros para direcionar os trafegos para cada classe de acordo com o IP
# de destino 
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.1.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.2.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.3.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.4.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.5.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.6.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.7.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.8.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.9.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.10.0/24 flowid 1:10 # vai para ouro
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.11.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.12.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.13.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.14.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.15.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.16.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.17.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.18.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.19.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.20.0/24 flowid 1:11 # vai para prata
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.21.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.22.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.23.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.24.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.25.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.26.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.27.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.28.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.29.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.30.0/24 flowid 1:12 # vai para bronze
tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.31.0/24 flowid 1:12 # vai para bronze

Configuração dos Serviços

DHCP

O dhcp é um protocolo que é utilizado para endereçar automaticamente a rede. Para que o DHCP possa fazer automaticamente a configuração de rede de uma máquina, ela deve ter o instalado o cliente dhcp.

  • Utiliza o protocolo DHCP e UDP. Porta 67.
  • Pacote necessário para o serviço DHCP:
dhcp3-server

    • /etc/dhcp3/dhcpd.conf:
default-lease-time 14400;
max-lease-time 86400; 
subnet 172.11.1.0 netmask 255.255.255.0 {
   range 172.11.1.2 172.11.1.254;
   option subnet-mask 255.255.255.0;
   option broadcast-address 172.11.1.255;
   option routers 172.11.1.1;
   option domain-name "iguana.sj.ifsc.edu.br";
   option domain-name-servers 172.11.1.1;
} 
subnet 172.11.31.0 netmask 255.255.255.0 {
   range 172.11.31.2 172.11.31.254;
   option subnet-mask 255.255.255.0;
   option broadcast-address 172.11.31.255;
   option routers 172.11.31.1;
   option domain-name "iguana.sj.ifsc.edu.br";
   option domain-name-servers 172.11.31.1;
}  
subnet 172.11.32.0 netmask 255.255.255.0 {
   range 172.11.32.2 172.11.32.254;
   option subnet-mask 255.255.255.0;
   option broadcast-address 172.11.32.255;
   option routers 172.11.32.1;
   option domain-name "iguana.sj.ifsc.edu.br";
   option domain-name-servers 172.11.32.1;
} 

Obs: a configuração do dhcp é alterada automaticamente ao realizar configurações de estandes pelo site.

DNS

DNS é o serviço de rede utilizado para tradução de endereços IP para nomes. Possui uma tabela que relaciona nomes com números IP. Existe uma rede se servidores DNS instalados pelo mundo que se comunicam de uma forma hierarquica para poder traduzir os endereços IP solicitados.

  • Protocolo DNS e UDP. Porta 53.
  • Pacote necessário:
bind9
    • named.conf.options:
options {
   directory "/var/cache/bind"; 
   auth-nxdomain no;    # conform to RFC1035
   listen-on-v6 { any; };
   allow-recursion { 127/8; 192.168.1/24; 172.11/16; };
   allow-query { any; };
   allow-query-cache { any; };
};
    • named.conf.local:
zone "iguana.sj.ifsc.edu.br" {    
   type master;  
   file "/etc/bind/iguana.sj.ifsc.edu.br";  
}; 
    • iguana.sj.ifsc.edu.br:
$TTL    86400
;
@    IN    SOA    dns1.iguana.sj.ifsc.edu.br. iguana.iguana.sj.ifsc.edu.br. (
   2009112701
   1d
   4h
   1w
   1d
)
;
@    IN    NS    dns1
@    IN    NS    hendrix.sj.ifsc.edu.br.
@    IN    MX    0 mail
;
dns1    IN    A    200.135.37.111 
mail    IN    A    200.135.37.111
www     IN      CNAME   dns1
ftp     IN      CNAME    dns1
web    IN    CNAME    dns1
;

APACHE

O Apache é utilizado como servidor WEB. Onde pode ser configurado compartilhamentos de arquivos via http e hospedagem de páginas web.

  • Utiliza o protocolo http e TCP.Porta 80.
  • Pacote necessário:
apache2 

HTTPS

HTTPS é uma implementação do protocolo http. Podemos dizer que é um http seguro. Onde é configurado um certificado digital que vai garantir que todos os dados que trafegam pela conexão estabelecida entre cliente e servidor, seja entregue apenas no destino final.

  • Protocolo HTTPS porta 443.
  • Pacotes necessários:
openssl ssl-cert
    • /etc/apache2/sites-enablesd/ssh:
NameVirtualHost *:443
<VirtualHost *:443 >
       ServerName iguana.sj.ifsc.edu.br
       ServerAdmin webmaster@localhost
       CustomLog /var/log/apache2/access.log combined
       SSLEngine on
       ServerSignature On
       SSLCertificateFile /etc/apache2/apache.pem
       DocumentRoot /var/www
       <Directory />
          Options FollowSymLinks
          AllowOverride None
       </Directory>
       <Directory /var/www/>
           Options Indexes FollowSymLinks MultiViews
           AllowOverride None
           Order allow,deny
           allow from all
       </Directory>
       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <Directory "/usr/lib/cgi-bin">
           AllowOverride None
           Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
           Order allow,deny
           Allow from all
       </Directory>
       ErrorLog /var/log/apache2/error.log
     # Possible values include: debug, info, notice, warn, error, crit,
     # alert, emerg.
       LogLevel warn
       CustomLog /var/log/apache2/access.log combined
       Alias /doc/ "/usr/share/doc/"
      <Directory "/usr/share/doc/">
           Options Indexes MultiViews FollowSymLinks
           AllowOverride None
           Order deny,allow
           Deny from all
          Allow from 127.0.0.0/255.0.0.0 ::1/128
      </Directory>
</VirtualHost>
    • /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
        RedirectMatch ^/$ https://www.iguana.sj.ifsc.edu.br/
</VirtualHost>

POSTFIX e ROUNDCUBE:

O Postfix é um servidor de e-mail, sendo uma ferramenta de fácil e rápida administração. Já o RondCube é um servidor WebMail e clinte IMAP que, neste caso, vai utilizar da estrutura do Postfix.

  • Protocolos envolvidos: SMTP porta 25, IMAP porta 143, TCP
  • Pacotes necessários:
postfix, roundcube, dovecot-impad, mysql-server, php5, php-mdb2-driver-mysql
    • /etc/postfix/main.cf
(...)
myhostname = mail.iguana.sj.ifsc.edu.br
alias_maps = hash:/etc/aliases 
alias_database = hash:/etc/aliases
myorigin = iguana.sj.ifsc.edu.br
mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost
(...)

CACTI - SNMP

O Cacti é uma ferramenta web utilizada para monitoramento da rede e de máquinas remotas. Ele utiliza o protocolo SNMP para obter os valores e informações dos dispositivos monitorados.

  • Protocolo SNMP porta 161, UDP. para monitoração.
  • Protocolo http Porta 80 TCP para acesso web.
  • Necessita dos pacotes:
cacti, snmp, snmpd, apache2, php5, mysql-server
    • /etc/snmp/snmpd.conf:
rocommunity iguana
syscontact iguana@iguana.sj.ifsc.edu.br
syslocation laboratório de redesI

Gerência da rede

  • Utilizamos as seguintes ferramentas para gerenciar a rede:
  • Cacti - faz a monitoração e contabilização dos resursos da rede.
  • Script relatorio.sh - faz a monitoração das configurações da rede.
  • Página Web - realiza a configuração automática da rede interna.
  • Firewall - responsável pela parte de segurança da rede.
  • Podemos citar como um ponto crítico da rede a parada de serviços essenciais como o DNS e o DHCP. Causando a parada total dos serviços da rede.

Programação

Requisitos

  • Serviços necessários para desenvolvimento e funcionalidade da solução da página web:
apache2
php5
mysql

Configuração Mysql

  • Database: administracao

Tabelas

+-------------------------+
| Tables_in_administracao |
+-------------------------+
| estandes                |
| eth                     |
| usuario                 |
| usuarioswifi            |
| vlans                   |
+-------------------------+
  • Tabela usuario:
+-----+---------+----------------------------------+
| uID | uNome   | uSenha                           |
+-----+---------+----------------------------------+

Obs: o campo uID é chave estrangeira na tabela estandes campo usuario_uID.

  • Tabela estandes:
+-----+-------------+--------------------+---------+---------+-------------+
| eID | usuario_uID | eNome              | eClasse | ePortas | vID_estande |
+-----+-------------+--------------------+---------+---------+-------------+

Obs: o campo eID é chave estrangeira na tabela usuarioswifi campo estandes_eID.

  • Tabela usuarioswifi:
+-----+--------------+--------+--------+
| wID | estandes_eID | wLogin | wSenha |
+-----+--------------+--------+--------+
  • Tabela vlans:
+------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+
| vid  | subrede     | rangee        | gateway     | broadcast     | dominio                 | classe | flg_uso | eth  | mascara       |
+------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+
  • Tabela eth:
+------+----------------+---------------+-----------------+----------------+
| nome | ip             | rede          | mascara         | gateway        |
+------+----------------+---------------+-----------------+----------------+


Código PHP

  • Todos os arquivos de código php que foram deselvolvidos para criação da página web.
código php