Arquivo do autor:wosh1ngton

Engenharia de requisitos: requisitos funcionais e não funcionais

Requisitos de Software

Este post trata objetivamente da classificação dos diferentes tipos de requisitos de software, a fonte utilizada para a produção deste resumo é a oitava edição do livro Engenharia de Software do Ian Sommerville, normalmente é este livro que as bancas de concurso utilizam para elaborarem as questões referentes ao tema. Uma outra bibliografia utilizada pelas bancas é o livro Engenharia de Software do Roger Pressman, contudo, talvez o livro do Sommerville aborde com maior riqueza de conteúdo o tema Requisitos de Software e por isso, optei por ele para fazer esse resumo pra vocês.

Os requisitos podem ser definidos quanto a sua destinação da seguinte forma

Requisitos de Usuário

São Requisitos abstratos, de alto nível, entendemos como alto nível os requisitos mais próximos do entendimento do usuário, para isso são utilizadas declarações em linguagem natural, formulários, tabelas, diagramas simples, explicando quais são os serviços esperados do sistema e quais são as restrições sob as quais irá operar.

Requisitos de Sistema

Também trata das funções, os serviços, e as restrições operacionais, mas de maneira detalhada, deve ser preciso, definindo exatamente o que será implementado podendo inclusive ser parte do contrato entre cliente e desenvolvedor.

Requisitos funcionais

Traduz os serviços que o sistema deve fornecer, como o sistema deve reagir a entradas específicas, e até mesmo o que o sistema não deve fazer. Existem sob a forma de requisitos de usuário e também sob a forma de requisitos de sistema. A especificação de requisitos funcionais deve ser completa, ou seja, todos os requisitos desejados pelo usuário devem ser satisfeitos, deve ser consistente, ou seja, não deve haver definições contraditórias, em sistemas grandes e complexos é quase impossível atingir completeza e consistência, erros e omissões são cometidos e há inconsistência entre os diferentes stakeholders do projeto.

Requisitos não-funcionais

São as restrições sob as quais o sistema deve operar, podendo se dividir em várias categorias. As restrições se estendem também ao processo de desenvolvimento do software podendo por exemplo: determinar o uso de uma ferramenta CASE específica, determinar o uso de um padrão de qualidade específico.

Os requisitos não funcionais podem estar ligados a fatores externos como uma política organizacional ou uma lei a qual a organização se sujeita. Há também casos em que é necessário que o software possua características de interoperabilidade

Requisitos de Produto

Especificam o comportamento do produto, os requisitos de produto de dividem em:

  1. requisitos de eficiência
    • requisitos de desempenho
    • requisitos de espaço
  2. requisitos de confiabilidade
  3. requisitos de portabilidade
  4. requisitos de facilidade de uso

Exemplo: o sistema deverá ter uma interface que permita acessibilidade, sendo possível ao usuário aumentar e diminuir a fonte dos textos.

Requisitos Organizacionais

Procedentes de políticas e procedimentos nas organizações do cliente e do desenvolvedor, entre os exemplos estão os padrões a serem utilizados

  1. requisitos de implementação
  2. requisitos de entrega
  3. requisitos de padrões

Exemplo O sistema deverá estar em conformidade com as melhores práticas de desenvolvimento de software utilizando padrões de projeto como o Singleton:

Requisitos Externos

  1. requisitos de interoperabilidade
  2. requisitos legais
    • requisitos de privacidade
    • requisitos de segurança
  3. requisitos éticos

Exemplo: O sistema deverá se comunicar com os demais sistemas da empresa, utilizando cadastros de usuários preexistentes sendo interoperável.

O desenho abaixo é um mapa mental muito útil e ilustra parte da matéria de requisitos não funcionais.

Requisitos não funcionais

Requisitos não funcionais

Requisitos emergentes

surgem à medida que a compreensão do cliente sobre o sistema aumenta, tornando-o apto a sugerir e requisitar mudanças, não é possível defini-los na construção do sistema, surgem durante a operação do sistema.

Requisitos Consequentes

requisitos consequentes estão diretamente ligados a introdução de sistemas de computação na empresa, que podem modificar processos e criar novos métodos de trabalho.

Requisitos Permanentes

são os requisitos relativamente estáveis, que derivam da atividade principal da organização e se relacionam diretamente com o domínio do sistema.

Instalando e configurando um servidor de acesso remoto SSH

Conceitos gerais sobre o SSH

utilizando o ssh no linux debian

O SSH (Secure Shell) é um protocolo que define um padrão para acesso remoto com suporte a segurança. Ele criptografa tanto o processo de autenticação do usuário quanto todos os dados trafegados durante a conexão com o servidor remoto, uma conhecida implementação do SSH é o OpenSSH, o SSH é um serviço que funciona no modelo cliente servidor, este é mais um serviço que adicionaremos ao nosso Servidor Linux, para você que chegou agora, clique aqui para acompanhar os demais serviços já instalados.

Instalando o serviço

Para instalarmos o serviço, acessamos a máquina que será o servidor SSH, neste exemplo, a máquina virtual debian-server que criamos no segundo artigo dessa série, executamos o comando abaixo:

apt-get install ssh

O arquivo de configuração do SSH pode ser encontrado no seguinte endereço: /etc/ssh/sshd_config, o arquivo tem poucas diretivas a maioria das linhas é constituída por comentários, dentre as diretivas podemos destacar as seguintes:
#Define a porta onde o ssh irá atender requisições
port 22
#bloqueia login com o usuário root
PermitRootLogin no
#Bloqueio de senhas em branco
PermitEmptyPasswords no

Utilizando o SCP

Utilizando SSH é possível ter total domínio da máquina alvo, é possível inclusive reiniciar e desligar a máquina alvo utilizando os comandos reboot e halt. Uma outra possibilidade é copiar arquivos da máquina de origem para a máquina alvo (servidor), veja como fazer no exemplo:

scp arquivo_origem usuario@ip_server:/endereço_arquivo_destino

Ao executar o comando obtive o seguinte resultado:
Utilizando SCP no Linux

