Projeto Integrador - 2011.1 - Bigodes

De MediaWiki do Campus São José
Revisão de 09h46min de 13 de julho de 2011 por Evandro.l (discussão | contribs) (Equipe Bigodes)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

Equipe Bigodes

  • Ademir de Souza
  • Amarildo Junior
  • Augusto Buttemberg
  • Daniel Arndt
  • Evandro Schutz xevandroschutz@gmail.com
  • Maicon Guesser

1º Dia - 13/06/2011

  • Formatamos o nosso servidor, e efetuamos as configurações básicas referentes aos IPs provisórios (rede, rota, DNS);
  • Instalamos o SSH na máquina, e instalamos o equipamento no RAC.

2º Dia - 14/06/2011

  • Diagnosticado o problema de bateria da BIOS. Onde o servidor não iniciava com as configurações salvas, sendo que toda vez que subir o servidor configurar o teclado.
  • Efetuado a ligação dos ramais no patch panel, e identificamos a ligação do cabeamento entre o laboratório de meios e o laboratório de redes 1.
  • Inciamos a configuração do DNS "bind9".

3º Dia - 15/06/2011

  • Dividimos a equipe em subequipes. Tendo os alunos Ademir e Augusto, para efetuar o trabalho de IER, configurando comunicação de ponto a ponto dos modens.
  • Em primeiro momento como tínhamos diagnosticado um problema na bateria da BIOS, então foi comprada uma nova e efetuada a substituição.
  • Os alunos Amarildo, Daniel Arndt e Evandro continuaram a configuração do DNS. Efetuado alguns testes para comprovar o funcionamento.
  • Configurado IP válido para o servidor.

Configurações dos modens Ponto a Ponto Digitel (SHDSL)

  • Modem sala Redes 1 (Servidor):

STRAP DIP-1 DIP-2 DIP-3 DIP-4 DIP-5

1- OFF OFF OFF OFF OFF

2- OFF ON ON OFF OFF

3- ON OFF ON OFF OFF

4- ON OFF ON OFF OFF

5- ON OFF ON OFF OFF

6- OFF OFF ON OFF OFF

7- OFF OFF ON OFF OFF

8- OFF OFF ON OFF ON

JUMP - S1=75 S2=75 S8=V35 S7=V35/V36


  • Modem sala Meios (Dslan):

STRAP DIP-1 DIP-2 DIP-3 DIP-4 DIP-5

1- OFF ON OFF OFF OFF

2- OFF OFF ON OFF OFF

3- ON OFF ON OFF OFF

4- ON OFF ON OFF OFF

5- ON OFF ON OFF OFF

6- OFF OFF ON OFF OFF

7- OFF OFF ON OFF OFF

8- OFF OFF ON OFF ON

JUMP - S1=75 S2=75 S8=V35 S7=V35/V36

4º Dia - 16/06/2011

  • Iniciamos a configuração das paginas em PHP, e a integração com o MySQL.

5º Dia 17/06/2011

  • Instalação dos modens entre a Sala Redes 1 e sala Meios, estabelecido a comunicação ponto a ponto do modens entre os roteadores e inicio da configuração

do DSLAN.

Conficuração do CISCO 1700 (Lab. redes 1)

  • 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>

  • Configução aplicada no roteador CISCO 2500 da sala de meios.
enable;
configure terminal;

 #Para configurar a interface serial:
 interface serial 0;
 ip address 10.0.0.2/30;
 encapsulation ppp;
 exit;

#Para configurar a interface ethernet:
 interface fastethernet 0;
 ip address 192.168.0.1/24;
 exit;
 exit;

#Para salvar as configurações:
 wr;

6º Dia - 20/06/2011

  • Continuamos a configuração em paginas PHP, Iniciamos a criação de Scripts em bash para criar e direcionar arquivos que configure o DNS do cliente.

7º Dia - 21/06/2011

  • A equipe continua na configuração das paginas em PHP e na resolução dos Scripts em Bash, para direcionar os arquivos de criação do DNS dos clientes.

Configurações DNS.

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 "bigodes.sj.ifsc.edu.br" IN {
       type master;
       file "/etc/bind/bigodes.zone";
       allow-update { none; };
       allow-transfer { 200.135.37.126; };
};
zone "37.135.200.in-addr.arpa" {
       type master;
       file "/etc/bind/zonareversa.zone";
};
zone "webmail.bigodes.sj.ifsc.edu.br" IN {
       type master;
       file "/etc/bind/webmail.zone";
};
//
//SUBDOMINIOS
//
//oi
zone "oi.bigodes.sj.ifsc.edu.br" IN {
       type master;
       file "/etc/bind/oi.zone";
};

Aquivo /etc/bind/bigodes.zone

$TTL    86400
@       IN SOA m.bigodes.sj.ifsc.edu.br. root (
       2011061400      ;serial
       3H              ;refresh
       15M             ;retry
       1W              ;expiry
       1D)             ;minimum
       IN NS   m.bigodes.sj.ifsc.edu.br.
       IN MX 0 m.bigodes.sj.ifsc.edu.br.
