Mudanças entre as edições de "Projeto Integrador - 2009.2 - Equipe Iguana"
(147 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 23: | Linha 23: | ||
gateway 200.135.37.126 | gateway 200.135.37.126 | ||
network 200.135.37.64 | network 200.135.37.64 | ||
+ | |||
+ | ===SSH=== | ||
+ | |||
+ | O Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma unidade remota. Possui as mesmas funcionalidades do Telnet, com a vantagem da conexão entre o cliente e o servidor ser criptografada. | ||
*Instalação do SSH: | *Instalação do SSH: | ||
Linha 32: | Linha 36: | ||
apt-get update | apt-get update | ||
− | *Instalação do | + | ===APACHE=== |
+ | |||
+ | O servidor Apache ou Servidor HTTP Apache é o mais bem sucedido servidor web livre. Suas funcionalidades são mantidas através de uma estrutura de módulos, permitindo inclusive que o usuário escreva seus próprios módulos. | ||
+ | |||
+ | *Instalação do APACHE2: | ||
apt-get install apache2 | apt-get install apache2 | ||
+ | |||
+ | ===PHP=== | ||
+ | |||
+ | O Personal Home Page ou PHP é uma linguagem que permite criar sites web dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e links. A diferença de PHP com relação à linguagens semelhantes a Javascript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor | ||
*Instalação do PHP5: | *Instalação do PHP5: | ||
apt-get install php5 | apt-get install php5 | ||
+ | |||
+ | ===MYSQL=== | ||
+ | |||
+ | O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface. É atualmente um dos bancos de dados mais populares, com mais de 10 milhões de instalações pelo mundo. | ||
*Instalação do MYSQL: | *Instalação do MYSQL: | ||
apt-get install mysql-server | apt-get install mysql-server | ||
+ | |||
+ | ===DHCP=== | ||
+ | |||
+ | O DHCP ("Dynamic Host Configuration Protocol" ou "protocolo de configuração dinâmica de endereços de rede"), é um protocolo de serviço TCP/IP que oferece configuração dinâmica de terminais, com concessão de endereços IP de host e outros parâmetros de configuração para clientes de rede, ou seja, permite que todos os micros da rede recebam suas configurações de rede automaticamente a partir de um servidor central, sem que você precise ficar configurando os endereços manualmente em cada um. | ||
*Instalação do DHCP3: | *Instalação do DHCP3: | ||
apt-get install dhcp3-server | apt-get install dhcp3-server | ||
+ | |||
+ | ===DNS=== | ||
+ | |||
+ | O DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições: examinar e atualizar seu banco de dados e | ||
+ | resolver nomes de domínios em endereços de rede (IPs). Permite a localização de hosts em um domínio determinado. Num sistema livre o serviço é implementado pelo software BIND. | ||
*Instalação do DNS: | *Instalação do DNS: | ||
apt-get install bind9 | apt-get install bind9 | ||
+ | |||
+ | ===POSTFIX=== | ||
+ | |||
+ | O Postfix é um agent de transferência de emails (MTA), um software livre para envio e entrega de emails. Apresenta-se como uma alternativa segura ao Sendmail, sendo rápido e fácil de administrar. | ||
*Instalação do POSTFIX: | *Instalação do POSTFIX: | ||
apt-get install postfix | apt-get install postfix | ||
− | apt-get install dovecot-imapd (Possibilita que os email's possam ser baixados) | + | apt-get install dovecot-imapd (Possibilita que os email's possam ser baixados) |
+ | |||
+ | ===CACTI=== | ||
+ | |||
+ | Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos. Monitora o estado de elementos de rede e programas bem como a largura de banda utilizada e uso de CPU. | ||
*Instalação do CACTI: | *Instalação do CACTI: | ||
Linha 82: | Linha 115: | ||
*A interface eth1 foi substituida pela interface eth2. | *A interface eth1 foi substituida pela interface eth2. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Configuração do DHCP | *Configuração do DHCP | ||
Linha 153: | Linha 177: | ||
*Configuração do DNS | *Configuração do DNS | ||
# /etc/bind/named.conf.local | # /etc/bind/named.conf.local | ||
+ | |||
zone "iguana.sj.ifsc.edu.br" { | zone "iguana.sj.ifsc.edu.br" { | ||
type master; | type master; | ||
file "/etc/bind/iguana.sj.ifsc.edu.br"; | file "/etc/bind/iguana.sj.ifsc.edu.br"; | ||
}; | }; | ||
− | + | ||
# /etc/bind/iguana.sj.ifsc.edu.br | # /etc/bind/iguana.sj.ifsc.edu.br | ||
+ | |||
$TTL 86400 | $TTL 86400 | ||
; | ; | ||
Linha 186: | Linha 212: | ||
; Canonical Name: "apelido" | ; Canonical Name: "apelido" | ||
web IN CNAME www | web IN CNAME www | ||
+ | |||
+ | *Configuração das interfaces de rede: | ||
+ | |||
+ | # /etc/network/interfaces | ||
+ | |||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | #Rede externa | ||
+ | auto eth2 | ||
+ | iface eth2 inet static | ||
+ | address 200.135.37.111 | ||
+ | netmask 255.255.255.192 | ||
+ | broadcast 200.135.37.127 | ||
+ | gateway 200.135.37.126 | ||
+ | network 200.135.37.64 | ||
+ | #Rede interna | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 172.11.0.1 | ||
+ | netmask 255.255.0.0 | ||
+ | broadcast 172.11.255.255 | ||
+ | network 172.11.0.0 | ||
+ | #Vlan ouro | ||
+ | auto vlan101 | ||
+ | iface vlan101 inet static | ||
+ | address 172.11.1.254 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.1.0 | ||
+ | vlan_raw_device eth0 | ||
+ | #Vlan prata | ||
+ | auto vlan102 | ||
+ | iface vlan102 inet static | ||
+ | address 172.11.2.254 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.2.0 | ||
+ | vlan_raw_device eth0 | ||
+ | #Vlan bronze | ||
+ | auto vlan103 | ||
+ | iface vlan103 inet static | ||
+ | address 172.11.3.254 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.3.0 | ||
+ | vlan_raw_device eth0 | ||
+ | #Vlan wifi | ||
+ | auto vlan104 | ||
+ | iface vlan104 inet static | ||
+ | address 172.11.4.254 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.4.0 | ||
+ | vlan_raw_device eth0 | ||
+ | |||
+ | ===ROUNDCUBE=== | ||
+ | |||
+ | RoundCube é um sistema de Webmail e cliente IMAP multilingual baseado nos padrões pré-definidos do protocolo com uma interface parecida de uma aplicação normal. Foi escrito em PHP e requer um banco de dados MySQL. | ||
+ | |||
+ | *Instalação do ROUNDCUBE: | ||
+ | apt-get install roundcube | ||
+ | |||
+ | *Configuração do POSTFIX: | ||
+ | /etc/postfix/main.cf | ||
+ | |||
+ | (...) | ||
+ | myhostname = mail.iguana.sj.ifsc.edu.br | ||
+ | alias_maps = hash:/etc/aliases | ||
+ | alias_database = hash:/etc/aliases | ||
+ | myorigin = iguana.sj.ifsc.edu.br | ||
+ | mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost | ||
+ | (...) | ||
+ | |||
+ | *Realização de testes enviando e-mail's, confirmando o funcionamento do DNS e do POSTFIX. | ||
+ | |||
+ | *Configuração do SNMP: | ||
+ | /etc/snmp/snmpd.conf | ||
+ | |||
+ | rocommunity iguana | ||
+ | syscontact iguana@iguana.sj.ifsc.edu.br | ||
+ | syslocation laboratório de redesI | ||
+ | |||
+ | *Realização da configuração do [http://iguana.sj.ifsc.edu.br/cacti CACTI], criação dos gráficos e foi constatado sucesso na geração dos gráficos. | ||
+ | |||
+ | ==Dia 30/11/2009== | ||
+ | |||
+ | *Verificado defeito na interface off-bord. Realizada a troca da interface. | ||
+ | |||
+ | *Configuração das VLANS no switch do Lab. de Redes I: | ||
+ | vlan101 -> iguanaouro | ||
+ | vlan102 -> iguanaprata | ||
+ | vlan103 -> iguanabronze | ||
+ | vlan104 -> iguanawifi | ||
+ | porta 01 tagged nas vlans 101, 102, 103 e 104 -> vlan01 untagged | ||
+ | porta 26 tagged nas vlans 101, 102, 103 e 104 -> vlan26 untagged | ||
+ | |||
+ | *Configuração do webmail ROUNDCUBE: | ||
+ | apt-get install roundcube | ||
+ | apt-get install php-mdb2-driver-mysql | ||
+ | |||
+ | *Descomentado as duas primeiras linhas do arquivo /etc/roundcube/apache.conf | ||
+ | Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ | ||
+ | Alias /roundcube /var/lib/roundcube | ||
+ | (...) | ||
+ | |||
+ | ===FIREWALL=== | ||
+ | |||
+ | Firewall é o nome dado ao dispositivo de uma rede de computadores que tem por objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Sua função consiste em regular o tráfego de dados entre redes distintas e impedir a transmissão e/ou recepção de acessos nocivos ou não autorizados de uma rede para outra. | ||
+ | |||
+ | *Criação da script do FIREWALL: | ||
+ | /etc/init.d/firewall.sh | ||
+ | |||
+ | #!/bin/bash | ||
+ | # Regras aplicadas para interface ETH0 | ||
+ | IFACE="eth2" | ||
+ | # Ativar o roteamento | ||
+ | sysctl -w net.ipv4.ip_forward=1 | ||
+ | # Ativar o nat | ||
+ | iptables -t nat -A POSTROUTING -o ${IFACE} -j MASQUERADE | ||
+ | # Limpando as regras do iptables | ||
+ | iptables -F | ||
+ | # Política padrão, portas de entrada bloqueadas e saída liberada. | ||
+ | iptables -P INPUT DROP | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | # Liberar interface Loopback | ||
+ | iptables -A INPUT -i lo -j ACCEPT | ||
+ | # Liberar solitações do servidor local | ||
+ | iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | # Liberando portas necessárias | ||
+ | # Liberar porta para SSH | ||
+ | iptables -A INPUT -p tcp --dport 2240 -j ACCEPT | ||
+ | # Liberar porta para Telnet | ||
+ | iptables -A INPUT -p tcp --dport 23 -j ACCEPT | ||
+ | # Liberar porta para HTTP | ||
+ | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | ||
+ | # Liberar porta HTTPS | ||
+ | iptables -A INPUT -p tcp --dport 443 -j ACCEPT | ||
+ | # Liberar porta POP3 | ||
+ | iptables -A INPUT -p tcp --dport 110 -j ACCEPT | ||
+ | # Liberar porta SMTP | ||
+ | iptables -A INPUT -p tcp --dport 25 -j ACCEPT | ||
+ | # Liberar porta IMAP | ||
+ | iptables -A INPUT -p tcp --dport 143 -j ACCEPT | ||
+ | # Liberar porta mysql | ||
+ | iptables -A INPUT -p tcp --dport 3306 -j ACCEPT | ||
+ | |||
+ | *Configurado o firewall para rodar na inicialização da máquina: | ||
+ | root@iguana:/etc/rc2.d# ls -lt|grep fire | ||
+ | lrwxrwxrwx 1 root root 23 2009-11-30 22:04 S70firewall -> /etc/init.d/firewall.sh | ||
+ | |||
+ | ==Dia 01/12/2009== | ||
+ | |||
+ | *Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas. | ||
+ | |||
+ | ==Dia 02/12/2009== | ||
+ | |||
+ | ===NOCAT=== | ||
+ | |||
+ | O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha. | ||
+ | |||
+ | *Instalação do NOCAT: | ||
+ | |||
+ | Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz | ||
+ | Extrair o arquivo | ||
+ | tar xzf NoCatAuth-nightly.tar.gz | ||
+ | Navegar até o diretório onde o software foi extraido | ||
+ | cd NoCatAuth-nightly | ||
+ | Instalação: | ||
+ | make gateway | ||
+ | make PREFIX=/usr/local/nocat/authserv authserv | ||
+ | make PREFIX=/usr/local/nocat/authserv pgpkey | ||
+ | |||
+ | *Configuração do NOCAT: | ||
+ | vi /usr/local/nocat/nocat.conf | ||
+ | |||
+ | AuthServiceAddr 200.135.37.111 | ||
+ | AuthServiceURL http://$AuthServiceAddr/cgi-bin/login | ||
+ | LogoutURL http://$AuthServiceAddr/logout.html | ||
+ | AllowedWebHosts 200.135.37.111 | ||
+ | RouteOnly 1 | ||
+ | Executar o gateway | ||
+ | /usr/local/nocat/bin/gateway | ||
+ | |||
+ | *Configuração do AUTHSERV: | ||
+ | /usr/local/nocat/authserv/nocat.conf | ||
+ | |||
+ | DocumentRoot /usr/local/nocat/authserv/htdocs | ||
+ | DataSource Passwd | ||
+ | UserFile /usr/local/nocat/authserv/etc/passwd | ||
+ | GroupUserFile /usr/local/nocat/authserv/etc/group | ||
+ | GroupAdminFile /usr/local/nocat/authserv/etc/groupadm | ||
+ | LocalGateway 200.135.37.111 | ||
+ | |||
+ | *Configuração do APACHE2 para execução do GCI do AUTHSERV: | ||
+ | /etc/apache2/sites-enabled/000-default | ||
+ | |||
+ | Include /usr/local/nocat/authserv/httpd.conf #Linha inclusa no arquivo. | ||
+ | Copiar o arquivo trustedkeys.gpg | ||
+ | /usr/local/nocat/authserv/trustedkeys.gpg para o | ||
+ | diretório /usr/local/nocat/pgp. | ||
+ | cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/pgp | ||
+ | |||
+ | *Criação de usuário e senha para utilizar a página do NOCAT: | ||
+ | /usr/local/nocat/authserv/bin/admintool -c usuário senha | ||
+ | /usr/local/nocat/authserv/bin/admintool -a usuário Nome_de_um_grupo | ||
+ | |||
+ | *Testes e finalização da instalação de cabeamento estruturado. | ||
+ | |||
+ | ==03/12/2009== | ||
+ | |||
+ | *Realizado ajustes no DNS, nas partes físicas e testes com o DHCP. | ||
+ | |||
+ | ==04/12/2009== | ||
+ | |||
+ | *Ajustes na instalação de cabeamento estruturado. | ||
+ | |||
+ | *Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais. | ||
+ | |||
+ | *'''Problemas com o servidor! Perda total das configurações do servidor.''' | ||
+ | |||
+ | *Realização de todos os serviços anteriormente postados. | ||
+ | |||
+ | ==06/12/2009 (domingo)== | ||
+ | |||
+ | *Criação das tabelas que serão usadas no MYSQL: | ||
+ | |||
+ | #TABELA usuario# | ||
+ | mysql> create table usuario ( | ||
+ | -> uID int not null auto_increment primary key, | ||
+ | -> uNome varchar (45)not null, | ||
+ | -> uSenha varchar (45)not null) | ||
+ | -> TYPE=INNODB; | ||
+ | |||
+ | #TABELA estandes# | ||
+ | mysql> create table estandes ( | ||
+ | -> eID int not null auto_increment primary key, | ||
+ | -> usuario_uID int, | ||
+ | -> eNome varchar(45) not null, | ||
+ | -> ePortas varchar(45) not null, | ||
+ | -> FOREIGN KEY (usuario_uID) REFERENCES usuario(uID) ON DELETE CASCADE) | ||
+ | -> TYPE=INNODB; | ||
+ | |||
+ | #TABELA usuarioswifi# | ||
+ | mysql> create table usuarioswifi ( | ||
+ | -> wID int not null auto_increment primary key, | ||
+ | -> estandes_eID int, | ||
+ | -> wLogin varchar(45) not null, | ||
+ | -> wSenha varchar(45) not null, | ||
+ | -> FOREIGN KEY (estandes_eID) REFERENCES estandes(eID) ON DELETE CASCADE) | ||
+ | -> TYPE=INNODB; | ||
+ | |||
+ | ==07/12/2009== | ||
+ | |||
+ | *Criação do organograma da instalação de Cabeamento Estruturado: | ||
+ | |||
+ | <graphviz> | ||
+ | Digraph PI { | ||
+ | "Servidor Iguana" -> "ETH0 192.168.1.103" | ||
+ | |||
+ | "ETH0 192.168.1.103" -> "Porta DC06 Rack Central" | ||
+ | |||
+ | "Servidor Iguana" -> "ETH1 200.135.37.111" | ||
+ | |||
+ | "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita" | ||
+ | |||
+ | "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I" | ||
+ | |||
+ | "Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios" | ||
+ | |||
+ | "Porta DC06 Rack Direita" -> "Porta 01 Switch Lab Redes I" | ||
+ | |||
+ | "Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 01 Switch" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 02 Switch" | ||
+ | |||
+ | "Porta 01 Switch" -> "Porta 21 Patch Panel do Switch" | ||
+ | |||
+ | "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch" | ||
+ | |||
+ | "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01" | ||
+ | |||
+ | "Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01" | ||
+ | |||
+ | "Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02" | ||
+ | |||
+ | "Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02" | ||
+ | |||
+ | "Porta 05 Patch Panel 02" -> "Tomada E1T01" | ||
+ | |||
+ | "Porta 06 Patch Panel 02" -> "Tomada E2T01" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 03 Switch" | ||
+ | |||
+ | "Porta 03 Switch" -> "Porta 23 Patch Panel" | ||
+ | |||
+ | "Porta 23 Patch Panel" -> "Access Point" | ||
+ | } | ||
+ | </graphviz> | ||
+ | |||
+ | |||
+ | |||
+ | *Criação da página web [http://www.iguana.sj.ifsc.edu.br Iguana]. | ||
+ | |||
+ | ===HTTPS=== | ||
+ | |||
+ | HTTPS (HyperText Transfer Protocol Secure), é uma implementação do protocolo HTTP sobre uma camada SSL ou do TLS. Essa camada adicional permite que os dados sejam transmitidos através de uma conexão criptografada e que se verifique a autenticidade do servidor e do cliente através de certificados digitais. Ele evita que uma informação transmitida entre o cliente e o servidor seja visualizada por terceiros. | ||
+ | |||
+ | *Instalação das bibliotecas necessárias para o serviço HTTPS: | ||
+ | apt-get install openssl ssl-cert | ||
+ | |||
+ | * Habilitado Módulo SSL no APACHE2: | ||
+ | a2enmod ssl | ||
+ | |||
+ | * Criando Certificado: | ||
+ | make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem | ||
+ | |||
+ | * Movendo a chave criada: | ||
+ | mv apache.pem /etc/apache2/apache.pem | ||
+ | |||
+ | * Alterando as permissões: | ||
+ | chmod 600 /etc/apache2/apache.pem | ||
+ | |||
+ | * Criando arquivo VirtualHost: | ||
+ | vi /etc/apache2/sites-enablesd/svn | ||
+ | |||
+ | NameVirtualHost *:443 | ||
+ | <VirtualHost *:443> | ||
+ | SSLEngine on | ||
+ | ServerSignature On | ||
+ | SSLCertificateFile /etc/apache2/ssl/apache.pem | ||
+ | # RedirectMatch ^/$ https://iguana.sj.ifsc.edu.br/ | ||
+ | ServerAdmin webmaster@localhost | ||
+ | DocumentRoot /var/www | ||
+ | <Directory /> | ||
+ | Options FollowSymLinks | ||
+ | AllowOverride None | ||
+ | </Directory> | ||
+ | <Directory /var/www/> | ||
+ | Options Indexes FollowSymLinks MultiViews | ||
+ | AllowOverride None | ||
+ | Order allow,deny | ||
+ | allow from all | ||
+ | </Directory> | ||
+ | # ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | ||
+ | Include /usr/local/nocat/authserv/httpd.conf | ||
+ | <Directory "/usr/lib/cgi-bin"> | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.log | ||
+ | # Possible values include: debug, info, notice, warn, error, crit, | ||
+ | # alert, emerg. | ||
+ | LogLevel warn | ||
+ | CustomLog /var/log/apache2/access.log combined | ||
+ | Alias /doc/ "/usr/share/doc/" | ||
+ | <Directory "/usr/share/doc/"> | ||
+ | Options Indexes MultiViews FollowSymLinks | ||
+ | AllowOverride None | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.0/255.0.0.0 ::1/128 | ||
+ | </Directory> | ||
+ | </VirtualHost> | ||
+ | |||
+ | * Habilitando o site com SSH: | ||
+ | a2ensite ssl | ||
+ | |||
+ | * Reiniciando o APACHE: | ||
+ | /etc/init.d/apache2 restart | ||
+ | |||
+ | ==08/12/2009== | ||
+ | |||
+ | *Devido a uma confusão na identificação de algumas portas de um patch panel, houve a necessidade de mudar a posição de alguns cabos para solucionar o problema. | ||
+ | |||
+ | *Certificação da instalação de Cabeamento Estruturado. | ||
+ | |||
+ | *Script de BACKUP: | ||
+ | /etc/init.d/backup.sh | ||
+ | |||
+ | #!/bin/bash | ||
+ | data=`date +%F` | ||
+ | |||
+ | tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc | ||
+ | echo "Cópia do Backup do /etc."|mutt kalvims@gmail.com -a /home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data" | ||
+ | |||
+ | tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www | ||
+ | echo "Cópia do Backup do www."|mutt kalvims@gmail.com -a /home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data" | ||
+ | |||
+ | *Inserido no /etc/crontab: | ||
+ | 0 3 * * * root /etc/init.d/backup.sh | ||
+ | |||
+ | *Relatório sobre o funcionamento do servidor: | ||
+ | |||
+ | /etc/init.d/ | ||
+ | |||
+ | #!/bin/bash | ||
+ | echo "Relatório servidor iguana" | ||
+ | data=`date +%d-%m-%y_%k-%M` | ||
+ | ## Definições das variáveis ### | ||
+ | DIRETORIO="/tmp/relatorio" | ||
+ | ARQ="/tmp/relatorio/rede.txt" | ||
+ | ARQ2="/tmp/relatorio/processo.txt" | ||
+ | ### | ||
+ | # Remover o diretório se já criado ... | ||
+ | rm -rf $DIRETORIO >> /dev/null | ||
+ | # Criar diretório e arquivos necessários | ||
+ | mkdir $DIRETORIO | ||
+ | touch $ARQ | ||
+ | # Começo do Script | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo " ### Relatório servidor IGUANA $data ###" >> $ARQ; | ||
+ | echo " " >> $ARQ; | ||
+ | echo " ### Relatório servidor IGUANA $data ###" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "# Informações referentes ao processador #" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2` | ||
+ | echo "$processador" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo "# Informações referentes aos discos #" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "Discos: `df -hT`" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2` | ||
+ | echo "Memória Total: $MEMTOTAL" >> $ARQ2; | ||
+ | MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2` | ||
+ | echo "Memória Livre: $MEMFREE" >> $ARQ2 | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo "# Informações referente a DHCP #" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ; | ||
+ | echo "" >> $ARQ; | ||
+ | cat /etc/dhcp3/dhcpd.conf >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a DNS #" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ; | ||
+ | cat /etc/bind/named.conf.local >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ; | ||
+ | cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Firewall #" >> $ARQ; | ||
+ | echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ; | ||
+ | iptables -L >> $ARQ | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Roteamento #" >> $ARQ | ||
+ | route -n >> $ARQ | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Crontab #" >> $ARQ; | ||
+ | cat /etc/crontab >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | mv $ARQ /tmp/relatorio/redes_"$data".txt | ||
+ | cat /tmp/relatorio/redes_"$data".txt | mail -s redes_"$data" iguana.ifsc@gmail.com | ||
+ | mv $ARQ2 /tmp/relatorio/processo_"$data".txti | mail -s processo_"$data" iguana.ifsc@gmail.com | ||
+ | echo "Relatório enviado com exito para $ARQ" | ||
+ | |||
+ | ==Dia 09/12/2009== | ||
+ | |||
+ | *Organograma da disciplina de Instalação de Equipamentos de Rede: | ||
+ | |||
+ | <graphviz> | ||
+ | Digraph PI { | ||
+ | "Internet - IFSC" -> "Switch 3Com 2824" | ||
+ | "Switch 3Com 2824" -> "Servidor Iguana" | ||
+ | "Servidor Iguana" -> "Switch D-Link 3526 do Lab. de Redes I" | ||
+ | "Switch D-Link 3526 do Lab. de Redes I" -> "Switch D-Link 3526 do Lab. de Meios" | ||
+ | "Switch D-Link 3526 do Lab. de Meios" -> "Access Point" | ||
+ | "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E1T01" | ||
+ | "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E2T01" | ||
+ | |||
+ | } | ||
+ | </graphviz> | ||
+ | |||
+ | |||
+ | |||
+ | *Inicio dos diagramas da rede mostrando a topologia física e a topologia lógica das instalações no programa [http://live.gnome.org/Dia Dia]. | ||
+ | |||
+ | ==Dia 10/12/2009== | ||
+ | |||
+ | *Testes com o NOCAT e o Access Point. | ||
+ | |||
+ | *Continuação dos diagramas da rede da disciplina de IER. | ||
+ | |||
+ | *Página web [http://www.iguana.sj.ifsc.edu.br Iguana]. | ||
+ | |||
+ | ===Diagrama de Rede - Topologia Física:=== | ||
+ | |||
+ | [[Imagem:fisica.png]] | ||
+ | |||
+ | ===Diagrama de Rede - Topologia Lógica:=== | ||
+ | |||
+ | [[Imagem:logica.png]] | ||
+ | |||
+ | ==Dia 11/12/2009== | ||
+ | |||
+ | *Conclusão do site [http://www.iguana.sj.ifsc.edu.br Iguana] | ||
+ | |||
+ | *Definição das subredes de acordo com as classes: | ||
+ | Classe ouro: 172.11.1.0 à 172.11.10.0 | ||
+ | |||
+ | Classe prata: 172.11.11.0 à 172.11.20.0 | ||
+ | |||
+ | Classe bronze: 172.11.21.0 à 172.11.30.0 | ||
+ | |||
+ | ==Dia 14/12/2009== | ||
+ | |||
+ | *Problemas encontrados no NOCAT: | ||
+ | |||
+ | **O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento. | ||
+ | |||
+ | **Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações. | ||
+ | |||
+ | *Elaboração dos slides para a apresentação do projeto - Parte de Programação. | ||
+ | |||
+ | *Testes no Access Point e NOCAT. | ||
+ | |||
+ | *Teste/Certificação da instalação de Cabeamento Estruturado. | ||
+ | |||
+ | ==Dia 15/12/2009== | ||
+ | |||
+ | *Apresentação da instalação de Cabeamento Estruturado e entrega da documentação exigida pela disciplina. | ||
+ | |||
+ | *Elaboração dos slides para a apresentação exigida pela disciplina de Programação. | ||
+ | |||
+ | ==Cabeamento Estruturado== | ||
+ | |||
+ | *Realização do projeto da planta baixa do laboratório de Meios e a vista frontal do RAC01. | ||
+ | |||
+ | *Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas. | ||
+ | |||
+ | *Testes e finalização da instalação de cabeamento estruturado. | ||
+ | |||
+ | *Ajustes na instalação de cabeamento estruturado. | ||
+ | |||
+ | *Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais. | ||
+ | |||
+ | ===Organograma da instalação de cabeamento estruturado.=== | ||
+ | |||
+ | <graphviz> | ||
+ | Digraph PI { | ||
+ | "Servidor Iguana" -> "ETH0 192.168.1.103" | ||
+ | |||
+ | "ETH0 192.168.1.103" -> "Porta DC06 Rack Central" | ||
+ | |||
+ | "Servidor Iguana" -> "ETH1 200.135.37.111" | ||
+ | |||
+ | "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita" | ||
+ | |||
+ | "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I" | ||
+ | |||
+ | "Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios" | ||
+ | |||
+ | "Porta DC06 Rack Direita" -> "Porta 01 Switch Lab Redes I" | ||
+ | |||
+ | "Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 01 Switch" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 02 Switch" | ||
+ | |||
+ | "Porta 01 Switch" -> "Porta 21 Patch Panel do Switch" | ||
+ | |||
+ | "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch" | ||
+ | |||
+ | "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01" | ||
+ | |||
+ | "Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01" | ||
+ | |||
+ | "Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02" | ||
+ | |||
+ | "Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02" | ||
+ | |||
+ | "Porta 05 Patch Panel 02" -> "Tomada E1T01" | ||
+ | |||
+ | "Porta 06 Patch Panel 02" -> "Tomada E2T01" | ||
+ | |||
+ | "Porta 26 Switch Lab Meios" -> "Porta 03 Switch" | ||
+ | |||
+ | "Porta 03 Switch" -> "Porta 23 Patch Panel" | ||
+ | |||
+ | "Porta 23 Patch Panel" -> "Access Point" | ||
+ | } | ||
+ | </graphviz> | ||
+ | |||
+ | |||
+ | |||
+ | *Certificação da instalação. | ||
+ | |||
+ | ==Instalação de Equipamentos de Rede== | ||
+ | |||
+ | ===Diagrama de Rede - Topologia Física:=== | ||
+ | |||
+ | [[Imagem:fisica.png]] | ||
+ | |||
+ | ===Diagrama de Rede - Topologia Lógica:=== | ||
+ | |||
+ | [[Imagem:logica.png]] | ||
+ | |||
+ | ===Definição das subredes de acordo com as classes:=== | ||
+ | Classe ouro: 172.11.1.0 à 172.11.10.0 | ||
+ | |||
+ | Classe prata: 172.11.11.0 à 172.11.20.0 | ||
+ | |||
+ | Classe bronze: 172.11.21.0 à 172.11.30.0 | ||
+ | |||
+ | ===Identificação das VLANs (contendo seus VID):=== | ||
+ | |||
+ | Classe ouro: 101 à 110 | ||
+ | |||
+ | Classe prata: 111 à 120 | ||
+ | |||
+ | Classe bronze: 121 à 130 | ||
+ | |||
+ | Wifi: 131 | ||
+ | |||
+ | ===NOCAT=== | ||
+ | |||
+ | O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha. | ||
+ | |||
+ | *Instalação do NOCAT: | ||
+ | |||
+ | Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz | ||
+ | Extrair o arquivo | ||
+ | tar xzf NoCatAuth-nightly.tar.gz | ||
+ | Navegar até o diretório onde o software foi extraido | ||
+ | cd NoCatAuth-nightly | ||
+ | Instalação: | ||
+ | make gateway | ||
+ | make PREFIX=/usr/local/nocat/authserv authserv | ||
+ | make PREFIX=/usr/local/nocat/authserv pgpkey | ||
+ | |||
+ | *Configuração do NOCAT: | ||
+ | vi /usr/local/nocat/nocat.conf | ||
+ | |||
+ | AuthServiceAddr 200.135.37.111 | ||
+ | AuthServiceURL http://$AuthServiceAddr/cgi-bin/login | ||
+ | LogoutURL http://$AuthServiceAddr/logout.html | ||
+ | AllowedWebHosts 200.135.37.111 | ||
+ | RouteOnly 1 | ||
+ | Executar o gateway | ||
+ | /usr/local/nocat/bin/gateway | ||
+ | |||
+ | *Problemas encontrados no NOCAT: | ||
+ | |||
+ | **O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento. | ||
+ | |||
+ | **Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações. | ||
+ | |||
+ | ==Gerência de Redes== | ||
+ | |||
+ | * Sistema Operacional: | ||
+ | Ubunto Server 9.10 | ||
+ | |||
+ | * Particionamento dos discos: | ||
+ | |||
+ | Device Boot Start End Blocks Id System | ||
+ | /dev/sda1 * 1 1824 14651248+ 83 Linux | ||
+ | /dev/sda2 1825 1946 979965 82 Linux swap / Solaris | ||
+ | /dev/sda3 1947 4865 23446867+ 8e Linux LVM | ||
+ | |||
+ | * Configuração da rede: | ||
+ | /etc/network/interfaces | ||
+ | |||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.1.103 | ||
+ | netmask 255.255.255.0 | ||
+ | network 192.168.1.0 | ||
+ | |||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 200.135.37.111 | ||
+ | netmask 255.255.255.192 | ||
+ | network 200.135.37.64 | ||
+ | gateway 200.135.37.126 | ||
+ | |||
+ | auto vlan131 | ||
+ | iface vlan131 inet static | ||
+ | address 172.11.31.1 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.31.0 | ||
+ | vlan_raw_device eth0 | ||
+ | |||
+ | auto vlan132 | ||
+ | iface vlan132 inet static | ||
+ | address 172.11.32.1 | ||
+ | netmask 255.255.255.0 | ||
+ | network 172.11.32.0 | ||
+ | vlan_raw_device eth0 | ||
+ | |||
+ | Obs: Essas interfaces são fixas. A configuração das outras vlans são automáticas pelo site. | ||
+ | |||
+ | *Pacote necessário para configuração das vlans: | ||
+ | vlan | ||
+ | |||
+ | ===Scripts de Manutenção=== | ||
+ | |||
+ | backup.sh | ||
+ | |||
+ | #!/bin/bash | ||
+ | data=`date +%F` | ||
+ | tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc | ||
+ | echo "Copia do Backup do /etc."|mutt iguana.ifsc@gmail.com -a | ||
+ | /home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data" | ||
+ | tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www | ||
+ | echo "Copia do Backup do www."|mutt iguana.ifsc@gmail.com -a | ||
+ | /home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data" | ||
+ | |||
+ | *Pacote necessário para o script backup.sh enviar o backup como anexo para o e-mail: | ||
+ | mutt | ||
+ | |||
+ | **ajustaRelogio.sh: | ||
+ | #!/bin/bash | ||
+ | ntpdate -s ntp.cais.rnp.br | ||
+ | |||
+ | *Pacote necessário para a script ajustaRelogio.sh: | ||
+ | ntpdate | ||
+ | |||
+ | **validaVlan.sh: | ||
+ | #!/bin/bash | ||
+ | #habilita | ||
+ | for vlan in `grep "auto v" /etc/network/interfaces |cut -d " " -f2`; do | ||
+ | ver=`ifconfig|grep $vlan` | ||
+ | if test -z "$ver" ; then | ||
+ | ifconfig $vlan up | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | #desabilita | ||
+ | for oldVlan in `ifconfig|grep vlan |cut -d " " -f1` ; do | ||
+ | olha=`grep $oldVlan /etc/network/interfaces` | ||
+ | if test -z "$olha" ; then | ||
+ | ifconfig $oldVlan down | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | **Diretório /etc/init.d: | ||
+ | #!/usr/bin/perl | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | use RRDs; | ||
+ | use Cwd; | ||
+ | use Data::Dumper; | ||
+ | # Deal with the output from the `tc` command in an attempt to | ||
+ | # build up a functional hierarchy of traffic control classes | ||
+ | # for some kind of graphing. If the configuration changes while | ||
+ | # this script is running in a loop, it will break horribly. | ||
+ | # The logic for associating qdiscs and classes with each other | ||
+ | # is from tc-graph.pl by Andreas Klauer (Andreas.Klauer@metamorpher.de) | ||
+ | # v0.13. | ||
+ | # It's possible to walk through %parent_hash and %child_hash and | ||
+ | # determine the hierarchy structure, although I am not certain why | ||
+ | # you would want to do this ever. Since it works, I am going to | ||
+ | # leave all that code here anyway. | ||
+ | # 20060307 v1.05 | ||
+ | # Fixed incomplete hfsc support (no, really...) | ||
+ | # Removed extra debug statements | ||
+ | # 20060302 v1.04 | ||
+ | # Added support for wrr (Lee Sanders) | ||
+ | # Added additional debugging (Lee Sanders) | ||
+ | # Added support for hfsc qdisc | ||
+ | # Fixed memory leak in commandline mode (Lee Sanders) | ||
+ | # Fixed regex for matching qdisc output (reported by Mike Hughes) | ||
+ | # Changed RRDs update to use --template | ||
+ | # 20051003 v1.03 | ||
+ | # Added support for pulling readable names for class minor ids from ENV | ||
+ | # Added support for stacked graphs, but set default to LINE2 | ||
+ | # Added the graph into the network group for Munin (Xavier Dutoit, sydesy ltd) | ||
+ | # Changed graph to be stacked with areas instead of lines (Xavier Dutoit, sydesy ltd) | ||
+ | # | ||
+ | # 20050128 v1.02 | ||
+ | # Fixed pattern matching for htb root classes | ||
+ | # Fixed pattern matching for variable height htb classes | ||
+ | # Fixed debug output with appropriate newlines | ||
+ | # Added colors with a default grey when all have been used | ||
+ | # | ||
+ | # 20041027 v1.01 | ||
+ | # Fixed pattern matching for htb classes | ||
+ | # | ||
+ | # 20041023 v1.0 | ||
+ | # Added support for pfifo / bfifo (i.e. added to regexp) | ||
+ | # | ||
+ | # 20041021 | ||
+ | # Added support for classful tbf qdisc in 2.6.1 and later kernels | ||
+ | # | ||
+ | # 20041009 | ||
+ | # Project initiated | ||
+ | # RRDTool links | ||
+ | # http://www.cuddletech.com/articles/rrd/ar01s02.html | ||
+ | # http://martybugs.net/linux/hddtemp.cgi | ||
+ | # Broken Link -> http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/tutorial/cdeftutorial.html | ||
+ | # Broken Link -> http://faq.mrtg.org/RPN.html | ||
+ | ### CONFIGURATION | ||
+ | # Where do you want the RRD files to live? | ||
+ | my $rrd_path = getcwd; | ||
+ | #my $rrd_path = '/var/www/tc'; | ||
+ | my @hostname = `hostname`; | ||
+ | # Create graphs? | ||
+ | my $do_graph = 1; | ||
+ | # Use STACK and AREA instead of LINE2 for each traffic classs | ||
+ | my $do_stack = 0; | ||
+ | # You'll want to specify your path to the `tc` binary | ||
+ | my $BIN_TC="/sbin/tc"; | ||
+ | # Pick some nice colours (Borrowed from Munin) | ||
+ | my @colors = qw( | ||
+ | 22ff22 0022ff ff0000 00aaaa ff00ff | ||
+ | ffa500 cc0000 0000cc 0080C0 8080C0 FF0080 | ||
+ | 800080 688e23 408080 808000 000000 00FF00 | ||
+ | 0080FF FF8000 800000 FB31FB | ||
+ | ); | ||
+ | # You could change this to 1 for debugging output in the form | ||
+ | # of lots of print statements. | ||
+ | sub debug { 0 } | ||
+ | # Fetch real names for our minor handles from environment for | ||
+ | # initial Munin autoconfig and for commandline mode. | ||
+ | my @tcnames; | ||
+ | my %tcnames; | ||
+ | if( exists $ENV{names} ) { | ||
+ | @tcnames = split( /\./, $ENV{names} ); | ||
+ | @tcnames = map { /([^:]*):(.*)/;defined($1 && $2) && $1,$2 } @tcnames; | ||
+ | @tcnames = grep { defined } @tcnames; | ||
+ | die "Odd number of arguments in names environment variable" | ||
+ | if @tcnames & 1; | ||
+ | %tcnames = @tcnames; | ||
+ | } | ||
+ | my %parent_hash; | ||
+ | my %child_hash; | ||
+ | my %stats; | ||
+ | my $do_munin; | ||
+ | my $do_munin_conf; | ||
+ | # I'm lazy, so it's a package global | ||
+ | our $DEV; | ||
+ | sub parse_tc_qdisc { | ||
+ | my( $bytes, $pkts, $drop, $over ); | ||
+ | my( $name, $id ); | ||
+ | my @qdisc = `$BIN_TC -s qdisc show dev $DEV`; | ||
+ | for( my $x = 0; $x < scalar(@qdisc); $x++ ) { | ||
+ | next unless $qdisc[$x] =~ m/qdisc/; | ||
+ | if( $qdisc[$x] =~ m/qdisc pfifo_fast 0:/i ) { | ||
+ | # Sanity check | ||
+ | die "traffic control configuration was removed!"; | ||
+ | } | ||
+ | if( $qdisc[$x] =~ m/(?:htb|hfsc|prio|sfq|tbf|pfifo|bfifo)/i ) { | ||
+ | ( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)\s+/i ); | ||
+ | ( $bytes, $pkts, $drop, $over ) = ( | ||
+ | $qdisc[$x+1] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i | ||
+ | ); | ||
+ | # $x++; | ||
+ | $stats{ $id } = { | ||
+ | bytes => $bytes, | ||
+ | pkts => $pkts, | ||
+ | drop => $drop, | ||
+ | over => $over | ||
+ | }; | ||
+ | } | ||
+ | elsif( $qdisc[$x] =~ m/wrr/i ) { | ||
+ | ( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)/i ); | ||
+ | ( $bytes, $pkts, $drop, $over ) = ( | ||
+ | $qdisc[$x+5] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i | ||
+ | ); | ||
+ | # $x+=5; | ||
+ | $stats{ $id+5 } = { | ||
+ | bytes => $bytes, | ||
+ | pkts => $pkts, | ||
+ | drop => $drop, | ||
+ | over => $over | ||
+ | }; | ||
+ | } | ||
+ | if( ! defined $id && debug ) { | ||
+ | die "Unmatched handle for tc qdisc output:\n$qdisc[$x]\n"; | ||
+ | } | ||
+ | $child_hash{ $id } = [] if defined $id; | ||
+ | # push( @{$child_hash{ $id }}, 0 ); | ||
+ | # pop( @{$child_hash{ $id }} ); | ||
+ | } | ||
+ | } | ||
+ | sub parse_tc_class { | ||
+ | my( $bytes, $pkts, $drop, $over ); | ||
+ | my( $name, $id, $type, $qdisc ); | ||
+ | my( $parent_id, $leaf, $leaf_id ); | ||
+ | my( $address ); | ||
+ | my @class = `$BIN_TC -s class show dev $DEV`; | ||
+ | for( my $x = 0; $x < scalar(@class); $x++ ) { | ||
+ | # Try to gather information about class relationship hierarchy. | ||
+ | # Really should just grab lines with 'class' keyword and then strip out | ||
+ | # $qdisc $n:\d? parent $m:\d? || $qdsic $n:\d? root | ||
+ | # Really should be that simply for most classes. WRR seems to be an | ||
+ | # exception. | ||
+ | next unless $class[$x] =~ m/class/; | ||
+ | # Handle the specifics of the htb|hfsc classes | ||
+ | if( $class[$x] =~ m/(?:htb|hfsc)/i ) { | ||
+ | if( $class[$x] =~ m/root/i ) { | ||
+ | # This is wrong; But fortunately we don't care much since its root | ||
+ | ( $name, $id, $type ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)/i ); | ||
+ | } | ||
+ | else { | ||
+ | if( $class[$x] =~ m/htb/ ) { | ||
+ | ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | } | ||
+ | else { | ||
+ | ( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | # Handle prio classes | ||
+ | elsif( $class[$x] =~ m/prio/i ) { | ||
+ | ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | } | ||
+ | # Deal with tbf classes, which appear in Linux 2.6.1 and later | ||
+ | elsif( $class[$x] =~ m/tbf/i ) { | ||
+ | # Someone overwrote the tbf default | ||
+ | if( $class[$x] =~ m/leaf/i ) { | ||
+ | ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | } | ||
+ | # It's old style tbf without a leaf | ||
+ | else { | ||
+ | ( $name, $id, $type, $qdisc, $leaf ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | } | ||
+ | # next; | ||
+ | } | ||
+ | elsif( $class[$x] =~ m/^\s+$/ ) { | ||
+ | # We found any empty line; This is generally ok | ||
+ | next; | ||
+ | } | ||
+ | ################################### | ||
+ | # Deal with WRR class | ||
+ | elsif( $class[$x] =~ m/wrr/i ) { | ||
+ | ( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); | ||
+ | ($leaf,$leaf_id)= split(/:/,$id); | ||
+ | if (defined $class[$x+1] && $class[$x+1] =~ m/address:/) { | ||
+ | ( $address ) = ( $class[$x+1] =~ m/^\s+\(address:\s+(.*)\)/i ); | ||
+ | $tcnames{$leaf_id} = $address; | ||
+ | $leaf_id = $leaf_id.":"; | ||
+ | # $x+=4; | ||
+ | } else { # unused class | ||
+ | $tcnames{$leaf_id} = "$leaf_id undef"; | ||
+ | $leaf_id = $leaf_id.":"; | ||
+ | } | ||
+ | } | ||
+ | ################################### | ||
+ | else { | ||
+ | # Empty line or unrecognized class type. | ||
+ | debug && print "Came across unrecognized class\n"; | ||
+ | next; | ||
+ | } | ||
+ | if( $type eq "root" ) { | ||
+ | # Root class. No parent class, but parent qdisc. | ||
+ | # We get the parent qdisc handle by removing Y from X:Y. | ||
+ | $parent_id = $id; | ||
+ | $parent_id =~ s/:.*/:/; | ||
+ | # Tell qdisc that this is its child_hash. | ||
+ | $parent_hash{$id} = $parent_id; | ||
+ | push(@{$child_hash{$parent_id}}, $id); | ||
+ | } | ||
+ | elsif($type eq "parent") { | ||
+ | # Child class with parent class. | ||
+ | $parent_id = $qdisc; | ||
+ | # Tell parent that it has a child_hash. | ||
+ | $parent_hash{$id} = $parent_id; | ||
+ | push(@{$child_hash{$parent_id}}, $id); | ||
+ | } | ||
+ | if($leaf) { | ||
+ | # Yo cool we got a leaf here. | ||
+ | $parent_hash{$leaf_id} = $id; | ||
+ | #push( @{$child_hash{ $id }}, $leaf_id ); | ||
+ | # lets just say that you can only have one child leaf and this solves the bug | ||
+ | # where the number of items in the child_hash increases with each script loop. | ||
+ | $child_hash{ $id } = [$leaf_id] ; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | sub update_rrd { | ||
+ | if( ! -e "$rrd_path/" . "$DEV-tc.rrd" ) { | ||
+ | my @ds; | ||
+ | foreach my $key (sort keys %stats) { | ||
+ | $key =~ s/:/-/g; | ||
+ | push( @ds, "DS:$key:DERIVE:60:0:U" ); | ||
+ | } | ||
+ | # Track for 24 hours | ||
+ | RRDs::create( | ||
+ | "$rrd_path/" . "$DEV-tc.rrd", | ||
+ | '--step=10', | ||
+ | @ds, | ||
+ | 'RRA:AVERAGE:0.5:1:8640' | ||
+ | ); | ||
+ | die RRDs::error . "\n" if RRDs::error; | ||
+ | } | ||
+ | debug && print "N:" . join( ':', map { $stats{$_}->{bytes} } sort keys %stats ) , "\n"; | ||
+ | # Perform actual update | ||
+ | RRDs::update( | ||
+ | "$rrd_path/" . "$DEV-tc.rrd", | ||
+ | '--template='. join( ':', map { my $a = $_ ; $a =~ s/:/-/; $a } sort keys %stats ), | ||
+ | 'N:' . join( ':', map { $stats{$_}->{bytes} } sort keys %stats ) | ||
+ | ); | ||
+ | die RRDs::error . "\n" if RRDs::error; | ||
+ | } | ||
+ | sub do_graph { | ||
+ | # Time periods to graph, in hours. | ||
+ | # (Obviously you can get away with fractions here, like 0.25) | ||
+ | my @times = qw( | ||
+ | 1 24 | ||
+ | ); | ||
+ | foreach my $period (@times) { | ||
+ | my $x; | ||
+ | my $cur_time = time(); | ||
+ | my $end_time = $cur_time; | ||
+ | my $start_time = $end_time - ($period * 60 * 60); | ||
+ | my @graph_rrd; | ||
+ | push( @graph_rrd, "--imgformat","PNG" ); | ||
+ | push( @graph_rrd, "--title", "Traffic Control Leafs" ); | ||
+ | push( @graph_rrd, "--vertical-label", "bps" ); | ||
+ | push( @graph_rrd, "--no-minor" ); | ||
+ | push( @graph_rrd, "--start", $start_time ); | ||
+ | push( @graph_rrd, "--end", $end_time ); | ||
+ | push( @graph_rrd, "--width", 600 ); | ||
+ | push( @graph_rrd, "--height", 400 ); | ||
+ | $x = 0; | ||
+ | my $first = 1; | ||
+ | foreach my $key (sort keys %stats) { | ||
+ | if( ! defined $colors[$x] ) { $colors[$x] = 'cccccc'; } | ||
+ | $key =~ s/:/-/g; | ||
+ | push( @graph_rrd, "DEF:id$x=$rrd_path/$DEV-tc.rrd:$key:AVERAGE" ); | ||
+ | # Deal with huge negative value from resetting `tc` configuration | ||
+ | # Multiply the value by 8 | ||
+ | push( @graph_rrd, "CDEF:cdef$x=id$x,0,LT,UNKN,id$x,8,*,IF" ); | ||
+ | if( $key !~ m/\d$/ ) { | ||
+ | $key =~ s/-//g; | ||
+ | } | ||
+ | if( exists $tcnames{$key} ) { | ||
+ | $key = $tcnames{$key}; | ||
+ | } | ||
+ | if( $do_stack ) { | ||
+ | if( $first ) { | ||
+ | push( @graph_rrd, "AREA:cdef$x#$colors[$x]:$key" ); | ||
+ | $first = 0; | ||
+ | } | ||
+ | else { | ||
+ | push( @graph_rrd, "STACK:cdef$x#$colors[$x]:$key" ); | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | push( @graph_rrd, "LINE2:cdef$x#$colors[$x]:$key" ); | ||
+ | } | ||
+ | $x++; | ||
+ | } | ||
+ | push( @graph_rrd, 'COMMENT:\s', 'COMMENT:\s' ); | ||
+ | $x = 0; | ||
+ | foreach my $key (sort keys %stats) { | ||
+ | $key =~ s/:/-/g; | ||
+ | if( $key !~ m/\d$/ ) { | ||
+ | $key =~ s/-//g; | ||
+ | } | ||
+ | if( exists $tcnames{$key} ) { | ||
+ | $key = $tcnames{$key}; | ||
+ | } | ||
+ | push( @graph_rrd, "GPRINT:cdef$x:LAST:$key \\: %6.0lf bps" ); | ||
+ | $x++; | ||
+ | } | ||
+ | debug && print join(" \n", @graph_rrd ) , "\n"; | ||
+ | RRDs::graph( | ||
+ | "$rrd_path/" . "$DEV-$period-tc.png", | ||
+ | @graph_rrd | ||
+ | ); | ||
+ | die RRDs::error . "\n" if RRDs::error; | ||
+ | } | ||
+ | } | ||
+ | # Let's pretend we're autoconf capable for Munin. | ||
+ | if( defined $ARGV[0] && $ARGV[0] eq 'autoconf' ) { | ||
+ | if( scalar( keys %stats ) ) { | ||
+ | print "yes\n"; | ||
+ | exit 0; | ||
+ | } | ||
+ | else { | ||
+ | print "no\n"; | ||
+ | exit 1; | ||
+ | } | ||
+ | } | ||
+ | # Get down to business | ||
+ | if( defined @ARGV and $ARGV[0] eq 'test' ) { | ||
+ | $do_munin = 0; | ||
+ | $do_munin_conf = 0; | ||
+ | } | ||
+ | elsif( defined @ARGV and $ARGV[0] eq 'config' ) { | ||
+ | $do_munin = 1; | ||
+ | $do_munin_conf = 1; | ||
+ | } | ||
+ | else { | ||
+ | $do_munin = 1; | ||
+ | $do_munin_conf = 0; | ||
+ | } | ||
+ | # This assumes, of course, that you don't have the script | ||
+ | # running from a directory with an underscore ( _ ) in it. | ||
+ | # If you do, this'll break hard. | ||
+ | $0 =~ m/polltc_([^_]*)$/; | ||
+ | $DEV = $1; | ||
+ | do { | ||
+ | parse_tc_qdisc; | ||
+ | parse_tc_class; | ||
+ | debug && print "Parent Assocations ->\n"; | ||
+ | debug && print Dumper( \%parent_hash ); | ||
+ | debug && print "Child Associations ->\n"; | ||
+ | debug && print Dumper( \%child_hash ); | ||
+ | # Delete things that aren't leaf nodes | ||
+ | foreach my $id (keys %stats) { | ||
+ | if( scalar( @{ $child_hash{ $id } } ) > 0 ) { | ||
+ | debug && print "Deleted ID $id [ ". scalar( @{ $child_hash{ $id } } )." kids ]\n"; | ||
+ | delete $stats{$id}; | ||
+ | } | ||
+ | } | ||
+ | debug && print "Found ". scalar( keys %stats ) ." leafs\n"; | ||
+ | if( $do_munin ) { | ||
+ | if( $do_munin_conf ) { | ||
+ | print "graph_title Controle de Trafego - Folhas\n"; | ||
+ | print "graph_category network\n"; | ||
+ | print "graph_args --base 1000 -l 0\n"; | ||
+ | print "graph_vlabel bps\n"; | ||
+ | } | ||
+ | my $firstband = 1; | ||
+ | foreach my $key (sort keys %stats) { | ||
+ | my $k = $key; | ||
+ | $key =~ s/:/-/g; | ||
+ | if( $key !~ m/\d$/ ) { | ||
+ | $key =~ s/-//g; | ||
+ | } | ||
+ | if( $do_munin_conf ) { | ||
+ | my( $name ); | ||
+ | if( exists $tcnames{$key} ) { | ||
+ | $name = $tcnames{$key}; | ||
+ | } | ||
+ | else { | ||
+ | $name = $key; | ||
+ | } | ||
+ | print "$key.label $name\n"; | ||
+ | if( $do_stack ) { | ||
+ | if( $firstband ) { | ||
+ | print "$key.draw AREA\n"; | ||
+ | $firstband = 0; | ||
+ | } | ||
+ | else { | ||
+ | print "$key.draw STACK\n"; | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | print "$key.draw LINE2\n"; | ||
+ | } | ||
+ | print "$key.type DERIVE\n"; | ||
+ | print "$key.min 0\n"; | ||
+ | print "$key.max 12500000\n"; | ||
+ | print "$key.cdef $key,0,LT,UNKN,$key,8,*,IF\n"; | ||
+ | } | ||
+ | else { | ||
+ | print "$key.value ", $stats{$k}->{bytes}, "\n"; | ||
+ | } | ||
+ | } | ||
+ | exit 0; | ||
+ | } | ||
+ | else { | ||
+ | update_rrd; | ||
+ | do_graph if $do_graph; | ||
+ | sleep 10; | ||
+ | } | ||
+ | } until( $do_munin > 0 ); | ||
+ | |||
+ | **firewall.sh: | ||
+ | #!/bin/bash | ||
+ | case $1 in | ||
+ | stop) | ||
+ | # Antigas regras de NAT." | ||
+ | # Antigas regras de filtro de pacotes." | ||
+ | iptables -F | ||
+ | #Política padrão para NAT." | ||
+ | iptables -t nat -P PREROUTING ACCEPT | ||
+ | iptables -t nat -P POSTROUTING ACCEPT | ||
+ | iptables -t nat -P OUTPUT ACCEPT | ||
+ | #Política padrão para filtro de pacotes." | ||
+ | iptables -P INPUT ACCEPT | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | # Roteamento | ||
+ | sysctl -w net.ipv4.ip_forward=1 > /dev/null | ||
+ | #NAT para as redes internas." | ||
+ | iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE | ||
+ | ;; | ||
+ | start) | ||
+ | # NOCAT | ||
+ | iptables -P INPUT ACCEPT | ||
+ | /usr/local/nocat/bin/clear.fw | ||
+ | # Limpando as regras do iptables | ||
+ | iptables -t filter -F | ||
+ | iptables -t nat -F | ||
+ | # Ativando o roteamento | ||
+ | sysctl -w net.ipv4.ip_forward=1 | ||
+ | # Ativar o nat | ||
+ | iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE | ||
+ | # Política padrão, portas de entrada bloqueadas e saída liberada. | ||
+ | iptables -P INPUT DROP | ||
+ | # Liberar interface Loopback | ||
+ | iptables -A INPUT -i lo -j ACCEPT | ||
+ | # Liberar solitações do servidor local | ||
+ | iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | # Liberando portas necessárias | ||
+ | # Liberar porta para SSH | ||
+ | iptables -A INPUT -p tcp --dport 2240 -j ACCEPT | ||
+ | #Liberar porta para Telnet | ||
+ | iptables -A INPUT -p tcp --dport 23 -j ACCEPT | ||
+ | # Liberar porta para HTTP | ||
+ | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 21 -j ACCEPT | ||
+ | # Liberar porta HTTPS | ||
+ | iptables -A INPUT -p tcp --dport 443 -j ACCEPT | ||
+ | # Liberar porta SMTP | ||
+ | iptables -A INPUT -p tcp --dport 25 -j ACCEPT | ||
+ | # Liberar porta IMAP | ||
+ | iptables -A INPUT -p tcp --dport 143 -j ACCEPT | ||
+ | # Liberar porta mysql | ||
+ | iptables -A INPUT -p tcp --dport 3306 -j ACCEPT | ||
+ | #libera porta DNS | ||
+ | iptables -A INPUT -p udp --dport 53 -j ACCEPT | ||
+ | # libera porta DHCP | ||
+ | iptables -A INPUT -p udp --dport 67 -j ACCEPT | ||
+ | # libera porta NOCAT | ||
+ | iptables -I INPUT 3 -p tcp -i vlan131 --dport 5280 -j ACCEPT | ||
+ | # ativa o gate | ||
+ | /usr/local/nocat/bin/gateway | ||
+ | # Proteções diversas | ||
+ | # Proteção contra alguns ataques DoS | ||
+ | iptables -A INPUT -m state --state INVALID -j DROP | ||
+ | # Proteção contra nmap -sX | ||
+ | iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | **relatorio.sh: | ||
+ | #!/bin/bash | ||
+ | echo "Relatório servidor iguana" | ||
+ | # Comecando o monitoramento do TC | ||
+ | #watch tc -s -d class show dev eth1 & | ||
+ | #pid_tc=`pidof watch -s` | ||
+ | data=`date +%d-%m-%y_%k-%M` | ||
+ | ## Definições das variáveis ### | ||
+ | DIRETORIO="/tmp/relatorio" | ||
+ | ARQ="/tmp/relatorio/rede.txt" | ||
+ | ARQ2="/tmp/relatorio/processo.txt" | ||
+ | ### | ||
+ | # Remover o diretório se já criado ... | ||
+ | rm -rf $DIRETORIO >> /dev/null | ||
+ | # Criar diretório e arquivos necessários | ||
+ | mkdir $DIRETORIO | ||
+ | touch $ARQ | ||
+ | # Começo do Script | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo " ### Relatório servidor IGUANA $data ###" >> $ARQ; | ||
+ | echo " " >> $ARQ; | ||
+ | echo " ### Relatório servidor IGUANA $data ###" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "# Informações referentes ao processador #" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2` | ||
+ | echo "$processador" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo "# Informações referentes aos discos #" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "Discos: `df -hT`" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo " " >> $ARQ2; | ||
+ | MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2` | ||
+ | echo "Memória Total: $MEMTOTAL" >> $ARQ2; | ||
+ | MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2` | ||
+ | echo "Memória Livre: $MEMFREE" >> $ARQ2 | ||
+ | echo "-----------------------------------------------------" >> $ARQ2; | ||
+ | echo "# Informações referente a DHCP #" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ; | ||
+ | echo "" >> $ARQ; | ||
+ | cat /etc/dhcp3/dhcpd.conf >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a DNS #" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ; | ||
+ | cat /etc/bind/named.conf.local >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ; | ||
+ | cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Firewall #" >> $ARQ; | ||
+ | echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ; | ||
+ | iptables -L >> $ARQ | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Roteamento #" >> $ARQ | ||
+ | route -n >> $ARQ | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | echo "# Informações referente a Crontab #" >> $ARQ; | ||
+ | cat /etc/crontab >> $ARQ; | ||
+ | echo "-----------------------------------------------------" >> $ARQ; | ||
+ | mv $ARQ /tmp/relatorio/redes_"$data".txt | ||
+ | echo "Relatorio de redes" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/redes_"$data".txt -s "Relatorio_rede_"$data"" | ||
+ | mv $ARQ2 /tmp/relatorio/processo_"$data".txt | ||
+ | echo "Relatorio de processos" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/processo_"$data".txt -s "Relatorio_processo_"$data"" | ||
+ | echo "Relatório enviado com exito para $ARQ" | ||
+ | #### | ||
+ | #echo "Gerando imagem do tráfego TC..." | ||
+ | #sleep 1 | ||
+ | #echo "Redirecionando para o diretório /etc/init.d" | ||
+ | #cd /etc/init.d | ||
+ | #perl polltc_eth1 test & | ||
+ | #PIDOF=`pidof perl polltc_eth1 -s` | ||
+ | #echo "Capturando tráfego na rede" | ||
+ | #sleep 10 | ||
+ | #echo "Trafego capturado" | ||
+ | # Matando o processo polltc_eth1 | ||
+ | PIDOF=`pidof perl polltc_eth1 -s` | ||
+ | kill -9 $PIDOF | ||
+ | #### | ||
+ | # Apagando o diretório se existir | ||
+ | rm -rf /home/iguana/TC | ||
+ | # Criando o diretório | ||
+ | mkdir /home/iguana/TC | ||
+ | # Movendo todos arquivos .png para o diretório criado | ||
+ | mv /etc/init.d/*.png /home/iguana/TC | ||
+ | # Apagando se existir a pasta trafego | ||
+ | rm -rf /home/iguana/TC/trafego | ||
+ | # Criando a pasta trafego | ||
+ | mkdir /home/iguana/TC/trafego | ||
+ | # Indo até a pasta TC | ||
+ | cd /home/iguana/TC | ||
+ | # Movendo os arquivos criado para pasta trafego | ||
+ | mv eth1-1-tc.png /home/iguana/TC/trafego/1-$data | ||
+ | mv eth1-24-tc.png /home/iguana/TC/trafego/2-$data | ||
+ | # Compactando os arquivos | ||
+ | tar -cf trafego.tar trafego | ||
+ | # Enviando por email | ||
+ | echo "Enviando .png" | mutt iguana.ifsc@gmail.com -a /home/iguana/TC/trafego.tar -s "Tráfego_$data" | ||
+ | # Deixar monitorando o TC até a próxima captura | ||
+ | cd /etc/init.d | ||
+ | perl polltc_eth1 test & | ||
+ | |||
+ | **tc.sh: | ||
+ | #!/bin/bash | ||
+ | # variaveis | ||
+ | TAXA=4000 # 4Mbps | ||
+ | UMPOR=`expr $TAXA / 100` | ||
+ | OURO=`expr $UMPOR \* 60` # 60% da taxa de transmissao | ||
+ | PRATA=`expr $UMPOR \* 25` # 25% da taxa de transmissao | ||
+ | BRONZE=`expr $UMPOR \* 15` # 10% da taxa de transmissao | ||
+ | #WIFI=`expr $UMPOR \* 5` # 5% da taxa de transmissao | ||
+ | DEV=eth1 | ||
+ | |||
+ | # ----------- TC ------------------# | ||
+ | # eliminando as regras anteriores | ||
+ | tc qdisc del dev ${DEV} root 2>/dev/null | ||
+ | |||
+ | # adicionando a disciplina de fila na raiz | ||
+ | tc qdisc add dev ${DEV} root handle 1:0 htb default 12 | ||
+ | |||
+ | # criando a classe pai para limitar a velocidade | ||
+ | tc class add dev ${DEV} parent 1:0 classid 1:1 htb rate ${TAXA}kbps ceil ${TAXA}kbps | ||
+ | |||
+ | # criando 3 classes (ouro, prata e bronze) | ||
+ | tc class add dev ${DEV} parent 1:1 classid 1:10 htb rate ${OURO}kbps ceil ${TAXA}kbps | ||
+ | tc class add dev ${DEV} parent 1:1 classid 1:11 htb rate ${PRATA}kbps ceil ${TAXA}kbps | ||
+ | tc class add dev ${DEV} parent 1:1 classid 1:12 htb rate ${BRONZE}kbps ceil ${TAXA}kbps | ||
+ | #tc class add dev ${DEV} parent 1:1 classid 1:13 htb rate ${WIFI}kbps ceil ${TAXA}kbps | ||
+ | |||
+ | # adicionando qdisc para cada classe | ||
+ | tc qdisc add dev ${DEV} parent 1:10 handle 10: sfq perturb 10 | ||
+ | tc qdisc add dev ${DEV} parent 1:11 handle 11: sfq perturb 10 | ||
+ | tc qdisc add dev ${DEV} parent 1:12 handle 12: sfq perturb 10 | ||
+ | #tc qdisc add dev ${DEV} parent 1:13 handle 13: sfq perturb 10 | ||
+ | |||
+ | # criando os filtros para direcionar os trafegos para cada classe de acordo com o IP | ||
+ | # de destino | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.1.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.2.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.3.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.4.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.5.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.6.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.7.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.8.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.9.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.10.0/24 flowid 1:10 # vai para ouro | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.11.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.12.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.13.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.14.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.15.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.16.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.17.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.18.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.19.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.20.0/24 flowid 1:11 # vai para prata | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.21.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.22.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.23.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.24.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.25.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.26.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.27.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.28.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.29.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.30.0/24 flowid 1:12 # vai para bronze | ||
+ | tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.31.0/24 flowid 1:12 # vai para bronze | ||
+ | |||
+ | ===Configuração dos Serviços=== | ||
+ | |||
+ | |||
+ | ====DHCP==== | ||
+ | |||
+ | O dhcp é um protocolo que é utilizado para endereçar automaticamente a rede. Para que o DHCP possa fazer automaticamente a configuração de rede de uma máquina, ela deve ter o instalado o cliente dhcp. | ||
+ | |||
+ | *Utiliza o protocolo DHCP e UDP. Porta 67. | ||
+ | |||
+ | *Pacote necessário para o serviço DHCP: | ||
+ | dhcp3-server | ||
+ | |||
+ | **/etc/dhcp3/dhcpd.conf: | ||
+ | default-lease-time 14400; | ||
+ | max-lease-time 86400; | ||
+ | subnet 172.11.1.0 netmask 255.255.255.0 { | ||
+ | range 172.11.1.2 172.11.1.254; | ||
+ | option subnet-mask 255.255.255.0; | ||
+ | option broadcast-address 172.11.1.255; | ||
+ | option routers 172.11.1.1; | ||
+ | option domain-name "iguana.sj.ifsc.edu.br"; | ||
+ | option domain-name-servers 172.11.1.1; | ||
+ | } | ||
+ | subnet 172.11.31.0 netmask 255.255.255.0 { | ||
+ | range 172.11.31.2 172.11.31.254; | ||
+ | option subnet-mask 255.255.255.0; | ||
+ | option broadcast-address 172.11.31.255; | ||
+ | option routers 172.11.31.1; | ||
+ | option domain-name "iguana.sj.ifsc.edu.br"; | ||
+ | option domain-name-servers 172.11.31.1; | ||
+ | } | ||
+ | subnet 172.11.32.0 netmask 255.255.255.0 { | ||
+ | range 172.11.32.2 172.11.32.254; | ||
+ | option subnet-mask 255.255.255.0; | ||
+ | option broadcast-address 172.11.32.255; | ||
+ | option routers 172.11.32.1; | ||
+ | option domain-name "iguana.sj.ifsc.edu.br"; | ||
+ | option domain-name-servers 172.11.32.1; | ||
+ | } | ||
+ | |||
+ | Obs: a configuração do dhcp é alterada automaticamente ao realizar configurações de estandes pelo site. | ||
+ | |||
+ | ====DNS==== | ||
+ | |||
+ | DNS é o serviço de rede utilizado para tradução de endereços IP para nomes. Possui uma tabela que relaciona nomes com números IP. Existe uma rede se servidores DNS instalados pelo mundo que se comunicam de uma forma hierarquica para poder traduzir os endereços IP solicitados. | ||
+ | |||
+ | *Protocolo DNS e UDP. Porta 53. | ||
+ | |||
+ | *Pacote necessário: | ||
+ | bind9 | ||
+ | |||
+ | **named.conf.options: | ||
+ | options { | ||
+ | directory "/var/cache/bind"; | ||
+ | auth-nxdomain no; # conform to RFC1035 | ||
+ | listen-on-v6 { any; }; | ||
+ | allow-recursion { 127/8; 192.168.1/24; 172.11/16; }; | ||
+ | allow-query { any; }; | ||
+ | allow-query-cache { any; }; | ||
+ | }; | ||
+ | |||
+ | **named.conf.local: | ||
+ | zone "iguana.sj.ifsc.edu.br" { | ||
+ | type master; | ||
+ | file "/etc/bind/iguana.sj.ifsc.edu.br"; | ||
+ | }; | ||
+ | |||
+ | **iguana.sj.ifsc.edu.br: | ||
+ | $TTL 86400 | ||
+ | ; | ||
+ | @ IN SOA dns1.iguana.sj.ifsc.edu.br. iguana.iguana.sj.ifsc.edu.br. ( | ||
+ | 2009112701 | ||
+ | 1d | ||
+ | 4h | ||
+ | 1w | ||
+ | 1d | ||
+ | ) | ||
+ | ; | ||
+ | @ IN NS dns1 | ||
+ | @ IN NS hendrix.sj.ifsc.edu.br. | ||
+ | @ IN MX 0 mail | ||
+ | ; | ||
+ | dns1 IN A 200.135.37.111 | ||
+ | mail IN A 200.135.37.111 | ||
+ | www IN CNAME dns1 | ||
+ | ftp IN CNAME dns1 | ||
+ | web IN CNAME dns1 | ||
+ | ; | ||
+ | |||
+ | ====APACHE==== | ||
+ | |||
+ | O Apache é utilizado como servidor WEB. Onde pode ser configurado compartilhamentos de arquivos via http e hospedagem de páginas web. | ||
+ | |||
+ | *Utiliza o protocolo http e TCP.Porta 80. | ||
+ | |||
+ | *Pacote necessário: | ||
+ | apache2 | ||
+ | |||
+ | ====HTTPS==== | ||
+ | |||
+ | HTTPS é uma implementação do protocolo http. Podemos dizer que é um http seguro. Onde é configurado um certificado digital que vai garantir que todos os dados que trafegam pela conexão estabelecida entre cliente e servidor, seja entregue apenas no destino final. | ||
+ | |||
+ | *Protocolo HTTPS porta 443. | ||
+ | |||
+ | *Pacotes necessários: | ||
+ | openssl ssl-cert | ||
+ | |||
+ | **/etc/apache2/sites-enablesd/ssh: | ||
+ | NameVirtualHost *:443 | ||
+ | <VirtualHost *:443 > | ||
+ | ServerName iguana.sj.ifsc.edu.br | ||
+ | ServerAdmin webmaster@localhost | ||
+ | CustomLog /var/log/apache2/access.log combined | ||
+ | SSLEngine on | ||
+ | ServerSignature On | ||
+ | SSLCertificateFile /etc/apache2/apache.pem | ||
+ | DocumentRoot /var/www | ||
+ | <Directory /> | ||
+ | Options FollowSymLinks | ||
+ | AllowOverride None | ||
+ | </Directory> | ||
+ | <Directory /var/www/> | ||
+ | Options Indexes FollowSymLinks MultiViews | ||
+ | AllowOverride None | ||
+ | Order allow,deny | ||
+ | allow from all | ||
+ | </Directory> | ||
+ | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | ||
+ | <Directory "/usr/lib/cgi-bin"> | ||
+ | AllowOverride None | ||
+ | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.log | ||
+ | # Possible values include: debug, info, notice, warn, error, crit, | ||
+ | # alert, emerg. | ||
+ | LogLevel warn | ||
+ | CustomLog /var/log/apache2/access.log combined | ||
+ | Alias /doc/ "/usr/share/doc/" | ||
+ | <Directory "/usr/share/doc/"> | ||
+ | Options Indexes MultiViews FollowSymLinks | ||
+ | AllowOverride None | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | Allow from 127.0.0.0/255.0.0.0 ::1/128 | ||
+ | </Directory> | ||
+ | </VirtualHost> | ||
+ | |||
+ | **/etc/apache2/sites-enabled/000-default | ||
+ | <VirtualHost *:80> | ||
+ | RedirectMatch ^/$ https://www.iguana.sj.ifsc.edu.br/ | ||
+ | </VirtualHost> | ||
+ | |||
+ | ====POSTFIX e ROUNDCUBE:==== | ||
+ | |||
+ | O Postfix é um servidor de e-mail, sendo uma ferramenta de fácil e rápida administração. Já o RondCube é um servidor WebMail e clinte IMAP que, neste caso, vai utilizar da estrutura do Postfix. | ||
+ | |||
+ | *Protocolos envolvidos: SMTP porta 25, IMAP porta 143, TCP | ||
+ | |||
+ | *Pacotes necessários: | ||
+ | postfix, roundcube, dovecot-impad, mysql-server, php5, php-mdb2-driver-mysql | ||
+ | |||
+ | **/etc/postfix/main.cf | ||
+ | (...) | ||
+ | myhostname = mail.iguana.sj.ifsc.edu.br | ||
+ | alias_maps = hash:/etc/aliases | ||
+ | alias_database = hash:/etc/aliases | ||
+ | myorigin = iguana.sj.ifsc.edu.br | ||
+ | mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost | ||
+ | (...) | ||
+ | |||
+ | ====CACTI - SNMP==== | ||
+ | |||
+ | O Cacti é uma ferramenta web utilizada para monitoramento da rede e de máquinas remotas. Ele utiliza o protocolo SNMP para obter os valores e informações dos dispositivos monitorados. | ||
+ | |||
+ | *Protocolo SNMP porta 161, UDP. para monitoração. | ||
+ | *Protocolo http Porta 80 TCP para acesso web. | ||
+ | |||
+ | * Necessita dos pacotes: | ||
+ | cacti, snmp, snmpd, apache2, php5, mysql-server | ||
+ | |||
+ | **/etc/snmp/snmpd.conf: | ||
+ | rocommunity iguana | ||
+ | syscontact iguana@iguana.sj.ifsc.edu.br | ||
+ | syslocation laboratório de redesI | ||
+ | |||
+ | ===Gerência da rede=== | ||
+ | |||
+ | *Utilizamos as seguintes ferramentas para gerenciar a rede: | ||
+ | |||
+ | * Cacti - faz a monitoração e contabilização dos resursos da rede. | ||
+ | * Script relatorio.sh - faz a monitoração das configurações da rede. | ||
+ | * Página Web - realiza a configuração automática da rede interna. | ||
+ | * Firewall - responsável pela parte de segurança da rede. | ||
+ | |||
+ | * Podemos citar como um ponto crítico da rede a parada de serviços essenciais como o DNS e o DHCP. Causando a parada total dos serviços da rede. | ||
+ | |||
+ | ==Programação== | ||
+ | |||
+ | ===Requisitos=== | ||
+ | |||
+ | *Serviços necessários para desenvolvimento e funcionalidade da solução da página web: | ||
+ | apache2 | ||
+ | php5 | ||
+ | mysql | ||
+ | |||
+ | ===Configuração Mysql=== | ||
+ | |||
+ | *Database: administracao | ||
+ | |||
+ | ====Tabelas==== | ||
+ | |||
+ | +-------------------------+ | ||
+ | | Tables_in_administracao | | ||
+ | +-------------------------+ | ||
+ | | estandes | | ||
+ | | eth | | ||
+ | | usuario | | ||
+ | | usuarioswifi | | ||
+ | | vlans | | ||
+ | +-------------------------+ | ||
+ | * Tabela usuario: | ||
+ | +-----+---------+----------------------------------+ | ||
+ | | uID | uNome | uSenha | | ||
+ | +-----+---------+----------------------------------+ | ||
+ | Obs: o campo uID é chave estrangeira na tabela estandes campo usuario_uID. | ||
+ | |||
+ | *Tabela estandes: | ||
+ | +-----+-------------+--------------------+---------+---------+-------------+ | ||
+ | | eID | usuario_uID | eNome | eClasse | ePortas | vID_estande | | ||
+ | +-----+-------------+--------------------+---------+---------+-------------+ | ||
+ | Obs: o campo eID é chave estrangeira na tabela usuarioswifi campo estandes_eID. | ||
+ | |||
+ | *Tabela usuarioswifi: | ||
+ | +-----+--------------+--------+--------+ | ||
+ | | wID | estandes_eID | wLogin | wSenha | | ||
+ | +-----+--------------+--------+--------+ | ||
+ | |||
+ | *Tabela vlans: | ||
+ | +------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+ | ||
+ | | vid | subrede | rangee | gateway | broadcast | dominio | classe | flg_uso | eth | mascara | | ||
+ | +------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+ | ||
+ | |||
+ | * Tabela eth: | ||
+ | +------+----------------+---------------+-----------------+----------------+ | ||
+ | | nome | ip | rede | mascara | gateway | | ||
+ | +------+----------------+---------------+-----------------+----------------+ | ||
+ | |||
+ | |||
+ | ===Código PHP=== | ||
+ | |||
+ | * Todos os arquivos de código php que foram deselvolvidos para criação da página web. | ||
+ | |||
+ | [http://www.sj.ifsc.edu.br/~0821250248/iguana/codigo_php.tgz código php] |
Edição atual tal como às 15h45min de 16 de dezembro de 2010
Descrição das atividades por datas
Dia 23/11/2009
Apresentação do Projeto Integrador e das equipes.
Dia 24/11/2009
- Criação do nome da equipe: Iguana.
- Criação da conta na página Wiki.
- Planejamento da estrutura física.
- Instalação do Ubuntu versão 9.10.
- Configuração da interface eth1:
auto eth1 iface eth1 inet static address 200.135.37.111 netmask 255.255.255.192 broadcast 200.135.37.127 gateway 200.135.37.126 network 200.135.37.64
SSH
O Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma unidade remota. Possui as mesmas funcionalidades do Telnet, com a vantagem da conexão entre o cliente e o servidor ser criptografada.
- Instalação do SSH:
apt-get install ssh
Dia 25/11/2009
- Atualização dos pacotes dos repositórios:
apt-get update
APACHE
O servidor Apache ou Servidor HTTP Apache é o mais bem sucedido servidor web livre. Suas funcionalidades são mantidas através de uma estrutura de módulos, permitindo inclusive que o usuário escreva seus próprios módulos.
- Instalação do APACHE2:
apt-get install apache2
PHP
O Personal Home Page ou PHP é uma linguagem que permite criar sites web dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e links. A diferença de PHP com relação à linguagens semelhantes a Javascript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor
- Instalação do PHP5:
apt-get install php5
MYSQL
O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface. É atualmente um dos bancos de dados mais populares, com mais de 10 milhões de instalações pelo mundo.
- Instalação do MYSQL:
apt-get install mysql-server
DHCP
O DHCP ("Dynamic Host Configuration Protocol" ou "protocolo de configuração dinâmica de endereços de rede"), é um protocolo de serviço TCP/IP que oferece configuração dinâmica de terminais, com concessão de endereços IP de host e outros parâmetros de configuração para clientes de rede, ou seja, permite que todos os micros da rede recebam suas configurações de rede automaticamente a partir de um servidor central, sem que você precise ficar configurando os endereços manualmente em cada um.
- Instalação do DHCP3:
apt-get install dhcp3-server
DNS
O DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições: examinar e atualizar seu banco de dados e resolver nomes de domínios em endereços de rede (IPs). Permite a localização de hosts em um domínio determinado. Num sistema livre o serviço é implementado pelo software BIND.
- Instalação do DNS:
apt-get install bind9
POSTFIX
O Postfix é um agent de transferência de emails (MTA), um software livre para envio e entrega de emails. Apresenta-se como uma alternativa segura ao Sendmail, sendo rápido e fácil de administrar.
- Instalação do POSTFIX:
apt-get install postfix apt-get install dovecot-imapd (Possibilita que os email's possam ser baixados)
CACTI
Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos. Monitora o estado de elementos de rede e programas bem como a largura de banda utilizada e uso de CPU.
- Instalação do CACTI:
apt-get install snmp snmpd apt-get install cacti
- Configuração do arquivo /etc/resolv.conf:
nameserver 192.168.1.254 nameserver 200.135.37.65
- Definição do IP da rede interna:
172.11.0.0/16
- Criação do script para ajuste da interface eth1 para desabilitar a alto-negociação:
/etc/init.d/ajusta_eth1.sh #!/bin/bash ethtool -s eth1 speed 100 autoneg off duplex half
Dia 26/11/2009
- Interligação do servidor com o switch DES-3526.
- Realização do projeto da planta baixa do laboratório de Meios e a vista frontal do RAC01.
- Foi verificado um problema no servidor referente as duas placas de rede. Solicitaremos um novo servidor para dar continuidade ao projeto.
Dia 27/11/2009
- Servidor foi testado e apresentou problema novamente.
- Servidor foi trocado, porém o HD foi mantido.
- A interface eth1 foi substituida pela interface eth2.
- Configuração do DHCP
# /etc/dhcp3/dhcpd.conf
default-lease-time 14400; max-lease-time 86400; subnet 172.11.1.0 netmask 255.255.255.0 { # IP range 172.11.1.1 172.11.1.253; # Máscara option subnet-mask 255.255.255.0; # Broadcast option broadcast-address 172.11.1.255; # Rota-padrão option routers 172.11.1.254; # DNS option domain-name "ouro.iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.1.254; } subnet 172.11.2.0 netmask 255.255.255.0 { # IP range 172.11.2.1 172.11.2.253; # Máscara option subnet-mask 255.255.255.0; # Broadcast option broadcast-address 172.11.2.255; # Rota-padrão option routers 172.11.2.254; # DNS option domain-name "prata.iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.2.254; } subnet 172.11.3.0 netmask 255.255.255.0 { # IP range 172.11.3.1 172.11.3.253; # Máscara option subnet-mask 255.255.255.0; # Broadcast option broadcast-address 172.11.3.255; # Rota-padrão option routers 172.11.3.254; # DNS option domain-name "bronze.iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.3.254; } subnet 172.11.4.0 netmask 255.255.255.0 { # IP range 172.11.4.1 172.11.4.253; # Máscara option subnet-mask 255.255.255.0; # Broadcast option broadcast-address 172.11.4.255; # Rota-padrão option routers 172.11.4.254; # DNS option domain-name "wifi.iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.4.254; }
- Configuração do DNS
# /etc/bind/named.conf.local
zone "iguana.sj.ifsc.edu.br" { type master; file "/etc/bind/iguana.sj.ifsc.edu.br"; };
# /etc/bind/iguana.sj.ifsc.edu.br
$TTL 86400 ; @ IN SOA dns1.iguana.sj.ifsc.edu.br. iguana.iguana.sj.ifsc.edu.br. ( 2009112701 ; Serial 1d ; Refresh 4h ; Retry 1w ; Expire 1d ) ; Negative Cache TTL ; ; Name Server: servidores DNS @ IN NS dns1 @ IN NS dns2 @ IN MX 0 mail ; ; Address: endereço dns1 IN A 200.135.37.111 dns2 IN A 200.135.37.111 mail IN A 200.135.37.111 www IN A 200.135.37.111 ftp IN A 200.135.37.111 ouro IN A 172.11.1.254 prata IN A 172.11.2.254 bronze IN A 172.11.3.254 wifi IN A 172.11.4.254 ; ; Canonical Name: "apelido" web IN CNAME www
- Configuração das interfaces de rede:
# /etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback #Rede externa auto eth2 iface eth2 inet static address 200.135.37.111 netmask 255.255.255.192 broadcast 200.135.37.127 gateway 200.135.37.126 network 200.135.37.64 #Rede interna auto eth0 iface eth0 inet static address 172.11.0.1 netmask 255.255.0.0 broadcast 172.11.255.255 network 172.11.0.0 #Vlan ouro auto vlan101 iface vlan101 inet static address 172.11.1.254 netmask 255.255.255.0 network 172.11.1.0 vlan_raw_device eth0 #Vlan prata auto vlan102 iface vlan102 inet static address 172.11.2.254 netmask 255.255.255.0 network 172.11.2.0 vlan_raw_device eth0 #Vlan bronze auto vlan103 iface vlan103 inet static address 172.11.3.254 netmask 255.255.255.0 network 172.11.3.0 vlan_raw_device eth0 #Vlan wifi auto vlan104 iface vlan104 inet static address 172.11.4.254 netmask 255.255.255.0 network 172.11.4.0 vlan_raw_device eth0
ROUNDCUBE
RoundCube é um sistema de Webmail e cliente IMAP multilingual baseado nos padrões pré-definidos do protocolo com uma interface parecida de uma aplicação normal. Foi escrito em PHP e requer um banco de dados MySQL.
- Instalação do ROUNDCUBE:
apt-get install roundcube
- Configuração do POSTFIX:
/etc/postfix/main.cf
(...) myhostname = mail.iguana.sj.ifsc.edu.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = iguana.sj.ifsc.edu.br mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost (...)
- Realização de testes enviando e-mail's, confirmando o funcionamento do DNS e do POSTFIX.
- Configuração do SNMP:
/etc/snmp/snmpd.conf
rocommunity iguana syscontact iguana@iguana.sj.ifsc.edu.br syslocation laboratório de redesI
- Realização da configuração do CACTI, criação dos gráficos e foi constatado sucesso na geração dos gráficos.
Dia 30/11/2009
- Verificado defeito na interface off-bord. Realizada a troca da interface.
- Configuração das VLANS no switch do Lab. de Redes I:
vlan101 -> iguanaouro vlan102 -> iguanaprata vlan103 -> iguanabronze vlan104 -> iguanawifi porta 01 tagged nas vlans 101, 102, 103 e 104 -> vlan01 untagged porta 26 tagged nas vlans 101, 102, 103 e 104 -> vlan26 untagged
- Configuração do webmail ROUNDCUBE:
apt-get install roundcube apt-get install php-mdb2-driver-mysql
- Descomentado as duas primeiras linhas do arquivo /etc/roundcube/apache.conf
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ Alias /roundcube /var/lib/roundcube (...)
FIREWALL
Firewall é o nome dado ao dispositivo de uma rede de computadores que tem por objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Sua função consiste em regular o tráfego de dados entre redes distintas e impedir a transmissão e/ou recepção de acessos nocivos ou não autorizados de uma rede para outra.
- Criação da script do FIREWALL:
/etc/init.d/firewall.sh
#!/bin/bash # Regras aplicadas para interface ETH0 IFACE="eth2" # Ativar o roteamento sysctl -w net.ipv4.ip_forward=1 # Ativar o nat iptables -t nat -A POSTROUTING -o ${IFACE} -j MASQUERADE # Limpando as regras do iptables iptables -F # Política padrão, portas de entrada bloqueadas e saída liberada. iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # Liberar interface Loopback iptables -A INPUT -i lo -j ACCEPT # Liberar solitações do servidor local iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Liberando portas necessárias # Liberar porta para SSH iptables -A INPUT -p tcp --dport 2240 -j ACCEPT # Liberar porta para Telnet iptables -A INPUT -p tcp --dport 23 -j ACCEPT # Liberar porta para HTTP iptables -A INPUT -p tcp --dport 80 -j ACCEPT # Liberar porta HTTPS iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Liberar porta POP3 iptables -A INPUT -p tcp --dport 110 -j ACCEPT # Liberar porta SMTP iptables -A INPUT -p tcp --dport 25 -j ACCEPT # Liberar porta IMAP iptables -A INPUT -p tcp --dport 143 -j ACCEPT # Liberar porta mysql iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
- Configurado o firewall para rodar na inicialização da máquina:
root@iguana:/etc/rc2.d# ls -lt|grep fire lrwxrwxrwx 1 root root 23 2009-11-30 22:04 S70firewall -> /etc/init.d/firewall.sh
Dia 01/12/2009
- Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas.
Dia 02/12/2009
NOCAT
O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha.
- Instalação do NOCAT:
Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz Extrair o arquivo tar xzf NoCatAuth-nightly.tar.gz Navegar até o diretório onde o software foi extraido cd NoCatAuth-nightly Instalação: make gateway make PREFIX=/usr/local/nocat/authserv authserv make PREFIX=/usr/local/nocat/authserv pgpkey
- Configuração do NOCAT:
vi /usr/local/nocat/nocat.conf
AuthServiceAddr 200.135.37.111 AuthServiceURL http://$AuthServiceAddr/cgi-bin/login LogoutURL http://$AuthServiceAddr/logout.html AllowedWebHosts 200.135.37.111 RouteOnly 1 Executar o gateway /usr/local/nocat/bin/gateway
- Configuração do AUTHSERV:
/usr/local/nocat/authserv/nocat.conf
DocumentRoot /usr/local/nocat/authserv/htdocs DataSource Passwd UserFile /usr/local/nocat/authserv/etc/passwd GroupUserFile /usr/local/nocat/authserv/etc/group GroupAdminFile /usr/local/nocat/authserv/etc/groupadm LocalGateway 200.135.37.111
- Configuração do APACHE2 para execução do GCI do AUTHSERV:
/etc/apache2/sites-enabled/000-default
Include /usr/local/nocat/authserv/httpd.conf #Linha inclusa no arquivo. Copiar o arquivo trustedkeys.gpg /usr/local/nocat/authserv/trustedkeys.gpg para o diretório /usr/local/nocat/pgp. cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/pgp
- Criação de usuário e senha para utilizar a página do NOCAT:
/usr/local/nocat/authserv/bin/admintool -c usuário senha /usr/local/nocat/authserv/bin/admintool -a usuário Nome_de_um_grupo
- Testes e finalização da instalação de cabeamento estruturado.
03/12/2009
- Realizado ajustes no DNS, nas partes físicas e testes com o DHCP.
04/12/2009
- Ajustes na instalação de cabeamento estruturado.
- Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais.
- Problemas com o servidor! Perda total das configurações do servidor.
- Realização de todos os serviços anteriormente postados.
06/12/2009 (domingo)
- Criação das tabelas que serão usadas no MYSQL:
#TABELA usuario# mysql> create table usuario ( -> uID int not null auto_increment primary key, -> uNome varchar (45)not null, -> uSenha varchar (45)not null) -> TYPE=INNODB;
#TABELA estandes# mysql> create table estandes ( -> eID int not null auto_increment primary key, -> usuario_uID int, -> eNome varchar(45) not null, -> ePortas varchar(45) not null, -> FOREIGN KEY (usuario_uID) REFERENCES usuario(uID) ON DELETE CASCADE) -> TYPE=INNODB;
#TABELA usuarioswifi# mysql> create table usuarioswifi ( -> wID int not null auto_increment primary key, -> estandes_eID int, -> wLogin varchar(45) not null, -> wSenha varchar(45) not null, -> FOREIGN KEY (estandes_eID) REFERENCES estandes(eID) ON DELETE CASCADE) -> TYPE=INNODB;
07/12/2009
- Criação do organograma da instalação de Cabeamento Estruturado:
<graphviz>
Digraph PI { "Servidor Iguana" -> "ETH0 192.168.1.103" "ETH0 192.168.1.103" -> "Porta DC06 Rack Central" "Servidor Iguana" -> "ETH1 200.135.37.111" "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita" "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I"
"Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios" "Porta DC06 Rack Direita" -> "Porta 01 Switch Lab Redes I"
"Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC"
"Porta 26 Switch Lab Meios" -> "Porta 01 Switch"
"Porta 26 Switch Lab Meios" -> "Porta 02 Switch"
"Porta 01 Switch" -> "Porta 21 Patch Panel do Switch" "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch" "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01"
"Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01"
"Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02"
"Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02"
"Porta 05 Patch Panel 02" -> "Tomada E1T01"
"Porta 06 Patch Panel 02" -> "Tomada E2T01"
"Porta 26 Switch Lab Meios" -> "Porta 03 Switch"
"Porta 03 Switch" -> "Porta 23 Patch Panel"
"Porta 23 Patch Panel" -> "Access Point"
} </graphviz>
- Criação da página web Iguana.
HTTPS
HTTPS (HyperText Transfer Protocol Secure), é uma implementação do protocolo HTTP sobre uma camada SSL ou do TLS. Essa camada adicional permite que os dados sejam transmitidos através de uma conexão criptografada e que se verifique a autenticidade do servidor e do cliente através de certificados digitais. Ele evita que uma informação transmitida entre o cliente e o servidor seja visualizada por terceiros.
- Instalação das bibliotecas necessárias para o serviço HTTPS:
apt-get install openssl ssl-cert
- Habilitado Módulo SSL no APACHE2:
a2enmod ssl
- Criando Certificado:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem
- Movendo a chave criada:
mv apache.pem /etc/apache2/apache.pem
- Alterando as permissões:
chmod 600 /etc/apache2/apache.pem
- Criando arquivo VirtualHost:
vi /etc/apache2/sites-enablesd/svn
NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on ServerSignature On SSLCertificateFile /etc/apache2/ssl/apache.pem # RedirectMatch ^/$ https://iguana.sj.ifsc.edu.br/ ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ Include /usr/local/nocat/authserv/httpd.conf <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
- Habilitando o site com SSH:
a2ensite ssl
- Reiniciando o APACHE:
/etc/init.d/apache2 restart
08/12/2009
- Devido a uma confusão na identificação de algumas portas de um patch panel, houve a necessidade de mudar a posição de alguns cabos para solucionar o problema.
- Certificação da instalação de Cabeamento Estruturado.
- Script de BACKUP:
/etc/init.d/backup.sh
#!/bin/bash data=`date +%F` tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc echo "Cópia do Backup do /etc."|mutt kalvims@gmail.com -a /home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data" tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www echo "Cópia do Backup do www."|mutt kalvims@gmail.com -a /home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data"
- Inserido no /etc/crontab:
0 3 * * * root /etc/init.d/backup.sh
- Relatório sobre o funcionamento do servidor:
/etc/init.d/
#!/bin/bash echo "Relatório servidor iguana" data=`date +%d-%m-%y_%k-%M` ## Definições das variáveis ### DIRETORIO="/tmp/relatorio" ARQ="/tmp/relatorio/rede.txt" ARQ2="/tmp/relatorio/processo.txt" ### # Remover o diretório se já criado ... rm -rf $DIRETORIO >> /dev/null # Criar diretório e arquivos necessários mkdir $DIRETORIO touch $ARQ # Começo do Script echo "-----------------------------------------------------" >> $ARQ; echo " ### Relatório servidor IGUANA $data ###" >> $ARQ; echo " " >> $ARQ; echo " ### Relatório servidor IGUANA $data ###" >> $ARQ2; echo " " >> $ARQ2; echo "# Informações referentes ao processador #" >> $ARQ2; echo " " >> $ARQ2; processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2` echo "$processador" >> $ARQ2; echo " " >> $ARQ2; echo "-----------------------------------------------------" >> $ARQ2; echo "# Informações referentes aos discos #" >> $ARQ2; echo " " >> $ARQ2; echo "Discos: `df -hT`" >> $ARQ2; echo " " >> $ARQ2; echo "-----------------------------------------------------" >> $ARQ2; echo " " >> $ARQ2; MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2` echo "Memória Total: $MEMTOTAL" >> $ARQ2; MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2` echo "Memória Livre: $MEMFREE" >> $ARQ2 echo "-----------------------------------------------------" >> $ARQ2; echo "# Informações referente a DHCP #" >> $ARQ; echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ; echo "" >> $ARQ; cat /etc/dhcp3/dhcpd.conf >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a DNS #" >> $ARQ; echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ; cat /etc/bind/named.conf.local >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ; cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Firewall #" >> $ARQ; echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ; iptables -L >> $ARQ echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Roteamento #" >> $ARQ route -n >> $ARQ echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Crontab #" >> $ARQ; cat /etc/crontab >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; mv $ARQ /tmp/relatorio/redes_"$data".txt cat /tmp/relatorio/redes_"$data".txt | mail -s redes_"$data" iguana.ifsc@gmail.com mv $ARQ2 /tmp/relatorio/processo_"$data".txti | mail -s processo_"$data" iguana.ifsc@gmail.com echo "Relatório enviado com exito para $ARQ"
Dia 09/12/2009
- Organograma da disciplina de Instalação de Equipamentos de Rede:
<graphviz>
Digraph PI { "Internet - IFSC" -> "Switch 3Com 2824" "Switch 3Com 2824" -> "Servidor Iguana" "Servidor Iguana" -> "Switch D-Link 3526 do Lab. de Redes I" "Switch D-Link 3526 do Lab. de Redes I" -> "Switch D-Link 3526 do Lab. de Meios" "Switch D-Link 3526 do Lab. de Meios" -> "Access Point" "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E1T01" "Switch D-Link 3526 do Lab. de Meios" -> "Tomada E2T01"
} </graphviz>
- Inicio dos diagramas da rede mostrando a topologia física e a topologia lógica das instalações no programa Dia.
Dia 10/12/2009
- Testes com o NOCAT e o Access Point.
- Continuação dos diagramas da rede da disciplina de IER.
- Página web Iguana.
Diagrama de Rede - Topologia Física:
Diagrama de Rede - Topologia Lógica:
Dia 11/12/2009
- Conclusão do site Iguana
- Definição das subredes de acordo com as classes:
Classe ouro: 172.11.1.0 à 172.11.10.0
Classe prata: 172.11.11.0 à 172.11.20.0
Classe bronze: 172.11.21.0 à 172.11.30.0
Dia 14/12/2009
- Problemas encontrados no NOCAT:
- O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento.
- Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações.
- Elaboração dos slides para a apresentação do projeto - Parte de Programação.
- Testes no Access Point e NOCAT.
- Teste/Certificação da instalação de Cabeamento Estruturado.
Dia 15/12/2009
- Apresentação da instalação de Cabeamento Estruturado e entrega da documentação exigida pela disciplina.
- Elaboração dos slides para a apresentação exigida pela disciplina de Programação.
Cabeamento Estruturado
- Realização do projeto da planta baixa do laboratório de Meios e a vista frontal do RAC01.
- Inicio da passagem dos cabos do armário às tomadas e suas devidas conexões, com o patch panel e as conexões das próprias tomadas.
- Testes e finalização da instalação de cabeamento estruturado.
- Ajustes na instalação de cabeamento estruturado.
- Finalização da planta baixa do Laboratório de Meios, simbologia, vista frontal dos racks 01 e 02 e da lista de materiais.
Organograma da instalação de cabeamento estruturado.
<graphviz>
Digraph PI { "Servidor Iguana" -> "ETH0 192.168.1.103" "ETH0 192.168.1.103" -> "Porta DC06 Rack Central" "Servidor Iguana" -> "ETH1 200.135.37.111" "Porta DC06 Rack Central" -> "Porta DC06 Rack Direita" "ETH1 200.135.37.111" -> "Porta 12 Switch Rack Central Lab Redes I"
"Porta 01 Switch Lab Redes I" -> "Porta 26 Switch Lab Meios" "Porta DC06 Rack Direita" -> "Porta 01 Switch Lab Redes I"
"Porta 12 Switch Rack Central Lab Redes I" -> "Internet IFSC"
"Porta 26 Switch Lab Meios" -> "Porta 01 Switch"
"Porta 26 Switch Lab Meios" -> "Porta 02 Switch"
"Porta 01 Switch" -> "Porta 21 Patch Panel do Switch" "Porta 02 Switch" -> "Porta 22 Patch Panel do Switch" "Porta 21 Patch Panel do Switch" -> "Porta 04 Patch Panel 01"
"Porta 22 Patch Panel do Switch" -> "Porta 06 Patch Panel 01"
"Porta 06 Patch Panel 01" -> "Porta 06 Patch Panel 02"
"Porta 04 Patch Panel 01" -> "Porta 05 Patch Panel 02"
"Porta 05 Patch Panel 02" -> "Tomada E1T01"
"Porta 06 Patch Panel 02" -> "Tomada E2T01"
"Porta 26 Switch Lab Meios" -> "Porta 03 Switch"
"Porta 03 Switch" -> "Porta 23 Patch Panel"
"Porta 23 Patch Panel" -> "Access Point"
} </graphviz>
- Certificação da instalação.
Instalação de Equipamentos de Rede
Diagrama de Rede - Topologia Física:
Diagrama de Rede - Topologia Lógica:
Definição das subredes de acordo com as classes:
Classe ouro: 172.11.1.0 à 172.11.10.0
Classe prata: 172.11.11.0 à 172.11.20.0
Classe bronze: 172.11.21.0 à 172.11.30.0
Identificação das VLANs (contendo seus VID):
Classe ouro: 101 à 110
Classe prata: 111 à 120
Classe bronze: 121 à 130
Wifi: 131
NOCAT
O Nocat tem como propósito evitar que pessoas não autorizadas tenham acesso a internet em rede Wireless. Para isso, ele captura o tráfego e o desvia para um servidor http, onde haverá uma página solicitando usuário e senha.
- Instalação do NOCAT:
Download do arquivo pela wiki: http://www.sj.ifsc.edu.br/~msobral/IER/pi/NoCatAuth-nightly.tar.gz Extrair o arquivo tar xzf NoCatAuth-nightly.tar.gz Navegar até o diretório onde o software foi extraido cd NoCatAuth-nightly Instalação: make gateway make PREFIX=/usr/local/nocat/authserv authserv make PREFIX=/usr/local/nocat/authserv pgpkey
- Configuração do NOCAT:
vi /usr/local/nocat/nocat.conf
AuthServiceAddr 200.135.37.111 AuthServiceURL http://$AuthServiceAddr/cgi-bin/login LogoutURL http://$AuthServiceAddr/logout.html AllowedWebHosts 200.135.37.111 RouteOnly 1 Executar o gateway /usr/local/nocat/bin/gateway
- Problemas encontrados no NOCAT:
- O software NOCAT não reconhecia a última vlan exibida com o comando ifconfig -a. Para isso, tivemos que criar uma vlan inexistente para o seu correto funcionamento.
- Sempre que o FIREWALL era carregado, tínhamos que executar novamente o NOCAT, pois o mesmo perdia suas configurações.
Gerência de Redes
- Sistema Operacional:
Ubunto Server 9.10
- Particionamento dos discos:
Device Boot Start End Blocks Id System /dev/sda1 * 1 1824 14651248+ 83 Linux /dev/sda2 1825 1946 979965 82 Linux swap / Solaris /dev/sda3 1947 4865 23446867+ 8e Linux LVM
- Configuração da rede:
/etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.103 netmask 255.255.255.0 network 192.168.1.0 auto eth1 iface eth1 inet static address 200.135.37.111 netmask 255.255.255.192 network 200.135.37.64 gateway 200.135.37.126 auto vlan131 iface vlan131 inet static address 172.11.31.1 netmask 255.255.255.0 network 172.11.31.0 vlan_raw_device eth0 auto vlan132 iface vlan132 inet static address 172.11.32.1 netmask 255.255.255.0 network 172.11.32.0 vlan_raw_device eth0 Obs: Essas interfaces são fixas. A configuração das outras vlans são automáticas pelo site.
- Pacote necessário para configuração das vlans:
vlan
Scripts de Manutenção
backup.sh #!/bin/bash data=`date +%F` tar czf /home/iguana/backup/conf/bkp_"$data".tgz /etc echo "Copia do Backup do /etc."|mutt iguana.ifsc@gmail.com -a /home/iguana/backup/conf/bkp_"$data".tgz -s "Backup conf $data" tar czf /home/iguana/backup/www/bkp_www_"$data".tgz /var/www echo "Copia do Backup do www."|mutt iguana.ifsc@gmail.com -a /home/iguana/backup/www/bkp_www_"$data".tgz -s "Backup www $data"
- Pacote necessário para o script backup.sh enviar o backup como anexo para o e-mail:
mutt
- ajustaRelogio.sh:
#!/bin/bash ntpdate -s ntp.cais.rnp.br
- Pacote necessário para a script ajustaRelogio.sh:
ntpdate
- validaVlan.sh:
#!/bin/bash #habilita for vlan in `grep "auto v" /etc/network/interfaces |cut -d " " -f2`; do ver=`ifconfig|grep $vlan` if test -z "$ver" ; then ifconfig $vlan up fi done #desabilita for oldVlan in `ifconfig|grep vlan |cut -d " " -f1` ; do olha=`grep $oldVlan /etc/network/interfaces` if test -z "$olha" ; then ifconfig $oldVlan down fi done
- Diretório /etc/init.d:
#!/usr/bin/perl use strict; use warnings; use RRDs; use Cwd; use Data::Dumper; # Deal with the output from the `tc` command in an attempt to # build up a functional hierarchy of traffic control classes # for some kind of graphing. If the configuration changes while # this script is running in a loop, it will break horribly. # The logic for associating qdiscs and classes with each other # is from tc-graph.pl by Andreas Klauer (Andreas.Klauer@metamorpher.de) # v0.13. # It's possible to walk through %parent_hash and %child_hash and # determine the hierarchy structure, although I am not certain why # you would want to do this ever. Since it works, I am going to # leave all that code here anyway. # 20060307 v1.05 # Fixed incomplete hfsc support (no, really...) # Removed extra debug statements # 20060302 v1.04 # Added support for wrr (Lee Sanders) # Added additional debugging (Lee Sanders) # Added support for hfsc qdisc # Fixed memory leak in commandline mode (Lee Sanders) # Fixed regex for matching qdisc output (reported by Mike Hughes) # Changed RRDs update to use --template # 20051003 v1.03 # Added support for pulling readable names for class minor ids from ENV # Added support for stacked graphs, but set default to LINE2 # Added the graph into the network group for Munin (Xavier Dutoit, sydesy ltd) # Changed graph to be stacked with areas instead of lines (Xavier Dutoit, sydesy ltd) # # 20050128 v1.02 # Fixed pattern matching for htb root classes # Fixed pattern matching for variable height htb classes # Fixed debug output with appropriate newlines # Added colors with a default grey when all have been used # # 20041027 v1.01 # Fixed pattern matching for htb classes # # 20041023 v1.0 # Added support for pfifo / bfifo (i.e. added to regexp) # # 20041021 # Added support for classful tbf qdisc in 2.6.1 and later kernels # # 20041009 # Project initiated # RRDTool links # http://www.cuddletech.com/articles/rrd/ar01s02.html # http://martybugs.net/linux/hddtemp.cgi # Broken Link -> http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/tutorial/cdeftutorial.html # Broken Link -> http://faq.mrtg.org/RPN.html ### CONFIGURATION # Where do you want the RRD files to live? my $rrd_path = getcwd; #my $rrd_path = '/var/www/tc'; my @hostname = `hostname`; # Create graphs? my $do_graph = 1; # Use STACK and AREA instead of LINE2 for each traffic classs my $do_stack = 0; # You'll want to specify your path to the `tc` binary my $BIN_TC="/sbin/tc"; # Pick some nice colours (Borrowed from Munin) my @colors = qw( 22ff22 0022ff ff0000 00aaaa ff00ff ffa500 cc0000 0000cc 0080C0 8080C0 FF0080 800080 688e23 408080 808000 000000 00FF00 0080FF FF8000 800000 FB31FB ); # You could change this to 1 for debugging output in the form # of lots of print statements. sub debug { 0 } # Fetch real names for our minor handles from environment for # initial Munin autoconfig and for commandline mode. my @tcnames; my %tcnames; if( exists $ENV{names} ) { @tcnames = split( /\./, $ENV{names} ); @tcnames = map { /([^:]*):(.*)/;defined($1 && $2) && $1,$2 } @tcnames; @tcnames = grep { defined } @tcnames; die "Odd number of arguments in names environment variable" if @tcnames & 1; %tcnames = @tcnames; } my %parent_hash; my %child_hash; my %stats; my $do_munin; my $do_munin_conf; # I'm lazy, so it's a package global our $DEV; sub parse_tc_qdisc { my( $bytes, $pkts, $drop, $over ); my( $name, $id ); my @qdisc = `$BIN_TC -s qdisc show dev $DEV`; for( my $x = 0; $x < scalar(@qdisc); $x++ ) { next unless $qdisc[$x] =~ m/qdisc/; if( $qdisc[$x] =~ m/qdisc pfifo_fast 0:/i ) { # Sanity check die "traffic control configuration was removed!"; } if( $qdisc[$x] =~ m/(?:htb|hfsc|prio|sfq|tbf|pfifo|bfifo)/i ) { ( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)\s+/i ); ( $bytes, $pkts, $drop, $over ) = ( $qdisc[$x+1] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i ); # $x++; $stats{ $id } = { bytes => $bytes, pkts => $pkts, drop => $drop, over => $over }; } elsif( $qdisc[$x] =~ m/wrr/i ) { ( $name, $id ) = ( $qdisc[$x] =~ m/^\s?qdisc\s+(\w+)\s+([^\s]+)/i ); ( $bytes, $pkts, $drop, $over ) = ( $qdisc[$x+5] =~ m/Sent (\d+) \w+ (\d+) \w+ \(\w+ (\d+), \w+ (\d+)/i ); # $x+=5; $stats{ $id+5 } = { bytes => $bytes, pkts => $pkts, drop => $drop, over => $over }; } if( ! defined $id && debug ) { die "Unmatched handle for tc qdisc output:\n$qdisc[$x]\n"; } $child_hash{ $id } = [] if defined $id; # push( @{$child_hash{ $id }}, 0 ); # pop( @{$child_hash{ $id }} ); } } sub parse_tc_class { my( $bytes, $pkts, $drop, $over ); my( $name, $id, $type, $qdisc ); my( $parent_id, $leaf, $leaf_id ); my( $address ); my @class = `$BIN_TC -s class show dev $DEV`; for( my $x = 0; $x < scalar(@class); $x++ ) { # Try to gather information about class relationship hierarchy. # Really should just grab lines with 'class' keyword and then strip out # $qdisc $n:\d? parent $m:\d? || $qdsic $n:\d? root # Really should be that simply for most classes. WRR seems to be an # exception. next unless $class[$x] =~ m/class/; # Handle the specifics of the htb|hfsc classes if( $class[$x] =~ m/(?:htb|hfsc)/i ) { if( $class[$x] =~ m/root/i ) { # This is wrong; But fortunately we don't care much since its root ( $name, $id, $type ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)/i ); } else { if( $class[$x] =~ m/htb/ ) { ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); } else { ( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); } } } # Handle prio classes elsif( $class[$x] =~ m/prio/i ) { ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); } # Deal with tbf classes, which appear in Linux 2.6.1 and later elsif( $class[$x] =~ m/tbf/i ) { # Someone overwrote the tbf default if( $class[$x] =~ m/leaf/i ) { ( $name, $id, $type, $qdisc, $leaf, $leaf_id ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); } # It's old style tbf without a leaf else { ( $name, $id, $type, $qdisc, $leaf ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); } # next; } elsif( $class[$x] =~ m/^\s+$/ ) { # We found any empty line; This is generally ok next; } ################################### # Deal with WRR class elsif( $class[$x] =~ m/wrr/i ) { ( $name, $id, $type, $qdisc ) = ( $class[$x] =~ m/^class\s+(\w+)\s+([^\s]+)\s+(\w+)\s+([^\s]+)/i ); ($leaf,$leaf_id)= split(/:/,$id); if (defined $class[$x+1] && $class[$x+1] =~ m/address:/) { ( $address ) = ( $class[$x+1] =~ m/^\s+\(address:\s+(.*)\)/i ); $tcnames{$leaf_id} = $address; $leaf_id = $leaf_id.":"; # $x+=4; } else { # unused class $tcnames{$leaf_id} = "$leaf_id undef"; $leaf_id = $leaf_id.":"; } } ################################### else { # Empty line or unrecognized class type. debug && print "Came across unrecognized class\n"; next; } if( $type eq "root" ) { # Root class. No parent class, but parent qdisc. # We get the parent qdisc handle by removing Y from X:Y. $parent_id = $id; $parent_id =~ s/:.*/:/; # Tell qdisc that this is its child_hash. $parent_hash{$id} = $parent_id; push(@{$child_hash{$parent_id}}, $id); } elsif($type eq "parent") { # Child class with parent class. $parent_id = $qdisc; # Tell parent that it has a child_hash. $parent_hash{$id} = $parent_id; push(@{$child_hash{$parent_id}}, $id); } if($leaf) { # Yo cool we got a leaf here. $parent_hash{$leaf_id} = $id; #push( @{$child_hash{ $id }}, $leaf_id ); # lets just say that you can only have one child leaf and this solves the bug # where the number of items in the child_hash increases with each script loop. $child_hash{ $id } = [$leaf_id] ; } } } sub update_rrd { if( ! -e "$rrd_path/" . "$DEV-tc.rrd" ) { my @ds; foreach my $key (sort keys %stats) { $key =~ s/:/-/g; push( @ds, "DS:$key:DERIVE:60:0:U" ); } # Track for 24 hours RRDs::create( "$rrd_path/" . "$DEV-tc.rrd", '--step=10', @ds, 'RRA:AVERAGE:0.5:1:8640' ); die RRDs::error . "\n" if RRDs::error; } debug && print "N:" . join( ':', map { $stats{$_}->{bytes} } sort keys %stats ) , "\n"; # Perform actual update RRDs::update( "$rrd_path/" . "$DEV-tc.rrd", '--template='. join( ':', map { my $a = $_ ; $a =~ s/:/-/; $a } sort keys %stats ), 'N:' . join( ':', map { $stats{$_}->{bytes} } sort keys %stats ) ); die RRDs::error . "\n" if RRDs::error; } sub do_graph { # Time periods to graph, in hours. # (Obviously you can get away with fractions here, like 0.25) my @times = qw( 1 24 ); foreach my $period (@times) { my $x; my $cur_time = time(); my $end_time = $cur_time; my $start_time = $end_time - ($period * 60 * 60); my @graph_rrd; push( @graph_rrd, "--imgformat","PNG" ); push( @graph_rrd, "--title", "Traffic Control Leafs" ); push( @graph_rrd, "--vertical-label", "bps" ); push( @graph_rrd, "--no-minor" ); push( @graph_rrd, "--start", $start_time ); push( @graph_rrd, "--end", $end_time ); push( @graph_rrd, "--width", 600 ); push( @graph_rrd, "--height", 400 ); $x = 0; my $first = 1; foreach my $key (sort keys %stats) { if( ! defined $colors[$x] ) { $colors[$x] = 'cccccc'; } $key =~ s/:/-/g; push( @graph_rrd, "DEF:id$x=$rrd_path/$DEV-tc.rrd:$key:AVERAGE" ); # Deal with huge negative value from resetting `tc` configuration # Multiply the value by 8 push( @graph_rrd, "CDEF:cdef$x=id$x,0,LT,UNKN,id$x,8,*,IF" ); if( $key !~ m/\d$/ ) { $key =~ s/-//g; } if( exists $tcnames{$key} ) { $key = $tcnames{$key}; } if( $do_stack ) { if( $first ) { push( @graph_rrd, "AREA:cdef$x#$colors[$x]:$key" ); $first = 0; } else { push( @graph_rrd, "STACK:cdef$x#$colors[$x]:$key" ); } } else { push( @graph_rrd, "LINE2:cdef$x#$colors[$x]:$key" ); } $x++; } push( @graph_rrd, 'COMMENT:\s', 'COMMENT:\s' ); $x = 0; foreach my $key (sort keys %stats) { $key =~ s/:/-/g; if( $key !~ m/\d$/ ) { $key =~ s/-//g; } if( exists $tcnames{$key} ) { $key = $tcnames{$key}; } push( @graph_rrd, "GPRINT:cdef$x:LAST:$key \\: %6.0lf bps" ); $x++; } debug && print join(" \n", @graph_rrd ) , "\n"; RRDs::graph( "$rrd_path/" . "$DEV-$period-tc.png", @graph_rrd ); die RRDs::error . "\n" if RRDs::error; } } # Let's pretend we're autoconf capable for Munin. if( defined $ARGV[0] && $ARGV[0] eq 'autoconf' ) { if( scalar( keys %stats ) ) { print "yes\n"; exit 0; } else { print "no\n"; exit 1; } } # Get down to business if( defined @ARGV and $ARGV[0] eq 'test' ) { $do_munin = 0; $do_munin_conf = 0; } elsif( defined @ARGV and $ARGV[0] eq 'config' ) { $do_munin = 1; $do_munin_conf = 1; } else { $do_munin = 1; $do_munin_conf = 0; } # This assumes, of course, that you don't have the script # running from a directory with an underscore ( _ ) in it. # If you do, this'll break hard. $0 =~ m/polltc_([^_]*)$/; $DEV = $1; do { parse_tc_qdisc; parse_tc_class; debug && print "Parent Assocations ->\n"; debug && print Dumper( \%parent_hash ); debug && print "Child Associations ->\n"; debug && print Dumper( \%child_hash ); # Delete things that aren't leaf nodes foreach my $id (keys %stats) { if( scalar( @{ $child_hash{ $id } } ) > 0 ) { debug && print "Deleted ID $id [ ". scalar( @{ $child_hash{ $id } } )." kids ]\n"; delete $stats{$id}; } } debug && print "Found ". scalar( keys %stats ) ." leafs\n"; if( $do_munin ) { if( $do_munin_conf ) { print "graph_title Controle de Trafego - Folhas\n"; print "graph_category network\n"; print "graph_args --base 1000 -l 0\n"; print "graph_vlabel bps\n"; } my $firstband = 1; foreach my $key (sort keys %stats) { my $k = $key; $key =~ s/:/-/g; if( $key !~ m/\d$/ ) { $key =~ s/-//g; } if( $do_munin_conf ) { my( $name ); if( exists $tcnames{$key} ) { $name = $tcnames{$key}; } else { $name = $key; } print "$key.label $name\n"; if( $do_stack ) { if( $firstband ) { print "$key.draw AREA\n"; $firstband = 0; } else { print "$key.draw STACK\n"; } } else { print "$key.draw LINE2\n"; } print "$key.type DERIVE\n"; print "$key.min 0\n"; print "$key.max 12500000\n"; print "$key.cdef $key,0,LT,UNKN,$key,8,*,IF\n"; } else { print "$key.value ", $stats{$k}->{bytes}, "\n"; } } exit 0; } else { update_rrd; do_graph if $do_graph; sleep 10; } } until( $do_munin > 0 );
- firewall.sh:
#!/bin/bash case $1 in stop) # Antigas regras de NAT." # Antigas regras de filtro de pacotes." iptables -F #Política padrão para NAT." iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT #Política padrão para filtro de pacotes." iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # Roteamento sysctl -w net.ipv4.ip_forward=1 > /dev/null #NAT para as redes internas." iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE ;; start) # NOCAT iptables -P INPUT ACCEPT /usr/local/nocat/bin/clear.fw # Limpando as regras do iptables iptables -t filter -F iptables -t nat -F # Ativando o roteamento sysctl -w net.ipv4.ip_forward=1 # Ativar o nat iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Política padrão, portas de entrada bloqueadas e saída liberada. iptables -P INPUT DROP # Liberar interface Loopback iptables -A INPUT -i lo -j ACCEPT # Liberar solitações do servidor local iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Liberando portas necessárias # Liberar porta para SSH iptables -A INPUT -p tcp --dport 2240 -j ACCEPT #Liberar porta para Telnet iptables -A INPUT -p tcp --dport 23 -j ACCEPT # Liberar porta para HTTP iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT # Liberar porta HTTPS iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Liberar porta SMTP iptables -A INPUT -p tcp --dport 25 -j ACCEPT # Liberar porta IMAP iptables -A INPUT -p tcp --dport 143 -j ACCEPT # Liberar porta mysql iptables -A INPUT -p tcp --dport 3306 -j ACCEPT #libera porta DNS iptables -A INPUT -p udp --dport 53 -j ACCEPT # libera porta DHCP iptables -A INPUT -p udp --dport 67 -j ACCEPT # libera porta NOCAT iptables -I INPUT 3 -p tcp -i vlan131 --dport 5280 -j ACCEPT # ativa o gate /usr/local/nocat/bin/gateway # Proteções diversas # Proteção contra alguns ataques DoS iptables -A INPUT -m state --state INVALID -j DROP # Proteção contra nmap -sX iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP ;; esac
- relatorio.sh:
#!/bin/bash echo "Relatório servidor iguana" # Comecando o monitoramento do TC #watch tc -s -d class show dev eth1 & #pid_tc=`pidof watch -s` data=`date +%d-%m-%y_%k-%M` ## Definições das variáveis ### DIRETORIO="/tmp/relatorio" ARQ="/tmp/relatorio/rede.txt" ARQ2="/tmp/relatorio/processo.txt" ### # Remover o diretório se já criado ... rm -rf $DIRETORIO >> /dev/null # Criar diretório e arquivos necessários mkdir $DIRETORIO touch $ARQ # Começo do Script echo "-----------------------------------------------------" >> $ARQ; echo " ### Relatório servidor IGUANA $data ###" >> $ARQ; echo " " >> $ARQ; echo " ### Relatório servidor IGUANA $data ###" >> $ARQ2; echo " " >> $ARQ2; echo "# Informações referentes ao processador #" >> $ARQ2; echo " " >> $ARQ2; processador=`cat /proc/cpuinfo | grep "model name" | cut -d ":" -f2` echo "$processador" >> $ARQ2; echo " " >> $ARQ2; echo "-----------------------------------------------------" >> $ARQ2; echo "# Informações referentes aos discos #" >> $ARQ2; echo " " >> $ARQ2; echo "Discos: `df -hT`" >> $ARQ2; echo " " >> $ARQ2; echo "-----------------------------------------------------" >> $ARQ2; echo " " >> $ARQ2; MEMTOTAL=`cat /proc/meminfo | grep MemTotal | tr -d [:blank:] | cut -d ":" -f2` echo "Memória Total: $MEMTOTAL" >> $ARQ2; MEMFREE=`cat /proc/meminfo | grep MemFree | tr -d [:blank:] | cut -d ":" -f2` echo "Memória Livre: $MEMFREE" >> $ARQ2 echo "-----------------------------------------------------" >> $ARQ2; echo "# Informações referente a DHCP #" >> $ARQ; echo "Exibindo o arquivo /etc/dhcp3/dhcpd.conf" >> $ARQ; echo "" >> $ARQ; cat /etc/dhcp3/dhcpd.conf >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a DNS #" >> $ARQ; echo "Exibindo o arquivo /etc/bind/named.conf.local" >> $ARQ; cat /etc/bind/named.conf.local >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "Exibindo o arquivo /etc/bind/iguana.sj.ifsc.edu.br" >> $ARQ; cat /etc/bind/iguana.sj.ifsc.edu.br >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Firewall #" >> $ARQ; echo "Vizualização das regras aplicadas pelo iptables" >> $ARQ; iptables -L >> $ARQ echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Roteamento #" >> $ARQ route -n >> $ARQ echo "-----------------------------------------------------" >> $ARQ; echo "# Informações referente a Crontab #" >> $ARQ; cat /etc/crontab >> $ARQ; echo "-----------------------------------------------------" >> $ARQ; mv $ARQ /tmp/relatorio/redes_"$data".txt echo "Relatorio de redes" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/redes_"$data".txt -s "Relatorio_rede_"$data"" mv $ARQ2 /tmp/relatorio/processo_"$data".txt echo "Relatorio de processos" | mutt iguana.ifsc@gmail.com -a /tmp/relatorio/processo_"$data".txt -s "Relatorio_processo_"$data"" echo "Relatório enviado com exito para $ARQ" #### #echo "Gerando imagem do tráfego TC..." #sleep 1 #echo "Redirecionando para o diretório /etc/init.d" #cd /etc/init.d #perl polltc_eth1 test & #PIDOF=`pidof perl polltc_eth1 -s` #echo "Capturando tráfego na rede" #sleep 10 #echo "Trafego capturado" # Matando o processo polltc_eth1 PIDOF=`pidof perl polltc_eth1 -s` kill -9 $PIDOF #### # Apagando o diretório se existir rm -rf /home/iguana/TC # Criando o diretório mkdir /home/iguana/TC # Movendo todos arquivos .png para o diretório criado mv /etc/init.d/*.png /home/iguana/TC # Apagando se existir a pasta trafego rm -rf /home/iguana/TC/trafego # Criando a pasta trafego mkdir /home/iguana/TC/trafego # Indo até a pasta TC cd /home/iguana/TC # Movendo os arquivos criado para pasta trafego mv eth1-1-tc.png /home/iguana/TC/trafego/1-$data mv eth1-24-tc.png /home/iguana/TC/trafego/2-$data # Compactando os arquivos tar -cf trafego.tar trafego # Enviando por email echo "Enviando .png" | mutt iguana.ifsc@gmail.com -a /home/iguana/TC/trafego.tar -s "Tráfego_$data" # Deixar monitorando o TC até a próxima captura cd /etc/init.d perl polltc_eth1 test &
- tc.sh:
#!/bin/bash # variaveis TAXA=4000 # 4Mbps UMPOR=`expr $TAXA / 100` OURO=`expr $UMPOR \* 60` # 60% da taxa de transmissao PRATA=`expr $UMPOR \* 25` # 25% da taxa de transmissao BRONZE=`expr $UMPOR \* 15` # 10% da taxa de transmissao #WIFI=`expr $UMPOR \* 5` # 5% da taxa de transmissao DEV=eth1 # ----------- TC ------------------# # eliminando as regras anteriores tc qdisc del dev ${DEV} root 2>/dev/null # adicionando a disciplina de fila na raiz tc qdisc add dev ${DEV} root handle 1:0 htb default 12 # criando a classe pai para limitar a velocidade tc class add dev ${DEV} parent 1:0 classid 1:1 htb rate ${TAXA}kbps ceil ${TAXA}kbps # criando 3 classes (ouro, prata e bronze) tc class add dev ${DEV} parent 1:1 classid 1:10 htb rate ${OURO}kbps ceil ${TAXA}kbps tc class add dev ${DEV} parent 1:1 classid 1:11 htb rate ${PRATA}kbps ceil ${TAXA}kbps tc class add dev ${DEV} parent 1:1 classid 1:12 htb rate ${BRONZE}kbps ceil ${TAXA}kbps #tc class add dev ${DEV} parent 1:1 classid 1:13 htb rate ${WIFI}kbps ceil ${TAXA}kbps # adicionando qdisc para cada classe tc qdisc add dev ${DEV} parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev ${DEV} parent 1:11 handle 11: sfq perturb 10 tc qdisc add dev ${DEV} parent 1:12 handle 12: sfq perturb 10 #tc qdisc add dev ${DEV} parent 1:13 handle 13: sfq perturb 10 # criando os filtros para direcionar os trafegos para cada classe de acordo com o IP # de destino tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.1.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.2.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.3.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.4.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.5.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.6.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.7.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.8.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.9.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.10.0/24 flowid 1:10 # vai para ouro tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.11.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.12.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.13.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.14.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.15.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.16.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.17.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.18.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.19.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 172.11.20.0/24 flowid 1:11 # vai para prata tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.21.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.22.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.23.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.24.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.25.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.26.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.27.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.28.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.29.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.30.0/24 flowid 1:12 # vai para bronze tc filter add dev ${DEV} protocol ip parent 1:0 prio 1 u32 match ip dst 192.11.31.0/24 flowid 1:12 # vai para bronze
Configuração dos Serviços
DHCP
O dhcp é um protocolo que é utilizado para endereçar automaticamente a rede. Para que o DHCP possa fazer automaticamente a configuração de rede de uma máquina, ela deve ter o instalado o cliente dhcp.
- Utiliza o protocolo DHCP e UDP. Porta 67.
- Pacote necessário para o serviço DHCP:
dhcp3-server
- /etc/dhcp3/dhcpd.conf:
default-lease-time 14400; max-lease-time 86400; subnet 172.11.1.0 netmask 255.255.255.0 { range 172.11.1.2 172.11.1.254; option subnet-mask 255.255.255.0; option broadcast-address 172.11.1.255; option routers 172.11.1.1; option domain-name "iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.1.1; } subnet 172.11.31.0 netmask 255.255.255.0 { range 172.11.31.2 172.11.31.254; option subnet-mask 255.255.255.0; option broadcast-address 172.11.31.255; option routers 172.11.31.1; option domain-name "iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.31.1; } subnet 172.11.32.0 netmask 255.255.255.0 { range 172.11.32.2 172.11.32.254; option subnet-mask 255.255.255.0; option broadcast-address 172.11.32.255; option routers 172.11.32.1; option domain-name "iguana.sj.ifsc.edu.br"; option domain-name-servers 172.11.32.1; }
Obs: a configuração do dhcp é alterada automaticamente ao realizar configurações de estandes pelo site.
DNS
DNS é o serviço de rede utilizado para tradução de endereços IP para nomes. Possui uma tabela que relaciona nomes com números IP. Existe uma rede se servidores DNS instalados pelo mundo que se comunicam de uma forma hierarquica para poder traduzir os endereços IP solicitados.
- Protocolo DNS e UDP. Porta 53.
- Pacote necessário:
bind9
- named.conf.options:
options { directory "/var/cache/bind"; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-recursion { 127/8; 192.168.1/24; 172.11/16; }; allow-query { any; }; allow-query-cache { any; }; };
- named.conf.local:
zone "iguana.sj.ifsc.edu.br" { type master; file "/etc/bind/iguana.sj.ifsc.edu.br"; };
- iguana.sj.ifsc.edu.br:
$TTL 86400 ; @ IN SOA dns1.iguana.sj.ifsc.edu.br. iguana.iguana.sj.ifsc.edu.br. ( 2009112701 1d 4h 1w 1d ) ; @ IN NS dns1 @ IN NS hendrix.sj.ifsc.edu.br. @ IN MX 0 mail ; dns1 IN A 200.135.37.111 mail IN A 200.135.37.111 www IN CNAME dns1 ftp IN CNAME dns1 web IN CNAME dns1 ;
APACHE
O Apache é utilizado como servidor WEB. Onde pode ser configurado compartilhamentos de arquivos via http e hospedagem de páginas web.
- Utiliza o protocolo http e TCP.Porta 80.
- Pacote necessário:
apache2
HTTPS
HTTPS é uma implementação do protocolo http. Podemos dizer que é um http seguro. Onde é configurado um certificado digital que vai garantir que todos os dados que trafegam pela conexão estabelecida entre cliente e servidor, seja entregue apenas no destino final.
- Protocolo HTTPS porta 443.
- Pacotes necessários:
openssl ssl-cert
- /etc/apache2/sites-enablesd/ssh:
NameVirtualHost *:443 <VirtualHost *:443 > ServerName iguana.sj.ifsc.edu.br ServerAdmin webmaster@localhost CustomLog /var/log/apache2/access.log combined SSLEngine on ServerSignature On SSLCertificateFile /etc/apache2/apache.pem DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
- /etc/apache2/sites-enabled/000-default
<VirtualHost *:80> RedirectMatch ^/$ https://www.iguana.sj.ifsc.edu.br/ </VirtualHost>
POSTFIX e ROUNDCUBE:
O Postfix é um servidor de e-mail, sendo uma ferramenta de fácil e rápida administração. Já o RondCube é um servidor WebMail e clinte IMAP que, neste caso, vai utilizar da estrutura do Postfix.
- Protocolos envolvidos: SMTP porta 25, IMAP porta 143, TCP
- Pacotes necessários:
postfix, roundcube, dovecot-impad, mysql-server, php5, php-mdb2-driver-mysql
- /etc/postfix/main.cf
(...) myhostname = mail.iguana.sj.ifsc.edu.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = iguana.sj.ifsc.edu.br mydestination = mail, mail.iguana.sj.ifsc.edu.br, iguana.sj.ifsc.edu.br, localhost (...)
CACTI - SNMP
O Cacti é uma ferramenta web utilizada para monitoramento da rede e de máquinas remotas. Ele utiliza o protocolo SNMP para obter os valores e informações dos dispositivos monitorados.
- Protocolo SNMP porta 161, UDP. para monitoração.
- Protocolo http Porta 80 TCP para acesso web.
- Necessita dos pacotes:
cacti, snmp, snmpd, apache2, php5, mysql-server
- /etc/snmp/snmpd.conf:
rocommunity iguana syscontact iguana@iguana.sj.ifsc.edu.br syslocation laboratório de redesI
Gerência da rede
- Utilizamos as seguintes ferramentas para gerenciar a rede:
- Cacti - faz a monitoração e contabilização dos resursos da rede.
- Script relatorio.sh - faz a monitoração das configurações da rede.
- Página Web - realiza a configuração automática da rede interna.
- Firewall - responsável pela parte de segurança da rede.
- Podemos citar como um ponto crítico da rede a parada de serviços essenciais como o DNS e o DHCP. Causando a parada total dos serviços da rede.
Programação
Requisitos
- Serviços necessários para desenvolvimento e funcionalidade da solução da página web:
apache2 php5 mysql
Configuração Mysql
- Database: administracao
Tabelas
+-------------------------+ | Tables_in_administracao | +-------------------------+ | estandes | | eth | | usuario | | usuarioswifi | | vlans | +-------------------------+
- Tabela usuario:
+-----+---------+----------------------------------+ | uID | uNome | uSenha | +-----+---------+----------------------------------+
Obs: o campo uID é chave estrangeira na tabela estandes campo usuario_uID.
- Tabela estandes:
+-----+-------------+--------------------+---------+---------+-------------+ | eID | usuario_uID | eNome | eClasse | ePortas | vID_estande | +-----+-------------+--------------------+---------+---------+-------------+
Obs: o campo eID é chave estrangeira na tabela usuarioswifi campo estandes_eID.
- Tabela usuarioswifi:
+-----+--------------+--------+--------+ | wID | estandes_eID | wLogin | wSenha | +-----+--------------+--------+--------+
- Tabela vlans:
+------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+ | vid | subrede | rangee | gateway | broadcast | dominio | classe | flg_uso | eth | mascara | +------+-------------+---------------+-------------+---------------+-------------------------+--------+---------+------+-----------+
- Tabela eth:
+------+----------------+---------------+-----------------+----------------+ | nome | ip | rede | mascara | gateway | +------+----------------+---------------+-----------------+----------------+
Código PHP
- Todos os arquivos de código php que foram deselvolvidos para criação da página web.
código php