Utilizando SCP no Linux

Instalando e Configurando o SARG

Conceitos Gerais sobre o SARG

Dando sequência a nossa série de artigos que ensina a configurar um servidor Linux, iremos agora falar sobre o SARG.
Sabemos que apesar do servidor proxy SQUID possuir um arquivo de log, a leitura desse arquivo em texto puro é algo moroso e um pouco complicado, são muitas informações exibidas sem uma interface gráfica e sem formatação adequada, o SARG se propõe a resolver esse problema através de sua interface web desenhada para a visualização dos log’s do Squid, é uma ferramenta gratuita que foi desenvolvida por um brasileiro de nome Pedro Orso. Iniciaremos pela instalação do SARG (Squid Analize Reports Generator), através do comando apt-get

apt-get install sarg

Instalado o SARG no nosso debian-server, iremos agora conhecer a estrutura do arquivo de configuração, obviamente o arquivo de configuração fica na pasta /etc/sarg e seu nome é sarg.conf, notem que há um padrão no debian: arquivos de configuração em modo texto normalmente ficam armazenados na pasta /etc/nome_do_serviço/nome_do_serviço.conf.
O Sarg.conf possui quase 700 linhas, para o sarg funcionar basta indicarmos a pasta onde os log’s do squid estão armazenados, o valor padrão que encontrei ainda se refere ao squid 2, precisei alterar o caminho setando a pasta referenciando o squid 3, ficou da seguinte forma:

access_log /var/log/squid3/access.log

a outra diretiva que precisei alterar foi a que indica o caminho onde os relatórios serão salvos, os relatórios serão apresentados por via http, logo, precisaremos do servidor web Apache em funcionamento para poder visualizar os relatórios, lembrando que já fizemos a instalação do Apache em outro tutorial, caso não tenha acompanhado basta clicar aqui . A diretiva fica assim:

output_dir /var/www/html/squid-reports

Para gerar o relatório vá até o debian_server e dê o seguinte comando:

sarg

O relatório deverá ser gerado, para conferir acesse no cliente através do endereço web do seu servidor, no meu caso ficou assim: http://192.168.3.10/html/squid-reports.
Deverá aparecer uma tela similar a esta:
Tela Inicial do Sarg

Em resumo basta alterar essas duas diretivas para o sarg funcionar, caso você queira personalizar o arquivo podemos começar tudo do zero, a fim de falarmos um pouco sobre as configurações do sarg como de costume vamos fazer uma cópia do arquivo original com o nome backup_sarg.conf
sudo mv sarg.conf backup_sarg.conf

pico sarg.conf

