Mudanças entre as edições de "Projeto Integrador - 2013.2 - Super Vaca"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(23 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 13: Linha 13:
  
 
* Sistema operacional: Ubuntu Server  
 
* Sistema operacional: Ubuntu Server  
* Serviços e Servidores: DHCP, DNS, NTP, CRON, Roteamento,NAT, HTTP, PHP, MYSQL, NO-CAT, RADIUS
+
* Serviços e Servidores: DHCP, DNS, NTP, CRON, Roteamento,NAT, HTTP, PHP, MYSQL, RADIUS
  
  
Linha 31: Linha 31:
 
* '''''Sistema Operacional:'''''
 
* '''''Sistema Operacional:'''''
  
Ubuntu-Server 12.04 LTS - PC (INTEL x86)
+
Ubuntu-Server 13.10 LTS - PC (INTEL x86)
  
 
* '''''Serviços:'''''
 
* '''''Serviços:'''''
Linha 122: Linha 122:
 
* Nessa imagem temos o rack com o DSLAN, responsável pela comunicação (rede e telefonia) vindo da operadora, onde irá simular uma central pública em nosso projeto.
 
* Nessa imagem temos o rack com o DSLAN, responsável pela comunicação (rede e telefonia) vindo da operadora, onde irá simular uma central pública em nosso projeto.
  
* Nosso DSLAN é um D-LINK DAS 3324, é através do patch cord vermelho que o mesmo está recebendo o sinal de comunciação da operadora.
+
* Nosso DSLAN é um D-LINK DAS 3324, é através do patch cord vermelho que o mesmo está recebendo o sinal de comunicação da operadora.
  
* Ao observar a imagem, temos dois cabos azuis, o primeiro cabo é responsável pela saída de linha telefonica do DSLAN para rack. O segundo cabo é responsável por dados e voz.
+
* Ao observar a imagem, temos dois cabos azuis, o primeiro cabo é responsável pela saída de linha telefônica do DSLAN para rack. O segundo cabo é responsável por dados e voz.
  
 
[[Arquivo: IMG_20131125_181617.jpg | central | 500px|]]
 
[[Arquivo: IMG_20131125_181617.jpg | central | 500px|]]
  
* O cabo responsável por dados e voz é instalado no patch painel com as nomeclaturas SA SB e SC, onde saem mais 3 patch cord com as identificações ED02, ED03 e ED04 (ED= esquerdo direito + número da porta, ex:01)
+
* O cabo responsável por dados e voz é instalado no patch painel com as nomenclaturas SA SB e SC, onde saem mais 3 patch cord com as identificações ED02, ED03 e ED04 (ED= esquerdo direito + número da porta, ex:01)
  
 
[[Arquivo: IMG_20131125_191700.jpg | central | 500px|]][[Arquivo: IMG_20131125_181639.jpg | right | 500px|]]  
 
[[Arquivo: IMG_20131125_191700.jpg | central | 500px|]][[Arquivo: IMG_20131125_181639.jpg | right | 500px|]]  
  
  
*Ao chegar no rack ED02, ED03 e ED04 interligamos 3 cabos correspondentes ao mesmo para o LA, LB e LC, onde irá se converter em um único cabo UTP CAT6, divido em 3 pares, somente para linha telefonica, interligado com o laboratório de cabeamento estruturado que é responsável pelo condomínio e instação do servidor.
+
*Ao chegar no rack ED02, ED03 e ED04 interligamos 3 cabos correspondentes ao mesmo para o LA, LB e LC, onde irá se converter em um único cabo UTP CAT6, divido em 3 pares, somente para linha telefônica, interligado com o laboratório de cabeamento estruturado que é responsável pelo condomínio e instalação do servidor.
  
  
  
 
[[Arquivo: IMG_20131125_181711.jpg | central | 500px|]] [[Arquivo: IMG_20131125_181730.jpg | right | 500px|]]
 
[[Arquivo: IMG_20131125_181711.jpg | central | 500px|]] [[Arquivo: IMG_20131125_181730.jpg | right | 500px|]]
 
  
 
=23/11/2013=
 
=23/11/2013=
Linha 293: Linha 292:
 
     dns-nameservers 127.0.0.1
 
     dns-nameservers 127.0.0.1
 
   
 
   
 +
 +
 +
# autenticação pppoe
 +
auto ppp0
 +
iface ppp0 inet manual
 +
 +
    pre-up pppd call supervaca
 +
    post-down killall -9 pppd
 +
 +
    post-up /usr/local/sbin/ppp0.up
 +
    pre-down /usr/local/sbin/ppp0.down
 +
 +
 +
 +
  
 
# Rede interna
 
# Rede interna
Linha 391: Linha 405:
  
  
 +
# Comunicação óptica Sudosu
 +
 +
auto vlan20
 +
iface vlan20 inet static
 +
    address 192.168.200.254
 +
    netmask 255.255.255.0
 +
    vlan-raw-device eth1
 +
 +
# Comunicação óptica RRLA
 +
 +
auto vlan21
 +
iface vlan20 inet static
 +
    address 192.168.220.254
 +
    netmask 255.255.255.0
 +
    vlan-raw-device eth1
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Linha 930: Linha 959:
  
 
[[Arquivo:diagrama%1.png]]
 
[[Arquivo:diagrama%1.png]]
 +
 +
=12/12/2013=
 +
 +
* Conseguimos ter acesso a rede WIFI com FREERADIUS como autenticação, onde por via interface controlamos as contas de usuários e plano que poderão ser utilizados.
 +
 +
* Existe 3 tipos de plano, são os pacotes comuns, popular e VIP, que irá ser distribuido de acordo com a mensalidade do usuário mensalmente de acordo com a taxa de transmissão.
 +
 +
[[Arquivo:Captura_de_tela-paula.png]]
 +
 +
=13/12/2013=
 +
 +
 +
TLINK-WDR4300
 +
 +
<syntaxhighlight lang=bash>
 +
Status
 +
Firmware Version:
 +
3.13.23 Build 120810 Rel.44064n
 +
Hardware Version:
 +
WDR4300 v1 00000000
 +
MAC Address: 64-70-02-3E-BE-76
 +
IP Address: 192.168.110.1
 +
Subnet Mask:    255.255.255.0
 +
Wireless 2.4GHz
 +
Wireless Radio: Enable
 +
Name (SSID): SuperVaca
 +
Mode:         11bgn mixed
 +
Channel: Auto (Current channel 11)
 +
Channel Width: Automatic
 +
MAC Address: 64-70-02-3E-BE-75
 +
WDS Status: Disable
 +
Wireless 5GHz
 +
Wireless Radio: Enable
 +
Name (SSID): TP-LINK_5GHz_3EBE76
 +
Mode:         11an mixed
 +
Channel: Auto (Current channel 44)
 +
Channel Width: Automatic
 +
MAC Address: 64-70-02-3E-BE-76
 +
WDS Status: Disable
 +
WAN
 +
MAC Address: 64-70-02-3E-BE-77
 +
IP Address: 0.0.0.0 Dynamic IP
 +
Subnet Mask: 0.0.0.0
 +
Default Gateway: 0.0.0.0 WAN port is unplugged!
 +
DNS Server: 0.0.0.0 , 0.0.0.0
 +
Traffic Statistics
 +
Received Sent
 +
Bytes: 0 0
 +
Packets: 0 0
 +
System Up Time:
 +
4 days 19:37:37
 +
</syntaxhighlight>
 +
 +
 +
=14/12/2013=
 +
 +
==Sábado==
 +
 +
=15/12/2013=
 +
 +
==Domingo==
 +
 +
=16/12/2013=
 +
 +
* Foi criado os dois arquivos ppp0.up e ppp0.down
 +
 +
<syntaxhighlight lang=bash>
 +
/usr/local/sbin/ppp0.up
 +
 +
#!/bin/bash
 +
sysctl -w net.ipv4.ip_forward=1
 +
iptables -t nat -F
 +
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
 +
~                                                                                 
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang=bash>
 +
/usr/local/sbin/ppp0.down
 +
 +
#!/bin/bash
 +
sysctl -w net.ipv4.ip_forward=0
 +
iptables -t nat -F
 +
</syntaxhighlight>
 +
 +
Obs: Dar permissão para os arquivos acima.
 +
 +
=17/12/2013=
 +
 +
 +
vi /usr/local/bin/tc.sh
 +
 +
<syntaxhighlight lang=bash>
 +
#!/bin/bash
 +
 +
#Variaveis: pode mexer
 +
IFACE="eth1"
 +
VELOCIDADE="25"
 +
BLOCOS=$(echo "25 * 0.2" | bc) # 20% do total
 +
WIFI=$(echo "25 * 0.05" | bc) #  5% do total
 +
BLOCO="168"
 +
 +
#Código:evitar mexer#
 +
#
 +
#Ponto de partida: recurso
 +
#tc qdisc del dev ${IFACE} root
 +
#tc qdisc add dev ${IFACE} root handle 1:0 htb default 100
 +
#
 +
#Classe Principal: abarca todo o recurso
 +
#
 +
tc class add dev ${IFACE} parent 1:0 classid 1:1 htb rate ${VELOCIDADE}kbit
 +
#
 +
#Classes de valor estático: blocos
 +
tc class add dev ${IFACE} parent 1:1 classid 1:100 htb rate ${BLOCOS}kbit prio 0
 +
ip tables -t magle -A FORWARD -s 192.168.0.0/29 -j CLASSIFY --to-class 1:100
 +
#
 +
#Classe de Valor Dinamico (por pacote): apto 1
 +
tc class add dev ${IFACE} parent 1:1 classid 1:200 htb rate ${1}kbit prio 1
 +
ip tables -t magle -A FORWARD -s 192.${BLOCO}.120.0/29 -j CLASSIFY --to-class 1:200
 +
#
 +
#Classe de Valor Dinamico (por pacote): apto 2
 +
tc class add dev ${IFACE} parent 1:1 classid 1:300 htb rate ${2}kbit prio 2
 +
ip tables -t magle -A FORWARD -s 192.${BLOCO}.130.0/29 -j CLASSIFY --to-class 1:300
 +
#
 +
#Classe de Valor Dinamico (por pacote): apto 3
 +
tc class add dev ${IFACE} parent 1:1 classid 1:400 htb rate ${3}kbit prio 3
 +
ip tables -t magle -A FORWARD -s 192.${BLOCO}.140.0/29 -j CLASSIFY --to-class 1:400
 +
#
 +
#Classe de valor estático: rede sem fio
 +
tc class add dev ${IFACE} parent 1:1 classid 1:1000 htb rate ${WIFI}kbit prio 9
 +
ip tables -t magle -A FORWARD -s 192.${BLOCO}.110.0/29 -j CLASSIFY --to-class 1:400
 +
 +
</syntaxhighlight>
 +
 +
 +
 +
Paginas para acesso ao usario admin onde pode-se cadastrar excluir ou atulizar banco de dados que conversa com servidor radius
 +
 +
 +
index.php  onde é inserido usuario e senha
 +
essa pagina encaminha para testaLogin.php
 +
 +
<syntaxhighlight lang=bash>
 +
 +
Index
 +
 +
<?php
 +
 +
$mensagem = "";
 +
extract($_GET);
 +
if(isset($erro))
 +
 +
    $mensagem = $erro;
 +
?>
 +
 +
<!DOCTYPE html>
 +
<html>
 +
 +
<center>
 +
<br>
 +
<br>
 +
<br>
 +
<style>
 +
body
 +
{
 +
background-image:url('img/fundo.gif')
 +
}
 +
 +
</style>
 +
<br>
 +
<br>
 +
<br>
 +
<br>
 +
<br>
 +
<br>
 +
<br>
 +
<br>
 +
 +
<center> <a href="http://wiki.sj.ifsc.edu.br/index.php/Projeto_Integrador_-_2013.2_-_Super_Vaca"> <img src="img/cow.png" alt="Supervaca" /> </a></center>
 +
    <head>
 +
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <!-- pagina responsavel por tratar os dados do form -->
 +
        <form action="testaLogin.php" method="post">
 +
       
 +
<font color="purple">
 +
        <P><b>Nome de usuario:</b>
 +
<BR><INPUT type="text" name="campo_login">
 +
 +
<BR><b>Senha:</b>
 +
<BR><INPUT type="password" name="campo_senha">
 +
 +
<BR><INPUT type="submit" value="Entrar">
 +
 +
 +
 +
 +
  </font>
 +
<BR>
 +
</style>
 +
        </form>   
 +
    </body>
 +
</html>
 +
 +
 +
</syntaxhighlight>
 +
 +
 +
testaLogin.php  faz o teste de usuário, senha dentro do banco freeradius caso correto encaminha para listaUsuario.php, caso errado fica na página index.
 +
 +
* Teste de Login
 +
 +
 +
<syntaxhighlight lang=bash>
 +
<?php
 +
 +
 +
extract($_POST);
 +
 +
//echo $campo_login;
 +
//echo $campo_senha;
 +
 +
$falhou = 1;
 +
 +
//verifica se o login e senha foram repassados corretamente   
 +
if(isset($campo_login) && isset($campo_senha)){
 +
 +
    $con = mysqli_connect('localhost', 'root', 'supervaca', 'freeradius');
 +
 +
    $query = "
 +
 +
        Select *
 +
        From tb_admin
 +
        Where login = '".$campo_login."' and senha = '".$campo_senha."'";       
 +
 +
 +
    //caso a inserção ou edição tenha sido realizado com sucesso,
 +
    //a pagina principal é chamada
 +
    if ($result = mysqli_query($con, $query)){
 +
 +
        //se retornar um registro significa que os dados conferem com o cadastrado
 +
        if(mysqli_num_rows($result) > 0){
 +
           
 +
            //efetua o login no sistema
 +
            session_start();
 +
            $row = mysqli_fetch_array($result);
 +
           
 +
            $_SESSION['campo_login'] = $row['login'];
 +
            $_SESSION['campo_senha'] = $row['senha'];
 +
            $_SESSION['nivel_login'] = $row['nivel'];
 +
           
 +
            $falhou = 0;
 +
           
 +
            //redireciona para pagina principal (ja logado)
 +
            header('Location:listaUsuarios.php');
 +
            //echo 'sucesso';
 +
           
 +
        }
 +
    } 
 +
}
 +
 +
if($falhou)
 +
    header("Location:index.php?erro=Login e/ou senha incorretos.");
 +
 +
?>
 +
 +
</syntaxhighlight>
 +
 +
 +
* ListaUsuario.php:  lista todos usuários adicionados, nesta pagina há possibilidade de detalhes de usuários, criar novo usuario, atualizar ou excluir, e detalhes apenas mostra senha, taxa e outras informações, já nas outras páginas citadas, ele terá que mexer junto ao TC pois cda pagina inclui um caminho para aplicar regras em TC, aplicaRegras.php.
 +
 +
segue as páginas
 +
 +
Lista de Usuário
 +
<syntaxhighlight lang=bash>
 +
<?php
 +
session_start();
 +
 +
$logado = 0;
 +
if(isset($_SESSION['nivel_login']) && ($_SESSION['nivel_login'] > 0)){
 +
   
 +
    $logado = 1;
 +
}
 +
?>
 +
 +
<!DOCTYPE html>
 +
<html>
 +
    <head>
 +
        <meta http-equiv="Content-Type" content="text/html; charset=utf8">
 +
        <title></title>
 +
 +
 +
       
 +
        <script>
 +
           
 +
            function confirmExcluir(indice){
 +
               
 +
                if(confirm('Deseja excluir este usuário?')){
 +
                   
 +
                    location.assign("excluiRegistro.php?indice="+indice);
 +
                }               
 +
            }
 +
           
 +
            function editar(indice){
 +
               
 +
                location.assign("novoUsuario.php?indice="+indice);
 +
            }
 +
           
 +
            function novo(){
 +
               
 +
                location.assign("novoUsuario.php");
 +
            }
 +
           
 +
            function logon(){
 +
               
 +
                location.assign("index.php");
 +
            }
 +
           
 +
            function logoff(){
 +
               
 +
                location.assign("logoff.php");
 +
            }
 +
           
 +
            function detalhe(indice){
 +
               
 +
                location.assign("detalhe.php?indice="+indice);
 +
            }
 +
           
 +
        </script>
 +
       
 +
    </head>
 +
<style>
 +
body
 +
{
 +
background-image:url('img/fundo.gif')
 +
}
 +
</style>
 +
    <body>
 +
 +
<center>
 +
 +
        <?php
 +
        if($logado){
 +
        ?>
 +
       
 +
          <button type="button" onclick="return logoff();">Logoff</button>
 +
        <?php
 +
        }     
 +
        else{
 +
        ?>
 +
         
 +
            <button type="button" onclick="return logon();">Logon</button>
 +
        <?php
 +
        }
 +
        ?>
 +
               
 +
        <h3>Usuários</h3>
 +
        <?php
 +
        if($logado){
 +
        ?>
 +
        <button type="button" onclick="return novo();">Novo Usuário</button>
 +
        <?php
 +
        }
 +
        ?>
 +
       
 +
        <br>
 +
        <br>
 +
        <table>
 +
            <tr>
 +
                <td>Usuario</td>
 +
                <td>Plano</td>
 +
                <td> </td>
 +
               
 +
               
 +
            </tr>           
 +
       
 +
        <?php
 +
           
 +
       
 +
       
 +
        $con = mysqli_connect("localhost", "root", "supervaca", "freeradius");
 +
     
 +
        $query = "
 +
                select  usuario.id as usuario_pk,
 +
                        usuario.username as usuario_nome,
 +
                        plano.nome as plano_nome
 +
 +
                from radcheck as usuario
 +
                inner join tb_plano as plano
 +
                on usuario.plano_fk = plano.plano_pk
 +
                order by usuario.username
 +
        ";
 +
       
 +
        $result = mysqli_query($con, $query);
 +
       
 +
        while ($row = mysqli_fetch_array($result))
 +
{
 +
           
 +
       
 +
           
 +
            ?>
 +
 +
 +
 +
            <tr>
 +
 +
                <td><?=$row['usuario_nome']?></td>
 +
                <td><?=$row['plano_nome']?></td>
 +
                <td>
 +
 +
                    <button type="button" onclick="detalhe(<?=$row['usuario_pk']?>)">Detalhe</button>
 +
                    <?
 +
                    if($logado){
 +
                    ?>
 +
 +
                    <button type="button" onclick="editar(<?=$row['usuario_pk']?>);">Editar</button>                       
 +
                    <button type="button" onclick="confirmExcluir(<?=$row['usuario_pk']?>);">Excluir</button>
 +
                    <?
 +
                    }
 +
                    ?>
 +
                </td>
 +
 +
            </tr>           
 +
        <?php
 +
        }
 +
?> 
 +
 +
                </td>
 +
 +
            </tr>
 +
 +
    <?php
 +
include 'aplicaRegras.php';
 +
?>
 +
</body>
 +
</html>
 +
 +
 +
</syntaxhighlight>
 +
 +
 +
* Adicionar Novo Usuário:
 +
 +
<syntaxhighlight lang=bash>
 +
<?php
 +
exec('sudo usr/local/bin/tc.sh plano[1] plano[2] plano[3]');
 +
?>
 +
 +
 +
 +
 +
 +
 +
 +
 +
<?php
 +
 +
session_start();
 +
 +
if(!isset($_SESSION['nivel_login']) || ($_SESSION['nivel_login'] < 1)){
 +
   
 +
    header('Location:index.php');
 +
}
 +
 +
 +
//inicializa as variaveis do from partindo do principio de será um novo registro
 +
$titulo = "Novo Registro";
 +
$usuario_pk = 0;
 +
$nome = "";
 +
$senha = "";
 +
$plano = 1;
 +
 +
//recupera os dados enviados com a URL
 +
extract($_GET);
 +
 +
//Conecta o banco de dados
 +
$conn = mysqli_connect("localhost", "root", "supervaca", "freeradius");
 +
 +
//Se a variavel $indice retornou pelo $_GET, então é uma edicao
 +
if (isset($indice)){   
 +
       
 +
    //constroi a consulta sql dos dados referentes ao incice repassado
 +
    $query = "
 +
                select  usuario.id as usuario_pk,
 +
                        usuario.username as nome_usuario,
 +
                        usuario.value as senha_usuario,
 +
                        usuario.plano_fk as plano_usuario
 +
                       
 +
 +
                from radcheck as usuario
 +
                where usuario.id =".$indice;
 +
   
 +
   
 +
   
 +
    //executa a consulta
 +
    $result = mysqli_query($conn, $query);
 +
   
 +
    //captura o resultado
 +
    $row = mysqli_fetch_array($result);
 +
     
 +
    //preenche as variaveis com os valores do form
 +
    $titulo = "Editar Registro";
 +
    $usuario_pk = $row['usuario_pk'];
 +
    $nome = $row['nome_usuario'];
 +
    $senha = $row['senha_usuario'];
 +
    $plano = $row['plano_usuario'];   
 +
   
 +
}
 +
 +
?>
 +
 +
<!DOCTYPE html>
 +
<html>
 +
    <head>
 +
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <!-- pagina responsavel por tratar os dados do form -->
 +
        <form action="salvaUsuario.php" method="post">
 +
            <h3><?=$titulo?></h3>
 +
        <table>
 +
           
 +
            <tr>
 +
                <td> Nome</td><td> <input type="text" name="campo_nome" value='<?=$nome?>'></td>
 +
            </tr>
 +
            <tr>
 +
                <td> Senha</td><td> <input type="text" name="campo_senha" value='<?=$senha?>'></td>
 +
            </tr>
 +
            <tr>
 +
                <td> Plano</td>
 +
                <td>
 +
                    <select name="campo_plano" id="campo_plano">
 +
                   
 +
                       
 +
                           
 +
                        <?php
 +
                        //Seleciona os planos apresentadas no listbox 
 +
                        $query = "
 +
                                select  *
 +
                                from tb_plano
 +
                                order by tb_plano.nome
 +
                        ";
 +
 +
                        $result = mysqli_query($conn, $query);
 +
 +
                        while ($row = mysqli_fetch_array($result)){
 +
                        ?>
 +
                           
 +
                        <option <?php if($plano == $row['plano_pk']){echo"selected";} ?> value=" <?=$row['plano_pk']?>"><?=$row['nome']?></option>
 +
 +
 +
                        <?php
 +
                        }
 +
                        ?>
 +
                   
 +
                       
 +
                    </select>
 +
               
 +
                </td>
 +
            </tr>
 +
            <tr>
 +
                <td> <input type="submit" value="Salvar"> </td>
 +
                <td>
 +
                    <!-- Botão de cacelar que retorna para a pagina principal -->
 +
                    <input type="reset" value="Calcelar" onclick="location.assign('listaUsuarios.php');">
 +
                </td>
 +
            </tr>
 +
        </table>
 +
           
 +
 +
            <input type="hidden" name='usuario_pk' value="<?=$usuario_pk?>">           
 +
        </form>
 +
 +
      <?php
 +
include 'aplicaRegras.php';
 +
?>
 +
    </body>
 +
</html>
 +
 +
</syntaxhighlight>
 +
 +
 +
 +
Salva Usuário
 +
 +
 +
<syntaxhighlight lang=bash>
 +
<?php
 +
 +
session_start();
 +
if(!isset($_SESSION['nivel_login']) || ($_SESSION['nivel_login'] < 1)){
 +
   
 +
    header('Location:index.php');
 +
}
 +
 +
extract($_POST);
 +
 +
 +
$con = mysqli_connect("localhost", "root", "supervaca", "freeradius");
 +
 +
//se a chave primaria existe e é diferente de zero
 +
//significa que um registro existente será editado
 +
if (isset($usuario_pk) && ($usuario_pk != 0)){
 +
 +
    $query = "
 +
        UPDATE radcheck
 +
            SET username='".$campo_nome."',value='".$campo_senha."', plano_fk=".$campo_plano."
 +
            WHERE id = ".$usuario_pk; 
 +
   
 +
    //echo $query;
 +
}
 +
//caso a chve não exista, um novo registro será inserido
 +
else{
 +
/*
 +
    $query = "
 +
 +
        INSERT INTO radcheck (username, attribute, op, value, plano_fk)
 +
        VALUES ('".$campo_nome."', 'Cleartext-Password', ':=', '".$campo_senha."', ".$campo_plano.")
 +
    "; 
 +
*/
 +
  $query = "
 +
 +
        INSERT INTO radcheck (username, attribute, op, value, plano_fk)
 +
        VALUES ('".$campo_nome."', 'Cleartext-Password', ':=', '".$campo_senha."', ".$campo_plano.")
 +
    ";
 +
     
 +
}
 +
 +
 +
//caso a inserção ou edição tenha sido realizado com sucesso,
 +
//a pagina principal é chamada
 +
 +
if (mysqli_query($con, $query)){
 +
 +
    header('Location: listaUsuarios.php'); 
 +
}
 +
else{
 +
 +
  echo("Não foi possível inserir os dados no Banco");
 +
 +
 +
 +
 +
?>
 +
  <?php
 +
include 'aplicaRegras.php';
 +
?>
 +
 +
</syntaxhighlight>
 +
 +
 +
 +
Aplica regras, aplicando no TC
 +
 +
<syntaxhighlight lang=bash>
 +
<?php
 +
$conn = mysqli_connect("localhost", "root", "supervaca", "freeradius");
 +
  $argumentos = '';
 +
$query = 'SELECT *
 +
                                FROM radcheck
 +
                                inner join tb_plano
 +
                                on radcheck.plano_fk = tb_plano.plano_pk
 +
                                order by radcheck.username';
 +
$result = mysqli_query($conn, $query);
 +
while ($row = mysqli_fetch_array($result)){
 +
$argumentos = $argumentos . " " . $row['taxa'];
 +
}
 +
echo "sudo /usr/local/bin/tc.sh" . $argumentos;
 +
?>
 +
 +
 +
 +
</syntaxhighlight>
 +
 +
=18/12/2013=
 +
 +
 +
==18 de Dezembro de 2013, 15:35hrs, há mais ou menos 3 horas do inicio da apresentação e TODOS os servidores estão fora do Ar.==
 +
 +
 +
==18 de Dezembro de 2013, 17:50hrs, todos os servidores estão no ar==
 +
 +
Obs: Alguém desligou o disjuntor.
 +
 +
 +
 +
FIM DE PROJETO
 +
 +
[[Arquivo:sdds.jpg | 800px]]
 +
 +
 +
Agradecimento:
 +
 +
"Ao querido prof° Ederson T. (BOI), que foi nosso pai durante todo o semestre, sempre esteve a nossa disposição para qualquer tipo de dúvida"
 +
 +
"Ao prof° Saul, tendo apenas 1 mês para acabar as aulas e início de projeto fez um milagre, passou todo o conteúdo que não vimos desde o início de projeto"
 +
 +
" Ao prof° Tio Sobral que assumiu as aulas do Juliano, que teve a paciência de repetir a instalação do AP mesmo depois de ter configurado tudo certinho."
 +
 +
" Ao prof° Glauco que graças a ele a página de autenticação funcionou!!!"
 +
 +
 +
Alunos: Ana Paula Hoog
 +
Douglas Steimbach Pacheco
 +
Fabio Rodrigues
 +
Thiago Henrique

Edição atual tal como às 09h04min de 19 de dezembro de 2013

A nossa equipe




18/11/2013 Início do Projeto

-> Planejamentos:

  • Sistema operacional: Ubuntu Server
  • Serviços e Servidores: DHCP, DNS, NTP, CRON, Roteamento,NAT, HTTP, PHP, MYSQL, RADIUS


Untitled.png

19/11/2013

  • Informações técnica do servidor:

- Processador INTEL CORE 2 2.4Ghz.

- Memória RAM 4GB.

- HD 320GB.

- Placa de Rede Healtek H40B.

  • Sistema Operacional:

Ubuntu-Server 13.10 LTS - PC (INTEL x86)

  • Serviços:
Root@root:$ aptitude install bind9 
Root@root:$ aptitude install NTP 
Root@root:$ aptitude install isc-dhcp-server 
Root@root:$ aptitude install xorg blackbox firefox

Obs:

  • Encontramos dificuldades na instalação do Ubuntu Server, onde levou a maior parte do dia.

20/11/2013

  • Realizamos a configuração da rede externa ETH0:

Root@root:$ vi /etc/network/interfaces

# Loopback
auto lo
iface lo inet loopback
 
# Rede externa
auto eth0
iface eth0 inet static
    address 200.135.37.96
    netmask 255.255.255.192
    gateway 200.135.37.126
    dns-search supervaca.sj.ifsc.edu.br
    dns-nameservers 127.0.0.1

Para aplicar os valores:

Root@root:$ ifdown eth0 Root@root:$ ifup eth0


  • Configuração do DNS:

Root@root:$ vi /etc/bind/supervaca.sj.ifsc.edu.br

#vi supervaca.sj.ifsc.edu.br

$TTL 86400    @    IN    SOA    ns1.supervaca.sj.ifsc.edu.br. dnsadmin.supervaca.com.br. (
2013112000    ;    serial
        1d    ;    refresh
        1h    ;    retry
        1w    ;    expire
        1d    ;    negative cache TTL

)    
    @      IN    NS    ns1.supervaca.sj.ifsc.edu.br.

    ns1    IN    A    200.135.37.96
    ntp    IN    CNAME    ns1.supervaca.sj.ifsc.edu.br.
    www    IN    CNAME    ns1.supervaca.sj.ifsc.edu.br.
  • Para aplicar os valores:

Root@root:$ tail -f /var/log/syslog &

Root@root:$ service bind9 restart

21/11/2013

  • Não realizamos nenhuma configuração no servidor devido a prova de Gerência.

22/11/2013

Na aula de cabeamento estruturado realizamos as instalações externa do nosso projeto, segue logo abaixo as imagens:

  • Nessa primeira imagem temos um switch, por ele chega o link da RPN através do CPD do IFSC, onde o patch cord cinza cria comunicação com o patch painel acima em laranja, no nosso caso EC12.
  • Do rack central EC12, passa um cabo UTP CAT6 até o rack direito no conector EC12, em seguida esse mesmo cabo irá para o DSLAN na entrada UP1.

IMG 20131125 205602.jpg

IMG 20131125 205103.jpg


  • Nessa imagem temos o rack com o DSLAN, responsável pela comunicação (rede e telefonia) vindo da operadora, onde irá simular uma central pública em nosso projeto.
  • Nosso DSLAN é um D-LINK DAS 3324, é através do patch cord vermelho que o mesmo está recebendo o sinal de comunicação da operadora.
  • Ao observar a imagem, temos dois cabos azuis, o primeiro cabo é responsável pela saída de linha telefônica do DSLAN para rack. O segundo cabo é responsável por dados e voz.

IMG 20131125 181617.jpg

  • O cabo responsável por dados e voz é instalado no patch painel com as nomenclaturas SA SB e SC, onde saem mais 3 patch cord com as identificações ED02, ED03 e ED04 (ED= esquerdo direito + número da porta, ex:01)

IMG 20131125 191700.jpg

IMG 20131125 181639.jpg


  • Ao chegar no rack ED02, ED03 e ED04 interligamos 3 cabos correspondentes ao mesmo para o LA, LB e LC, onde irá se converter em um único cabo UTP CAT6, divido em 3 pares, somente para linha telefônica, interligado com o laboratório de cabeamento estruturado que é responsável pelo condomínio e instalação do servidor.


IMG 20131125 181711.jpg

IMG 20131125 181730.jpg

23/11/2013

Sábado

24/11/2013

Domingo

25/11/2013

DHCP

  • Com essa configuração, cada morador terá uma faixa de IP limitada, onde qualquer IP que ele conecte dentro dessa faixa, irá ter o mesmo pacote de serviço automaticamente.
  • O serviço DHCP.
  • Configuração no arquivo /etc/dhcp/dhcpd.conf.


    authoritative;
 
# Integração com Syslog
log-facility local7;
 
# Integração com DNS
ddns-update-style none;

 
# Tempos de "aluguel"
default-lease-time 3600;
max-lease-time 14400;

#abaixo seguira as sub redes

#Rede sem fio
subnet 192.168.110.0 netmask 255.255.255.0 {

    range 192.168.110.100 192.168.110.199;
    option routers 192.168.110.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.110.254;

}

#Apartamento 1
subnet 192.168.120.0 netmask 255.255.255.0 {

    range 192.168.120.100 192.168.120.199;
    option routers 192.168.120.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.120.254;

}

#Apartamento 2
subnet 192.168.130.0 netmask 255.255.255.0 {

    range 192.168.130.100 192.168.130.199;
    option routers 192.168.130.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.130.254;

}

#Apartamento 3
subnet 192.168.140.0 netmask 255.255.255.0 {

    range 192.168.140.100 192.168.140.199;
    option routers 192.168.140.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.140.254;

}

#Apartamento 4
subnet 192.168.150.0 netmask 255.255.255.0 {

    range 192.168.150.100 192.168.150.199;
    option routers 192.168.150.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.150.254;

}

#Apartamento 5
subnet 192.168.160.0 netmask 255.255.255.0 {

    range 192.168.160.100 192.168.160.199;
    option routers 192.168.160.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.160.254;

}

#Apartamento 6
subnet 192.168.170.0 netmask 255.255.255.0 {

    range 192.168.170.100 192.168.170.199;
    option routers 192.168.170.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.170.254;

}

#Apartamento 7
subnet 192.168.180.0 netmask 255.255.255.0 {

    range 192.168.180.100 192.168.180.199;
    option routers 192.168.180.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.180.254;

}

#Apartamento 8
subnet 192.168.190.0 netmask 255.255.255.0 {

    range 192.168.190.100 192.168.190.199;
    option routers 192.168.190.254
    domain-name "supervaca.sj.ifsc.edu.br";
    domain-name-servers 192.168.190.254;

}

Interfaces

  • Após professor liber Ip 200.135.37.96, copiar configurações do arquivo /etc/network/interfaces1 para o /etc/network/interfaces com o cp ou cat

$ cp /etc/network/interfaces1 /etc/network/interfaces $ cat /etc/network/interfaces1 > /etc/network/interfaces


# Loopback
auto lo
iface lo inet loopback
 
# Rede externa
auto eth0
iface eth0 inet static

    address 200.135.37.96
    netmask 255.255.255.192
    gateway 200.135.37.126
    dns-search supervaca.sj.ifsc.edu.br
    dns-nameservers 127.0.0.1
 


# autenticação pppoe
auto ppp0
iface ppp0 inet manual

    pre-up pppd call supervaca
    post-down killall -9 pppd

    post-up /usr/local/sbin/ppp0.up
    pre-down /usr/local/sbin/ppp0.down





# Rede interna
auto eth1
iface eth1 inet manual



# Rede sem fio

auto vlan5
iface vlan5 inet static
    address 192.168.110.254
    netmask 255.255.255.0
    vlan-raw-device eth1


#Vlan para Moradores
# Apartamento 1

auto vlan2
iface vlan2 inet static
    address 192.168.120.254
    netmask 255.255.255.0
    vlan-raw-device eth1



# Apartamento 2

auto vlan3
iface vlan3 inet static
    address 192.168.130.254
    netmask 255.255.255.0
    vlan-raw-device eth1



# Apartamento 3

auto vlan4
iface vlan4 inet static
    address 192.168.140.254
    netmask 255.255.255.0
    vlan-raw-device eth1



# Apartamento 4

auto vlan7
iface vlan7 inet static
    address 192.168.150.254
    netmask 255.255.255.0
    vlan-raw-device eth1



# Apartamento 5

auto vlan8
iface vlan8 inet static
    address 192.168.160.254
    netmask 255.255.255.0
    vlan-raw-device eth1



# Apartamento 6

auto vlan9
iface vlan9 inet static
    address 192.168.170.254
    netmask 255.255.255.0
    vlan-raw-device eth1




# Apartamento 7

auto vlan11
iface vlan11 inet static
    address 192.168.180.254
    netmask 255.255.255.0
    vlan-raw-device eth1




# Apartamento 8

auto vlan12
iface vlan12 inet static
    address 192.168.190.254
    netmask 255.255.255.0
    vlan-raw-device eth1


# Comunicação óptica Sudosu

auto vlan20
iface vlan20 inet static
    address 192.168.200.254
    netmask 255.255.255.0
    vlan-raw-device eth1

# Comunicação óptica RRLA

auto vlan21
iface vlan20 inet static
    address 192.168.220.254
    netmask 255.255.255.0
    vlan-raw-device eth1

26/11/2013

  • Tivemos problemas relacionado com a máquina, a mesma desligava constantemente, sendo assim efetuamos a troca por outra máquina.
  • Além do incoveniente, seguimos com as instalações do nosso servidor
Root@root$ apt-get update
Root@root$ apt-get upgrade

Em seguida realizamos a instalação do Apache2 e o PHP 5.

Root@root$ apt-get install apache2 php5
  • Para testar se tudo foi instalado corretamente, criamos o arquivo phpinfo.php com as informações do PHP5:
Root@root$ vi /var/www/phpinfo.php
  • Criamos o conteúdo abaixo para teste:
<?php
      phpinfo();
?>

Salvamos o arquivo e acessamos o endereço http://localhost/.

  • Instalar o MySQL.
Root@root$ apt-get install mysql-server-5.5 php5-mysql 

Root@root$ service apache2 restart

Root@root$ apt-get install phpmyadmin
  • Foi criado um link manualmente para o acesso para a pasta /var/www/phpmyadmin
Root@roo$ ln -s /usr/share/phpmyadmin /var/www/phpmyadmin


27/11/2013

  • Realizamos a configuração do roetador D-LINK 500b para testar o link externo, para isso utilizamos os seguintes parâmetros:


->Ligado ao DSLAM e ao computador pelo patch painel ED04 e RI13.

->No terminal foi adicionado um alias "ifconfig eth0:0 10.1.1.2/24" "ifup eth0:0"

  • Acessando a interface gráfica dele para o teste de acesso por pppoe em Advanced Setup> Wan foi ajustado como:

PORT:0

VPI: 8

VCI: 35

ServiceCategory: UBR WITHOUT PCR

PPP over Ethernet (PPPoE) e Encapsulation Mode por LLC/SNAP-Bridging Usuário e senha de acordo com o provedor. habilitado: Use Static IP Address 192.168.1.158 habilitado: Bridge PPPoE Frames Between WAN and Local Ports (Default Enabled)

habilitado linhas abaixo Enable NAT Enable WAN Service


  • Deletado a rota padrão:
Root@supervaca:/# route delete default
  • Adicionado rota para o roteador.
Root@supervaca:/# route add default qw 10.1.1.1

O Servidor fará autenticação PPPoE e o roteador fará brigding

  • Instalado o PPPoE no servidor
Root@supervaca:/# apt-get install pppoe
  • Foi criado o arquivo:
Root@supervaca$ vi /etc/ppp/peers/supervaca com os parâmetros :
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452 -C IER"
192.168.1.158:
noipdefault
usepeerdns
defaultroute
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
user supervaca
default-asyncmap
  • Criado também o arquivo como conteúdo:
Root@supervaca$ vi /etc/ppp/chap-secrets

usuario * senha
  • Ativado o enlace PPPoE, executando:
Root@supervaca$ pppd call supervaca
  • Como ja tinhamos uma rota padrão, alteramos a mesma com as seguintes rotas:
Root@supervaca$ route delete default 
Root@supervaca$ route add default dev ppp0

28/11/2013

  • Foi realizada a autenticação PPPoE com os IP válidos distribuídos pelos professores, editando os arquivos interfaces e supervaca
  • o modem ja havia sido configurado como bridging durante a aula do Marcelo Sobral.
  • Foi colocado os servidores dentro dos racks para o acesso remoto via SSH, onde o professor Ederson ficou de liberar o acesso remoto pela rede externa.

->Ás 22:05 foi feito o primeiro acesso externo ->Ás 22:10 o acesso caiu.

29/11/2013

  • Iniciamos a instalação dos pares metálicos da linha telefônica no rack do servidor B.
  • Passamos a comunicação do PABX DIGISTAR, onde iremos usar três pontos de ramais.
  • Conectamos 3 entradas de RJ45 no rack para ser utilizado tanto telefone ou internet, onde foram distribuidos pela sala em pontos distintos com cabos UTP CAT6.

-> A função desses três pontos com entrada RJ45 irá depender da necessidade do usuário, por exemplo:

Caso o usuário da tomada 1 (TO1) desejar utilizar telefone, iremos trocar a posição do cabo de manobra, onde uma ponta irá conectada no TO1 e a outra no R20 ( ponto de ramal). Caso deseje utilizar a rede, basta tirar do ponto de ramal o mesmo cabo e conectar no switch.

</syntaxhighlight>

30/11/2013

  • Terminamos de instalar os pares metálicos no RACK e iniciamos a fusão dos cabos com fibra óptica.

1/12/2013

DOMINGO

2/12/2013

  • Instalação do Radius
Root@root$ cd /etc/freeradius/sql
Root@root$ ls
Root@root$ cd mysql/
Root@root$ ls
Root@root$ mysql -uroot -p freeradius < schema.sql 
Root@root$ mysql -uroot -p freeradius < admin.sql 
Root@root$ vi cui.conf 
Root@root$ mysql -uroot -p freeradius < counter.conf 
Root@root$ mysql -uroot -p freeradius < cui.conf 
Root@root$ ls
Root@root$ mysql -uroot -p freeradius < nas.conf
Root@root$ mysql -uroot -p freeradius < nas.sql 
Root@root$ ysql -uroot -p freeradius < cui.sql 
Root@root$ ls
Root@root$ mysql -uroot -p freeradius < ippool.sql 
Root@root$ for x in *sql; do mysql -uroot -p freeradius < ${x}; done
Root@root$ ls
Root@root$ cd /etc/
Root@root$ ls
Root@root$ cd freeradius/
Root@root$ vi sql.conf
  • Continuamos com a fusão da fibra.

03/12/2013

  • Finalizamos as fusões de 4 pares de fibra óptica.
  • Etiquetamos os cabos de comunicação do servidor.
Prefusao.jpg
Fusao.jpg


Fusão de Fibra Ótpica

04/12/2013

  • Realizamos a instalação do switch e gerenciamento da VLAN.
    • Cada apartamento possui uma Vlan.
    • O wifi possui uma vlan própria.
    • Os cabos de comunicação entre os servidores, no caso os pares de fibra óptica támbem possui uma vlan própria.

05/12/2013

tc.sh- /home/aluno - Geany

#! /bin/bash/

# variaveis: pode mexer a vontade
IFACE= “ETH0
VELOCIDADE=”25”
BLOCOS= “20”
blocos= $(echo “25*0.2 | bc”) #20%
WIFI= $(echo “25*0.05 | bc) # 5% do total
BLOCO="1"
#CÓDIGO: evitar mexer#
#
# ponto de partida: recurso (queue discipline, ou qdisc)
tc qdisc del dev ${IFACE} root handle 1:0 htb defailt 100
tc qdisc add dev ${IFACE} root
#

# classe principal: abarca todo o recurso
tc class add dev ${IFACE} parent 1:0 classid 1:1 htb rate ${velocidade}
#
# CLASSES DE VALOR ESTÁTICO: BLOCOS
tc qdisc add dev ${IFACE} parent1:1 classid 1:100 htb rate${BLOCOS}mbit prio 0
iptables -t mangle -A FORWARD -s 10.0.0.0/29 -j CLASSIFY --to-class 1:100
#
#CLASSE DE VALOR DINÂMICO (POR PACOTE): apto 1
tc qdisc add dev ${IFACE} parent 1:1 classid 1:200 htb rate${1}mbit prio 1
iptables -t mangle -A FORWARD -s ${BLOCOS}.1.0/29 -j CLASSIFY --to-class 1:200
#
#CLASSE DE VALOR DINÂMICO (POR PACOTE): apto 2
tc qdisc add dev ${IFACE} parent 1:1 classid 1:300 htb rate${2}mbit prio 2
iptables -t mangle -A FORWARD -s ${BLOCOS}.2.0/29 -j CLASSIFY --to-class 1:300
#
#CLASSE DE VALOR DINÂMICO (POR PACOTE): apto 3
tc qdisc add dev ${IFACE} parent 1:1 classid 1:400 htb rate${3}mbit prio 3
iptables -t mangle -A FORWARD -s ${BLOCOS}.3.0/29 -j CLASSIFY --to-class 1:400
## CLASSES DE VALOR ESTÁTICO: wifi
tc qdisc add dev ${IFACE} parent1:1 classid 1:1000 htb rate${WIFI}mbit prio 9

06/12/2013

  • Finalizamos a identificação dos cabos.
  • Realizamos a instalação da central PABX DIGISTAR, onde a mesma irá operar como central pública.
  • A Central DIGISTAR fornece 3 pontos de ramais para os três servidores, usando como tronco a saida PHONE do DSLAN.
  • Dos ramais 20,21 e 22 os cabos de manobra são interligados com as entradas EA EB e EC.
Ramais.jpg
Ramaisepat.jpg


  • As entradas EA EB e EC estão conectadas via DSLAN, sendo assim utilizam as saídas LA LB e LC e conectam no servidor A nos pontos LP1, LP2 e LP3.
  • Com cabos de manobras interligamos essas saídas com a entradas que darão linha telefonica para nosso servidor, no caso LS2.
  • Da saida LS2 é conectado via cabo UTP CAT5 em nosso servidor bloco B.
  • No bloco B chega apenas um ponto "LD" onde há dados e voz, nele foi conectado um Y para dividir em dois a linha, um para dados "DD1 e outro para voz "TEL1".
  • No caso da saida de voz foi necessário utilizar um filtro ADSL, por chegar pacotes de dados e interferir no sinal de voz.
  • As tomadas TO1, T2 e TO3 são reservadas para os condôminos, onde em cada apartamento terá uma saida, ou para internet ou para telefone.
Lpb.jpg
Servb.jpg


  • A cada servidor são interligados 4 pares de fibra ótpica para comunicação entre os 3 blocos. Neste caso estaremos utilizando um par do condominio A e outro para o condominio C, onde os mesmos estão conectados em um conversor de mídia e consequentemente no switch.
  • Realizamos a idnetificação das fontes de cada equipamento.
  • A saida DD1 é conectada na entrada LINE do modem D'link 500B e a saida Ethernet é conectada na ETH0 do servidor e em seguida sai um cabo da ETH1 do servdior para a porta 24 do switch.


Conversor.jpg
Fontes.jpg


  • Utilizando a saida TEL1 com o filtro, a mesma é conectada na central interna no TRONCO 1 e da central sai um cabo UTP CAT5 dividido em 3 pares para os ramais R20, R21 e R22.
Pabx.jpg
Tomada.jpg

07/12/2013

Sábado

08/12/2013

Domingo

09/12/2013

  • Teste de conexão com o freeradius apartir do banco do MYSQL de uma página PHP.

10/12/2013

  • Realizamos a criação de pagina de autenticação que faz integração com o radius.
    • Lista de usuário:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf8">
        <title></title>


        
        <script>
            
            function confirmExcluir(indice){
                
                if(confirm('Deseja excluir este usuário?')){
                    
                    location.assign("excluiRegistro.php?indice="+indice);
                }                
            }
            
            function editar(indice){
                
                location.assign("novoUsuario.php?indice="+indice);
            } 
            
            function novo(){
                
                location.assign("novoUsuario.php");
            }
            
            function logon(){
                
                location.assign("index.php");
            }
            
            function logoff(){
                
                location.assign("logoff.php");
            }
            
            function detalhe(indice){
                
                location.assign("detalhe.php?indice="+indice);
            }
            
        </script>
        
    </head>
<style>
	body
{
background-image:url('img/fundo.gif')
}
</style>
    <body>

<center>

                
           <button type="button" onclick="return logoff();">Logoff</button>
                        
        <h3>Usuários</h3>
                <button type="button" onclick="return novo();">Novo Usuário</button>
                
        <br>
        <br>
        <table>
            <tr>
                <td>Usuario</td>
                <td>Plano</td>
                <td> </td>
                
                
            </tr>            
        
        
							
					
            <tr>

                <td>#CALABOCABILL</td>
                <td>VIP</td>
                <td>

                    <button type="button" onclick="detalhe(16)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(16);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(16);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        
							
					
            <tr>

                <td>apartamento1</td>
                <td>Popular</td>
                <td>

                    <button type="button" onclick="detalhe(12)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(12);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(12);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        
							
					
            <tr>

                <td>Apartamento2</td>
                <td>Comum</td>
                <td>

                    <button type="button" onclick="detalhe(13)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(13);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(13);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        
							
					
            <tr>

                <td>Apartamento3</td>
                <td>VIP</td>
                <td>

                    <button type="button" onclick="detalhe(14)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(14);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(14);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        
							
					
            <tr>

                <td>teste</td>
                <td>VIP</td>
                <td>

                    <button type="button" onclick="detalhe(15)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(15);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(15);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        
							
					
            <tr>

                <td>thiago</td>
                <td>VIP</td>
                <td>

                    <button type="button" onclick="detalhe(17)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(17);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(17);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
          

                </td>

            </tr>
            
    </body>
</html>

11/12/2013

Diagrama%1.png

12/12/2013

  • Conseguimos ter acesso a rede WIFI com FREERADIUS como autenticação, onde por via interface controlamos as contas de usuários e plano que poderão ser utilizados.
  • Existe 3 tipos de plano, são os pacotes comuns, popular e VIP, que irá ser distribuido de acordo com a mensalidade do usuário mensalmente de acordo com a taxa de transmissão.

Captura de tela-paula.png

13/12/2013

TLINK-WDR4300

Status
Firmware Version: 	
3.13.23 Build 120810 Rel.44064n
Hardware Version: 	
WDR4300 v1 00000000
MAC Address: 	64-70-02-3E-BE-76
IP Address: 	192.168.110.1
Subnet Mask:    255.255.255.0
Wireless 2.4GHz
Wireless Radio:	Enable
Name (SSID):	SuperVaca
Mode:	        11bgn mixed
Channel:	Auto (Current channel 11)
Channel Width:	Automatic
MAC Address:	64-70-02-3E-BE-75
WDS Status:	Disable
Wireless 5GHz
Wireless Radio:	Enable
Name (SSID):	TP-LINK_5GHz_3EBE76
Mode:	        11an mixed
Channel:	Auto (Current channel 44)
Channel Width:	Automatic
MAC Address:	64-70-02-3E-BE-76
WDS Status:	Disable
WAN
MAC Address:	64-70-02-3E-BE-77
IP Address:	0.0.0.0	Dynamic IP
Subnet Mask:	0.0.0.0	 
Default Gateway:	0.0.0.0	WAN port is unplugged!
DNS Server:	0.0.0.0 , 0.0.0.0
Traffic Statistics
	Received	Sent
Bytes:	0	0
Packets:	0	0
System Up Time: 	
4 days 19:37:37


14/12/2013

Sábado

15/12/2013

Domingo

16/12/2013

  • Foi criado os dois arquivos ppp0.up e ppp0.down
/usr/local/sbin/ppp0.up

#!/bin/bash
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
~
/usr/local/sbin/ppp0.down

#!/bin/bash
sysctl -w net.ipv4.ip_forward=0
iptables -t nat -F

Obs: Dar permissão para os arquivos acima.

17/12/2013

vi /usr/local/bin/tc.sh

#!/bin/bash

#Variaveis: pode mexer
IFACE="eth1"
VELOCIDADE="25"
BLOCOS=$(echo "25 * 0.2" | bc) # 20% do total
WIFI=$(echo "25 * 0.05" | bc) #  5% do total
BLOCO="168"

#Código:evitar mexer#
#
#Ponto de partida: recurso
#tc qdisc del dev ${IFACE} root
#tc qdisc add dev ${IFACE} root handle 1:0 htb default 100
#
#Classe Principal: abarca todo o recurso
#
tc class add dev ${IFACE} parent 1:0 classid 1:1 htb rate ${VELOCIDADE}kbit
#
#Classes de valor estático: blocos
tc class add dev ${IFACE} parent 1:1 classid 1:100 htb rate ${BLOCOS}kbit prio 0
ip tables -t magle -A FORWARD -s 192.168.0.0/29 -j CLASSIFY --to-class 1:100
#
#Classe de Valor Dinamico (por pacote): apto 1
tc class add dev ${IFACE} parent 1:1 classid 1:200 htb rate ${1}kbit prio 1
ip tables -t magle -A FORWARD -s 192.${BLOCO}.120.0/29 -j CLASSIFY --to-class 1:200
#
#Classe de Valor Dinamico (por pacote): apto 2 
tc class add dev ${IFACE} parent 1:1 classid 1:300 htb rate ${2}kbit prio 2
ip tables -t magle -A FORWARD -s 192.${BLOCO}.130.0/29 -j CLASSIFY --to-class 1:300
#
#Classe de Valor Dinamico (por pacote): apto 3
tc class add dev ${IFACE} parent 1:1 classid 1:400 htb rate ${3}kbit prio 3
ip tables -t magle -A FORWARD -s 192.${BLOCO}.140.0/29 -j CLASSIFY --to-class 1:400
#
#Classe de valor estático: rede sem fio
tc class add dev ${IFACE} parent 1:1 classid 1:1000 htb rate ${WIFI}kbit prio 9
ip tables -t magle -A FORWARD -s 192.${BLOCO}.110.0/29 -j CLASSIFY --to-class 1:400


Paginas para acesso ao usario admin onde pode-se cadastrar excluir ou atulizar banco de dados que conversa com servidor radius


index.php onde é inserido usuario e senha essa pagina encaminha para testaLogin.php

Index

<?php

$mensagem = "";
extract($_GET);
if(isset($erro))

    $mensagem = $erro;
?>

<!DOCTYPE html>
<html>

<center>
<br>
<br>
<br>
<style>
	body
{
background-image:url('img/fundo.gif')
}

</style>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

<center> <a href="http://wiki.sj.ifsc.edu.br/index.php/Projeto_Integrador_-_2013.2_-_Super_Vaca"> <img src="img/cow.png" alt="Supervaca" /> </a></center>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title></title>
    </head>
    <body>
        <!-- pagina responsavel por tratar os dados do form -->
        <form action="testaLogin.php" method="post">
         
		<font color="purple">
        <P><b>Nome de usuario:</b>
<BR><INPUT type="text" name="campo_login">

<BR><b>Senha:</b>
<BR><INPUT type="password" name="campo_senha">

<BR><INPUT type="submit" value="Entrar">
				
	


			  </font>
			<BR>
		</style>
        </form>    
    </body>
</html>


testaLogin.php faz o teste de usuário, senha dentro do banco freeradius caso correto encaminha para listaUsuario.php, caso errado fica na página index.

  • Teste de Login


<?php


extract($_POST);

//echo $campo_login;
//echo $campo_senha;

$falhou = 1;

//verifica se o login e senha foram repassados corretamente    
if(isset($campo_login) && isset($campo_senha)){

    $con = mysqli_connect('localhost', 'root', 'supervaca', 'freeradius');

    $query = "

        Select * 
        From tb_admin
        Where login = '".$campo_login."' and senha = '".$campo_senha."'";        


    //caso a inserção ou edição tenha sido realizado com sucesso, 
    //a pagina principal é chamada
    if ($result = mysqli_query($con, $query)){

        //se retornar um registro significa que os dados conferem com o cadastrado
        if(mysqli_num_rows($result) > 0){
            
            //efetua o login no sistema
            session_start();
            $row = mysqli_fetch_array($result);
            
            $_SESSION['campo_login'] = $row['login'];
            $_SESSION['campo_senha'] = $row['senha'];
            $_SESSION['nivel_login'] = $row['nivel'];
            
            $falhou = 0;
            
            //redireciona para pagina principal (ja logado)
            header('Location:listaUsuarios.php'); 
            //echo 'sucesso';
            
        }
    }   
}

if($falhou)
    header("Location:index.php?erro=Login e/ou senha incorretos.");

?>


  • ListaUsuario.php: lista todos usuários adicionados, nesta pagina há possibilidade de detalhes de usuários, criar novo usuario, atualizar ou excluir, e detalhes apenas mostra senha, taxa e outras informações, já nas outras páginas citadas, ele terá que mexer junto ao TC pois cda pagina inclui um caminho para aplicar regras em TC, aplicaRegras.php.

segue as páginas

Lista de Usuário

<?php
session_start();

$logado = 0;
if(isset($_SESSION['nivel_login']) && ($_SESSION['nivel_login'] > 0)){
    
    $logado = 1;
}
?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf8">
        <title></title>


        
        <script>
            
            function confirmExcluir(indice){
                
                if(confirm('Deseja excluir este usuário?')){
                    
                    location.assign("excluiRegistro.php?indice="+indice);
                }                
            }
            
            function editar(indice){
                
                location.assign("novoUsuario.php?indice="+indice);
            } 
            
            function novo(){
                
                location.assign("novoUsuario.php");
            }
            
            function logon(){
                
                location.assign("index.php");
            }
            
            function logoff(){
                
                location.assign("logoff.php");
            }
            
            function detalhe(indice){
                
                location.assign("detalhe.php?indice="+indice);
            }
            
        </script>
        
    </head>
<style>
	body
{
background-image:url('img/fundo.gif')
}
</style>
    <body>

<center>

        <?php
        if($logado){
        ?>
        
           <button type="button" onclick="return logoff();">Logoff</button>
        <?php
        }      
        else{
        ?>
          
            <button type="button" onclick="return logon();">Logon</button>
        <?php
        }
        ?>
                
        <h3>Usuários</h3>
        <?php
        if($logado){
        ?>
        <button type="button" onclick="return novo();">Novo Usuário</button>
        <?php
        }
        ?>
        
        <br>
        <br>
        <table>
            <tr>
                <td>Usuario</td>
                <td>Plano</td>
                <td> </td>
                
                
            </tr>            
        
        <?php
            
        
        
        $con = mysqli_connect("localhost", "root", "supervaca", "freeradius");
       
        $query = "
                select  usuario.id as usuario_pk,
                        usuario.username as usuario_nome,
                        plano.nome as plano_nome

                from radcheck as usuario
                inner join tb_plano as plano
                on usuario.plano_fk = plano.plano_pk
                order by usuario.username
        ";
        
        $result = mysqli_query($con, $query);
        
        while ($row = mysqli_fetch_array($result))
		{
            
        
            
            ?>

							
					
            <tr>

                <td><?=$row['usuario_nome']?></td>
                <td><?=$row['plano_nome']?></td>
                <td>

                    <button type="button" onclick="detalhe(<?=$row['usuario_pk']?>)">Detalhe</button>
                    <?
                    if($logado){
                    ?>

                    <button type="button" onclick="editar(<?=$row['usuario_pk']?>);">Editar</button>                         
                    <button type="button" onclick="confirmExcluir(<?=$row['usuario_pk']?>);">Excluir</button>
                    <?
                    }
                    ?>
                </td>

            </tr>            
        <?php
        }
				?>  

                </td>

            </tr>

    <?php
		include 'aplicaRegras.php';
	?>
</body>
</html>


  • Adicionar Novo Usuário:
<?php
exec('sudo usr/local/bin/tc.sh plano[1] plano[2] plano[3]');
?>








<?php
 
session_start();

if(!isset($_SESSION['nivel_login']) || ($_SESSION['nivel_login'] < 1)){
    
    header('Location:index.php'); 
}


//inicializa as variaveis do from partindo do principio de será um novo registro
$titulo = "Novo Registro";
$usuario_pk = 0;
$nome = "";
$senha = "";
$plano = 1;

//recupera os dados enviados com a URL
extract($_GET);

//Conecta o banco de dados
$conn = mysqli_connect("localhost", "root", "supervaca", "freeradius");

//Se a variavel $indice retornou pelo $_GET, então é uma edicao
if (isset($indice)){     
        
    //constroi a consulta sql dos dados referentes ao incice repassado
    $query = "
                select  usuario.id as usuario_pk,
                        usuario.username as nome_usuario,
                        usuario.value as senha_usuario,
                        usuario.plano_fk as plano_usuario
                         

                from radcheck as usuario
                where usuario.id =".$indice;
    
    
    
    //executa a consulta
    $result = mysqli_query($conn, $query);
    
    //captura o resultado
    $row = mysqli_fetch_array($result);
       
    //preenche as variaveis com os valores do form
    $titulo = "Editar Registro";
    $usuario_pk = $row['usuario_pk']; 
    $nome = $row['nome_usuario']; 
    $senha = $row['senha_usuario'];
    $plano = $row['plano_usuario'];    
    
}

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>
    </head>
    <body>
        <!-- pagina responsavel por tratar os dados do form -->
        <form action="salvaUsuario.php" method="post">
            <h3><?=$titulo?></h3>
        <table>
            
            <tr>
                <td> Nome</td><td> <input type="text" name="campo_nome" value='<?=$nome?>'></td>
            </tr>
            <tr>
                <td> Senha</td><td> <input type="text" name="campo_senha" value='<?=$senha?>'></td>
            </tr>
            <tr>
                <td> Plano</td>
                <td> 
                    <select name="campo_plano" id="campo_plano">
                     
                        
                            
                        <?php
                        //Seleciona os planos apresentadas no listbox   
                        $query = "
                                select  *
                                from tb_plano 
                                order by tb_plano.nome 
                        ";

                        $result = mysqli_query($conn, $query);

                        while ($row = mysqli_fetch_array($result)){
                        ?>
                            
                        <option <?php if($plano == $row['plano_pk']){echo"selected";} ?> value=" <?=$row['plano_pk']?>"><?=$row['nome']?></option>


                        <?php
                        }
                        ?>
                     
                        
                    </select>
                
                </td>
            </tr>
            <tr>
                <td> <input type="submit" value="Salvar"> </td>
                <td> 
                    <!-- Botão de cacelar que retorna para a pagina principal -->
                    <input type="reset" value="Calcelar" onclick="location.assign('listaUsuarios.php');">
                </td>
            </tr>
        </table>
            

            <input type="hidden" name='usuario_pk' value="<?=$usuario_pk?>">            
        </form> 

       <?php
		include 'aplicaRegras.php';
	?>
    </body>
</html>


Salva Usuário


<?php

session_start();
if(!isset($_SESSION['nivel_login']) || ($_SESSION['nivel_login'] < 1)){
    
    header('Location:index.php'); 
}

extract($_POST);


$con = mysqli_connect("localhost", "root", "supervaca", "freeradius");

//se a chave primaria existe e é diferente de zero
//significa que um registro existente será editado
if (isset($usuario_pk) && ($usuario_pk != 0)){

    $query = "
        UPDATE radcheck
            SET username='".$campo_nome."',value='".$campo_senha."', plano_fk=".$campo_plano."
            WHERE id = ".$usuario_pk;   
    
    //echo $query;
}
//caso a chve não exista, um novo registro será inserido
else{
/*
    $query = "

        INSERT INTO radcheck (username, attribute, op, value, plano_fk)
        VALUES ('".$campo_nome."', 'Cleartext-Password', ':=', '".$campo_senha."', ".$campo_plano.")
    ";   
 */
   $query = "

        INSERT INTO radcheck (username, attribute, op, value, plano_fk)
        VALUES ('".$campo_nome."', 'Cleartext-Password', ':=', '".$campo_senha."', ".$campo_plano.")
    ";
      
}


//caso a inserção ou edição tenha sido realizado com sucesso, 
//a pagina principal é chamada

if (mysqli_query($con, $query)){

    header('Location: listaUsuarios.php');  
}
else{

   echo("Não foi possível inserir os dados no Banco");
}   



?>
   <?php
		include 'aplicaRegras.php';
?>


Aplica regras, aplicando no TC

<?php
	$conn = mysqli_connect("localhost", "root", "supervaca", "freeradius");
   	$argumentos = '';
	$query = 'SELECT *
                                 FROM radcheck
                                 inner join tb_plano
                                 on radcheck.plano_fk = tb_plano.plano_pk
                                 order by radcheck.username';
	$result = mysqli_query($conn, $query);
	while ($row = mysqli_fetch_array($result)){
		$argumentos = $argumentos . " " . $row['taxa'];
	}
	echo "sudo /usr/local/bin/tc.sh" . $argumentos;
?>

18/12/2013

18 de Dezembro de 2013, 15:35hrs, há mais ou menos 3 horas do inicio da apresentação e TODOS os servidores estão fora do Ar.

18 de Dezembro de 2013, 17:50hrs, todos os servidores estão no ar

Obs: Alguém desligou o disjuntor.


FIM DE PROJETO

Sdds.jpg


Agradecimento:

"Ao querido prof° Ederson T. (BOI), que foi nosso pai durante todo o semestre, sempre esteve a nossa disposição para qualquer tipo de dúvida"

"Ao prof° Saul, tendo apenas 1 mês para acabar as aulas e início de projeto fez um milagre, passou todo o conteúdo que não vimos desde o início de projeto"

" Ao prof° Tio Sobral que assumiu as aulas do Juliano, que teve a paciência de repetir a instalação do AP mesmo depois de ter configurado tudo certinho."

" Ao prof° Glauco que graças a ele a página de autenticação funcionou!!!"


Alunos: Ana Paula Hoog Douglas Steimbach Pacheco Fabio Rodrigues Thiago Henrique