Projeto Integrador - 2011.1 - JallesNet

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Equipe JallesNet

  • Clailton Francisco
  • Dimas Duarte
  • Everton Cardoso
  • Felipe Machado
  • Gabriel Silveira
  • Jalles Vides

1º Dia - 13/06/2011

  • Atividades Realizadas:
    • Instalação do Ubuntu Server
    • Estabelecimento de um IP temporário
    • Instalação e configuração do OpenSSH Server
    • Criação de Shell Script para manter um log atualizado no server

  1. !/bin/bash

IFS=";"

PS3="Entre com uma opção: " menu="Nova Entrada;Sair"

select opcao in $menu; do echo "Você escolheu: $opcao" case $REPLY in 1) echo "Qual o seu nome?" read nome echo "Digite a nova entrada:" read entrada data=`date` echo "$data - $nome -> $entrada" >> /home/grupo5/controle/arquivoDeLog.txt ;; 2) break ;; *) echo "Opção desconhecida." ;; esac done

unset IFS

</syntaxhighlight>

2º Dia - 14/06/2011

  • Apenas recebemos instruções sobre a parte de Cabeamento Estruturado do Prof. Saul.

3º Dia - 15/06/2011

  • A equipe foi dividida em 2. Uma parte seguiu com o Prof. Sobral para a configuração dos Modems e a outra com o Prof. Odilson para continuar a parte de Gerenciamento de Redes.

Equipe de Gerenciamento

  • Edição do arquivo /etc/network/interfaces: Configuração das interfaces de rede:

  1. This file describes the network interfaces available on your system
  2. and how to activate them. For more information, see interfaces(5).
  1. The loopback network interface

auto lo iface lo inet loopback

  1. The primary network interface

auto eth0 iface eth0 inet static address 200.135.37.103 netmask 255.255.255.192 gateway 200.135.37.126

auto eth1 iface eth1 inet static address 172.18.0.103 netmask 255.255.255.0 </syntaxhighlight>

  • Servidor DNS colocado no ar, arquivo /etc/bind/named.conf.local:

// // Do any local configuration here //

// Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918";

zone "jallesnet.sj.ifsc.edu.br" IN { type master; file "/etc/bind/jallesnet.zone"; };

//DNS reverso zone "37.135.200.in-addr.arpa" { type master; file "/etc/bind/db37.135.200.in-addr.arpa"; }; </syntaxhighlight>

  • Edição do arquivo /etc/bind/jallesnet.zone:

$TTL 86400