Levando em consideração que a cerquilha (#) significa que estou comentando,
um arquivo básico do Sarg seria assim:

#Definindo o endereço do arquivo de log's do squid.
access_log /var/log/squid/access.log
#Definindo a pasta onde os relatórios serão salvos
output_dir /var/www/html/squid-reports
#Definindo um título para o relatório do SARG através da diretiva title
title "Relatórios de Acessos do SQUID" 
#Definindo uma fonte (tipo de letra)
font_face Tahoma,Verdana,Arial	
#Definindo a cor do cabeçalho que dá nome as colunas do relatório	
header_color darkblue			
#Definindo a cor de fundo da célula que armazena os títulos das colunas
header_bgcolor #ffffff
#Definindo o tamanho da fonte
font_size 9px		
#Definindo a cor de fundo do título do relatório
background_color white			
#Definindo a cor do texto
text_color #000000
#cor do título		
title_color green

user_ip yes
#usuários que não terão seus log's analisados			
exclude_users /etc/sarg/exclude_users		
#computadores que não terão seus log's analisados
exclude_hosts /etc/sarg/exclude_hosts		
#Remoção de arquivos temporários habilitada	
remove_temp_files yes			
#Sobrescrever log's 
overwrite_report yes	
#uso de vírgula desabilitado		
use_comma no
#Topsites considera os 100 mais visitados pelos usuários do proxy
topsites_num 100
#Evita que sejam mostradas sites com URL's longas
long_url no	
#Criando sua própria folha de estilos css
external_css_file none

Enfim, a maior parte das diretivas são auto-explicativas, caso queira se aprofundar mais no assunto, uma dica é ler os comentários do arquivo de configuração original do sarg.

Criando um usuário e senha para o SARG

Vamos criar um usuário e senha para que somente quem tem permissão possa visualizar os log’s do squid gerados pelo SARG. Vamos precisar fazer algumas configurações no nosso servidor web para isso, antes de mais nada, confira se a diretiva AccessFileName que está localizada no arquivo de configuração do apache2 em: /etc/apache2/apache2.conf consta com o valor .htaccess, uma dica se estiver usando o editor de texto pico, é usar o CTRL+W e buscar pela palavra chave accessfilename para encontrar mais rapidamente a diretiva, estando tudo certo, vamos precisar criar um arquivo .htaccess dentro do diretório onde o sarg salva os relatórios, criar um arquivo .htpasswd no diretório do squid3 e em seguida editar o arquivo de configuração do Apache

Criando o .htacess

cd /var/www/html/squid-reports/
touch .htaccess
pico .htaccess

digite o seguinte:

AuthType Basic			
AuthName usuario senha			
AuthUserFile /etc/squid/.htpasswd		
Require valid-user			
Satisfy Any

Criando o .htpasswd

agora precisamos criar o arquivo .htpasswd, para isso faça o seguinte comando:
htpasswd -c /etc/squid/.htpasswd usuario
o terminal irá solicitar a senha, informe a senha de sua preferência observando critérios de segurança, para criar outros usuários utilize o comando htpasswd sem o parâmetro -c.

Configurando o usuário no Apache

Em seguida é necessário abrir arquivo /etc/apache2/sites-enabled/000-default e inserir no final do arquivo logo antes do fechamento da tag VirtualHost as seguintes diretivas:

<Directory /var/www/html/squid-reports/>
Deny from all
AuthType Basic
AuthName "Informe usuário e senha"
AuthUserFile /etc/squid3/.htpasswd
Require valid-user
Satisfy Any
</Directory>
Feito isso basta reiniciar o apache e abrir o navegador no endereço da página do sarg: será solicitado usuário e senha para acesso. Usando esse mecanismos podemos evitar que “abelhudos” tenham acesso aos relatórios do Sarg

No próximo artigo irei mostrar como configurar o servidor proxy de modo transparente, para que não seja necessário apontar nas configurações do navegador o endereço do servidor proxy juntamente com a porta. Para saber como clique aqui

Tutorial de Instalação do SQUID

Configurando o ambiente de rede

Squid Reports
Este artigo faz parte de uma série de textos, que tem por missão mostrar como configurar um servidor de rede linux operando com os principais serviços de rede, para o pontapé inicial acesse os seguintes links: Configuração Geral, Configurando a Infraestrutura de Redes
Neste artigo em específico, iremos abordar a instalação e configuração de um servidor proxy, que no caso, será o Squid

Instalando o SQUID

Essa parte é bastante simples, para baixar o nosso servidor proxy Squid, acesse a máquina debian-server e faça:
apt-get install squid3
Pronto, o servidor proxy Squid 3 já está instalado e funcionando, para ativá-lo você precisa acessar a máquina cliente abrir o navegador e dizer a ele que antes de acessar a internet, ele deverá passar por um servidor proxy (Squid 3), para fazer isso é preciso editar as configurações do navegador, essa configuração varia de navegador para navegador, mas basicamente, você precisa acessar as configurações de rede do navegador e procurar por servidor proxy, para o firefox do debian fica assim: Editar > Preferências > Rede > Configurar Conexão >  Configuração manual de proxy > informar valores HTTP e Porta.

configuração do squid no navegadorindiquei o endereço do meu servidor proxy, e indiquei também a porta onde ele irá funcionar. Em um contexto prático a configuração do servidor proxy no navegador é morosa e insegura, imaginemos que tenhamos que configurar um parque computacional de uma empresa com centenas de computadores, ir de computador a computador e fazer essa alteração em todos os navegadores demanda bastante tempo, além disso, é um procedimento falho, pois qualquer usuário que tenha um pouco de conhecimento conseguirá retirar a configuração do navegador e sairá do alcance do proxy. Se quiser saber como configurar o proxy de maneira transparente continue lendo este artigo até o final.
Feita a configuração no navegador, tente acessar uma página qualquer, você deverá receber como resposta a seguinte página

Erro ao acessar a página squid

Configurando o squid 3

Como você pode observar ao abrir uma página no navegador, o Squid está bloqueando todas as páginas, precisamos criar algumas regras para que o proxy bloqueie e permita páginas de acordo com o que indicarmos nas regras que iremos informar no arquivo de configuração do Squid.
Para isso, precisamos acessar o arquivo de configuração do nosso servidor proxy, esse arquivo de configuração é gigantesco e sua leitura pode ser algo bastante demorado, então iremos resumir aqui as principais funções encontradas dentro do arquivo. Para editar o arquivo de configuração do squid abra a pasta /etc/squid3/ e através do editor de textos de sua preferência modifique o arquivo squid.conf
importante: é aconselhável fazer uma cópia de segurança do arquivo antes de modificá-lo.

mv squid.conf backup_squid.conf

Abra o squid.conf recém criado (documento vazio), vamos começar a criar nossa configuração, a primeira diretiva a ser informada é a porta onde o servidor proxy irá funcionar, a porta padrão é a 3128, embora ele possa rodar em outras portas, lembre-se que definimos no navegador a porta 3128, essa diretiva já é suficiente para que o squid funcione. Sugiro que faça um teste

 

http_port 3128 
Arquivo alterado e salvo! sempre que alterar o squid.conf reinicie o serviço e teste abrindo o navegador. Segue o comando para reiniciar o squid
service squid3 reload
Na configuração original, não conseguíamos acessar nenhuma página, e agora que temos apenas uma linha no nosso arquivo continua da mesma forma, vamos criar uma regra para que possamos acessar todas as páginas, mas para isso primeiro precisamos entender o que é uma regra dentro do Squid. As regras do SQUID são identificadas pelo acrônimo ACL (Access Control List), utilizamos ACL’s em outros tipos de serviços além do squid, temos ACL’s no iptables por exemplo, como o nome bem diz são listas de controle de acesso e existem nas mais diversas configurações.
A primeira acl que iremos criar é a acl all que serve para bloquear ou permitir o acesso a todos os endereços. Se baseia no parâmetro src e precede os endereços alvo. Sua declaração fica assim:
acl all src all
Pronto! a regra foi criada, mas o que fazer com essa regra? não basta criá-la é preciso definir se ela irá ser restritiva ou permissiva, para isso utilizaremos a diretiva http_access, os valores para http_access podem ser allow (permitir) ou deny (negar), como o objetivo é permitir acesso a qualquer site vamos utilizar o allow, o arquivo completo fica assim:
http_port 3128
acl all src all
http_access allow all

Está configuração foi a mais básica possível, a partir dela podemos partir para outras regras de maior complexidade:

a segunda acl que criaremos irá estabelecer uma regra para a rede local, que no meu caso é a faixa de ip’s 192.168.3.0⁄24

acl localnet src 192.168.3.0/24 

Detalhando as regras ACL do Squid

A estrutura padrão de uma ACL é a seguinte: primeiro a declaração de que se trata de uma acl, logo em seguida o nome da acl, depois temos o tipo e em seguida um valor que irá depender do tipo. Veja alguns exemplos:

acl do tipo dstdomain

	
acl proibir_sites dstdomain "⁄etc⁄squid3⁄sites" 
Esse tipo de ACL busca por nomes de domínios, no exemplo a seguir, criei um arquivo com o nome “sites” (sem as aspas) dentro da pasta /etc/squid3/, dentro do arquivo sites, digitei o nome do seguinte site: www.globo.com, e depois através do http_access proibi o acesso ao mesmo, ao tentar acessá-lo obtive a seguinte resposta do servidor proxy:
página proibida squid
A acl proibir_sites é do tipo dstdomain e aponta para o endereço “/etc/squid/sites” que contém uma lista dos sites que deverão ser recusados conforme haja tentativa de acesso a eles.
Um outro exemplo de acl é a acl url_regex que funciona de maneira semelhante a dstdomain, com o diferencial de que esta se baseia nas palavras digitadas na barra de endereço, é um recurso bastante poderoso. Através do arquivo criado “palavras” (lembrando que o nome do arquivo pode ser qualquer um) é possível por exemplo evitar que qualquer site que contenha em sua url a palavra jogos seja acessado.
acl palavras_bloqueadas url_regex -i "⁄etc⁄squid3⁄palavras"
A próxima ACL que iremos ver será a acl time, esta acl irá definir horários de acesso para determinadas regras, no caso exemplificativo vamos permitir que o usuário acesse as palavras_bloqueadas (jogos, por exemplo) em um horário específico, escolhi o intervalo entre às 12h e 13h que seria o horário de almoço
acl horario_permitido time 15:00-16:00	

Algumas portas de conexão precisam estar livres para que os clientes possam acessar, nessas portas funcionam importantes serviços de rede, para isso foram criadas as seguintes regras.

acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp		
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher		
acl Safe_ports port 210 # wais		
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt		
acl Safe_ports port 488 # gss-http		
acl Safe_ports port 591 # filemaker		
acl Safe_ports port 777 # multiling http			
acl Safe_ports port 631 # cups		
acl Safe_ports port 873 # rsync			
acl Safe_ports port 901 # SWAT			
acl purge method PURGE		
acl CONNECT method CONNECT

Configurando as regras criadas através do http_access

É importante observar a ordem dos http_access, em caso de regras conflitantes ele irá considerar como válida a primeira que encontrar, caso a primeira regra não possa ser aplicada ele partirá para a segunda regra, veja como ficou a minha configuração:
http_access allow palavras_bloqueadas horario_permitido		
http_access deny proibir_sites			
http_access deny palavras_bloqueadas
http_access allow all		
http_access deny !Safe_ports		
http_access allow localnet

Configurando o cache do Squid

Além de fornecer controle dos acessos dos usuários, o squid possui também uma outra ferramenta bastante útil, o cache, suponha que você tenha um provedor de internet a rádio e queira criar um cache para que seus clientes consigam acesso mais rápido a determinadas páginas web, as mais acessadas por exemplo, portais como UOL, globo.com, terra, etc. Para isso você pode configurar um cache dentro do squid, segue o exemplo:

cache_mem 256 MB
maximum_object_size_in_memory 512 KB
cache_dir ufs ⁄var⁄spool⁄squid3 5120 16 256
minimum_object_size 0 KB
maximum_object_size 4 MB
cache_swap_low 90
cache_swap_high 95
Fazendo essas alterações e reiniciando o servidor proxy, ele irá criar uma série de pastas dentro do endereço informado na diretiva /var/spool/squid3/ dentro dessas pastas serão salvas as páginas mais visitadas, gerando assim um cache de páginas web.

customizando a página de proibido o acesso do squid

Para modificar a página de erro do squid, primeiro precisamos saber onde essa página se encontra e qual a diretiva precisamos associar a página. A diretiva que aponta o caminho das páginas de erro é a seguinte:
error_directory /usr/share/squid/errors/Portuguese

 

Mesmo com a configuração da diretiva error_directory apontando para a pasta Portuguese você pode querer modificar as mensagens de erro, podemos personalizar a página, colocar imagens, ícones e estilizá-la conforme nossa preferência, basta acessar o arquivo original.

Entre na pasta:

cd /usr/share/squid/errors/Portuguese

Agora edite o arquivo: ERR_ACCESS_DENIED, existem vários tipos de erro, mas essa é a página mais comum, em todo caso, você pode estilizar cada uma das páginas a sua própria maneira.

No próximo artigo irei ensinar a tornar o proxy transparente, para que não seja necessário setarmos o IP do servidor proxy no navegador, em outra ocasião iremos implementar o SARG que é um visualizador de relatórios do squid.

Configurando um servidor de internet

Partindo do pressuposto que o leitor já tenha realizado a configuração das interfaces de rede da máquina cliente e servidor, conforme é explicado no seguinte artigo: Clique aqui para ver o artigo, iremos agora configurar um servidor de internet Linux realizando as configurações de mascaramento e roteamento de tráfego.
Para tal iremos criar um script, conforme segue:

Criando o script de configuração do Servidor de Internet Linux

O script é o mais simples possível a fim de facilitar a configuração, não é intuito do artigo detalhar regras de firewall, para isso seria necessário um outro artigo pois regras de firewall é um assunto muito extenso.
Acesse a pasta /etc que por padrão guarda arquivos de configuração
cd /etc

Crie o arquivo nomeando-o firewall.sh, através do editor pico
pico firewall.sh

Conteúdo do arquivo:

#!/bin/bash
IF_WAN=eth0

iptables -F
iptables -t nat -F

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o $IF_WAN -j MASQUERADE

Entendendo o arquivo firewall.sh

Primeiro criamos a variável IF_WAN que recebeu o valor eth0, eth0 é aqui a placa de rede responsável por nos conectar a internet através do NAT, em seguida limpamos as regras e tabelas para evitar conflitos com regras preexistentes, a parte mais importante vem a seguir. A linha: echo 1 > /proc/sys/net/ipv4/ip_forward irá ativar o redirecionamento de pacotes ipv4, para isso foi necessário setar o valor 1 dentro do arquivo ip_forward, (0 para falso 1 para verdadeiro) e por último foi adicionada uma regra na tabela nat que após o redirecionamento dos pacotes da interface eth0 irá realizar o mascaramento ip, fazendo com que interfaces de redes distintas se comuniquem de fato, assim os pacotes de dados que chegarem em eth0 poderão ser redirecionados para eth1 e de eth1 redirecionados para as demais interfaces que estiverem na mesma rede.
salve o arquivo e o execute:
sh firewall.sh
pronto, tente se conectar a internet no cliente, funcionou? espero que não. Falta um detalhe, você precisa dizer ao cliente qual será o seu servidor de internet, ou seja, você precisa especificar um gateway, para isso acesse o arquivo de interfaces de rede.

pico /etc/network/interfaces
E acrescente ao final a seguinte linha:

auto eth0
iface eth0 inet static
address 192.168.3.20
netmask 255.255.255.0
gateway 192.168.3.10

Reinicie seu serviço de rede no cliente, e tente novamente se conectar a internet, deverá funcionar. Pronto, você agora está conectado a internet através de um servidor de internet e não diretamente através do seu modem, para ter certeza execute o comando route e veja o que aparece na linha default, deverá aparecer como roteador o nome do seu servidor, no caso: debian-server.

Para evitarmos ter que executar o script firewall.sh toda vez que o computador for reiniciado, iremos automatizar esse processo utilizando o arquivo rc.local que é checado sempre que o sistema operacional é inicializado, para isso faça:
pico /etc/rc.local
vá até a linha anterior ao exit 0;
e digite: sh /etc/firewall.sh
Dessa maneira, não será mais necessário a execução manual do script sempre que reiniciarmos o Sistema Operacional do Servidor.
Aqui funcionou, espero que tenham conseguido também!

No próximo artigo iremos aprender a criar um servidor dhcp, para que não seja mais necessário informarmos endereços IP’s, máscaras de sub-rede e gateway.

Comando ifdown não funciona: interface eth0 not configured

Comando ifdown não funciona
Ao utilizar o comando ifconfig visualizo o endereço da interface de rede, contudo, ao tentar desativar essa interface de rede utilizando o comando ifdown, conforme segue:
sudo ifdown eth0
obtenho a seguinte mensagem:
ifdown: interface eth0 not configured

Isso acontece por que o pacote legacy ifupdown opera buscando as configurações das interfaces dentro do arquivo
/etc/network/interfaces tente configurar a interface diretamente no arquivo /etc/network/interfaces e execute novamente o comando.

Se ainda assim o comando não funcionar, não precisa reiniciar o computador, isso ocorre por que o pacote network-manager ou o pacote wicd (gerenciadores de rede em modo gráfico) estão ativos e se posicionaram no sistema como responsáveis pela gestão das interfaces de rede, uma vez que o arquivo interfaces estava vazio. Para resolver a questão faça o seguinte:

pare o serviço network-manager através do comando:
sudo service network-manager stop ou sudo /etc/init.d/network-manager stop
caso seu sistema utilize o wicd pare-o também.
Pronto!

teste novamente o comando sudo ifup eth0 com a nova configuração realizada no arquivo de interfaces, poderá retornar algo como:
ifup: interface eth0 already configured
neste caso utilize primeiro o sudo ifdown eth0 e logo em seguida o ifup. Deverá funcionar.

Erro: Não consigo pingar o endereço de broadcast no Linux

Erro: Não consigo pingar o endereço de broadcast no Linux
Ao tentar executar um ping de broadcast utilizando o parâmetro -b: ping -b 192.168.1.255
recebemos no terminal a seguinte mensagem:
WARNING: pinging broadcast address
a partir daí, não aparece mais nada e o comando não é executado como gostaríamos

Solução: As interfaces de rede local, por padrão estão configuradas para rejeitarem pacotes icmp’s para broadcast, para modificar isso, altere o seguinte arquivo nos computadores alvos do ping de broadcast:

/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

se estiver setado para 1 a placa de rede irá ignorar o pacote de broadcast, então modifique para 0 se quiser que a interface aceite o pacote, salve o arquivo e teste o comando novamente, deverá funcionar.

Tipos de discurso: direto, indireto e indireto livre

É engraçado como nós temos a habilidade de nos esquecermos das coisas que não utilizamos no dia a dia, exemplo disso: as benditas regras de português, acho que talvez eu devesse tentar usar a norma culta ao me comunicar com as pessoas ao meu redor, dessa forma, quem sabe eu não precisasse estudar a mesma coisa de 5 em 5 meses para poder relembrar, hoje o discurso é justamente sobre os tipos de discurso.

Tipos de Discurso

De antemão, sabemos que existem 3 tipos de discurso em textos narrativos dentro da língua portuguesa, separá-los é que pode ser trabalhoso, mas depois de alguns macetes e regrinhas e muito exercício fica fácil.

Discurso Direto: O personagem fala

O que deve ser entendido é que: quando a palavra direta é usada para definir este tipo de discurso fica evidente que a ação se dá de forma ativa e não passiva, e a ação da qual falamos aqui é o ato de falar é o ato de discursar, assim sendo, podemos dizer que quando o discurso é direto, a fala do personagem é reproduzida pelo personagem e não pelo narrador, de maneira fiel e sem nenhuma conjunção integrante como “que” ou “se”. Como a fala é feita na íntegra pelo personagem do texto é necessário um verbo dicendi (verbo declarativo), o narrador anuncia a fala, verbos dicendi são dizer, falar, responder, retrucar, afirmar… dentre outros.
Travessões e parágrafos são comuns neste tipo de discurso, todavia não são obrigatórios, então se atentem a isso pois há autores que preferem o uso de aspas, normalmente o discurso direto apresenta diálogos nos seguintes tempos verbais: presente do indicativo, pretérito perfeito quando quer denotar coisa passada e quando se trata de coisa futura então o tempo verbal é o futuro do presente.

Nada melhor que alguns exemplos para entender melhor a matéria segue adiante.

Maria e José conversavam na sala sobre o ciclo reprodutório das borboletas do Afeganistão, Maria intrigada com a velocidade que estas se reproduziam olha para os olhos cor de mel de José e pergunta:
– Marido, por que elas são tão rápidas?
Ao passo que José responde:
– Não sei mulher, pergunte a elas.

Vejam agora este discurso direto onde o narrador personagem tenta um diálogo com duas moças.

“De uma feita, estava eu sentado sozinho num banco da Praça da Alfândega quando começaram a acontecer coisas incríveis no céu, lá para as bandas da Casa de Correção: havia uns tons de chá, que se foram avinhando e se transformaram nuns roxos de insuportável beleza. Insuportável, porque o sentimento de beleza tem de ser compartilhado. Quando me levantei depois de findo o espetáculo, havia umas moças conhecidas paradas à esquina da Rua da Ladeira.
– Que crepúsculo fez hoje! – disse-lhes eu, ansioso de comunicação.
– Não, não reparamos em nada – respondeu uma delas. – nós estávamos aqui esperando Cezimbra.
E depois ainda dizem que as mulheres não tem senso de abstração…”

Mário Quintana

Tipos de discurso: Discurso Indireto, o narrador fala

Neste caso o narrador fala pela personagem, por isso o termo indireto, para isto são usadas as tais conjunções integrantes “que” e “se”, este tipo de discurso é mais incomum do que o anteriormente citado, fácil de identificar, aqui também são usados verbos dicendi, mas volto a frisar o uso de termos introdutórios “que” e “se”, o autor fala pela personagem. Quando temos uma frase no discurso direto no tempo presente do indicativo passando-a para o indireto ela vai para o pretérito imperfeito, quando a frase no discurso direto fica no pretérito perfeito ela passa a pretérito mais que perfeito no indireto, e por fim quando a frase no discurso direto está no futuro do presente ela vai a futuro do pretérito no discurso indireto.

Vejamos o seguinte exemplo:

Maria e José conversavam animadamente, quando de supetão José disse que Maria era muito folgada e ela deveria se policiar para não cair no desagrado de seus companheiros de sala, ao passo que Maria retrucou que caso José não estivesse satisfeito com seu comportamento bastava se afastar e evitá-la.

No discurso direto esta mesma conversa ficaria assim.
Maria e José conversavam animadamente quando de supetão josé diz:

– Você é muito folgada e deve se policiar para não cair no desagrado de nossos companheiros de sala

Ao passo que Maria retruca:

– Caso não estiver satisfeito com meu comportamento basta se afastar de mim, evitando-me

Tipos de discurso: Discurso Indireto Livre

Este é o mais difícil de ser entendido e é preciso muita atenção para identificá-lo em uma frase, é uma mistura do indireto com o direto em algumas partes da frase nota-se que o personagem fala sem a introdução de um verbo dicendi e o narrador fala pelo personagem sem o uso de um conectivo por este motivo fica difícil a detecção, é mister observar os pronomes usados, se estiver na primeira pessoa então quem fala é a personagem se estiver na 3ª pessoa quem fala é o narrador. Este tipo de discurso revela os pensamentos do personagem, suas idéias, reflexões é uma espécie de monólogo interior.

Exemplo:

Maria estava tão triste que mal podia se agüentar de pé. Por quê, por que meu José tinha que morrer!.
No exemplo a fala de Maria não é introduzida por nenhum verbo dicendi e não há conectivos que apresentem a fala do narrador, neste caso o que está em negrito foi Maria que falou.

Outro exemplo

Carolina já não sabia o que fazer. Estava desesperada, como a fome encarrapitada. Que fome! Que faço? Mas parecia que uma luz existia…

Proxy transparente, SQUID + Iptables

O escopo deste tutorial não abrange a instalação e configuração do squid, se quiser saber como configurar o squid acesse esse tutorial: configurando o squid, o objetivo deste artigo é a configuração do servidor proxy squid de modo transparente, evitando assim que seja necessário informar no navegador o endereço do servidor e a porta.

De maneira básica, para funcionar o squid precisa apenas declarar a http_port e a acl all, assim:

http_port 3128 transparent
acl all src all

Observe que a frente do http_port 3128 acrescentamos a palavra transparent, indicando que o Squid irá primeiro procurar a regra de redirecionamento no iptables para somente depois, caso não encontre nada no firewall, verificar o navegador. A palavra transparent indica que o servidor proxy irá funcionar de maneira transparente para o usuário, mas antes são necessárias algumas configurações no iptables, conforme pode ser visto a seguir:

Configurando o iptables para o proxy transparente

Acesse o arquivo firewall.sh dentro da pasta /etc, utilizamos esse mesmo arquivo em um artigo anterior para configurarmos um servidor de internet. Iremos adicionar algumas regras para fazer funcionar o proxy transparente.

#!/bin/bash
#Declaração das variáveis que irão armazenar a interface WAN e a interface LAN
IF_WAN=eth0
LAN=192.168.3.0/24

#definição das regras do firewall e em seguida apago todas.
iptables -F
iptables -t nat -F

#Ativa o roteamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward

#Regra de mascaramento
iptables -t nat -A POSTROUTING -O $IF_WAN -j MASQUERADE
#a partir daqui temos a criação de uma nova regra que no arquivo anterior não tinhamos
#Regra de redirecionamento do tráfego da tabela nat da porta 80 para a porta 3128 
iptables -t nat -A PREROUTING -p tcp -m tcp -–dport 80 -s $LAN -j REDIRECT --to  3128
Não se esqueça de acrescentar a palavra transparent no arquivo de configuração do squid, se você fizer apenas a mudança no firewall possivelmente você terá o seguinte erro ao tentar acessar uma página:
Erro no proxy transparente squid

Erro no proxy transparente squid


Para testar o proxy, desative-o no navegador, pode colocar sem proxy, ele deverá funcionar mesmo assim e deverá funcionar em qualquer navegador. Veja o exemplo:
Proxy transparente funcionando

Proxy transparente funcionando


Lembre-se que somente será redirecionado para a porta 3128 (porta do squid) o tráfego que entrar pela porta 80, logo, sites que usam protocolo https que roda na porta 443, como o site do facebook, não serão afetados, para corrigir esse problema basta acrescentar a porta 443 no arquivo de configuração do firewall, criando uma nova regra.
Também já haviamos definido que o arquivo de firewall seria executado automaticamente assim que iniciado o sistema, caso não se lembre como fazer, seguem os passos:

Automatizando a execução do firewall

edite o seguinte arquivo:

pico /etc/rc.local

antes da última linha digite:

sh /etc/firewal.sh
Esse é o mecanismo básico para o proxy transparente funcionar, contudo, é importante observar a estrutura da rede para o correto funcionamento do firewall, como mostrado no segundo artigo desta série: configurando a infraestrutura de rede, o ambiente de rede que estou utilizando neste exemplo funciona da seguinte forma:
Servidor Debian Wheezy 7.6
Interfaces
auto eth0 (configurada como NAT no virtual box)
iface eth0 inet dhcp

auto eth1
iface eth1 inet static (configurada como bridge no dhcp)
address 192.168.3.10
netmask 255.255.255.0
Ao configurar o servidor dhcp indique na diretiva option routers o mesmo endereço de sua interface eth1: 192.168.3.10

A estação cliente utilizada neste exemplo é uma máquina virtual debian wheezy contendo uma interface de rede configurada em modo bridge no virtual box e utiliza dhcp.


Leituras recomendadas:
http://www.vivaolinux.com.br/artigo/Entendendo-a-teoria-do-iptables?pagina=4
http://www.websolutti.com.br/artigos/fw_debian.pdf

Instalando o Servidor web Apache 2 + PHP5 + MySQL + PhpMyAdmin

Continuando a série de artigos sobre como configurar um servidor de redes Linux, cujo passo inicial pode ser acompanhado clicando aqui, iremos neste artigo realizar a instalação de um servidor Web. Escolhemos como implementação desse serviço o Apache 2, para melhor exemplificar iremos instalar também o PHP5 + MySQL + PhpMyAdmin.

Instalando o Servidor Apache 2

Neste tutorial estamos utilizando a distribuição Linux Debian em modo texto, portanto, faremos uso do comando apt-get, por ser fácil de utilizar e de fácil compreensão. Na máquina virtual que ficou como servidor faça o seguinte comando:

apt-get install apache2

Quando a instalação for finalizada, acesse a máquina virtual cliente para testar, abra o navegador e digite: http://192.168.3.10
obs.: o endereço digitado deverá ser o ip do seu servidor, no meu caso é o endereço http://192.168.3.10

você deverá ver a seguinte imagem:

localhost apache

Repare que não temos aqui o acesso via localhost, pois o cliente está acessando um servidor web localizado em outro computador, na máquina virtual debian-server, por isso, precisamos especificar o protocolo http:// + o IP: 192.168.3.10.

Um pouco sobre a história da internet

A grande popularidade da Internet se deve principalmente ao fato de que sua interface gráfica amigável e colorida facilita e incentiva o seu uso, e tudo isso é possibilitado graças a um conjunto de tecnologias que serão abordadas no decorrer deste documento.
Em março de 1989 Tim Berners-Lee criou o primeiro protótipo de uma estrutura de documentos vinculados dispostos em uma rede de computadores, a partir da apresentação deste projeto Marc Andreessen, da Universidade de Illinois, iniciou a criação do primeiro navegador gráfico: o Mosaic, lançado em fevereiro de 1993, mais tarde Andreessen fundaria a Netscape, em 1994 o MIT (Massachusets Institute Technology) e o CERN (Centro Europeu de Pesquisa Nuclear) assinaram o acordo que criou o W3C (World Wide Web Consourtium) que tinha como foco a padronização de protocolos ligados a internet e a promoção da interpoperabilidade entre os diversos sites, Tim Berners-Lee tornou-se diretor do consórcio desde então, no endereço www.w3.org obtemos uma série de documentos de grande importância relacionados a web, e para quem deseja aprender tecnologias de desenvolvimento web é interessante acessar o seguinte site: www.w3schools.com.

Entendendo a arquitetura de funcionamento de páginas web

É importante o entendimento do funcionamento do servidor web, e quais protocolos serão utilizados por ele, para isso trago algumas informações com base no livro Redes de Computadores do Tanembaum, 2004:
O primeiro dispositivo a ser utilizado é o navegador que será acessado pelo usuário, usuário este que será tratado aqui como cliente, tendo em vista que será cliente dos serviços prestados pelo site que está hospedado em um computador denominado servidor, visualizamos assim um modelo cliente-servidor. O navegador é a ferramenta que tem por missão acessar páginas web a medida que o usuário insere o endereço do site que deseja visualizar na barra de endereço do navegador, a requisição viaja por meio da internet utilizando o protocolo HTTP (HyperText Transfer Protocol) até chegar ao seu destino, ao chegar, a requisição é processada pelo servidor web que irá devolver a resposta por meio do protocolo HTTP, a resposta viajará pela internet e o navegador se encarregará de renderizar a página solicitada. Como ilustrado na figura abaixo:
requisição http

O HTTP é o protocolo padrão de acesso a páginas web, mas o que significa isso?
HTTP (HyperText Transfer Protocol) é um protocolo de transferência de hipertexto, hipertexto possui uma definição ampla e dá significado as várias possibilidades que enxergamos em um página web, hipertexto são blocos de texto, imagens, sons, hiperlinks, dentre outros, os hiperlinks por vezes são chamados resumidamente de links, veremos adiante um modelo onde é possível visualizar com mais detalhes a visão do lado cliente no processamento da requisição HTTP:
Conforme nos trás o mestre Tanembaum, supondo que determinado usuário acesse a página http://www.itu.org/home/index.html teríamos as seguintes etapas:

  • 1. O navegador determina o URL (Endereço do site).
  • 2. O navegador pergunta ao DNS qual é o endereço IP de www.itu.org.
  • 3. O DNS responde 156.106.192.32.
  • 4. O navegador estabelece uma conexão TCP com a porta 80 em 156.106.192.32.
  • 5. Em seguida o navegador envia um comando solicitando o arquivo /home/index.html.
  • 6. O servidor www.itu.org envia o arquivo /home/index.html.
  • 7. A conexão TCP é encerrada.
  • 8. O navegador exibe todo o texto de /home/index.html.
  • 9. O navegador busca e exibe todas as imagens que o arquivo contém.
O navegador irá renderizar o conteúdo em uma linguagem conhecida como HTML (Hypertext Markup Language), é uma linguagem de marcação utilizada para produzir documentos em formato web, é entendida por qualquer navegador, portanto, é uma estrutura padrão que funciona do lado do cliente.
O navegador não consegue interpretar linguagens de programação como o PHP e ASP, quem faz essa função é o servidor web, que interpreta e devolve o resultado em HTML para que o navegador (lado cliente) faça a renderização do conteúdo. Por este motivo ao clicar com o botão direito do mouse em uma página qualquer, e pedirmos pra visualizar o código fonte, enxergaremos apenas HTML e javascript que são tecnologias que agem do lado cliente, o PHP, ASP, JAVA não poderão ser visualizados uma vez que estão do lado servidor.

Mais detalhes sobre o HTTP

As solicitações enviadas pelos clientes, via navegador aos servidores web são padronizadas pelo protocolo HTTP, e as respostas de igual maneira são também padronizadas pelo mesmo protocolo. O HTTP se utiliza do protocolo de transporte TCP (Transmission Control Protocol) para estabelecer uma conexão com o servidor web na porta 80 (porta padrão do HTTP), o HTTP possui uma série de métodos que são descritos a seguir:

Método Descrição
GET Solicita a leitura de uma página Web
HEAD Solicita a leitura de um cabeçalho de página Web
PUT Solicita o armazenamento de uma página Web
POST Acrescenta a um recurso (por exemplo, página Web)
DELETE Remove a página Web
TRACE Ecoa a solicitação recebida

Tabela com os grupos de respostas HTTP

Código Significado Exemplos
1xx Informação 100=O servidor concorda em atender a requisição do cliente
2xx Sucesso 200=Requisição bem sucedida, 204=sem conteúdo
3xx Redirecionamento 301=a página foi movida; 304=a página no cache ainda é válida
4xx Erro do cliente 403=página proibida, 404=página não encontrada
5xx Erro do servidor 500=Erro interno do servidor, 503=tente de novo mais tarde

Instalando o PHP

Passo 2 – Partiremos agora para a instalação do PHP, linguagem de programação responsável por implementar dinamismo a páginas web e fazer o contato com o banco de dados. Digite o seguinte comando no terminal

sudo apt-get install php5

Para testar o sucesso da instalação, acesse o diretório /var/www/
e crie um arquivo utilizando o comando touch:

touch index.php

agora edite este arquivo utilizando o editor de textos de sua preferência, e digite o seguinte conteúdo dentro do arquivo:

<?php
	phpinfo();
?>
reinicie o servidor web Apache para que ele reconheça o PHP que acabou de ser instalado, para reiniciar o servidor faça:

/etc/init.d/apache2 restart

ou se preferir

service apache2 restart
Agora abra o seu navegador e digite:

http://192.168.3.10/index.php

se tudo estiver ok, você deverá visualizar a seguinte página:

phpinfo
É a página de informações do PHP.

Instalando o MySQL-Server

Passo 3 – Iremos realizar agora a instalação do MySQL Server, precisamos de um servidor de banco de dados, por isso, utilizaremos aqui o MySQL server, para instalá-lo basta acessar o terminal e digitar:

apt-get install mysql-server

No decorrer da instalação será solicitado a senha do usuário root, basta informar a senha de sua preferência, observados aspectos de segurança.

Integrando o PHP com o MySQL

Para integrar o PHP com o MySQL é preciso instalar mais um pacote, de outra forma, a conexão do PHP com o banco de dados não irá funcionar, para evitar esse problema instale o seguinte pacote:
apt-get install php5-mysql

Instalando o PhpMyAdmin

Muitos preferem utilizar o servidor MySQL “puro”, sem interface gráfica, optamos aqui por utilizar o phpmyadmin como interface gráfica, o objetivo deste tutorial não é o aprendizado da linguagem SQL, por isso primamos pela produtividade no caso em questão.

Para instalar o phpmyadmin faça:

sudo apt-get install phpmyadmin

No decorrer da instalação ele poderá solicitar que seja escolhido o servidor web ao qual ele se vinculará automaticamente, selecione apache2, logo após irá solicitar a palavra passe que no caso é a mesma que foi fornecida ao instalar o MySQL. Uma terceira questão que poderá surgir é se você deseja configurar o phpmyadmin manualmente ou através do assistente, escolha a opção Sim para configurar através do assistente.

Agora precisamos acessar o phpmyadmin, contudo pode acontecer de não encontrarmos o phpmyadmin no endereço: http://192.168.3.10/phpmyadmin, pois ele pode estar localizado em uma pasta diferente, caso isso ocorra crie um simbólico para poder acessá-lo dentro de nossa pasta padrão, para isso faça:

sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin

novamente reinicie o servidor apache e logo em seguida acesse: http://192.168.3.10/phpmyadmin

você deverá visualizar uma página semelhante a esta:

tela inicial phpmyadmin

Pronto! Já temos um ambiente de desenvolvimento com servidor web + linguagem de programação + servidor de banco de dados e interface gráfica, em outra oportunidade explicarei como desenvolver uma aplicação simples utilizando estas tecnologias.

Configurando o Servidor DNS para acessar os sites pelo nome

Para quem está acompanhando os artigos desde o início, como prometido no final do artigo anterior Clique aqui para ver irei mostrar como configurar o servidor DNS para que possamos acessar o site pelo nome e não pelo IP. Acesse o arquivo de configuração do BIND9 no servidor: pico /etc/bind/db.zonaDebian, e ao final do arquivo adicione o seguinte registro:

meuSite A 192.168.3.10

Reinicie o servidor de DNS: service bind9 reload
Simples assim! acesse no navegador o endereço: meuSite.debian.com.br, deverá aparecer a seguinte imagem:
Configurando o DNS do servidor Web

Caso prefira, pode ser criado uma nova zona de domínio no arquivo named.conf.local com um outro nome para o site, e em seguida configura-se os registros do site em um arquivo a parte.