localhost       IN CNAME bigodes.sj.ifsc.edu.br.
$ORIGIN bigodes.sj.ifsc.edu.br.
m       A       200.135.37.101
www     A       200.135.37.101
mail    A       200.135.37.101

Arquivo de configuração da ZONA REVERSA /etc/bind/zonareversa.zone

$TTL 86400
@       IN   SOA   m.bigodes.sj.ifsc.edu.br. root (
               2011061500 ;
               1d ;
               1h ;
               1w ;
               1d ;                                                 )
      IN   NS    m.bigodes.sj.ifsc.edu.br.
100    IN   PTR   m.bigodes.sj.ifsc.edu.br.

Configuração cliente: /etc/bind/oi.zone

$TTL    86400
@               IN SOA m.bigodes.sj.ifsc.edu.br bigodes (
               2011070874      ;serial
               3H                         ;refresh
               15M             ;retry
               1W              ;expiry
               1D)            ;minimum
               IN NS   m.oi.bigodes.sj.ifsc.edu.br.
               IN MX 0 m.oi.bigodes.sj.ifsc.edu.br.
localhost       IN A    127.0.0.1
$ORIGIN oi.bigodes.sj.ifsc.edu.br.
m       A       200.135.37.101
www     A       200.135.37.101
mail    A       200.135.37.101

Arquivo /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
       address 200.135.37.101
       netmask 255.255.255.192
       gateway 200.135.37.126

Arquivo /etc/resolv.conf

domain bigodes.sj.ifsc.edu.br
search bigodes.sj.ifsc.edu.br
nameserver 200.135.37.101

Configurações Postfix

Configuração no arquivo /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = m.bigodes.sj.ifsc.edu.br
mydomain = bigodes.sj.ifsc.edu.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination = $myhostname
mynetworks_style = subnet
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# Para o cliente ter email cliente@subdominio.bigodes.sj.ifsc.edu.br
best_mx_transport = local
virtual_alias_domains = hash:/etc/postfix/mydomains
virtual_alias_maps = hash:/etc/postfix/virtual
#mydestination = $myhostname, $virtual_alias_domains
home_mailbox = Maildir/

Arquivo de configuração /etc/postfix/virtual

bigodes.sj.ifsc.edu.br Principal
root@bigodes.sj.ifsc.edu.br root
oi.bigodes.sj.ifsc.edu.br Dominio_oi
oi@oi.bigodes.sj.ifsc.edu.br oi

Aquivo de configuração /etc/postfix/mydomains

bigodes.sj.ifsc.edu.br OK
oi.bigodes.sj.ifsc.edu.br OK

Configuração Apache

Arquivos /etc/apache2/sites-available/default e /etc/apache2/sites-enabled/default


<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>
       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <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>

Exemplo arquivo virtualhost cliente. /etc/apache2/site-availabre/oi

<VirtualHost *:80>
       ServerName oi.bigodes.sj.ifsc.edu.br
       DocumentRoot /var/www/oi
       ServerAlias *oi.bigodes.sj.ifsc.edu.br
       ErrorLog /var/log/apache2/oi-error.log
<Directory /var/www/oi>
       Options Indexes
       DirectoryIndex index.html index.php
       order allow,deny
       allow from all
</Directory>
</VirtualHost>

Trecho do arquivo /var/www/listagem.php, que cria os arquivos de configurações do cliente.