@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root ( 2011061500 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS g5.jallesnet.sj.ifsc.edu.br. IN MX 0 g5.jallesnet.sj.ifsc.edu.br.

localhost IN A 127.0.0.1 $ORIGIN jallesnet.sj.ifsc.edu.br. g5 A 200.135.37.103 www A 200.135.37.103 </syntaxhighlight>

  • Edição do arquivo /etc/bind/db37.135.200.in-addr.arpa:

$TTL 86400

@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root ( 2011061500 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS g5.jallesnet.sj.ifsc.edu.br. IN MX 0 g5.jallesnet.sj.ifsc.edu.br.

103 PTR jallesnet.sj.ifsc.edu.br. </syntaxhighlight>

  • Por fim, alteramos o arquivo /etc/resolv.conf:

domain sj.ifsc.edu.br search sj.ifsc.edu.br nameserver 200.135.37.103 nameserver 200.135.37.65 </syntaxhighlight>

  • Foi criada a pasta /etc/bind/clientes para serem adicionados os arquivos de zonas provenientes dos clientes da rede.
  • Instalação e configuração do servidor Apache.


Equipe de Instalação de Equipamentos

  • Configuração do roteador Cisco 1700:
  • Foi utilizado a ferramenta "Minicom" (sudo apt-get install minicom) para ter acesso pela interface serial ao roteador Cisco 1700.
  • Após a instalação do Minicom deve-se executá-lo da seguinte forma:
minicom -s (onde o parâmetro -s significa setup).
  • O seguinte menu aparecerá:

┌─────────────[configuração]──────────────┐ │ Nomes de arquivos e rotas │ Protocolos de transferência de arquivos │ Configuração da porta serial │ Modem e discagem │ Tela e teclado │ Salvar configuração como dfl │ Salvar configuração como │ Sair │ Sair do Minicom └────────────────────────────────────────┘

</syntaxhighlight>

  • Navegue com o cursor até a opção "Configuração da porta serial", acessando-a com a tecla "Enter"
  • Aparecerá a seguinte tela:

┌──────────────────────────────────────────────────────────┐ │ A – Dispositivo Serial : /dev/tty1 │ B – Localização do Arquivo de Travamento : /var/lock │ C – Programa de Entrada : │ D – Programa de Saída : │ E – Bps/Paridade/Bits : 38400 8N1 │ F – Controle de Fluxo por Hardware : Sim │ G – Controle de Fluxo por Software : Não │ │ Alterar qual configuração? └──────────────────────────────────────────────────────────┘

</syntaxhighlight>

  • Altere os seguintes parâmetros:
  • Dispositivo Serial : /dev/ttSy0
  • Bps/Paridade/Bits : 9600 8N1
  • Controle de Fluxo por Hardware : Não
  • Seu menu ficará da seguinte forma:

┌───────────────────────────────────────────────────────┐ │ A – Dispositivo Serial : /dev/ttSy0 │ B – Localização do Arquivo de Travamento : /var/lock │ C – Programa de Entrada : │ D – Programa de Saída : │ E – Bps/Paridade/Bits : 9600 8N1 │ F – Controle de Fluxo por Hardware : Não │ G – Controle de Fluxo por Software : Não │ │ Alterar qual configuração? └───────────────────────────────────────────────────────┘

</syntaxhighlight>

  • Após feitas essas configurações volte ao menu principal com a tecla "Enter":

┌────[configuração]──────────────────────┐ │ Nomes de arquivos e rotas │ Protocolos de transferência de arquivos │ Configuração da porta serial │ Modem e discagem │ Tela e teclado │ Salvar configuração como dfl │ Salvar configuração como.. │ Sair │ Sair do Minicom └───────────────────────────────────────┘

</syntaxhighlight>

  • Salve as suas configurações na opção "Salvar configuração com dfl", e saia do Minicom na opção "Sair".
  • Caso o roteador esteja corretamente conectado, será aberta a interface de configuração do roteador, assim execute os comandos a seguir:

enable; configure terminal;

  1. Para configurar a interface serial:

interface serial 0; ip address 10.0.0.1/30; encapsulation ppp; exit;

  1. Para configurar a interface ethernet:

interface fastethernet 0; ip address 172.18.0.1/24; exit; exit;

  1. Para salvar as configurações:

wr; </syntaxhighlight>

4º Dia - 16/06/2011

  • Instalação e configuração do MySQL-Server:

> create database users; > GRANT ALL PRIVILEGES on users.* to 'XXX'@'%' identified by 'YYY';

> use users; > CREATE TABLE usuarios (codigo INT AUTO_INCREMENT, nome VARCHAR(40), dominio VARCHAR (60), PRIMARY KEY (codigo)); </syntaxhighlight>

  • Criação de algumas das páginas .php:
    • index.php (página principal)
    • dominios.php (página que contém as informações sobre os usuários e os seus respectivos domínios)
    • logout.php (página utilizada para fechar a Sessão e encaminhar o usuário de volta ao index.php)
    • autenticar.php (página utilizada para verificar se a senha digitada no index.php é correta)

Páginas PHP

  • /var/www/index.php

<HTML> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <HEAD>
               <TITLE> JallesNet </TITLE>
       </HEAD>
       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

<? session_start(); ?>


Sistema de Hospedagem de Sites


               
               <FORM NAME="formTeste" ACTION="autenticar.php" METHOD="post">

Usuário:
<INPUT TYPE="text" NAME="usuario">

Senha:
<INPUT TYPE="password" NAME="senha">

<INPUT TYPE="submit" NAME="b_enviar" value="Enviar"> </FORM>


       

</HTML> </syntaxhighlight>

  • /var/www/dominios.php

<HTML> <HEAD> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <TITLE>Domínios</TITLE>

</HEAD>

       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

       Usuários


<? session_start(); if (isset($_SESSION['usuario'])){ ?>


<? include ("config.php"); $conexao = mysql_connect("localhost",$usuario,$senha); $base_ok = mysql_select_db("users",$conexao);

$consulta = "SELECT * FROM usuarios;"; $resultado = mysql_query($consulta,$conexao);

while($linha = mysql_fetch_array($resultado)){ echo "
"; echo "<a href='alterar.php?codigo=" . $linha['codigo'] . "'> Usuário: " . $linha['nome'] . "</a>
"; echo "Domínio: " . $linha['dominio'] . ".jallesnet.sj.ifsc.edu.br" . "
"; echo "<a href='excluir.php?codigo=" . $linha['codigo'] . "'> Excluir Usuário </a>
";

echo "

";

}

mysql_free_result($resultado); mysql_close($conexao); ?>

       
       <a href="cadastrar.php">Adicionar novo domínio</a>


       <a href="logout.php">Sair</a>




       

<? }else{ header("Location: index.php"); } ?>

       </BODY>

</HTML> </syntaxhighlight>

  • /var/www/logout.php

<? session_start(); session_unset(); session_destroy(); header("Location: index.php"); ?> </syntaxhighlight>

  • /var/www/autenticar.php

<? session_start();

include ('config.php');

$nome = $_POST['usuario']; $password = $_POST['senha'];

if (($nome == $usuario) && ($password == $senha)) { $_SESSION['usuario']=$nome; echo "<script>window.location='dominios.php';</script>"; }else{ echo "<script>window.location='index.php';</script>"; } ?> </syntaxhighlight>

5º Dia - 17/06/2011

Programação e Gerenciamento

  • Instalação e configuração do Postfix e edição do arquivo /etc/postfix/main.cf:

myhostname = g5.jallesnet.sj.ifsc.edu.br mydomain = jallesnet.sj.ifsc.edu.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $mydomain mydestination = $myhostname, $mydomain, /home/grupo5/controle/dominios mynetworks_style = subnet mynetworks = 127.0.0.0/8, 172.18.0.0/24 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all </syntaxhighlight>

  • Criação de Shell Script para integração dos serviços de DNS, Web e Mail com a página PHP. O script é responsável por:
    • Criação do arquivo .zone
    • Criação do arquivo .conf
    • Alteração do arquivo named.conf
    • Criação de pasta no /var/www
    • Criação do arquivo .host
    • Criação de link simbólico e página default dos virtual hosts
    • Criação de domínio no postfix
    • Reiniciar postfix e dns, e reler as configurações do apache
  • integrar.sh

  1. !/bin/bash

dominio=$1

  1. Criando o arquivo de zona para o novo domínio

sed "s/g5/$dominio/g" /home/grupo5/controle/default.zone > /etc/bind/clientes/$dominio.zone

  1. Criando o arquivo de conf para o novo domínio

sed "s/g5/$dominio/g" /home/grupo5/controle/default.conf > /etc/bind/clientes/$dominio.conf

  1. Incluindo o novo .conf ao arquivo named.conf

echo 'include "/etc/bind/clientes/'$dominio'.conf";' >> /etc/bind/named.conf

  1. Adicionando página html básica para uma pasta exclusiva do novo domínio

mkdir /var/www/$dominio sed "s/g5/$dominio/g" /home/grupo5/controle/index.html > /var/www/$dominio/index.html

  1. Criando o arquivo default do novo virtual host

sed "s/g5/$dominio/g" /home/grupo5/controle/default.apache > /etc/apache2/sites-available/$dominio.host

  1. Extraindo o valor da última página criada (ex.: 002-default; ultimo=002)

ultimo=`ls /etc/apache2/sites-enabled | cut -d- -f1 | sort -n | tail -1 | sed -r s/"0*"//`

  1. Incrementando o valor em 1

ultimo=$((ultimo + 1))

  1. Retornando ele ao valor de 3 dígitos

prefixo=`printf "%03d" $ultimo`

  1. Criando um link simbólico da página na pasta "sites-enabled"

ln -s /etc/apache2/sites-available/$dominio.host /etc/apache2/sites-enabled/$prefixo-$dominio


  1. Adicionando o novo domínio no arquivo de dominios (Postfix)

echo "$dominio.jallesnet.sj.ifsc.edu.br OK" >> /home/grupo5/controle/dominios

  1. Criando novo usuário pro Postfix

echo "$dominio:$dominio::usuarios::/dev/null:/usr/sbin/nologin" > /home/grupo5/controle/contas sudo newusers /home/grupo5/controle/contas rm /home/grupo5/controle/contas

  1. Adicionando esse usuario ao arquivo de Alias_Map

sed "s/g5/$dominio/g" /home/grupo5/controle/default.mail >> /home/grupo5/controle/virtuals


  1. Reiniciando todos os serviços

sudo service bind9 restart sudo postmap /home/grupo5/controle/dominios sudo postmap /home/grupo5/controle/virtuals sudo service postfix restart sudo service apache2 graceful </syntaxhighlight>

  • Criação dos arquivos que serão utilizados como base na inclusão de novos usuário/domínios.

Arquivos Default

  • /home/grupo5/controle/default.conf

// // Arquivo de zona do usuÃrio g5 // //include "/etc/bind/zones.rfc1918";

zone "g5.jallesnet.sj.ifsc.edu.br" IN { type master; file "/etc/bind/clientes/g5.zone"; }; </syntaxhighlight>

  • /home/grupo5/controle/default.zone

$TTL 86400

@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root ( 2011061500 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS g5.jallesnet.sj.ifsc.edu.br. IN MX 0 g5.jallesnet.sj.ifsc.edu.br.

localhost IN A 127.0.0.1 $ORIGIN jallesnet.sj.ifsc.edu.br. g5 A 200.135.37.103 </syntaxhighlight>

  • /home/grupo5/controle/default.apache

<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName g5.jallesnet.sj.ifsc.edu.br

DocumentRoot /var/www/g5 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/g5> 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 ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn

CustomLog ${APACHE_LOG_DIR}/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> </syntaxhighlight>

  • /home/grupo5/controle/default.mail

g5.jallesnet.sj.ifsc.edu.br g5 g5@g5.jallesnet.sj.ifsc.edu.br g5

  1. -------------------------------------------

</syntaxhighlight>

Instalação de Equipamentos

  • A equipe trabalhou em conjunto com as outras equipes e o professor Sobral na configuração do AC e a instalação do roteador CISCO
  • Configuração da interface serial no roteador CISCO 2500:
  • OBS.: Para o acesso à interface de configuração do roteador CISCO 2500, deve-se adotar a mesma configuração do Minicom já descrita na aula do dia 15/06.

enable; configure terminal;

  1. Para configurar a interface serial:

interface serial 0; encapsulation ppp; ip address 10.0.0.2 255.255.255.0; exit; exit;

  1. Para salvar as configurações na memória:

wr mem; </syntaxhighlight>

  • Configuração pppd no AC-Server
  • Criar o arquivo /etc/ppp/pppoe-server-options:

require-chap noauth login lcp-echo-interval10 lcp-echo-failure2 ms-dns 200.135.37.65 nestmask 255.255.255.0 noipdefault debug kdebug 4 </syntaxhighlight>

  • Criar o arquivo /etc/ppp/faixa-ip:

192.168.2.1-254 </syntaxhighlight>

  • Executar o comando:

pppoe-server -C IER -L 192.168.2.1 -p /etc/ppp/faixa-ip -I eth0 </syntaxhighlight>

2ª Semana - 20/06/2011 a 24/06/2011

  • Graças a Semana de Telecomunicações e o feriado, a equipe não pôde se encontrar pessoalmente para a continuação do projeto.
  • Porém, cada um dos membros efetuou pesquisas sobre a parte de segurança da rede, DSLAM e Radius (as principais dúvidas que surgiram durante a elaboração do projeto) de forma independente para que as dúvidas fossem sanadas e o projeto pudesse continuar.
  • As páginas PHP (cadastro, alteração e remoção do BD) continuaram a ser programadas durante esse período.

11º Dia - 27/06/2011

  • Alguns documentos foram revisados e alterados devido a incompatibilidade com versão do Ubuntu;
  • O grupo ainda encontra dificuldades com a conexão php/server/sql;
  • Criação de páginas PHP (alterar.php, alterado.php, cadastrar.php, cadastrado.php, config.php).

Páginas PHP

  • /var/www/alterar.php

<HTML> <HEAD> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <TITLE>Alterar</TITLE>

</HEAD>

       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

       Alterar Usuário


<? session_start(); if (isset($_SESSION['usuario'])){ ?>


<? include ("config.php"); $codigo = $_GET['codigo'];

$conexao = mysql_connect("localhost",$usuario,$senha); $base_ok = mysql_select_db("users",$conexao);

$select = "SELECT * FROM usuarios WHERE codigo = $codigo;"; $resultado = mysql_query($select,$conexao);

$linha = mysql_fetch_array($resultado);

$nomeBD = $linha['nome']; $dominioBD = $linha['dominio'];

mysql_close($conexao); ?>

       
               <FORM NAME="formTeste" ACTION="alterado.php" METHOD="post">

<INPUT TYPE="hidden" NAME="codigo" VALUE="<? echo $codigo ?>"> <INPUT TYPE="hidden" NAME="antdominio" VALUE="<? echo $dominioBD ?>">

Nome:
<INPUT TYPE="text" NAME="nome" VALUE="<? echo $nomeBD ?>">

Domínio:
<INPUT TYPE="text" NAME="novodominio" VALUE="<? echo $dominioBD ?>">

<INPUT TYPE="submit" NAME="b_enviar" value="Alterar"> </FORM>


       <a href="dominios.php">Voltar</a>
       


       

<? }else{

       header("Location: index.php");

} ?>

       </BODY>

</HTML> </syntaxhighlight>

  • /var/www/alterado.php

<? session_start(); if (isset($_SESSION['usuario'])){ ?>

<? include ("config.php"); if (isset($_POST['nome'])){ $codigo = $_POST['codigo']; $antdominio = $_POST['antdominio'];

$nome = $_POST['nome']; $novodominio = $_POST['novodominio']; $novodominio = str_replace(' ', , $novodominio); $novodominio = strtolower($novodominio);

       $conexao = mysql_connect("localhost",$usuario,$senha);
       $base_ok = mysql_select_db("users",$conexao);
       $consulta = "SELECT count(*) FROM usuarios WHERE dominio = '$dominio';";
       $resultado = mysql_query($consulta,$conexao);
       $coluna = mysql_fetch_array($resultado);
       if ($coluna['contar'] == 0){

$alterar = "UPDATE usuarios set nome='$nome',dominio='$novodominio' WHERE codigo=$codigo;"; mysql_query($alterar,$conexao); exec("/home/grupo5/controle/alterar.sh $novodominio $antdominio"); $base_ok = mysql_select_db("radius",$conexao); $alterarradius = "UPDATE radcheck set username='$novodominio',value='$novodominio' WHERE username='$antdominio';"; mysql_query($alterarradius,$conexao);

       }else{
               mysql_close($conexao);
               echo "<script>window.location='erro.php';</script>";
       }
       mysql_close($conexao);

} echo "<script>window.location='dominios.php';</script>"; ?>

<? }else{

       header("Location: index.php");

} ?> </syntaxhighlight>

  • /var/www/cadastrar.php

<HTML> <HEAD> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <TITLE>Inserir</TITLE>

</HEAD>

       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

       Inserir Novo Usuário


<? session_start(); if (isset($_SESSION['usuario'])){ ?>


       
               <FORM NAME="formTeste" ACTION="cadastrado.php" METHOD="post">

Nome:
<INPUT TYPE="text" NAME="nome">

Domínio:
<INPUT TYPE="text" NAME="dominio">

<INPUT TYPE="submit" NAME="b_enviar" value="Cadastrar"> </FORM>


       <a href="dominios.php">Voltar</a>
       


       

<? }else{

       header("Location: index.php");

} ?>

       </BODY>

</HTML> </syntaxhighlight>

  • /var/www/cadastrado.php

<? session_start(); if (isset($_SESSION['usuario'])){ ?>

<? include ("config.php"); if (isset($_POST['nome'])){

       $nome = $_POST['nome'];
       $dominio = $_POST['dominio'];

$dominio = str_replace(' ', , $dominio); $dominio = strtolower($dominio);

       $conexao = mysql_connect("localhost",$usuario,$senha);
       $base_ok = mysql_select_db("users",$conexao);

$consulta = "SELECT count(*) as 'contar' FROM usuarios WHERE dominio = '$dominio';"; $resultado = mysql_query($consulta,$conexao);

$coluna = mysql_fetch_array($resultado);

if ($coluna['contar'] == 0){ $inserir = "INSERT INTO usuarios(nome,dominio) VALUES ('$nome','$dominio');"; mysql_query($inserir,$conexao); exec("/home/grupo5/controle/integrar.sh $dominio"); $inserirradius = "INSERT INTO radcheck (username,attribute,value) VALUES ('$dominio','password','$dominio');"; $base_ok = mysql_select_db("radius",$conexao); mysql_query($inserirradius,$conexao); }else{ mysql_close($conexao); echo "<script>window.location='erro.php';</script>"; }

       mysql_close($conexao);

} echo "<script>window.location='dominios.php';</script>"; ?>

<? }else{

       header("Location: index.php");

} ?> </syntaxhighlight>

  • /var/www/config.php (O arquivo config.php possui uma parte "censurada", pois contém as senhas do nosso server)

<? $usuario="XXX"; $senha="YYY"; ?> </syntaxhighlight>

12º Dia - 28/06/2011

  • Últimas alterações feitas no Shell Script "integrar.sh". Testes realizados com a inserção de novos usuários via PHP;
  • As dificuldades encontradas no dia anterior foram todas resolvidas.

13º Dia - 29/06/2011

Gerenciamento e Programação

  • Percebeu-se uma falha na parte de Postfix. A necessidade de criação de usuários e de definir melhor como vai funcionar essa parte do server;
  • Término da criação das páginas PHP (alterar.php, alterado.php, cadastrar.php, cadastrado.php, excluir.php, excluido.php e erro.php);

Páginas PHP

  • /var/www/excluir.php

<HTML> <HEAD> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <TITLE>Excluir</TITLE>

</HEAD>

       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

       Excluir Usuário


<? session_start(); if (isset($_SESSION['usuario'])){ ?>


<? include ("config.php"); $codigo = $_GET['codigo'];

$conexao = mysql_connect("localhost",$usuario,$senha); $base_ok = mysql_select_db("users",$conexao);

$select = "SELECT * FROM usuarios WHERE codigo = $codigo;"; $resultado = mysql_query($select,$conexao);

$linha = mysql_fetch_array($resultado);

echo " Você tem certeza que quer excluir esse usuário?"; echo "


"; echo "Usuário: " . $linha['nome'] . "
"; echo "Domínio: " . $linha['dominio'] . ".jallesnet.sj.ifsc.edu.br" . "
";

echo "


";

echo "<a href='excluido.php?codigo=" . $linha['codigo'] . "&dominio=" . $linha['dominio'] . "'> Sim </a>"; echo " ___________________ "; echo "<a href='dominios.php?codigo=" . $linha['codigo'] . "'> Não </a>
";

mysql_close($conexao); ?>

       


       

<? }else{

       header("Location: index.php");

} ?>

       </BODY>

</HTML> </syntaxhighlight>

  • /var/www/excluido.php

<? session_start(); if (isset($_SESSION['usuario'])){ ?>


<? include ("config.php"); $codigo = $_GET['codigo']; $dominio = $_GET['dominio'];

$conexao = mysql_connect("localhost",$usuario,$senha); $base_ok = mysql_select_db("users",$conexao);

$delete = "DELETE FROM usuarios WHERE codigo = $codigo;"; mysql_query($delete,$conexao);

$base_ok = mysql_select_db("radius",$conexao); $deleteradius = "DELETE FROM radcheck WHERE username = '$dominio';"; echo $deleteradius; mysql_query($deleteradius,$conexao);

exec("/home/grupo5/controle/excluir.sh $dominio");

mysql_close($conexao);

echo "<script>window.location='dominios.php';</script>"; ?>

<? }else{

       header("Location: index.php");

} ?> </syntaxhighlight>

  • /var/www/erro.php

<HTML> <HEAD> <META http-equiv="content-type" content="text/html; charset=iso-8859-1" />

       <TITLE>ERRO</TITLE>

</HEAD>

       <BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
       

       --- ERRO ---



O domínio digitado já foi cadastrado anteriormente, favor tentar denovo.



       <a href="dominios.php">Voltar</a>




       
       </BODY>

</HTML> </syntaxhighlight>

Bash Script

  • Criação do Shell Script "alterar.sh". O script é responsável por:
    • Alteração do arquivo .zone
    • Alteração do arquivo .conf
    • Alteração do arquivo named.conf
    • Alteração do nome da pasta no /var/www
    • Alteração do arquivo .host
    • Alteração de link simbólico e página default dos virtual hosts
    • Alteração de domínio no postfix
    • Reiniciar PostFix e DNS, e reler as configurações do Apache
  • Criação do Shell Script "excluir.sh". O script é responsável por:
    • Remoção de todos os arquivos, contas e pastas criadas pelo script "integrar.sh"
  • alterar.sh

  1. !/bin/bash

novodominio=$1 antdominio=$2

antlinha='\/'$antdominio'.conf";' novalinha='include "/etc/bind/clientes/'$novodominio'.conf";'

  1. Deletando arquivos do domínio antigo

rm /etc/bind/clientes/$antdominio.zone rm /etc/bind/clientes/$antdominio.conf rm /etc/apache2/sites-available/$antdominio.host rm /etc/apache2/sites-enabled/*-$antdominio

  1. Removendo linhas dos arquivos named.conf e dominios (Postfix)

sed -i '/'$antlinha'/Id' /etc/bind/named.conf sed -i '/'$antdominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/dominios sed -i '/'$antdominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/virtuals

  1. Excluindo usuário do sistema

sudo userdel $antdominio

  1. Criando o arquivo de zona para o novo domínio

sed "s/g5/$novodominio/g" /home/grupo5/controle/default.zone > /etc/bind/clientes/$novodominio.zone

  1. Criando o arquivo de conf para o novo domínio

sed "s/g5/$novodominio/g" /home/grupo5/controle/default.conf > /etc/bind/clientes/$novodominio.conf

  1. Incluindo o novo .conf ao arquivo named.conf

echo $novalinha >> /etc/bind/named.conf

  1. Alterando o nome da pasta onde està inserida a página html básica do novo domínio

mv /var/www/$antdominio /var/www/$novodominio

  1. Criando o arquivo default do novo virtual host

sed "s/g5/$novodominio/g" /home/grupo5/controle/default.apache > /etc/apache2/sites-available/$novodominio.host

  1. Extraindo o valor da última página criada (ex.: 002-default; ultimo=002)

ultimo=`ls /etc/apache2/sites-enabled | cut -d- -f1 | sort -n | tail -1 | sed -r s/"0*"//`

  1. Incrementando o valor em 1

ultimo=$((ultimo + 1))

  1. Retornando ele ao valor de 3 dígitos

prefixo=`printf "%03d" $ultimo`

  1. Criando um link simbólico da página na pasta "sites-enabled"

ln -s /etc/apache2/sites-available/$novodominio.host /etc/apache2/sites-enabled/$prefixo-$novodominio


  1. Adicionado o novo domínio no arquivo de dominios (Postfix)

echo "$novodominio.jallesnet.sj.ifsc.edu.br OK" >> /home/grupo5/controle/dominios

  1. Criando novo usuário pro Postfix

echo "$novodominio:$novodominio::usuarios::/dev/null:/usr/sbin/nologin" > /home/grupo5/controle/contas sudo newusers /home/grupo5/controle/contas rm /home/grupo5/controle/contas

  1. Adicionando esse usuario ao arquivo de Alias_Map

sed "s/g5/$novodominio/g" /home/grupo5/controle/default.mail >> /home/grupo5/controle/virtuals


  1. Reiniciando todos os serviços

sudo service bind9 restart sudo postmap /home/grupo5/controle/dominios sudo postmap /home/grupo5/controle/virtuals sudo service postfix restart sudo service apache2 graceful </syntaxhighlight>

  • excluir.sh

  1. !/bin/bash

dominio=$1 linha='\/'$dominio'.conf'

  1. Deletando arquivos do domínio

rm /etc/bind/clientes/$dominio.zone rm /etc/bind/clientes/$dominio.conf rm /etc/apache2/sites-available/$dominio.host rm /etc/apache2/sites-enabled/*-$dominio

  1. Removendo linhas dos arquivos named.conf e domínios (Postfix)

sed -i '/'$linha'/Id' /etc/bind/named.conf sed -i '/'$dominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/dominios sed -i '/'$dominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/virtuals

  1. Removendo usuário do sistema

sudo userdel $dominio

  1. Removendo pasta do /var/www

rm -r /var/www/$dominio


  1. Reiniciando todos os serviços

sudo service bind9 restart sudo postmap /home/grupo5/controle/dominios sudo postmap /home/grupo5/controle/virtuals sudo service postfix restart sudo service apache2 graceful </syntaxhighlight>

Instalação de Equipamentos

  • Configuração do Roteador Cisco 2500:
  • Configurado como rota default a interface serial 0

ip route 0.0.0.0 0.0.0.0 s0 </syntaxhighlight>

  • Foi estabelecida também uma rota no Roteador Cisco 1700 para o gateway do laboratório de redes (192.168.1.1):

ip route 0.0.0.0 0.0.0.0 192.168.1.1 255.255.255.0 </syntaxhighlight>

  • Foi necessário o estabelecimento dessas rotas para que fosse possível efetuar um teste de provimento de acesso a internet ao usuário. No caso, esse usuário foi o notebook do professor Sobral.
  • Algumas outras configurações também tiveram de ser feitas no servidor AC. Uma delas foi a configuração do arquivo chap-secrets (/etc/ppp/chap-secrets).
  • O arquivo foi configurado com o seguinte conteúdo:

aluno * "aluno </syntaxhighlight>

  • Essa configuração serviu para que o roteador do usuário se autenticasse com o servidor AC usando um login (aluno) e uma senha ("aluno) (mais tarde, isso deverá ser efetuado pelo servidor RADIUS de cada equipe).
  • Editado o arquivo /etc/ppp/faixa-ip com o seguinte conteúdo:

192.168.2.2/254 </syntaxhighlight>

  • Este arquivo determina qual será a faixa de IPs atribuída aos roteadores que estabelecerem links ponto a ponto com o servidor AC

15º Dia - 01/07/2011

  • Instalação do servidor Radius

apt-get install freeradius freeradius-mysql</syntaxhighlight>

  • No arquivo /etc/freeradius/radiusd.conf, descomentamos a linha:

$INCLUDE sql.conf </syntaxhighlight>

  • Criação de tabelas para o FreeRadius:

mysql–u root–p radius < schema.sql</syntaxhighlight>

  • Dando permissão ao usuário admin para mexer nas tabelas do Radius:

> GRANT ALL PRIVILEGES on radius.* to 'XXX'@'%' identified by 'YYY'; </syntaxhighlight>

17º Dia - 04/07/2011

  • Instalação de Cabeamento Estruturado:
    • Instalação de Conectores;
    • Instalação de Path Panel;
    • Instalação de Tomadas;
    • Passar o cabeamento;
    • Identificação de portas nos Path Panels.
  • Identificação de Problemas nas permissões do usuário www-data

18º Dia - 05/07/2011

  • Integração do Radius com as páginas PHP e os Scripts.
  • Alteração do arquivo /etc/sudoers, para permitir que o usuário www-data consiga executar os Scripts.

[sudo] password for grupo5:

  1. This file MUST be edited with the 'visudo' command as root.
  2. Please consider adding local content in /etc/sudoers.d/ instead of
  3. directly modifying this file.
  4. See the man page for details on how to write a sudoers file.

Defaults env_reset

  1. Host alias specification
  1. User alias specification
  1. Cmnd alias specification
  1. User privilege specification

root ALL=(ALL:ALL) ALL %php ALL=NOPASSWD: /usr/sbin/newusers %php ALL=NOPASSWD: /usr/sbin/userdel %php ALL=NOPASSWD: /usr/sbin/postmap %php ALL=NOPASSWD: /usr/sbin/service

  1. Members of the admin group may gain root privileges

%admin ALL=(ALL) ALL

  1. Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) ALL

  1. includedir /etc/sudoers.d

</syntaxhighlight>

  • Alteração final, e testes, nos Scripts para garantir que as alterações funcionaram.

19º Dia - 06/07/2011

  • Alteração do arquivo /etc/postfix/main.cf

myhostname = g5.jallesnet.sj.ifsc.edu.br mydomain = jallesnet.sj.ifsc.edu.br virtual_alias_maps = hash:/home/grupo5/controle/virtuals virtual_alias_domains = hash:/home/grupo5/controle/dominios myorigin = $mydomain mydestination = $myhostname, $mydomain mynetworks_style = subnet mynetworks = 127.0.0.0/8, 172.18.0.0/24 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all </syntaxhighlight>

  • Ajustes no arquivo excluido.php, para garantir que o usuário seja deletado do Radius quando a conta for excluída.
  • Instalação e configuração do DenyHosts
  • Criação de regras de firewall via iptables

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A INPUT -p icmp -j REJECT </syntaxhighlight>

20º Dia - 07/07/2011

  • Instalado aplicativo de monitoramento Webmin.
    • Configurado idioma do aplicativo para PT-br.


21º Dia - 08/07/2011

  • Realizados testes nas funcionalidades de cadastro e exclusão de usuário.
    • DNS - ok.
    • APACHE - ok.
    • POSTFIX - ok.
    • MYSQL - ok.
  • Configurado script de backup das principais pastas do sistema.

  1. !/bin/bash

ORIGEM="/etc /home /var" DESTINO="/backup" DIA=`date +%Y%m%d` DIA_DA_SEMANA=`date +%A` EMAIL=clailton.89@gmail.com

  1. Criar o diretório de destino

mkdir -p ${DESTINO} chmod 700 ${DESTINO} chown root ${DESTINO}

  1. Função: backup completo

completo() {

       tar cvzf ${DESTINO}/${DIA}.tar.gz ${ORIGEM} \
       > ${DESTINO}/${DIA}.txt \
       2> /dev/null

}

  1. Função: backup incremental (somente último dia)

incremental() {

       tar cvzf ${DESTINO}/${DIA}.tar.gz `find ${ORIGEM} ! -type d -mtime -1`
\
       > ${DESTINO}/${DIA}.txt \
       2> /dev/null

}

  1. Função principal

if [ "${DIA_DA_SEMANA}" = "sunday" -o "${DIA_DA_SEMANA}" = "domingo" ] then

       completo

else

       incremental

fi </syntaxhighlight>

  • Configuração de Crontab (/etc/crontab)para execução automática do Script de Backup

17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 11 19 * * * root /home/grupo5/controle/backup.sh </syntaxhighlight>