Mudanças entre as edições de "Projeto Integrador - 2010.1 - Equipe Café On-Line"
(Corrigido o realce de sintaxe) |
|||
(24 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 67: | Linha 67: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Utilizamos a Distribuição Ubuntu Server LTS. por ser a de maior familiaridade entre os integrantes da equipe e na "versão" LTS por ter suporte por um período de tempo maior que as demais versões do Ubuntu, possibilitando que a | + | Utilizamos a Distribuição Ubuntu Server 10.04 LTS[http://www.ubuntu.com/server]. por ser a de maior familiaridade entre os integrantes da equipe e na "versão" LTS[https://wiki.ubuntu.com/LTS] por ter suporte por um período de tempo maior que as demais versões do Ubuntu, possibilitando que a experiência realizada no projeto possa ser aproveitada no futuro sem grandes alterações. |
Particionamento usado: | Particionamento usado: | ||
Linha 79: | Linha 79: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
*Rede cafeonline: | *Rede cafeonline: | ||
+ | |||
Rede externa: | Rede externa: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
IP:200.135.37.100 Mascara: 255.255.255.192 (/26) Broadcast 200.135.37.127 | IP:200.135.37.100 Mascara: 255.255.255.192 (/26) Broadcast 200.135.37.127 | ||
Rede:200.135.37.64/26 1°IP valido: 200.135.37.65 Ultimo IP valido: 200.135.37.126 | Rede:200.135.37.64/26 1°IP valido: 200.135.37.65 Ultimo IP valido: 200.135.37.126 | ||
Gateway:200.135.37.126 | Gateway:200.135.37.126 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
Rede interna: | Rede interna: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
IP:192.168.100.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.100.255 | IP:192.168.100.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.100.255 | ||
Rede:192.168.100.0 1°IP valido: 192.168.100.1 Ultimo IP valido: 192.168.100.254 | Rede:192.168.100.0 1°IP valido: 192.168.100.1 Ultimo IP valido: 192.168.100.254 | ||
− | Gateway: | + | Gateway:192.168.100.254 |
+ | </syntaxhighlight> | ||
+ | |||
+ | Rede Wireless(Acces Point): | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | IP:192.168.200.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.200.255 | ||
+ | Rede:192.168.200.0 1°IP valido: 192.168.200.1 Ultimo IP valido: 192.168.200.254 | ||
+ | Gateway:192.168.200.254 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | |||
*configuração de rede | *configuração de rede | ||
Arquivo '''/etc/network/interfaces''': Arquivo de configuração das interfaces de rede | Arquivo '''/etc/network/interfaces''': Arquivo de configuração das interfaces de rede | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
auto lo | auto lo | ||
Linha 121: | Linha 132: | ||
network 192.168.100.0 | network 192.168.100.0 | ||
broadcast 192.168.100.255 | broadcast 192.168.100.255 | ||
+ | post-up route add -net 192.168.200.0/24 gw 192.168.100.254 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Arquivo '''/etc/resolv.conf''': Arquivo de configuração dos servidores DNS que o sistema utilizara, no caso é a própria maquina pois ela sera um servidor também DNS. | Arquivo '''/etc/resolv.conf''': Arquivo de configuração dos servidores DNS que o sistema utilizara, no caso é a própria maquina pois ela sera um servidor também DNS. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
nameserver 127.0.0.1 | nameserver 127.0.0.1 | ||
Linha 134: | Linha 146: | ||
Instalando | Instalando | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#aptotude update; aptitude install iptables | #aptotude update; aptitude install iptables | ||
</syntaxhighlight> | </syntaxhighlight> | ||
script '''/etc/init.d/fw''': | script '''/etc/init.d/fw''': | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#!/bin/sh | #!/bin/sh | ||
Linha 175: | Linha 187: | ||
Iniciar o script junto com o sistema | Iniciar o script junto com o sistema | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
update-rc.d fw start 01 2 3 4 5 | update-rc.d fw start 01 2 3 4 5 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 214: | Linha 226: | ||
*Instalando e configurando | *Instalando e configurando | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#aptitude update; aptitude install ntp | #aptitude update; aptitude install ntp | ||
Linha 222: | Linha 234: | ||
Arquivo '''/etc/ntp.conf''': Arquivo de configuração do daemon ntpd. Abaixo os parâmetros alterados. | Arquivo '''/etc/ntp.conf''': Arquivo de configuração do daemon ntpd. Abaixo os parâmetros alterados. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
# blablabla.. | # blablabla.. | ||
#Linhas adicionadas para que o ntpd sincronize o horário com os servidores abaixo | #Linhas adicionadas para que o ntpd sincronize o horário com os servidores abaixo | ||
− | # | + | #servidor da rnp |
server ntp.cais.rnp.br | server ntp.cais.rnp.br | ||
#servidor "a" do observatório nacional | #servidor "a" do observatório nacional | ||
Linha 234: | Linha 246: | ||
#Restringe o acesso ao servidor ntp apenas a dispositivos da rede local | #Restringe o acesso ao servidor ntp apenas a dispositivos da rede local | ||
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap | restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap | ||
+ | restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap | ||
# blablabla... | # blablabla... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 248: | Linha 261: | ||
Instalação e configuração de servidor DNS(BIND9[http://www.isc.org/software/bind]) | Instalação e configuração de servidor DNS(BIND9[http://www.isc.org/software/bind]) | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
*Instalar | *Instalar | ||
Linha 255: | Linha 268: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Arquivo '''/etc/bind/named.conf.options:''': Neste arquivo vão configurações "globais" do bind. | Arquivo '''/etc/bind/named.conf.options:''': Neste arquivo vão configurações "globais" do bind. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
options { | options { | ||
Linha 273: | Linha 286: | ||
Arquivo '''/etc/bind/named.conf.local''': Neste arquivo indicamos o domínio a ser configurado e em quais arquivos ficarão as configurações deste e do DNS reverso. | Arquivo '''/etc/bind/named.conf.local''': Neste arquivo indicamos o domínio a ser configurado e em quais arquivos ficarão as configurações deste e do DNS reverso. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
... | ... | ||
zone "cafeonline.sj.ifsc.edu.br" { | zone "cafeonline.sj.ifsc.edu.br" { | ||
Linha 288: | Linha 301: | ||
Arquivo '''/etc/bind/dbcafeonline.sj.ifsc.edu.br''': Arquivo com as configurações do domínio | Arquivo '''/etc/bind/dbcafeonline.sj.ifsc.edu.br''': Arquivo com as configurações do domínio | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
$TTL 86400 | $TTL 86400 | ||
Linha 316: | Linha 329: | ||
Arquivo '''/etc/bind/db100.64-127.37.135.200.in-addr.arpa''': Arquivo com as configurações do DNS reverso | Arquivo '''/etc/bind/db100.64-127.37.135.200.in-addr.arpa''': Arquivo com as configurações do DNS reverso | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
$TTL 86400 | $TTL 86400 | ||
Linha 341: | Linha 354: | ||
===Cabeamento=== | ===Cabeamento=== | ||
* Verificamos a parte dos Patch Panel, apenas uma porta não funciona. | * Verificamos a parte dos Patch Panel, apenas uma porta não funciona. | ||
+ | ===Gerência de Rede=== | ||
+ | *servidor web apache2 | ||
+ | O apache[http://httpd.apache.org/] e um servidor de paginas web amplamente utilizado mundo afora por sua flexibilidade e robustez.<br> | ||
+ | Portas 80TCP(HTTP[http://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol]) 443(HTTPS[http://pt.wikipedia.org/wiki/HTTPS]) | ||
+ | |||
+ | Instalando: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude update; aptitude install apache2 | ||
+ | </syntaxhighlight> | ||
==Dia: 11/6/2010== | ==Dia: 11/6/2010== | ||
===Gerência de Rede=== | ===Gerência de Rede=== | ||
+ | *Instalação ambiente desktop LXDE | ||
* Configurado acesso remoto. | * Configurado acesso remoto. | ||
+ | |||
+ | Devido a pouca experiência com o linux(shell) da maior parte dos integrantes da equipe e a praticidade de algumas ferramentas em ambiente gráfico(como mysql-admin/MySQL Query Browser. [http://dev.mysql.com/doc/query-browser/pt/index.html],IDE geany[http://www.geany.org/], wireshark[http://www.wireshark.org/]...) decidimos por instalar | ||
+ | um ambiente desktop. Para não afetar o desempenho do sistema optou se pelo LXDE[http://lxde.org/pt-br] por possuir uma boa gama de recursos e ser muito mais "leve" que outros ambientes disponíveis para linux como o gnome, KDE ou mesmo o XFCE. <br> | ||
+ | |||
+ | Instalando: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude update; aptitude install lxde | ||
+ | </syntaxhighlight> | ||
SSH[http://en.wikipedia.org/wiki/Secure_Shell]: É um protocolo de rede que permite acesso remoto seguro(conexão entre cliente e servidor criptografada), Porta 22TCP. | SSH[http://en.wikipedia.org/wiki/Secure_Shell]: É um protocolo de rede que permite acesso remoto seguro(conexão entre cliente e servidor criptografada), Porta 22TCP. | ||
Linha 353: | Linha 384: | ||
Instalando e configurando o OpenSSH-Server[http://www.openssh.com/] | Instalando e configurando o OpenSSH-Server[http://www.openssh.com/] | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
# aptitude update; aptitude install openssh-server | # aptitude update; aptitude install openssh-server | ||
Linha 361: | Linha 392: | ||
Arquivo '''/etc/ssh/sshd_config''': Neste arquivo de configuração do servidor ssh. Abaixo apenas os parâmetros a adicionar ou alterar. | Arquivo '''/etc/ssh/sshd_config''': Neste arquivo de configuração do servidor ssh. Abaixo apenas os parâmetros a adicionar ou alterar. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
− | #Lista de usuários que podem | + | #Lista de usuários que podem golar no servidor |
AllowUsers nx cafeonline | AllowUsers nx cafeonline | ||
#porta na qual o serviço ficara ativo | #porta na qual o serviço ficara ativo | ||
Linha 370: | Linha 401: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | NXServer[http://www.nomachine.com/products.php]: software para acesso remoto ao ambiente gráfico X, apresenta a vantagem de usar o SSH(criptografia), interagir com o servidor X(ao invés de tirar screenshots como o VNC)e possuir um sistema de duplo cache[http://en.wikipedia.org/wiki/NX_technology](no cliente e servidor) o que diminui o volume de dados transmitidos. | ||
+ | Porta 22TCP | ||
+ | |||
+ | Instalando o servidor: | ||
+ | Fazer download do nx; client, node e server(é necessário a instalação dos três pacotes) em: | ||
+ | http://www.nomachine.com/download-package.php?Prod_Id=1978 | ||
+ | depois instale com(deve se instalar nessa ordem nxcliente nxnode nxserver ): | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #cd diretorio-onde-salvou-os-pacotes | ||
+ | # dpkg -i nxclient_3.4.0-7_i386.deb nxnode_3.4.0-11_i386.deb nxserver_3.4.0-12_i386.deb | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Screenshot acesso via nxclient ao servidor: | ||
+ | |||
+ | [[Imagem:1nxclient.png]] | ||
+ | |||
+ | Link util: Usando o NX Server[http://www.guiadohardware.net/tutoriais/nx-server/] | ||
===Gerência de Rede/Programação=== | ===Gerência de Rede/Programação=== | ||
* Configurado scritp de backup/acesso automatizado ao servidor de backup externo | * Configurado scritp de backup/acesso automatizado ao servidor de backup externo | ||
− | Scritp de backup: | + | Scritp de backup: '''/var/backup/scripts/backup.sh''' programado via cron para executar todos os dias as 03:20(Três horas e vinte minutos). |
+ | |||
+ | Linha referente ao Backup no '''/etc/crontab''': | ||
+ | |||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #blablabla... | ||
+ | |||
+ | 20 3 * * * root /var/backup/scripts/backup.sh 2>/var/backup/local/backup-exec.txt | ||
+ | |||
+ | #blablabla... | ||
+ | </syntaxhighlight> | ||
− | < | + | script de backup: |
+ | <syntaxhighlight lang=lang="html4strict"> | ||
#!/bin/bash | #!/bin/bash | ||
Linha 496: | Linha 556: | ||
Instalando: | Instalando: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#aptitude update; aptitude install sshfs | #aptitude update; aptitude install sshfs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 502: | Linha 562: | ||
No servidor local como root(ja que é este usuário que executara o script via cron): | No servidor local como root(ja que é este usuário que executara o script via cron): | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#ssh-keygen -t rsa | #ssh-keygen -t rsa | ||
# scp ~/.ssh/id_rsa.pub backup@eris.dontexist.net:/backup | # scp ~/.ssh/id_rsa.pub backup@eris.dontexist.net:/backup | ||
Linha 509: | Linha 569: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
No servidor remoto: | No servidor remoto: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
backup@buxtehude ~]% cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys | backup@buxtehude ~]% cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys | ||
% rm -rf id_rsa.pub | % rm -rf id_rsa.pub | ||
Linha 563: | Linha 623: | ||
Instalando: | Instalando: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
# aptitude update; aptitude install dhcp3-server | # aptitude update; aptitude install dhcp3-server | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 569: | Linha 629: | ||
Arquivo: '''/etc/dhcp3/dhcpd.conf''' configurações do servidor dhcp. | Arquivo: '''/etc/dhcp3/dhcpd.conf''' configurações do servidor dhcp. | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
# Integração com os outros serviços | # Integração com os outros serviços | ||
Linha 606: | Linha 666: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | *Devido a problemas com os roteadores | + | *Devido a problemas com os roteadores este serviço foi configurado no Access Point[http://wiki.sj.ifsc.edu.br/index.php/Projeto_Integrador_-_2010.1_-_Equipe_Café_On-Line#Dia_02.2F07.2F2010]. |
+ | |||
+ | Como não sera mias necessário no servidor, foi feito backup do arquivo de configuração e desinstalação do serviço. | ||
+ | |||
+ | Backup do arquivo de configuração: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf-backup | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Remoção do serviço: | ||
+ | |||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude purge dhcp3-server | ||
+ | </syntaxhighlight> | ||
==Dia 16/6/2010== | ==Dia 16/6/2010== | ||
Linha 617: | Linha 690: | ||
Instalando: | Instalando: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
# aptitude update; aptitude install squid3 | # aptitude update; aptitude install squid3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Arquivo: '''/etc/squid3/squid.conf''' Principal arquivo de configuração | Arquivo: '''/etc/squid3/squid.conf''' Principal arquivo de configuração | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#blablabla... | #blablabla... | ||
Linha 638: | Linha 711: | ||
Instalando: | Instalando: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#aptitude update; aptitude install dansguardian | #aptitude update; aptitude install dansguardian | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Arquivo: '''/etc/dansguardian/dansguardian.conf''' comentar a linha | Arquivo: '''/etc/dansguardian/dansguardian.conf''' comentar a linha | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#blablabla... | #blablabla... | ||
Linha 674: | Linha 747: | ||
*Email | *Email | ||
− | Postfix [http://www.postfix.org/] é um agente de transferência de emails (MTA), um software livre para envio e entrega de emails[http://pt.wikipedia.org/wiki/Postfix]. | + | Postfix [http://www.postfix.org/] é um agente de transferência de emails (MTA)[http://pt.wikipedia.org/wiki/MTA], um software livre para envio e entrega de emails[http://pt.wikipedia.org/wiki/Postfix]. |
Porta 25TCP(SMTP[http://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol]) | Porta 25TCP(SMTP[http://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol]) | ||
Instalando: | Instalando: | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
#aptitude update; aptitude install postfix | #aptitude update; aptitude install postfix | ||
Linha 686: | Linha 759: | ||
Arquivo: '''/etc/postfix/main.cf''' principal arquivo de configuração do postfix | Arquivo: '''/etc/postfix/main.cf''' principal arquivo de configuração do postfix | ||
− | < | + | <syntaxhighlight lang=lang="html4strict"> |
myhostname = server.$mydomain | myhostname = server.$mydomain | ||
Linha 702: | Linha 775: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ==Dia 30/6/2010== | ||
+ | ===Gerência de Rede=== | ||
+ | *snmp | ||
+ | SNMP[http://pt.wikipedia.org/wiki/Simple_Network_Management_Protocol] (Simple Network Management Protocol - Protocolo Simples de Gerência de Rede) ele é usado para se obter de informação dos dispositivos na rede.<br> | ||
+ | Portas: 161UDP/TCP 162UDP/TCP | ||
+ | |||
+ | Instalando: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude update; aptitude unstall snmpd | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Arquivo: '''/etc/snmp/snmpd.conf''' Principal arquivo de configuração. | ||
+ | |||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | |||
+ | rocommunity cafeonline | ||
+ | syslocation cafeonline-TI | ||
+ | syscontact root@cafeonline.sj.ifsc.edu.br | ||
+ | sysservices 72 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | *cacti | ||
+ | Cacti[http://www.cacti.net/] Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos, usando como base o rrdtool[http://oss.oetiker.ch/rrdtool/] | ||
+ | |||
+ | |||
+ | Plugins: | ||
+ | realtime :Permite gerar gráficos em tempo real | ||
+ | thold: Permite enviar alertas em determinadas situações, por intermedio dos dados coletados pelo Cacti | ||
+ | monitor: Permite monitorar um dispositivo | ||
+ | discover: procura dispositivos com suporte a snmp na rede | ||
+ | |||
+ | Estes e outros plugins, bem como instruções para instalação estão disponíveis em: http://cactiusers.org/ | ||
+ | |||
+ | Screenshots do Cacti no servidor: | ||
+ | |||
+ | |||
+ | [[Imagem:1cacti.png]]<br> | ||
+ | |||
+ | [[Imagem:1cacti-monitor.png]]<br> | ||
+ | [[Imagem:2cacti.png]]<br> | ||
+ | [[Imagem:3cacti.png]]<br> | ||
+ | [[Imagem:2cacti-thold.png]]<br> | ||
+ | [[Imagem:1cacti-email.png]]<br> | ||
+ | |||
+ | |||
+ | *ntop | ||
+ | NTOP[http://www.ntop.org] e uma ferramenta para monitoramento do trafego na rede, que permite visulizar graficos detalhados via browser. | ||
+ | Porta 3000 TCP | ||
+ | |||
+ | Instalando: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude update; aptitude install ntop | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | para acessar digite do navegador: ip-do-servidor:3000 | ||
+ | |||
+ | [[Imagem:1ntop.png]]<br> | ||
+ | [[Imagem:2ntop.png]]<br> | ||
+ | [[Imagem:3ntop.png]]<br> | ||
+ | |||
+ | |||
+ | |||
+ | *iptraf | ||
+ | IPTRAF [http://iptraf.seul.org/] É um analisador de trafego da rede com interface em "modo texto" TUI[http://en.wikipedia.org/wiki/Text_user_interface]. | ||
+ | |||
+ | Instalando: | ||
+ | <syntaxhighlight lang=lang="html4strict"> | ||
+ | #aptitude update; install iptraf | ||
+ | </syntaxhighlight> | ||
+ | para usar basta digitar iptraf como root no shell: | ||
+ | |||
+ | [[Imagem:Iptraf.png]] | ||
==Dia 02/07/2010== | ==Dia 02/07/2010== | ||
*configuração do Access Point Wireless | *configuração do Access Point Wireless | ||
+ | Marca/Modelo: Edimax[http://www.edimaxbrasil.com.br/pt/index.php] EW-7209APg[http://www.edimaxbrasil.com.br/pt/produce_detail.php?pd_id=19&pl1_id=1&pl2_id=5] manual [http://www.edimax.com/images/Image/manual/Wireless/EW-7209APg/EW-7209APg-Manual_080919.zip] | ||
'''Configuração básica:''' | '''Configuração básica:''' | ||
Linha 720: | Linha 869: | ||
[[Imagem:1systemutility.png]] | [[Imagem:1systemutility.png]] | ||
+ | |||
==Aplicação== | ==Aplicação== | ||
Linha 730: | Linha 880: | ||
<html> | <html> | ||
<head> | <head> | ||
− | <title>Café | + | <title>Café On-line</title> |
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
<body bgcolor="000000"> | <body bgcolor="000000"> | ||
Linha 736: | Linha 886: | ||
<p>webserver@cafeonline.sj.ifsc.edu.br</p> | <p>webserver@cafeonline.sj.ifsc.edu.br</p> | ||
<p><a href="http://www.cafeonline.sj.ifsc.edu.br/autenticacao.php">Acesso Restrito</a></p> | <p><a href="http://www.cafeonline.sj.ifsc.edu.br/autenticacao.php">Acesso Restrito</a></p> | ||
− | <center>< | + | <center><img src="800x600.gif"></center> |
− | |||
</body> | </body> | ||
</html> | </html> | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 749: | Linha 899: | ||
<html> | <html> | ||
<head> | <head> | ||
− | <title> Café | + | <title> Café On-line </title> |
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
</head> | </head> | ||
Linha 793: | Linha 943: | ||
session_start(); | session_start(); | ||
if(isset($_SESSION['login'])){ | if(isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
<html> | <html> | ||
<head> | <head> | ||
− | <title> Café | + | <title> Café On-line </title> |
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
</head> | </head> | ||
Linha 805: | Linha 954: | ||
<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a> | <a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a> | ||
<table align=center> | <table align=center> | ||
− | + | <tr> | |
− | + | <form name="formTeste" action="add.php" method="post"> | |
− | + | <table> | |
− | + | <tr><td> | |
− | + | <p> Título: <br> | |
− | + | <input type:"text" name="titulo"> | |
− | + | <p> Nome do cliente: <br> | |
− | + | <input type:"text" name="nome"> | |
− | + | <p> Anúncio: <br> | |
− | + | <textarea rows="2" cols="20" name="texto"></textarea> | |
− | + | <p> Link: <br> | |
− | + | <input type:"text" name="link"> | |
− | + | <p> Expira em: <br> | |
− | + | <input type:"text"name="validade"><br> | |
− | + | <input type="submit" name="b_enviar" value="Gravar"><BR> | |
− | + | </td><td> | |
− | + | <img src="800x600.gif" border="0" width="600" height="400"> | |
− | + | </td></tr> | |
− | |||
− | |||
</body> | </body> | ||
</html> | </html> | ||
Linha 845: | Linha 992: | ||
session_start(); | session_start(); | ||
if(isset($_SESSION['login'])){ | if(isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
Linha 852: | Linha 998: | ||
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | ||
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
− | <title>Café | + | <title>Café On-line</title> |
</head> | </head> | ||
<body bgcolor="000000" text="FFFFFF"> | <body bgcolor="000000" text="FFFFFF"> | ||
Linha 874: | Linha 1 020: | ||
echo "<h2>Anúncio cadastrado com sucesso <br></h2>"; | echo "<h2>Anúncio cadastrado com sucesso <br></h2>"; | ||
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; | ||
− | }else{ | + | }else |
+ | { | ||
echo "Erro ao cadastrar anúncio"; | echo "Erro ao cadastrar anúncio"; | ||
− | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de | + | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; |
} | } | ||
− | }else{ | + | }else |
+ | { | ||
echo "<h2>Erro, campos vazios<br></h2>"; | echo "<h2>Erro, campos vazios<br></h2>"; | ||
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Voltar para cadastro</a>"; | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Voltar para cadastro</a>"; | ||
Linha 888: | Linha 1 036: | ||
<? | <? | ||
− | }else{ | + | }else |
+ | { | ||
header("Location: autenticacao.php"); | header("Location: autenticacao.php"); | ||
− | } | + | } |
?> | ?> | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
===Listagem de anúncios=== | ===Listagem de anúncios=== | ||
− | *Na página listar.php é feita a conexão com o banco de dados e também a consulta nas tabelas, para fazer a listagem dos anúncios ja cadastrados, e através dessa página pode-se selecionar um anúncio o qual deseja editar ou excluir. | + | *Na página listar.php é feita a conexão com o banco de dados e também a consulta nas tabelas, para fazer a listagem dos anúncios ja cadastrados, e através dessa página pode-se selecionar um anúncio o qual deseja editar ou excluir. Segue o código (listar.php): |
<syntaxhighlight lang=lang="php"> | <syntaxhighlight lang=lang="php"> | ||
<? | <? | ||
− | |||
session_start(); | session_start(); | ||
if (isset($_SESSION['login'])){ | if (isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
<html> | <html> | ||
Linha 911: | Linha 1 057: | ||
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | ||
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
− | <title> Café | + | <title> Café On-line </title> |
</head> | </head> | ||
<body bgcolor="000000" text="FFFFFF"> | <body bgcolor="000000" text="FFFFFF"> | ||
Linha 928: | Linha 1 074: | ||
echo "<th>Nome do cliente</th>"; | echo "<th>Nome do cliente</th>"; | ||
echo "<th>Título do anúncio</th>"; | echo "<th>Título do anúncio</th>"; | ||
+ | echo "<th>Visitas</th>"; | ||
echo "<th>Validade</th>"; | echo "<th>Validade</th>"; | ||
echo "<th>Ações</th>"; | echo "<th>Ações</th>"; | ||
Linha 933: | Linha 1 080: | ||
while($linha=mysql_fetch_array($dados,MYSQL_ASSOC)) | while($linha=mysql_fetch_array($dados,MYSQL_ASSOC)) | ||
{ | { | ||
− | + | $id = $linha["IDANUNCIO"]; | |
echo "<tr><td>" . $linha["NOMECLIENTE"] . "</td>" ; | echo "<tr><td>" . $linha["NOMECLIENTE"] . "</td>" ; | ||
echo "<td>" . $linha["NOMEANUNCIO"] . "</td>" ; | echo "<td>" . $linha["NOMEANUNCIO"] . "</td>" ; | ||
+ | echo "<td>" . $linha["VISITAS"] . "</td>" ; | ||
echo "<td>" . $linha["VALIDADE"] . "</td>" ; | echo "<td>" . $linha["VALIDADE"] . "</td>" ; | ||
echo "<td><a href='excluir.php?id=$id' style='text-decoration:none'>Excluir </a>"; | echo "<td><a href='excluir.php?id=$id' style='text-decoration:none'>Excluir </a>"; | ||
Linha 953: | Linha 1 101: | ||
<? | <? | ||
}else{ | }else{ | ||
− | + | header("Location: autenticacao.php"); | |
− | } | + | } |
?> | ?> | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 971: | Linha 1 118: | ||
session_start(); | session_start(); | ||
if(isset($_SESSION['login'])){ | if(isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
Linha 978: | Linha 1 124: | ||
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | ||
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
− | <title> Caf& | + | <title> Café On-line </title> |
</head> | </head> | ||
− | + | <body bgcolor="000000" text="FFFFFF"> | |
<h1>Editar anúncio </h1> | <h1>Editar anúncio </h1> | ||
<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a> | <a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a> | ||
Linha 996: | Linha 1 142: | ||
<form name="formTeste" action="add2.php?id=<? echo $id ?>" method="post"> | <form name="formTeste" action="add2.php?id=<? echo $id ?>" method="post"> | ||
<table> | <table> | ||
− | <tr> | + | <tr><td> |
− | |||
<p> Título: <br> | <p> Título: <br> | ||
<input type:"text" name="titulo" value="<? echo $linha['NOMEANUNCIO'] ?>"> | <input type:"text" name="titulo" value="<? echo $linha['NOMEANUNCIO'] ?>"> | ||
Linha 1 019: | Linha 1 164: | ||
?> | ?> | ||
<input type="submit" name="b_enviar" value="Gravar"><BR> | <input type="submit" name="b_enviar" value="Gravar"><BR> | ||
− | + | </td><td> | |
− | + | <img src="800x600.gif" border="0" width="600" height="400"> | |
− | + | </td></tr> | |
− | |||
− | |||
</body> | </body> | ||
</html> | </html> | ||
− | |||
<? | <? | ||
− | |||
}else{ | }else{ | ||
header("Location: autenticacao.php"); | header("Location: autenticacao.php"); | ||
} | } | ||
?> | ?> | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 1 046: | Linha 1 186: | ||
session_start(); | session_start(); | ||
if(isset($_SESSION['login'])){ | if(isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
Linha 1 053: | Linha 1 192: | ||
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | ||
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
− | <title>Café | + | <title>Café On-line</title> |
</head> | </head> | ||
<body bgcolor="000000" text="FFFFFF"> | <body bgcolor="000000" text="FFFFFF"> | ||
Linha 1 071: | Linha 1 210: | ||
if($update==true) | if($update==true) | ||
{ | { | ||
− | + | echo "<h2>Dados atualizados com sucesso <br></h2>"; | |
− | + | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; | |
− | }else{ | + | }else |
+ | { | ||
echo "Erro ao Atualizar"; | echo "Erro ao Atualizar"; | ||
"<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; | "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>"; | ||
} | } | ||
− | }else{ | + | }else |
+ | { | ||
echo "<h2>Erro, campos vazios<br></h2>"; | echo "<h2>Erro, campos vazios<br></h2>"; | ||
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar'>Voltar para lista de anúncios</a>"; | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar'>Voltar para lista de anúncios</a>"; | ||
Linha 1 085: | Linha 1 226: | ||
</body> | </body> | ||
</html> | </html> | ||
− | |||
<? | <? | ||
− | }else{ | + | }else |
+ | { | ||
header("Location: autenticacao.php"); | header("Location: autenticacao.php"); | ||
− | } | + | } |
?> | ?> | ||
Linha 1 104: | Linha 1 245: | ||
session_start(); | session_start(); | ||
if(isset($_SESSION['login'])){ | if(isset($_SESSION['login'])){ | ||
− | |||
?> | ?> | ||
− | |||
<html> | <html> | ||
Linha 1 112: | Linha 1 251: | ||
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> | ||
<link rel="stylesheet" media="all" type="text/css" href="style.css" /> | <link rel="stylesheet" media="all" type="text/css" href="style.css" /> | ||
− | <title>Café | + | <title>Café On-line</title> |
</head> | </head> | ||
<body bgcolor="000000" text="FFFFFF"> | <body bgcolor="000000" text="FFFFFF"> | ||
+ | |||
<? | <? | ||
− | |||
$conexao = mysql_connect("localhost","root","cafeonline") ; | $conexao = mysql_connect("localhost","root","cafeonline") ; | ||
$base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1"); | $base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1"); | ||
Linha 1 125: | Linha 1 264: | ||
if ($query==true) | if ($query==true) | ||
{ | { | ||
− | echo "<h2>Anúncio exlcluido<br></h2>"; | + | echo "<h2>Anúncio exlcluido<br></h2>"; |
− | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>"; | + | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>"; |
}else{ | }else{ | ||
− | echo "Erro ao excluir | + | echo "Erro ao excluir anúncio"; |
− | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de | + | echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>"; |
} | } | ||
header("Content-Type: text/html; charset=ISO-8859-1", true); | header("Content-Type: text/html; charset=ISO-8859-1", true); | ||
Linha 1 139: | Linha 1 278: | ||
}else{ | }else{ | ||
header("Location: autenticacao.php"); | header("Location: autenticacao.php"); | ||
− | } | + | } |
?> | ?> | ||
Linha 1 219: | Linha 1 358: | ||
text-align: left; | text-align: left; | ||
border: 1px #fff solid;} | border: 1px #fff solid;} | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ===Banner=== | ||
+ | *Segue o código do banner que ficará localizado no topo da página (banner.php): | ||
+ | |||
+ | <syntaxhighlight lang=lang="php"> | ||
+ | |||
+ | <? | ||
+ | |||
+ | $conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO"); | ||
+ | if($conexao) // se $conexao é true, ou seja, conectou ao banco de dados, seleciona com qual banco deseja trabalhar. | ||
+ | { | ||
+ | mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco | ||
+ | $query = "SELECT * FROM anuncio" or die ("erro 2"); //seleciona tudo (*), de uma tabela chamada anuncio | ||
+ | $dados = mysql_query($query,$conexao) or die ("erro 3"); | ||
+ | $linhas = mysql_num_rows($dados); | ||
+ | $linhas--; | ||
+ | $aleatorio = rand(0, $linhas); | ||
+ | mysql_data_seek($dados, $aleatorio); | ||
+ | $imprimir = mysql_fetch_array($dados,MYSQL_ASSOC); | ||
+ | |||
+ | $tempo_atual = date("Y-n-j"); | ||
+ | $verificar_exp = (strtotime($tempo_atual)-strtotime($imprimir["VALIDADE"])); | ||
+ | |||
+ | if($verificar_exp < 0){ | ||
+ | |||
+ | // definindo as dimensoes da imagem: largura , altura | ||
+ | $imagem = imagecreate( 800, 70 ); | ||
+ | |||
+ | // definindo a cor de fundo e do texto | ||
+ | $fundo = imagecolorallocate( $imagem, 0, 0, 0 ); | ||
+ | $corTexto = imagecolorallocate( $imagem, 255, 255, 255 ); | ||
+ | |||
+ | // cor de uma linha | ||
+ | $corLinha = imagecolorallocate( $imagem, 255, 48, 48 ); | ||
+ | |||
+ | imagettftext($imagem, 12, 0, 10, 18, $corTexto, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", $imprimir["NOMEANUNCIO"]); | ||
+ | // Configuração da função imagettftext(imagem,tamanho,ângulo,X,Y,cor,arquivo da fonte,texto) | ||
+ | imagettftext($imagem, 9, 0, 10, 43, $corTexto, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", $imprimir["TEXTO"]); | ||
+ | |||
+ | // desenhando uma linha de largura 2px abaixo do texto | ||
+ | imagesetthickness ( $imagem, 2 ); | ||
+ | imageline( $imagem, 5, 25, 790, 25, $corLinha ); | ||
+ | |||
+ | // gravando o arquivo no subdiretorio site | ||
+ | // o usuario www-data deve ter permissao de escrita neste diretorio | ||
+ | imagepng( $imagem, "/var/www/site/propaganda.png" ); | ||
+ | |||
+ | // retirando a figura da memoria | ||
+ | imagedestroy( $imagem ); | ||
+ | |||
+ | //contador | ||
+ | $atualiza = "update id set propaganda = '$imprimir[IDANUNCIO]'"; | ||
+ | mysql_query($atualiza,$conexao) or die ("erro 3"); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Contador de visitas=== | ||
+ | *Segue código do contador de visitas (cont.php), que quando o cliente clica no banner incrementa mais uma visita na coluna VISITAS do banco de dados, e através deste código que o cliente é redirecionado para a página do banner. | ||
+ | |||
+ | <syntaxhighlight lang=lang="php"> | ||
+ | |||
+ | <? | ||
+ | $action = $_GET['action']; | ||
+ | if ($action == "go") { | ||
+ | $conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO"); | ||
+ | if($conexao) | ||
+ | { | ||
+ | mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco | ||
+ | $query = "select propaganda from id" or die ("erro 2"); //seleciona coluna propaganda da tabela id | ||
+ | $dados = mysql_query($query,$conexao) or die ("erro 3"); | ||
+ | $imprimir = mysql_fetch_array($dados,MYSQL_ASSOC); //pega a linha inteira | ||
+ | |||
+ | $query2 = "select * from anuncio where IDANUNCIO='$imprimir[propaganda]'"; //seleciona tudo da tabela anuncio onde IDANUNCIO é igual ao id da propaganda | ||
+ | $dados2 = mysql_query($query2,$conexao) or die ("erro 4"); | ||
+ | $imprimir2 = mysql_fetch_array($dados2, MYSQL_ASSOC); | ||
+ | |||
+ | $visitas = $imprimir2['VISITAS']; | ||
+ | $visitas++; | ||
+ | |||
+ | $query3 = "update anuncio set VISITAS='$visitas' where IDANUNCIO='$imprimir[propaganda]'"; //atualiza na tabela anuncio a coluna VISITAS | ||
+ | mysql_query($query3,$conexao) or die ("erro 5"); | ||
+ | header("Location: $imprimir2[LINK]"); | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
</syntaxhighlight> | </syntaxhighlight> |
Edição atual tal como às 10h56min de 14 de fevereiro de 2020
Descrição das atividades por datas - Projeto Integrador 2010-1
Dia: 08/6/2010
Criação do nome da equipe: Café On-line.
Cabeamento
- Foi passado os cabos do Patch Panel do Armário Principal para o Armário Café On-line.
- Feitos os pontos de acesso (Tomadas).
- Padrão 568A.
Gerência de Rede
- Instalação do Sistema Operacional, definido pela equipe.
Hardware do servidor
*Processador:
# lshw -short -c cpu
H/W path Device Class Description
====================================================
/0/4 processor Intel(R) Celeron(R) CPU 2.26GHz
*Memoria:
# lshw -short -c memory
H/W path Device Class Description
====================================================
/0/4/5 memory 16KiB L1 cache
/0/4/6 memory 256KiB L2 cache
/0/2f memory 512MiB System Memory
/0/2f/0 memory 256MiB DIMM DDR Synchronous 333 MHz (3.0 ns)
/0/2f/1 memory 256MiB DIMM DDR Synchronous 333 MHz (3.0 ns)
*Rede
# lshw -short -c network
H/W path Device Class Description
====================================================
/0/100/1e/1 eth1 network RTL-8169 Gigabit Ethernet
/0/100/1e/8 eth0 network 82801DB PRO/100 VE (LOM) Ethernet Controller
*Disco
# lshw -short -c disk
H/W path Device Class Description
====================================================
/0/100/1f.1/0 /dev/sda disk 41GB Maxtor 6E040L0
/0/100/1f.1/1 /dev/cdrom disk CD/DVDW SH-S182D
*Video
# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 82845G/GL[Brookdale-G]/GE
Chipset Integrated Graphics Device (rev 01)
Para informações adicionais executar
# dmidecode | less
Distribuição utilizada:
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 10.04 LTS
Release: 10.04
Codename: lucid
Utilizamos a Distribuição Ubuntu Server 10.04 LTS[1]. por ser a de maior familiaridade entre os integrantes da equipe e na "versão" LTS[2] por ter suporte por um período de tempo maior que as demais versões do Ubuntu, possibilitando que a experiência realizada no projeto possa ser aproveitada no futuro sem grandes alterações.
Particionamento usado:
Partição "Tamanho" Tipo Ponto de montagem
====================================================
/dev/sda1 285MB EXT3 /boot
/dev/sda2 717MB Linux/swap
/dev/sda3 36GB EXT4 /
- Rede cafeonline:
Rede externa:
IP:200.135.37.100 Mascara: 255.255.255.192 (/26) Broadcast 200.135.37.127
Rede:200.135.37.64/26 1°IP valido: 200.135.37.65 Ultimo IP valido: 200.135.37.126
Gateway:200.135.37.126
Rede interna:
IP:192.168.100.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.100.255
Rede:192.168.100.0 1°IP valido: 192.168.100.1 Ultimo IP valido: 192.168.100.254
Gateway:192.168.100.254
Rede Wireless(Acces Point):
IP:192.168.200.1 Mascara: 255.255.255.0 (/24 ) Broadcast 192.168.200.255
Rede:192.168.200.0 1°IP valido: 192.168.200.1 Ultimo IP valido: 192.168.200.254
Gateway:192.168.200.254
- configuração de rede
Arquivo /etc/network/interfaces: Arquivo de configuração das interfaces de rede
auto lo
iface lo inet loopback
# The primary network interface
# Interface externa ip 200.135.37.100/26
auto eth0
iface eth0 inet static
address 200.135.37.100
netmask 255.255.255.192
broadcast 200.135.37.127
network 200.135.37.64
gateway 200.135.37.126
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 127.0.0.1 ns1.cafeonline.sj.ifsc.edu.br
dns-search cafeonline.sj.ifsc.edu.br
# Interface interna ip 192.168.100.1/24
auto eth1
iface eth1 inet static
address 192.168.100.1
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
post-up route add -net 192.168.200.0/24 gw 192.168.100.254
Arquivo /etc/resolv.conf: Arquivo de configuração dos servidores DNS que o sistema utilizara, no caso é a própria maquina pois ela sera um servidor também DNS.
nameserver 127.0.0.1
Scritp basico para "NAT" e redirecionamento de portas, utilizando o netfilter/iptables[3]
Instalando
#aptotude update; aptitude install iptables
script /etc/init.d/fw:
#!/bin/sh
# Interfaces
IFACE_INTERNA="eth1"
IFACE_EXTERNA="eth0"
# Habilita ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# Habilita syncookies (evita que um grande numero de pacotes SYN, estourem o limite de conexões)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# NAT
iptables -t nat -A POSTROUTING -o ${IFACE_EXTERNA} -j MASQUERADE
# Redirecionamento para o Analisador de Conteúdo Dansguardian
iptables -t nat -A PREROUTING -i ${IFACE_INTERNA} -p tcp --dport 80 \
-j REDIRECT --to-port 8080
# Bloqueio para acesso direto ao Proxy
iptables -A INPUT -m tcp -p tcp ! -s 127.0.0.1 --dport 3128 -j DROP
#limita resposta a "ping"
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Bloqueia pacotes invalidos
iptables -A INPUT -m state --state INVALID -j DROP
exit 0
Iniciar o script junto com o sistema
update-rc.d fw start 01 2 3 4 5
Link's uteis:
Ubuntu server guide:[4]
em pdf[5], Pesquisa no Guia FOCA [6], google/linux [7]
--Eris 12:54, 5 Julho 2010 (BRT)
Fotos do Primeiro Dia
Dia: 09/6/2010
Cabeamento
- Verificamos se a parte de cabeamento ta ok.
- Foi visto que os Patch Panel do Lab. de Transmissão não funcionam muito bem.
Gerência de Rede
Instalação e configuração dos serviços
- NTP
- DNS
NTP
- NTP[8] (Network Time Protocol ou Protocolo de Tempo para Redes). É um protocolo que permite a sincronização dos relógios dos dispositivos de uma rede como servidores, estações de trabalho, roteadores e outros equipamentos à partir de referências de tempo confiável[9] Portas 123UDP/TCP.
- Instalando e configurando
#aptitude update; aptitude install ntp
Arquivo /etc/ntp.conf: Arquivo de configuração do daemon ntpd. Abaixo os parâmetros alterados.
# blablabla..
#Linhas adicionadas para que o ntpd sincronize o horário com os servidores abaixo
#servidor da rnp
server ntp.cais.rnp.br
#servidor "a" do observatório nacional
server a.ntp.br
#servidor "b" do observatório nacional
server b.ntp.br
# blablabla...
#Restringe o acesso ao servidor ntp apenas a dispositivos da rede local
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap
# blablabla...
link's uteis: ntp.br [10], guia rápido de configuração do ntp.br [11], manual sobre ntp da rnp[12], documentação no ntp.org [13]
--Eris 12:53, 5 Julho 2010 (BRT)
DNS
- DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído que permite a "tradução" de nomes de "maquinas" em endereços IP.
Portas utilizadas: 53 UDP/TCP
Instalação e configuração de servidor DNS(BIND9[14])
*Instalar
# aptitude update; aptitude install bind9
Arquivo /etc/bind/named.conf.options:: Neste arquivo vão configurações "globais" do bind.
options {
directory "/var/cache/bind";
version "N/A"; # Não exibe versão do bind
listen-on-v6 { any; };
listen-on { any; };
allow-recursion { 127.0.0.0/8; 192.168.100.0/24; }; # define quem pode faver consultas recursssivas ao servidor
allow-query { any; }; # define quem pode consultar o servidor
allow-query-cache { any; };
};
Arquivo /etc/bind/named.conf.local: Neste arquivo indicamos o domínio a ser configurado e em quais arquivos ficarão as configurações deste e do DNS reverso.
...
zone "cafeonline.sj.ifsc.edu.br" {
type master;
file "/etc/bind/dbcafeonline.sj.ifsc.edu.br";
};
zone "100.64-127.37.135.200.in-addr.arpa" {
type master;
file "/etc/bind/db100.64-127.37.135.200.in-addr.arpa";
};
Arquivo /etc/bind/dbcafeonline.sj.ifsc.edu.br: Arquivo com as configurações do domínio
$TTL 86400
@ IN SOA server.cafeonline.sj.ifsc.edu.br. admin.cafeonline.sj.ifsc.edu.br. (
2010063001 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; negative cache ttl
)
@ IN NS server
@ IN A 200.135.37.100
@ IN MX 0 mail.cafeonline.sj.ifsc.edu.br.
server IN A 200.135.37.100
ns1 IN A 200.135.37.100
mail IN A 200.135.37.100
www IN A 200.135.37.100
smtp IN CNAME mail.cafeonline.sj.ifsc.edu.br.
pop IN CNAME mail.cafeonline.sj.ifsc.edu.br.
imap IN CNAME mail.cafeonline.sj.ifsc.edu.br.
ssl IN CNAME www.cafeonline.sj.ifsc.edu.br.
cacti IN CNAME www.cafeonline.sj.ifsc.edu.br.
cafeonline.sj.ifsc.edu.br. IN TXT "v=spf1 mx -all"
Arquivo /etc/bind/db100.64-127.37.135.200.in-addr.arpa: Arquivo com as configurações do DNS reverso
$TTL 86400
; Start of Authority: início de autoridade
@ IN SOA ns1.cafeonline.sj.ifsc.edu.br. admin.cafeonline.sj.ifsc.edu.br. (
2010070501 ; Serial
1d ; Refresh
4h ; Retry
1w ; Expire
1d ) ; Negative Cache TTL
;
; Name Server: servidores DNS
@ IN NS ns1.cafeonline.sj.ifsc.edu.br.
; Address: endereço
100 IN PTR ns1.cafeonline.sj.ifsc.edu.br.
--Eris 12:53, 5 Julho 2010 (BRT)
Dia: 10/6/2010
Cabeamento
- Verificamos a parte dos Patch Panel, apenas uma porta não funciona.
Gerência de Rede
- servidor web apache2
O apache[15] e um servidor de paginas web amplamente utilizado mundo afora por sua flexibilidade e robustez.
Portas 80TCP(HTTP[16]) 443(HTTPS[17])
Instalando:
#aptitude update; aptitude install apache2
Dia: 11/6/2010
Gerência de Rede
- Instalação ambiente desktop LXDE
- Configurado acesso remoto.
Devido a pouca experiência com o linux(shell) da maior parte dos integrantes da equipe e a praticidade de algumas ferramentas em ambiente gráfico(como mysql-admin/MySQL Query Browser. [18],IDE geany[19], wireshark[20]...) decidimos por instalar
um ambiente desktop. Para não afetar o desempenho do sistema optou se pelo LXDE[21] por possuir uma boa gama de recursos e ser muito mais "leve" que outros ambientes disponíveis para linux como o gnome, KDE ou mesmo o XFCE.
Instalando:
#aptitude update; aptitude install lxde
SSH[22]: É um protocolo de rede que permite acesso remoto seguro(conexão entre cliente e servidor criptografada), Porta 22TCP.
Instalando e configurando o OpenSSH-Server[23]
# aptitude update; aptitude install openssh-server
Arquivo /etc/ssh/sshd_config: Neste arquivo de configuração do servidor ssh. Abaixo apenas os parâmetros a adicionar ou alterar.
#Lista de usuários que podem golar no servidor
AllowUsers nx cafeonline
#porta na qual o serviço ficara ativo
Port 22
# Define se o usuario root podo acessar via ssh
PermitRootLogin no
NXServer[24]: software para acesso remoto ao ambiente gráfico X, apresenta a vantagem de usar o SSH(criptografia), interagir com o servidor X(ao invés de tirar screenshots como o VNC)e possuir um sistema de duplo cache[25](no cliente e servidor) o que diminui o volume de dados transmitidos. Porta 22TCP
Instalando o servidor: Fazer download do nx; client, node e server(é necessário a instalação dos três pacotes) em: http://www.nomachine.com/download-package.php?Prod_Id=1978 depois instale com(deve se instalar nessa ordem nxcliente nxnode nxserver ):
#cd diretorio-onde-salvou-os-pacotes
# dpkg -i nxclient_3.4.0-7_i386.deb nxnode_3.4.0-11_i386.deb nxserver_3.4.0-12_i386.deb
Screenshot acesso via nxclient ao servidor:
Link util: Usando o NX Server[26]
Gerência de Rede/Programação
- Configurado scritp de backup/acesso automatizado ao servidor de backup externo
Scritp de backup: /var/backup/scripts/backup.sh programado via cron para executar todos os dias as 03:20(Três horas e vinte minutos).
Linha referente ao Backup no /etc/crontab:
#blablabla...
20 3 * * * root /var/backup/scripts/backup.sh 2>/var/backup/local/backup-exec.txt
#blablabla...
script de backup:
#!/bin/bash
########################################################################################
########################################################################################
# O objetivo deste scritp e realizar backup do servidor em um diretório local, em DVD
#e ainda enviar uma copia a um servidor remoto via ssh
#
#Escrito por: equipe cafeonline para o projeto integrador do curso técnico
#em telecomunicações com enfase em redes (erixtec@gmail.com)
#Ultima alteração em: 05/07/2010 para: Modificar acesso remoto, para usar o sshfs
###### Variáveis de uso geral
###############################################
# Formata a data utilizada para identificar quando o backup foi realizado
DATA=`date +%d-%m-%Y-%H-%M`
# Diretorio onde sera feito o backup
DIRBKP=/var/backup/local
# Nome do arquivo compactado
NOMEARQUIVO=server-cafeonline-backup-local.tar.bz2
##### Variáveis para gravação em DVD
######################################################
## Dispositivo usado para a gravação em /dev/dispositivo como em /dev/sr0
DEVICE=/dev/dvd
## Velovidade de gravação
VELGRAV=4
## Diretorio a ser gravado
DIRGRAV=/var/backup/local
##### Variáveis para backup remoto
#####################################################
## Servidor onde sera armazenado o backup
SERVERSSH=eris.dontexist.net
## Porta do SSH no servidor de backup
PORTSERVERSSH=22
## Usuario usado para logar no servidor de backup
USERSSH=backup
## Diretorio Usado para armazenar o backup no servidor remoto
DIRREMOTO=/backup/server-cafeonline
## Diretorio onde sera montado o diretório remoto a fim de receber o backup
DIRMNT=/mnt/backupremoto
#####################################################################
##### Inicio do bakup #####
# Cria o diretório de backup caso ele não exista
mkdir -p $DIRBKP
# Acessa o diretório
cd $DIRBKP
echo "Backup $DATA iniciado" >$DIRBKP/log-backup.txt
## Cria o arquivo compactado de backup
tar -cvpjf $NOMEARQUIVO --exclude=/lost+found/* --exclude=/dev/* --exclude=/sys/* \
--exclude=/proc/* --exclude=/tmp/* --exclude=/var/tmp/* --exclude=$DIRBKP --exclude=/mnt/* /
##############################################
##### Gravar em DVD #####
## Fecha a "gaveta" da unidade de DVD caso esteja aberta
eject -t
## Coleta informações da mídia
#(algumas vezes a mídia não é reconhecida se não for executado este comando)
dvd+rw-mediainfo $DEVICE
## Formata DVD-RW (opções uteis -force, -lead-out)
dvd+rw-format -gui -blank $DEVICE
sleep 5
# Iden acima para este comando
dvd+rw-mediainfo $DEVICE
## Grava os arquivos
echo "Gravação iniciada as $DATA " >>$DIRBKP/log-backup.txt
## grava o backup
growisofs -speed=$VELGRAV -Z $DEVICE -R -J $DIRGRAV
sleep 5
echo "Gravação finalizada as $DATA" >>$DIRBKP/log-backup.txt
# Ejeta o DVD
eject
##############################################
##### Backup Remoto Via sshfs #####
## Monta o diretório remoto
sshfs $USERSSH@$SERVERSSH:$DIRREMOTO $DIRMNT -o reconnect,sshfs_sync,allow_other -p $PORTSERVERSSH
## Copia o backup
cp -v $DIRBKP/$NOMEARQUIVO $DIRMNT
sleep 5
fusermount -u $DIRMNT
exit 0
Para a conexão com o servidor remoto sera utilizado o software sshfs[27] que usa o protocolo SSH e o FUSE[28] para montar um diretório remoto de forma que para o usuário pareça um diretório Local, o que torna mais simples "movimentar" arquivos entre os servidores.
Instalando:
#aptitude update; aptitude install sshfs
Para automatizar o login no servidor de backup(permitir que o script o faça "sozinho") sera preciso configurar o openssh-server[29](no servidor que recebera o backup) para aceitar login sem pedir senha, usando no lugar um par de chaves criptográficas[30]
No servidor local como root(ja que é este usuário que executara o script via cron):
#ssh-keygen -t rsa
# scp ~/.ssh/id_rsa.pub backup@eris.dontexist.net:/backup
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/id_rsa
No servidor remoto:
backup@buxtehude ~]% cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
% rm -rf id_rsa.pub
% chmod 600 ~/.ssh/authorized_keys
Link's uteis: openssh manual [31], CentOS HowTos [32] --Eris 13:22, 5 Julho 2010 (BRT)
Dia 14/6/2010
Aula após o Intervalo, pois tivemos que apresentar um trabalho.
Instalação de Equipamento
- Implantação dos Modems, como o cabo que interliga os laboratórios chega no RACK da direita, acabamos instalando todos os modems no mesmo lugar onde o fio chegava.
- Rede interna: 192.168.100.0/24.
Cabeamento
- Foi feito os Patch Cord.
Fotos certificação do Link físico
Dia 15/6/2010
Instalação de Equipamento
- Inicio das configurações dos modems.
Programação
- Iniciamos a página de autenticação.
Cabeamento
- Realizamos testes do link.
- Apenas uma porta não funciona.
Gerência de Rede
- Configurado DHCP
DHCP[33] (Dynamic Host Configuration Protocol, protocolo de configuração dinâmica de hosts) é um protocolo para configuração dinâmica de parâmetros de rede como endereço IP, DNS, Gateway etc. Porta 67/UDP.
Instalando:
# aptitude update; aptitude install dhcp3-server
Arquivo: /etc/dhcp3/dhcpd.conf configurações do servidor dhcp.
# Integração com os outros serviços
#
# Atualizar alguma informação com origem no DNS? Nenhuma (none).
ddns-update-style none;
#
# O 'log' das atividades do servidor serão registradas pela 'facility' local7 - arquivo /var/log/sys
log
log-facility local7;
# Rede interna: 192.168.100.0/24
subnet 192.168.100.0 netmask 255.255.255.0 {
#
# Faixa de IPs disponíveis
range 192.168.100.2 192.168.100.253;
#
# Máscara de rede
option subnet-mask 255.255.255.0;
#
#Endereço de 'broadcast'
option broadcast-address 192.168.100.255;
#
# Rotas
option routers 192.168.100.1;
#
# Servidores e domínios DNS
option domain-name-servers 192.168.100.1;
option domain-name "cafeonline.sj.ifsc.edu.br";
# Tempo predefinido e máximo de "aluguel" (lease): 4h e 1 dia respectivamente
default-lease-time 14440;
max-lease-time 86400;
}
- Devido a problemas com os roteadores este serviço foi configurado no Access Point[34].
Como não sera mias necessário no servidor, foi feito backup do arquivo de configuração e desinstalação do serviço.
Backup do arquivo de configuração:
#cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf-backup
Remoção do serviço:
#aptitude purge dhcp3-server
Dia 16/6/2010
Gerência de Rede
- Squid e Dansguardian.
Squid[35] é um servidor proxy[36] e cache de paginas web. Porta 3128 TCP
Instalando:
# aptitude update; aptitude install squid3
Arquivo: /etc/squid3/squid.conf Principal arquivo de configuração
#blablabla...
#substituir http_port 3128, por: http_port 3128 transparent
http_port 3128 transparent
#blablabla...
visible_hostname www.cafeonline.sj.ifsc.edu.br
#blablabla...
Dansguardian[37] é um software para filtrar conteúdo web que funciona em conjunto com o squid, para a restringir o acesso a paginas web ou a conteúdo das mesmas, sera usado no projeto pois permite modificar o código das paginas acessadas através dele. Porta 8080 TCP
Instalando:
#aptitude update; aptitude install dansguardian
Arquivo: /etc/dansguardian/dansguardian.conf comentar a linha
#blablabla...
#comentar a linha abaixo
#UNCONFIGURED
#blablabla...
#alterar as mensagens para português do Brasil:
language = 'ptbrazilian'
#blablabla...
Link's uteis: squid ninja[38] squid-cache brasil [39]
Dia 17/6/2010
Programação
- Criação das tabelas no Mysql
Dia 18/6/2010 ao dia 24/6/2010
Programação
- Andamento do Site
Dia 25/6/2010
Gerência de Rede
Postfix [40] é um agente de transferência de emails (MTA)[41], um software livre para envio e entrega de emails[42]. Porta 25TCP(SMTP[43])
Instalando:
#aptitude update; aptitude install postfix
Arquivo: /etc/postfix/main.cf principal arquivo de configuração do postfix
myhostname = server.$mydomain
mydomain = cafeonline.sj.ifsc.edu.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
mydestination = $myhostname, $mydomain, mail.cafeonline.sj.ifsc.edu.br, smtp.cafeonline.sj.ifsc.edu.br, localhost.cafeonline.sj.ifsc.edu.br, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Dia 30/6/2010
Gerência de Rede
- snmp
SNMP[44] (Simple Network Management Protocol - Protocolo Simples de Gerência de Rede) ele é usado para se obter de informação dos dispositivos na rede.
Portas: 161UDP/TCP 162UDP/TCP
Instalando:
#aptitude update; aptitude unstall snmpd
Arquivo: /etc/snmp/snmpd.conf Principal arquivo de configuração.
rocommunity cafeonline
syslocation cafeonline-TI
syscontact root@cafeonline.sj.ifsc.edu.br
sysservices 72
- cacti
Cacti[45] Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de computadores através de gráficos, usando como base o rrdtool[46]
Plugins:
realtime :Permite gerar gráficos em tempo real
thold: Permite enviar alertas em determinadas situações, por intermedio dos dados coletados pelo Cacti
monitor: Permite monitorar um dispositivo
discover: procura dispositivos com suporte a snmp na rede
Estes e outros plugins, bem como instruções para instalação estão disponíveis em: http://cactiusers.org/
Screenshots do Cacti no servidor:
- ntop
NTOP[47] e uma ferramenta para monitoramento do trafego na rede, que permite visulizar graficos detalhados via browser. Porta 3000 TCP
Instalando:
#aptitude update; aptitude install ntop
para acessar digite do navegador: ip-do-servidor:3000
- iptraf
IPTRAF [48] É um analisador de trafego da rede com interface em "modo texto" TUI[49].
Instalando:
#aptitude update; install iptraf
para usar basta digitar iptraf como root no shell:
Dia 02/07/2010
- configuração do Access Point Wireless
Marca/Modelo: Edimax[50] EW-7209APg[51] manual [52]
Configurações avançadas:
Configurações de segurança(desabilitado conforme especificação do projeto):
Configurações de rede e dhcp:
Aplicação
Autenticação
- Página principal do site (index.html):
<html>
<head>
<title>Café On-line</title>
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<body bgcolor="000000">
<h1>Cadastros com Webmaster</h1>
<p>webserver@cafeonline.sj.ifsc.edu.br</p>
<p><a href="http://www.cafeonline.sj.ifsc.edu.br/autenticacao.php">Acesso Restrito</a></p>
<center><img src="800x600.gif"></center>
</body>
</html>
- Página de autenticação do admin (autenticacao.php):
<html>
<head>
<title> Café On-line </title>
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
</head>
<body>
<h1><center> Autenticação <center></h1>
<form name="formulario" action="verificar.php" method="post">
<p> Login: <br>
<input type="text" name="login">
<p> Senha: <br>
<input type="password" name="senha"> <br>
<input type="submit" name="b_enviar" value="Enviar" class="botoes" />
</body>
</html>
- Página de verificação do login (verificar.php):
<?
$admin = $_POST['login'];
$senha = $_POST['senha'];
if (($admin == 'admin') && ($senha == 'cafeonline')){
session_start();
$_SESSION['login'] = $admin;
$_SESSION['senha'] = $senha;
header("Location: listar.php");
}else{
header("Location: autenticacao.php");
}
?>
Cadastro dos anúncios
- Segue abaixo o código da página (cadastro.php) onde o admin digitará os dados do anúncio:
<?
session_start();
if(isset($_SESSION['login'])){
?>
<html>
<head>
<title> Café On-line </title>
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Cadastro de anúncios</h1>
<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
<table align=center>
<tr>
<form name="formTeste" action="add.php" method="post">
<table>
<tr><td>
<p> Título: <br>
<input type:"text" name="titulo">
<p> Nome do cliente: <br>
<input type:"text" name="nome">
<p> Anúncio: <br>
<textarea rows="2" cols="20" name="texto"></textarea>
<p> Link: <br>
<input type:"text" name="link">
<p> Expira em: <br>
<input type:"text"name="validade"><br>
<input type="submit" name="b_enviar" value="Gravar"><BR>
</td><td>
<img src="800x600.gif" border="0" width="600" height="400">
</td></tr>
</body>
</html>
<?
}else{
header("Location: autenticacao.php");
}
?>
- Depois de informados os dados do anúncio o admin é redirecionado para outra pagina onde será feita a conexão com o banco de dados mysql para inserir os dados nas tabelas.
Segue o código (add.php):
<?
session_start();
if(isset($_SESSION['login'])){
?>
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<title>Café On-line</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?
$titulo=$_POST['titulo'] ;
$nome=$_POST['nome'] ;
$texto=$_POST['texto'] ;
$link=$_POST['link'] ;
$validade=$_POST['validade'] ;
if (!empty ($titulo) && !empty ($nome) && !empty ($texto) && !empty ($link) && !empty ($validade))
{
$conexao = mysql_connect("localhost","root","cafeonline") ;
$base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1");
$inserir = "INSERT INTO anuncio (NOMECLIENTE, NOMEANUNCIO, TEXTO, LINK, VALIDADE) VALUES ('$nome', '$titulo', '$texto', '$link', '$validade')";
$cadastrar = mysql_query($inserir,$conexao) or die("erro 2");
mysql_close($conexao) or die("Erro fechar conexao");
if($cadastrar==true)
{
echo "<h2>Anúncio cadastrado com sucesso <br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
}else
{
echo "Erro ao cadastrar anúncio";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
}
}else
{
echo "<h2>Erro, campos vazios<br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Voltar para cadastro</a>";
}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>
<?
}else
{
header("Location: autenticacao.php");
}
?>
Listagem de anúncios
- Na página listar.php é feita a conexão com o banco de dados e também a consulta nas tabelas, para fazer a listagem dos anúncios ja cadastrados, e através dessa página pode-se selecionar um anúncio o qual deseja editar ou excluir. Segue o código (listar.php):
<?
session_start();
if (isset($_SESSION['login'])){
?>
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<title> Café On-line </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Listagem de anúncios</h1>
<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
<table><tr><td valign="top">
<?
$conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO");
if($conexao) // se $conexao é true, ou seja, conectou ao banco de dados, seleciona com qual banco deseja trabalhar.
{
mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco
$query = "SELECT * FROM anuncio" or die ("erro 2"); //seleciona tudo (*), de uma tabela chamada anuncio
$dados = mysql_query($query,$conexao) or die ("erro 3");
echo "<table class='stats'>";
echo "<th>Nome do cliente</th>";
echo "<th>Título do anúncio</th>";
echo "<th>Visitas</th>";
echo "<th>Validade</th>";
echo "<th>Ações</th>";
while($linha=mysql_fetch_array($dados,MYSQL_ASSOC))
{
$id = $linha["IDANUNCIO"];
echo "<tr><td>" . $linha["NOMECLIENTE"] . "</td>" ;
echo "<td>" . $linha["NOMEANUNCIO"] . "</td>" ;
echo "<td>" . $linha["VISITAS"] . "</td>" ;
echo "<td>" . $linha["VALIDADE"] . "</td>" ;
echo "<td><a href='excluir.php?id=$id' style='text-decoration:none'>Excluir </a>";
echo "<a href='editar.php?id=$id' style='text-decoration:none'>Editar</a></td></tr>";
}
echo "</table>";
echo "<center><a href='http://www.cafeonline.sj.ifsc.edu.br/cadastro'>Incluir novo anúncio</a></center>";
mysql_close($conexao) or die ("erro 5");
}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</td><td>
<img src="800x600.gif" border="0" width="600" height="400" align="right"></td></tr></table>
</body>
</html>
<?
}else{
header("Location: autenticacao.php");
}
?>
Editando e atualizando os anúncios
- Depois de selecionado um anúncio na página de listagem o admin é direcionado para a página de edição de anúncios. E então são mostrados os dados que já estão cadastrados do anúncio selecionado, podendo alterar o que desejar e depois apertando no botão gravar que é direcionado para a página onde será feita a atualização do banco de dados.
Segue o código da página de edição de anúncios (editar.php):
<?
session_start();
if(isset($_SESSION['login'])){
?>
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<title> Café On-line </title>
</head>
<body bgcolor="000000" text="FFFFFF">
<h1>Editar anúncio </h1>
<a href="http://www.cafeonline.sj.ifsc.edu.br/sair">Sair</a>
<?
$id = $_GET['id'];
$conexao = mysql_connect("localhost","root","cafeonline") ;
mysql_select_db("cafeonline") or die ("erro 1");
$query = ("select * from anuncio where IDANUNCIO=$id");
$dados = mysql_query($query,$conexao);
$linha=mysql_fetch_array($dados,MYSQL_ASSOC);
mysql_query($linha);
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
<form name="formTeste" action="add2.php?id=<? echo $id ?>" method="post">
<table>
<tr><td>
<p> Título: <br>
<input type:"text" name="titulo" value="<? echo $linha['NOMEANUNCIO'] ?>">
<p> Nome do cliente: <br>
<input type:"text" name="nome" value="<? echo $linha['NOMECLIENTE'] ?>">
<p> Anúncio: <br>
<textarea rows="2" cols="20" name="texto"><? echo $linha['TEXTO'] ?></textarea>
<p> Link: <br>
<input type:"text" name="link" value="<? echo $linha['LINK'] ?>">
<p> Expira em: <br>
<input type:"text"name="validade" value="<? echo $linha['VALIDADE'] ?>">
<p> Anúncio expirado?
<?$data = date("Y-m-d");
$timestamp1 = strtotime($linha['VALIDADE']);
$timestamp2 = strtotime($data);
if ($timestamp1 < $timestamp2){
echo "Sim<br>";
}else{
echo "Não<br>";
}
?>
<input type="submit" name="b_enviar" value="Gravar"><BR>
</td><td>
<img src="800x600.gif" border="0" width="600" height="400">
</td></tr>
</body>
</html>
<?
}else{
header("Location: autenticacao.php");
}
?>
- Código onde é feita a atualização do banco de dados (add2.php):
<?
session_start();
if(isset($_SESSION['login'])){
?>
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<title>Café On-line</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?
$conexao = mysql_connect("localhost","root","cafeonline") ;
$base_ok = mysql_select_db("cafeonline",$conexao);
$id = $_GET['id'];
$titulo=$_POST['titulo'] ;
$nome=$_POST['nome'] ;
$texto=$_POST['texto'] ;
$link=$_POST['link'] ;
$validade=$_POST['validade'] ;
if (!empty ($titulo) && !empty ($nome) && !empty ($texto) && !empty ($link) && !empty ($validade))
{
$update=mysql_query("UPDATE anuncio SET NOMECLIENTE='$nome', NOMEANUNCIO='$titulo', TEXTO='$texto', LINK='$link', VALIDADE='$validade' WHERE IDANUNCIO='$id'");
if($update==true)
{
echo "<h2>Dados atualizados com sucesso <br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
}else
{
echo "Erro ao Atualizar";
"<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Ir para lista de anúncios</a>";
}
}else
{
echo "<h2>Erro, campos vazios<br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar'>Voltar para lista de anúncios</a>";
}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>
<?
}else
{
header("Location: autenticacao.php");
}
?>
Excluindo anúncios
Segue o código da página para exclusão de anúncios (excluir.php):
<?
session_start();
if(isset($_SESSION['login'])){
?>
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="all" type="text/css" href="style.css" />
<title>Café On-line</title>
</head>
<body bgcolor="000000" text="FFFFFF">
<?
$conexao = mysql_connect("localhost","root","cafeonline") ;
$base_ok = mysql_select_db("cafeonline",$conexao) or die ("erro 1");
$id=$_GET["id"];
$query = mysql_query("delete from anuncio where IDANUNCIO='$id'");
mysql_query($query);
if ($query==true)
{
echo "<h2>Anúncio exlcluido<br></h2>";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>";
}else{
echo "Erro ao excluir anúncio";
echo "<a href='http://www.cafeonline.sj.ifsc.edu.br/listar>Voltar para lista de anúncios</a>";
}
header("Content-Type: text/html; charset=ISO-8859-1", true);
?>
</body>
</html>
<?
}else{
header("Location: autenticacao.php");
}
?>
Botão sair
- Nas páginas de listagem, cadastro e edição foram colocados links para o usuario sair da seção(sair.php):
<?
session_start(); //iniciamos a sessão que foi aberta
session_destroy(); //destruimos a sessão
session_unset(); //limpamos as variaveis globais das sessões
header("Location: autenticacao.php");
?>
CSS usado para estilo das páginas
- Segue o código css para a estilização das páginas (style.css):
body {
margin: 0;
padding: 0;
background: #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #CFCFCF;
}
h1, h2, h3 {
margin: 0;
padding: 0;
font-weight: normal;
color: #E8E8E8;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 2.4em;
}
h3 {
font-size: 1.6em;
}
p, ul, ol {
margin-top: 0;
line-height: 180%;
}
a {
text-decoration: none;
color: #860B28;
}
table.stats th
{text-align: center;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
font-weight: negrit;
font-size: 14px;
color: #fff;
width: 280px;
background-color: #000;
border: 1px solid;
border-collapse: collapse;
border-spacing: 1px;}
table.stats td
{background-color: #000;
color: #fff;
padding: 4px;
text-align: left;
border: 1px #fff solid;}
Banner
- Segue o código do banner que ficará localizado no topo da página (banner.php):
<?
$conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO");
if($conexao) // se $conexao é true, ou seja, conectou ao banco de dados, seleciona com qual banco deseja trabalhar.
{
mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco
$query = "SELECT * FROM anuncio" or die ("erro 2"); //seleciona tudo (*), de uma tabela chamada anuncio
$dados = mysql_query($query,$conexao) or die ("erro 3");
$linhas = mysql_num_rows($dados);
$linhas--;
$aleatorio = rand(0, $linhas);
mysql_data_seek($dados, $aleatorio);
$imprimir = mysql_fetch_array($dados,MYSQL_ASSOC);
$tempo_atual = date("Y-n-j");
$verificar_exp = (strtotime($tempo_atual)-strtotime($imprimir["VALIDADE"]));
if($verificar_exp < 0){
// definindo as dimensoes da imagem: largura , altura
$imagem = imagecreate( 800, 70 );
// definindo a cor de fundo e do texto
$fundo = imagecolorallocate( $imagem, 0, 0, 0 );
$corTexto = imagecolorallocate( $imagem, 255, 255, 255 );
// cor de uma linha
$corLinha = imagecolorallocate( $imagem, 255, 48, 48 );
imagettftext($imagem, 12, 0, 10, 18, $corTexto, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", $imprimir["NOMEANUNCIO"]);
// Configuração da função imagettftext(imagem,tamanho,ângulo,X,Y,cor,arquivo da fonte,texto)
imagettftext($imagem, 9, 0, 10, 43, $corTexto, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", $imprimir["TEXTO"]);
// desenhando uma linha de largura 2px abaixo do texto
imagesetthickness ( $imagem, 2 );
imageline( $imagem, 5, 25, 790, 25, $corLinha );
// gravando o arquivo no subdiretorio site
// o usuario www-data deve ter permissao de escrita neste diretorio
imagepng( $imagem, "/var/www/site/propaganda.png" );
// retirando a figura da memoria
imagedestroy( $imagem );
//contador
$atualiza = "update id set propaganda = '$imprimir[IDANUNCIO]'";
mysql_query($atualiza,$conexao) or die ("erro 3");
}
}
?>
Contador de visitas
- Segue código do contador de visitas (cont.php), que quando o cliente clica no banner incrementa mais uma visita na coluna VISITAS do banco de dados, e através deste código que o cliente é redirecionado para a página do banner.
<?
$action = $_GET['action'];
if ($action == "go") {
$conexao = mysql_connect("localhost","root","cafeonline") or die ("ERRO");
if($conexao)
{
mysql_select_db("cafeonline") or die ("erro 1"); //seleciona qual o banco
$query = "select propaganda from id" or die ("erro 2"); //seleciona coluna propaganda da tabela id
$dados = mysql_query($query,$conexao) or die ("erro 3");
$imprimir = mysql_fetch_array($dados,MYSQL_ASSOC); //pega a linha inteira
$query2 = "select * from anuncio where IDANUNCIO='$imprimir[propaganda]'"; //seleciona tudo da tabela anuncio onde IDANUNCIO é igual ao id da propaganda
$dados2 = mysql_query($query2,$conexao) or die ("erro 4");
$imprimir2 = mysql_fetch_array($dados2, MYSQL_ASSOC);
$visitas = $imprimir2['VISITAS'];
$visitas++;
$query3 = "update anuncio set VISITAS='$visitas' where IDANUNCIO='$imprimir[propaganda]'"; //atualiza na tabela anuncio a coluna VISITAS
mysql_query($query3,$conexao) or die ("erro 5");
header("Location: $imprimir2[LINK]");
}
}
?>