*// criando o diretorio para o apache
*$diretorio = "/var/www/$nome";
*if(mkdir($diretorio))
*//criando o arquivo index.html para o usuarioi
*$arquivo = fopen("/var/www/$nome/index.html" , "a");
*//nome para colocar no titulo do site do usuario
*fwrite($arquivo, "<*html><*head><*title>Bem Vindo $nome !!</title></head>\n");
*// colocar o que deseja no site do cliente
*fwrite($arquivo, "<*body>
*<body bgcolor=#2E8B57>
*<*h1> <*center>
*<*b>
*Bem vindo $nome!! <*br>
*<*/h1>
*Você acaba de adquirir uma assinatura com a empresa Bigodes Solutions, 
*onde você terá sua página totalmente personalizada e uma conta de e-mail totalmente grátis.
<*br> *Você está visualizando sua pagina inicial, que atualmente está com a nossa configuração,
*você poderá acessar com o dominio escolhido www.$dominio.bigodes.sj.ifsc.edu.br. em qualquer lugar que tenha acesso a internet.
<*br> *DESENVOLVEDORES: <*br> *Ademir Lucilio
*Amarildo Junkes
*Augusto Buttemberg
*Daniel Arndt
*Evandro Schutz
*Maicon Guesser
<*br> *Para alterar a página e deixá-la como você precisa, basta entrar em contato com um de nossos desenvolvedores, *clicando no link abaixo e já usufruindo da sua conta de e-mail.
*<a href=http://www.webmail.bigodes.sj.ifsc.edu.br target=_blank> Webmail Bigodes Solutions </a>
*<EMBED SRC=/var/www/relogiodigital.swf bgcolor=#2E8B57 align=left width=150 height=150> <*br> <*br> <*br> *<*center><*h1>Bigodes Solutions *<*/body> *<*/html>"); *fclose($arquivo);

É criado diretório com o nome do cliente, e o seu index.html
Ex: /var/www/cliente/index.html

Scripts de configurações.

Este script faz a criação do email do cliente e restarta os serviços.

#!/bin/bash
#Adicionando um usuario no sistema
echo "$1:$1::::/home/$1:/bin/bash" > /etc/scripts/criausuario.txt #redireciona os dados do usuario para um arquivo que contem as informacoes para      criacao da conta
sudo newusers /etc/scripts/criausuario.txt # cria o usuario no sistema
sudo maildirmake.dovecot /home/$1/Maildir
#dar permissao para as pastas do usuario
sudo maildirmake.dovecot /home/$1/Maildir/.Drafts
sudo maildirmake.dovecot /home/$1/Maildir/.Sent
sudo maildirmake.dovecot /home/$1/Maildir/.Trash
sudo maildirmake.dovecot /home/$1/Maildir/.Templates
sudo chown -R $1 /home/$1/Maildir/
sudo chmod -R go-rwx /home/$1/Maildir
#cria um dominio virtual no postfix
echo "$2.bigodes.sj.ifsc.edu.br OK" >> /etc/postfix/mydomains
#associa o usuario ao dominio virtual do mesmo
echo "$2.bigodes.sj.ifsc.edu.br Dominio_$2" >>/etc/postfix/virtual
echo "$1@$2.bigodes.sj.ifsc.edu.br $1" >>/etc/postfix/virtual
#reinicia o servico do postfix
sudo /usr/sbin/postmap /etc/postfix/virtual
sudo /usr/sbin/postmap /etc/postfix/mydomains
sudo /etc/init.d/postfix restart
sudo service dovecot restart

Exclui email do cliente e restarta o serviço

#!/bin/bash
#$1 nome do usuario
#$2 nome do dominio
IFS=$'\n'
#Excluir linha no arquivo /etc/bind/named.conf.local
echo > /etc/postfix/exclui.email.bkp #cria um arquivo temporario
flag=0 #flag para verificar quantas linhas serão apagadas do arquivo
arq=`cat /etc/postfix/mydomains`
for linha in $arq; do
teste=`echo $linha | grep $2` #filtra o nome do dominio
#teste que verifica o nome do usuário e exclui seu dominio
if ! [ -z $teste ] #testa se nesta linha achou o nome. Se sim seta a flag
       then
       flag=1
fi
if [ -z $teste ] # se não tiver o nome...
       then
       if [ $flag -ge 1 ] #...verifica se a flag ta setada...
               then
               flag=$((flag+1)) #incrementa a flag (1)
               else # ...e se não tiver setada, escreve no arquivo temporario
               echo "$linha" >> /etc/postfix/exclui.email.bkp
       fi
fi
#if [ $flag -gt 1 ] #(1) ate chegar a 5, etão zera a flag pq acabaram os campos que pertencem ao usuário
#       then flag=0
#fi
flag=0
done
echo > /etc/postfix/mydomains
arquivo=`cat /etc/postfix/exclui.email.bkp`
for linha1 in $arquivo; do
echo "$linha1" >> /etc/postfix/mydomains #filtra o nome do dominio
done
echo > /etc/postfix/exclui.email.bkp #copia do temp para o original e exclui o temporario.
#######################################################################
#######################################################################
flag=0 #flag para verificar quantas linhas serão apagadas do arquivo
arq=`cat /etc/postfix/virtual`
for linha in $arq; do
teste=`echo $linha | grep $2` #filtra o nome do dominio
#teste que verifica o nome do usuário e exclui seu dominio
if ! [ -z $teste ] #testa se nesta linha achou o nome. Se sim seta a flag
       then
       flag=1
fi
if [ -z $teste ] # se não tiver o nome...
       then
       if [ $flag -ge 1 ] #...verifica se a flag ta setada...
               then
               flag=$((flag+1)) #incrementa a flag (1)
               else # ...e se não tiver setada, escreve no arquivo temporario
               echo "$linha" >> /etc/postfix/exclui.email.bkp
       fi
fi
#if [ $flag -gt 1 ] #(1) ate chegar a 5, etão zera a flag pq acabaram os campos que pertencem ao usuário
#       then flag=0
#fi
flag=0
done
echo > /etc/postfix/virtual
arquivo=`cat /etc/postfix/exclui.email.bkp`
for linha1 in $arquivo; do
echo "$linha1" >> /etc/postfix/virtual #filtra o nome do dominio
done
echo > /etc/postfix/exclui.email.bkp #copia do temp para o original e exclui o temporario. 
######################################################################
#remove a conta de usuario do servidor
sudo userdel -r $1
######################################################################
#reinicia o serviçoPostfix
sudo /usr/sbin/postmap /etc/postfix/virtual
sudo /usr/sbin/postmap /etc/postfix/mydomains
sudo /etc/init.d/postfix restart

Cria domínios e restarta o serviço.

#!/bin/bash
#$1 nome do usuario
#$2 nome do dominio
#adiciona linhas no named.conf.local para inclusão de novo dominio
echo "//$2" >> /etc/bind/named.conf.local
echo "zone \"$2.bigodes.sj.ifsc.edu.br\" IN {" >> /etc/bind/named.conf.local
echo "        type master;" >> /etc/bind/named.conf.local
echo "        file \"/etc/bind/$2.zone\";" >> /etc/bind/named.conf.local
#echo "        allow-update { none; };" >> /etc/bind/named.conf.local
#echo "        allow-transfer { 200.135.37.101; };" >> /etc/bind/named.conf.local
echo "};" >> /etc/bind/named.conf.local
#fim de adicionar linhas no named.conf.local
touch /etc/bind/$2.zone #cria o arquivo zone do dominio
data=`date +%Y%m%d` # para controle do serial
#cria o sub-dominio do usuario
echo  "$"TTL"    86400" >> /etc/bind/$2.zone
echo "@               IN SOA m.bigodes.sj.ifsc.edu.br bigodes (" >> /etc/bind/$2.zone
echo "                $data$(($RANDOM%100))      ;serial" >> /etc/bind/$2.zone
echo "                3H                         ;refresh" >> /etc/bind/$2.zone
echo "                15M             ;retry" >> /etc/bind/$2.zone
echo "                1W              ;expiry" >> /etc/bind/$2.zone
echo "                1D)            ;minimum" >> /etc/bind/$2.zone
echo >> /etc/bind/$2.zone
echo "                IN NS   m.$2.bigodes.sj.ifsc.edu.br." >> /etc/bind/$2.zone
echo "                IN MX 0 m.$2.bigodes.sj.ifsc.edu.br." >> /etc/bind/$2.zone
echo "localhost       IN A    127.0.0.1" >> /etc/bind/$2.zone
echo "$"ORIGIN" $2.bigodes.sj.ifsc.edu.br." >> /etc/bind/$2.zone
echo "m       A       200.135.37.101" >> /etc/bind/$2.zone
echo "www     A       200.135.37.101" >> /etc/bind/$2.zone
echo "mail    A       200.135.37.101" >> /etc/bind/$2.zone
#fim do sub-dominio do usuario
sudo /etc/init.d/bind9 restart
#restartar o apache pois o site nao faz
sudo /etc/init.d/apache2 reload

Exclui Domínios e restarta o serviço.

#!/bin/bash
#$1 nome do usuario
#$2 nome do dominio
IFS=$'\n'
#Excluir linha no arquivo /etc/bind/named.conf.local
touch /etc/scripts/bkp.zone #cria um arquivo temporario
flag=0 #flag para verificar quantas linhas serão apagadas do arquivo
arq=`cat /etc/bind/named.conf.local`
for linha in $arq; do
teste=`echo $linha | grep //$2` #filtra o nome do dominio
#teste=`echo $linha | grep $1 | cut -d "/" -f 3` #filtra o nome "do usuario"
#teste que verifica o nome do usuário e exclui seu dominio
if ! [ -z $teste ] #testa se nesta linha achou o nome. Se sim seta a flag
       then
       flag=1
fi
if [ -z $teste ] # se não tiver o nome...
       then
       if [ $flag -ge 1 ] #...verifica se a flag ta setada...
               then
               flag=$((flag+1)) #incrementa a flag (1)
               else # ...e se não tiver setada, escreve no arquivo temporario
               echo "$linha" >> /etc/scripts/bkp.zone
       fi
fi
if [ $flag -gt 4 ] #(1) ate chegar a 5, etão zera a flag pq acabaram os campos que pertencem ao usuário
       then flag=0
fi
done
mv /etc/scripts/bkp.zone /etc/bind/named.conf.local #copia do temp para o original e exclui o temporario.
#######################################################################
#excluir o arquivo zone do usuario
rm -r /etc/bind/$2.zone #exclui o arquivo zone
######################################################################
#reinicia o serviço DNS
sudo /etc/init.d/bind9 restart 
#restartando o apache pois o site nao faz isso
sudo /etc/init.d/apache2 reload

Cria usuário no arquivo /etc/freeradius/users e restarta o serviço.

#!/bin/bash
#editando o arquivo de usuarios do radius
echo "#$1" >> /etc/freeradius/users
echo "$1   Cleartext-Password := \"$1\" " >> /etc/freeradius/users
#restartando o radius
sudo /etc/init.d/freeradius restart

Exclui usuário do arquivo /etc/freeradius/users

#!/bin/bash
#$1 nome do usuario
#$2 nome do dominio
IFS=$'\n'
#Excluir linha no arquivo /etc/bind/named.conf.local
echo > /etc/freeradius/exclui.radius.bkp #cria um arquivo temporario
flag=0 #flag para verificar quantas linhas serão apagadas do arquivo
arq=`cat /etc/freeradius/users`
for linha in $arq; do
teste=`echo $linha | grep $1` #filtra o nome do dominio
#teste que verifica o nome do usuário e exclui seu dominio
if ! [ -z $teste ] #testa se nesta linha achou o nome. Se sim seta a flag
       then
       flag=1
fi
if [ -z $teste ] # se não tiver o nome...
       then
       if [ $flag -ge 1 ] #...verifica se a flag ta setada...
               then
               flag=$((flag+1)) #incrementa a flag (1)
               else # ...e se não tiver setada, escreve no arquivo temporario
               echo "$linha" >> /etc/freeradius/exclui.radius.bkp
       fi
fi
#if [ $flag -gt 1 ] #(1) ate chegar a 5, etão zera a flag pq acabaram os campos que pertencem ao usuário
#       then flag=0
#fi
flag=0
done
echo > /etc/freeradius/users
arquivo=`cat /etc/freeradius/exclui.radius.bkp`
for linha1 in $arquivo; do
echo "$linha1" >> /etc/freeradius/users #filtra o nome do dominio
done
echo > /etc/freeradius/exclui.radius.bkp #copia do temp para o original e exclui o temporario.
#######################################################################
#reinicia o serviçoPostfix
sudo /etc/init.d/freeradius restart

Cria um link simbólico no /etc/apache2/sites-enabled

#!/bin/bash
ln -s /etc/apache2/sites-available/$1 /etc/apache2/sites-enabled/$1

Configuração PHP.

Arquivo index, localizado no /var/www/index

<*?
session_start();
if (isset($_SESSION['nome'])){
header("location: cadastrar.php");
}else{
?*>
<*html>
<*head>
 <*meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
 <title>Hospedagem Web<*/title>
<*/head>
<*body>
<*p style="text-align:center;margin-left:auto;margin-right:auto;">Bem
vindo ao sistema Bigodes de inclusão digital! <br
<*img alt="Bigodino" src="1986-mascote-da-copa.jpg" style="display: block; text-align: center; margin-left: auto; margin-right: auto" width="166" height="200">
<*/p> <*form name="formTeste" action="autenticar.php" method="post"> <*p style="text-align:center;margin-left:auto;margin-right:auto;">Usuário:

<*input type="text" name="nome">

 <*p style="text-align:center;margin-left:auto;margin-right:auto;">Senha: 

<*input type="password" name="senha">

 <*p style="text-align:center;margin-left:auto;margin-right:auto;">

<*input type="submit" value="Entrar" name="b_enviar">

<*/form>
<*/body>
<*/html>

Arquivo de autenticação. Entrando com login e senha do ADMINISTRADOR. /var/www/autenticar.php

<*?
session_start();
$usuario = $_POST['nome'];
$senha = $_POST['senha'];
if (($usuario == "login") && ($senha == "senha")){
$_SESSION['nome'] = $usuario;
header("location: listagem2.php");
}else{
header("location: index.php");
}
?*>

Aquivo de listagem Este arquivo mostra os domínios existentes, com opções de incluir, editar e excluir. /var/www/listagem2.php

<*?
session_start();
if (!isset($_SESSION['nome'])){
       header("location: index.php");
}else {
?*>
<*html>
<*head>
<*title>Administracão de dminios</title>
<*/head>
<*body>
<*a href= "destroy.php">Sair</a>
<*br><*font size="5"><*p style="text-align:center;margin-left:auto;margin-right:auto;">Listagem de usuários cadastrados
<*br>
<*table style="text-align:center;margin-left:auto;margin-right:auto;" border="1" cellpadding="10">
<*tr align=center>
<*td><*font size=5> Nome <*font><*/td>
<*td><*font size=5> Dominio <*font><*/td>
<*td><*font size=5> Acão <*font><*/td>
<*/tr>
<*?
//conectando no servidor
$conexao = mysql_connect("localhost","root","bigode24");
//selecao da base de dados
$base_ok = mysql_select_db("bigodes",$conexao);
//obtendo os registro da tabela contatos
$consulta = "SELECT * from bigodes";
$resultado = mysql_query($consulta,$conexao);
//percorrendo a linhas obtidas pela consulta
while($linha = mysql_fetch_array($resultado)){
echo "<*tr align=center> <*td>";
echo "<*a href='alterar.php?codigo=" . $linha['codigo'] . "'>";
echo "". $linha['nome']. "<*/a>";
echo "<*/td> <*td>";
echo $linha['dominio'];
echo "<*/td> <*td>";
echo "<*a href='confirma_excluir.php?codigo=" . $linha['codigo'] . "'>";
echo " Excluir <*/a>";
echo "<*/td> <*/tr>";
}
//liberando a consulta
mysql_free_result($resultado);
//fechando a conexao
mysql_close($conexao);
?*>
<*/table>
<*P style="text-align:center;margin-left:auto;margin-right:auto;"><a href="cadastrar.php">Adicionar novo dominio</a>
<*img alt="Bigodino" src="1986-mascote-da-copa.jpg" style="float: right" width="366" height="400"> <*/body> <*/html> <*? } ?*>

Visualizar os campos para incluir os dados do novo usuário.

<*?
session_start();
if (!isset($_SESSION['nome'])){
header("location: index.php");
}else{
?>
<*html>
<*head>
<*title>Adicionar Cliente<*/title>
<*/head>
<*body>
<*p><a href= "listagem2.php">Voltar<*/a>
<*center>Adicionar Usuário e Domínio<*br><*br>
<*form name="formTeste" action="teste_dominio.php" method="post">
<*p style="text-align:center;margin-left:auto;margin-right:auto;">Nome do cliente: 
<*input type="text" name="nome"> <*p style="text-align:center;margin-left:auto;margin-right:auto;">Dominio:
<*input type="text" name="dominio"> .bigodes.sj.ifsc.edu.br <*p style="text-align:center;margin-left:auto;margin-right:auto;"> <*input type="submit" name="b_enviar" value="Criar">



<*/form> <*/body> <*/html> <*? } ?>


Adicionar usuário no sistema. /var/www/listagem.php

<*?
session_start();
if (!isset($_SESSION['nome'])){
       header("location: index.php");
}else {
$nome=$_SESSION['nome3'];
$dominio=$_SESSION['dominio3'];
$conexao = mysql_connect("localhost","root","bigode24") or die ("erro na conexÃo");
//selecao da base de dados radius
$base_ok = mysql_select_db("bigodes",$conexao) or die ("erro na base");
//inserindo um registro - reparar que aqui esta' esta' sendo incluido o dominio, junto com a variavel $dominio
$inserir = "INSERT INTO bigodes (nome,dominio) VALUES ('$nome','$dominio.bigodes.sj.ifsc.edu.br')";
mysql_query($inserir,$conexao) or die ("erro no query");
//fechando a conexao
mysql_close($conexao);
// criando o diretorio para o apache
$diretorio = "/var/www/$nome";
if(mkdir($diretorio))
//criando o arquivo index.html para o usuarioi
$arquivo = fopen("/var/www/$nome/index.html" , "a");
//nome para colocar no titulo do site do usuario
fwrite($arquivo, "<*html><*head><*title>Bem Vindo $nome !!<*/title><*/head>\n");
// colocar o que deseja no site do cliente
fwrite($arquivo, "<*body>
<*body bgcolor=#2E8B57>
<*h1> <*center>
<*b>
Bem vindo $nome!! <*br>
<*/h1>
Você acaba de adquirir uma assinatura com a empresa Bigodes Solutions, <*br>
onde você terá sua página totalmente personalizada e uma conta de e-mail totalmente grátis. <*br>
<*br>
Você está visualizando sua pagina inicial, que atualmente está com a nossa configuração, <*br>
você poderá acessar com o dominio escolhido www.$dominio.bigodes.sj.ifsc.edu.br. em qualquer lugar que tenha acesso a internet. <*br>
<*br>
DESENVOLVEDORES:
<*br>
Ademir Lucilio<*br>
Amarildo Junkes<*br>
Augusto Buttemberg<*br>
Daniel Arndt<*br>
Evandro Schutz<*br>
Maicon Guesser <*br>
<*br>
Para alterar a página e deixá-la como você precisa, basta entrar em contato com um de nossos desenvolvedores,
clicando no link abaixo e já usufruindo da sua conta de e-mail.<*br>
<*a href=http://www.webmail.bigodes.sj.ifsc.edu.br target=_blank> Webmail Bigodes Solutions <*/a><*br>
<*EMBED SRC=/var/www/relogiodigital.swf bgcolor=#2E8B57 align=left width=150 height=150>
<*br>
<*br>
<*br>
<*center><*h1>Bigodes Solutions
<*/body>
<*/html>");
fclose($arquivo);
$apache = fopen("/etc/apache2/sites-available/$nome" , "a");
fwrite($apache, "
<*VirtualHost *:80>
       ServerName $dominio.bigodes.sj.ifsc.edu.br
       DocumentRoot /var/www/$nome
       ServerAlias *$dominio.bigodes.sj.ifsc.edu.br
       ErrorLog /var/log/apache2/$nome-error.log
<*Directory /var/www/$nome>
       Options Indexes
       DirectoryIndex index.html index.php
       order allow,deny
       allow from all
<*/Directory>
<*/VirtualHost>");
fclose($apache);
//criando usuario radius
$radius = "/etc/scripts/radius.sh";
shell_exec("$radius $nome");
//criando link simbolico para o apache
$script = "/etc/scripts/apache.sh";
shell_exec("$script $nome");
//criando arquivo de dns
//apenas inseri a script, nao sei se a script esta' ok
$dns = "/etc/scripts/cria_dominio.sh";
shell_exec("$dns $nome $dominio");
//criando o e-mail
$email = "/etc/scripts/cria_email.sh";
shell_exec("$email $nome $dominio");
        echo header("location: cadastrar.php");
}
?>

Arquivos de alterações dos dados de clientes. /var/www/alterar.php abre a base de dados para exibir nome e domínio atual e encaminha os novos dados para o arquivo listagem_alterar.php

<*?
session_start();
if (!isset($_SESSION['nome'])){
header("location: index.php");
}else{
$codigo=$_GET['codigo'];
$conexao = mysql_connect("localhost","root","bigode24");
//selecao da base de dados
$base_ok = mysql_select_db("bigodes",$conexao); 
//apresenta os valores antigos na caixa de texto
$resultado = mysql_query("SELECT nome,dominio FROM bigodes WHERE codigo = '$codigo'");
$row = mysql_fetch_row($resultado);
$nome = $row[0];
$dominio = $row[1];
//separar a varialvel dominio pelo "." para nao aparecer o ".bigodes.sj.ifsc.edu.br"
$array=explode(".",$dominio);
//pega a primeira palavra do subdominio e joga novamente em dominio
$dominio=$array[0];
//fechando a conexao
mysql_close($conexao);
?>
<*html>
<*head>
<*title>Alterar<*/title>
<*/head>
<*body>
<*p><*a href= "listagem2.php">Voltar<*/a><*br>
<*center>Alterar Usuário ou Dominio<*br><*br>
<*form name="formTeste" action="listagem_alterar.php" method="GET">
<*p style="text-align:center;margin-left:auto;margin-right:auto;">Nome do Usuário:
<*INPUT TYPE=TEXT NAME="nome2" VALUE="<*? echo $nome; ?>"><*br><*br> <*p style="text-align:center;margin-left:auto;margin-right:auto;">Dominio:<*br> <*INPUT TYPE=TEXT NAME="dominio2" VALUE="<*? echo $dominio; ?>"> .bigodes.sj.ifsc.edu.br <*br> <*input type="hidden" name="codigo2" value="<? echo " $codigo" ?>" > <*br> <*p style="text-align:center;margin-left:auto;margin-right:auto;"><*input type="submit" name="submit" value="Alterar Dados" > <*/form> <*/body> <*/html> <?

Arquivo que testa a existencia do usuário, domínio e se possui campo em braco. /var/www/teste_dominio

<*?
session_start();
if (!isset($_SESSION['nome'])){
       header("location: index.php");
}else {
$nome=$_POST['nome'];
$dominio=$_POST['dominio'];
if ( $nome ==  || $dominio ==  ) {
echo "Nao deixe campos em branco!";
?>
<*html><*body>
<*br><*br>
<*a href= "cadastrar.php">Voltar<*/a>
<*?
}else{
$conexao = mysql_connect("localhost","root","bigode24") or die ("erro na conex�o");
$base_ok = mysql_select_db("bigodes",$conexao) or die ("erro na base");
$consulta = "SELECT dominio FROM bigodes WHERE dominio = '$dominio.bigodes.sj.ifsc.edu.br'";
$resultado = mysql_query($consulta,$conexao);
$row = mysql_fetch_row($resultado);
$teste = $row[0];
$consulta2 = "SELECT nome FROM bigodes WHERE nome = '$nome'";
$resultado2 = mysql_query($consulta2,$conexao);
$row = mysql_fetch_row($resultado2);
$teste2 = $row[0];
mysql_close($conexao);
if ( $teste ==  && $teste2 ==  ) {
       $_SESSION['nome3']=$nome;
       $_SESSION['dominio3']=$dominio;
       header("location: listagem.php");
}else{
       //o resultado que aparece quando ja existe o dominio escolhido
       echo
       "<*font size=5>
       Dominio ou Nome ja existe. <*br>
       Adicione novo dominio ou nome!
       <*/font>";
?>
<*br>
<*br>
<*a href= "cadastrar.php">Voltar<*/a>
<*/body>
<*/html>
<*?
}
}
}
?>

Aparece o campo "confirma excluir" /var/www/confirma_excluir

<*?
session_start();
if (!isset($_SESSION['nome'])){
       header("location: index.php");
}else {
$codigo=$_GET['codigo'];
}
?>
<*html>
<*head>
<*title>Confirmar Exclusão<*/title>
<*/head>
<*body>
<*?
$conexao = mysql_connect("localhost","root","bigode24") or die ("erro na base");
//selecao da base de dados
$base_ok = mysql_select_db("bigodes",$conexao) or die ("erro na base");
$consulta = "SELECT nome from bigodes WHERE codigo='$codigo'";
$resultado = mysql_query($consulta,$conexao);
while($linha = mysql_fetch_array($resultado)){
$nome = $linha["nome"];
} 
//fechando a conexao
mysql_close($conexao);
?>
<*br>
<*p style="text-align:center;margin-left:auto;margin-right:auto;">Você realmente deseja excluir o cliente "<*? echo "$nome" ?>" ? <*br>
<*br><*br>
<*?
echo "<*a href='excluir.php?codigo=" . $codigo . "'>Sim<*/a>"
?>
<*p style="text-align:center;margin-left:auto;margin-right:auto;"><*a href="listagem2.php">Nao<*/a>
<*/body>
<*/html>

Exclui os dados do cliente /var/www/excluir.php

<*?
session_start();
if (!isset($_SESSION['nome'])){
       header("location: index.php");
}else {
$codigo=$_GET['codigo'];
}
?> 
<*html>
<*head>
<*title>Confirmar Exclusão<*/title>
<*/head>
<*body>
<*?
$conexao = mysql_connect("localhost","root","bigode24") or die ("erro na base");
//selecao da base de dados
$base_ok = mysql_select_db("bigodes",$conexao) or die ("erro na base");
$consulta = "SELECT nome from bigodes WHERE codigo='$codigo'";
$resultado = mysql_query($consulta,$conexao);
while($linha = mysql_fetch_array($resultado)){
$nome = $linha["nome"];
}
//fechando a conexao
mysql_close($conexao);
?>
<*br>
<*p style="text-align:center;margin-left:auto;margin-right:auto;">Você realmente deseja excluir o cliente "<*? echo "$nome" ?>" ? 
<*br><*br> <*? echo "<*a href='excluir.php?codigo=" . $codigo . "'>Sim<*/a>" ?> <*p style="text-align:center;margin-left:auto;margin-right:auto;"><*a href="listagem2.php">Nao<*/a> <*/body> <*/html>


Configurações Radius

 Servidor Radius,
apt-get install free-radius
vi /etc/freeradius/users

Descomentar a linha, >  steve   Cleartext-Password := "testing"

#steve   Cleartext-Password := "testing"
#       Service-Type = Framed-User,
#       Framed-Protocol = PPP,
#       Framed-IP-Address = 172.16.3.33,
#       Framed-IP-Netmask = 255.255.255.0,
#       Framed-Routing = Broadcast-Listen,
#       Framed-Filter-Id = "std.ppp",
#       Framed-MTU = 1500,
#       Framed-Compression = Van-Jacobsen-TCP-IP


Verificar se o serviço está no ar,
ps ax|grep free
Restarta,
service freeradius restart


Teste para ver se está funcionando,

root@bigodes:/etc/freeradius# radtest steve testing 127.0.0.1 1 testing123
Sending Access-Request of id 59 to 127.0.0.1 port 1812
    User-Name = "steve"
    User-Password = "testing"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=59, length=20


Caso não,

root@bigodes:/etc/freeradius# radtest steve testin 127.0.0.1 1 testing123
Sending Access-Request of id 170 to 127.0.0.1 port 1812
    User-Name = "steve"
    User-Password = "testin"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 1
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=170, length=20


vi clients.conf

client 200.135.37.66 {
        secret          = ier
        shortname       = AC-PPPoE
}

Novamente restarta,

root@bigodes:/etc/freeradius# !serv
service freeradius restart
 * Stopping FreeRADIUS daemon freeradius                                                           [ OK ] 
 * Starting FreeRADIUS daemon freeradius                                                           [ OK ] 


Verificar com o tcpdump,

root@bigodes:/etc/freeradius# tcpdump -i eth0 -ln -vv -s 512 udp port 1812
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 512 bytes
21:41:47.727956 IP (tos 0x0, ttl 60, id 12066, offset 0, flags [none], proto UDP (17), length 90)
    200.135.37.66.1814 > 200.135.37.101.1812: [udp sum ok] RADIUS, length: 62
    Access Request (1), id: 0xda, Authenticator: c95bde6c431fa3d00c96d6d8354841ed
      Username Attribute (1), length: 7, Value: steve
        0x0000:  7374 6576 65
      Password Attribute (2), length: 18, Value: 
        0x0000:  b626 b5ed 464b 9c2d 05d6 f8d0 34c0 d850
      NAS IP Address Attribute (4), length: 6, Value: 127.0.1.1
        0x0000:  7f00 0101
      NAS Port Attribute (5), length: 6, Value: 1
        0x0000:  0000 0001
      Proxy State Attribute (33), length: 5, Value: 179
        0x0000:  3137 39
21:41:47.728184 IP (tos 0x0, ttl 64, id 43900, offset 0, flags [none], proto UDP (17), length 53)
    200.135.37.101.1812 > 200.135.37.66.1814: [udp sum ok] RADIUS, length: 25
    Access Accept (2), id: 0xda, Authenticator: 56b7a8b7c2aa5e63f947dac1a3601ba0
      Proxy State Attribute (33), length: 5, Value: 179
        0x0000:  3137 39


Servidor radius no AC,

ssh aluno@192.168.0.1
senha: aluno 
aluno@ac:~$ sudo -s
senha: aluno


Cadastrando Dominios no Servidor Radius do AC,

root@ac:~# /root/add-realm.sh bigodes 200.135.37.101 bigodes.sj.ifsc.edu.br
root@ac:~# service freeradius restart
 * Stopping FreeRADIUS daemon freeradius                                                           [ OK ] 
 * Starting FreeRADIUS daemon freeradius                                                           [ OK ]


Testando no Radius AC,

root@ac:~# radtest steve@bigodes.sj.ifsc.edu.br testing 127.0.0.1 1 testing123
Sending Access-Request of id 203 to 127.0.0.1 port 1812
    User-Name = "steve@bigodes.sj.ifsc.edu.br"
    User-Password = "testing"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=203, length=20



Diagramabigode.jpg


Ier.jpg

Ier2.jpg

Ier3.jpg

Ier4.jpg

Ier5.jpg

Ier6.jpg