Mudanças entre as edições de "PJI11103-2016-2"

De MediaWiki do Campus São José
Ir para: navegação, pesquisa
(Criou página com 'PJI11103-2016-2 =Diário de aula de PJI - 2016-2 - Prof. Simara Sonaglio= ==Dados Importantes== ''Professora'': Simara Sonaglio <br>''Email'': simara.sonaglio@ifsc.edu.br '...')
 
(Avaliações)
 
(275 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
PJI11103-2016-2
+
* Endereço encurtado: http://bit.ly/pji320162
 +
* Link cronograma: http://bit.ly/2cONkrw
 +
* [[PJI11103-2016-2-config|Link para as configurações feitas pelos alunos]] ([http://bit.ly/pji320162-config alternativo])
 +
*[https://docs.google.com/spreadsheets/d/1PmbBmOfdkTa9Qj62fLuZlkCgo5RPYYyhh0sJekfILbo/edit?usp=sharing Presença]
  
=Diário de aula de PJI - 2016-2 - Prof. Simara Sonaglio=
+
 
 +
=Diário de aula de PJI3 - 2016-2=
  
 
==Dados Importantes==
 
==Dados Importantes==
 
''Professora'': [[Simara Sonaglio]]
 
''Professora'': [[Simara Sonaglio]]
 
<br>''Email'': simara.sonaglio@ifsc.edu.br
 
<br>''Email'': simara.sonaglio@ifsc.edu.br
''Professora'': Ederson Torresini
+
 
 +
''Professor'': Ederson Torresini
 
<br>''Email'': etorresini@ifsc.edu.br
 
<br>''Email'': etorresini@ifsc.edu.br
''Encontros'': quartas e quintas das 18:40 às 22:10 horas.
+
 
 +
''Encontros'': quartas e quintas das 18:50 às 22:10 horas.
 +
 
 +
==Avaliações==
 +
 
 +
{| border="1"
 +
!Aluno(a)
 +
!Relatório 1
 +
!Relatório 2
 +
!Relatório 3
 +
! Entrevista
 +
! Rec-av02
 +
! Rec-av03
 +
! Rec- Entrevista
 +
!Conceito final**
 +
|-
 +
|Anderson      ||7,0  ||6,0  ||6,0  ||6,0  || || ||  || 6,0
 +
|-
 +
|Andreza ||7,5  ||(5,0+7,0*)/2=6,0 ||6,5  ||4,0 || || ||7,5  || 7,0
 +
|-
 +
|Felipe        ||9,0  ||9,5  ||10,0  ||10,0  ||  || || || 10,0
 +
|-
 +
|Giordano      ||7,0 ||6,5  ||7,0  ||5,0  ||  || ||6,0 || 7,0
 +
|-
 +
|Higino ||8,0 ||8,0  ||7,5  ||9,0  ||  || || ||8,0
 +
|-
 +
|Kleiton      ||8,0 ||(5,0+7,0*)/2=6,0 ||5,0  ||8,0  ||  ||3,0 || ||7,0
 +
|-
 +
|Leonardo    ||7,5 ||2,5  ||x  ||x  ||  || || ||2,0
 +
|-
 +
|Mike    ||8,0 ||7,0  ||7,0  ||9,0  ||  || || ||8,0
 +
|-
 +
|Ronaldo  ||(5,0+7,0*)/2=6,0 ||3,0  ||4,0  ||1,0  ||x  ||x ||x ||3,0
 +
|-
 +
|}
 +
(*) Recuperação extra.
 +
(**) Somente números inteiros.
 +
 
 +
==Acesso remoto aos servidores==
 +
 
 +
Os servidores da Operadora e do Galpão podem ser acessados remotamente da seguinte forma:
 +
 
 +
<code>
 +
# Operadora
 +
ssh pasteltelecom@200.135.37.125
 +
 
 +
# Galpão
 +
ssh root@200.135.37.123
 +
</syntaxhighlight>
 +
 
 +
A senha deve ser memorizada.
  
 
=Diário de aulas=
 
=Diário de aulas=
  
==Aula 1 - 10/08/16: Apresentação da disciplina e discussão do projeto a ser desenvolvido ==
+
==10/08/16: Apresentação da disciplina e discussão do projeto a ser desenvolvido ==
 +
 
 +
{{Collapse top | Aula 1 }}
 +
 
 +
<br>
 +
'''Itens sugeridos pelos alunos para possível implementação no projeto:'''
 +
<br>
 +
<br>
 +
 
 +
#Provimento com IP válido via fibra [[http://www.teleco.com.br/tutoriais/tutorialsolfo2/pagina_3.asp]] [[http://www.cianet.com.br/saiba-mais-sobre-redes-opticas-passivas-xpon-gepon-x-gpon-2/]] e redundância via rádio [[http://link.estadao.com.br/blogs/renato-cruz/wp-content/uploads/sites/368/2010/12/radio.jpg]] [[http://www.intelbras.com.br/sites/default/files/downloads/ficha_tecnica_-_ptp_5_ghz_2n_mimo_2x2.pdf]]
 +
#Controle de acesso [[http://www.ohub.com.br/ideias/tipos-de-controle-de-acesso-para-empresas/#.V6zUR7grJdg]] [[http://www.dimep.com.br/blog/controle-de-acesso/conheca-tipos-controle-acesso-utilizados/]] [[http://www.automatiza.com.br/produtos/controles-de-acesso/]]
 +
#Wi-Fi [[https://pt.wikipedia.org/wiki/IEEE_802.11]] [[http://www.infowester.com/wifi.php]]
 +
#Combate automatizado a incêndio
 +
#Sistema de energia com nobreak
 +
#Câmera de vigilância com acesso remoto
 +
#Sistema de alarme
 +
#Backup de dados
 +
#Acesso remoto ao sistema da empresa
 +
#Provimento via fibra e par metálico
 +
#Dispositivos móveis para controle de estoque
 +
#Acesso a visitantes e colaboradores
 +
#Servidores de banco de dados
 +
#Sensores de alarme e presença
 +
#Identificação facial
 +
#Serviço de domínio integrado com tag
 +
#Portão com portal RFID [[http://www.teleco.com.br/tutoriais/tutorialrfid2/pagina_1.asp]]
 +
#Servidor de email
 +
#Servidor HTTP na nuvem
 +
#Servidor DHCP
 +
#Servidor DNS com cache
 +
#Firewall
 +
#Proxy com controle por usuário
 +
#PABX IP com URA
 +
#Registro na operadora VoIP
 +
#Wi-Fi para visitantes e para colaboradores com controle de acesso [[https://pt.wikipedia.org/wiki/RADIUS]] [[https://pt.wikipedia.org/wiki/LDAP]] [[https://pt.wikipedia.org/wiki/Active_Directory]] [[Media:Gerencia_de_redes.pdf|apostila]]
 +
#Túnel MPLS com serviços integrados, como VoIP
 +
#Sistema ERP [[http://portalerp.com/erp/5-entenda-erp]] via Web integrado a RFID
 +
#Câmeras sem fio
 +
#Banco de baterias
 +
#CFTV com acesso externo
 +
#Notificação de recebimento/entrega de carga no galpão
 +
#Rastreamento por GPS da entrega integrado ao site
 +
#Antena repetidora GSM
 +
 
 +
{{Collapse bottom | Aula 1 }}
 +
 
 +
==11/08/16: Discussão sobre os itens levantados pelo alunos ==
 +
 
 +
{{Collapse top | Aula 2 }}
 +
 
 +
{| border="1"
 +
|-
 +
| '''Física/Enlace''' ||
 +
Provimento com IP válido via fibra e redundância via rádio
 +
Wi-Fi
 +
<br>Sistema de energia com nobreak
 +
<br>Provimento via fibra e par metálico
 +
<br>Wi-Fi para visitantes e para colaboradores com controle de acesso
 +
<br>Banco de baterias
 +
<br>Antena repetidora GSM
 +
|-
 +
| '''Rede''' ||
 +
Firewall
 +
<br> Túnel MPLS com serviços integrados, como VoIP
 +
|-
 +
| '''Aplicações''' ||
 +
Controle de acesso
 +
<br>Combate automatizado a incêndio
 +
<br>Câmera de vigilância com acesso remoto
 +
<br>Sistema de alarme
 +
<br>Backup de dados
 +
<br>Acesso remoto ao sistema da empresa
 +
<br>Dispositivos móveis para controle de estoque
 +
<br>Acesso a visitantes e colaboradores
 +
<br>Servidores de banco de dados
 +
<br>Sensores de alarme e presença
 +
<br>Identificação facial
 +
<br>Serviço de domínio integrado com tag
 +
<br>Portão com portal RFID
 +
<br>Servidor de email
 +
<br>Servidor HTTP na nuvem
 +
<br>Servidor DHCP
 +
<br>Servidor DNS com cache
 +
<br>Proxy com controle por usuário
 +
<br>PABX IP com URA
 +
<br>Registro na operadora VoIP
 +
<br>Sistema ERP via Web integrado a RFID
 +
<br>Câmeras sem fio
 +
<br>CFTV com acesso externo
 +
<br>Notificação de recebimento/entrega de carga no galpão
 +
<br>Rastreamento por GPS da entrega integrado ao site
 +
|-
 +
|}
 +
 
 +
<br>
 +
'''Levantamento de itens necessários para implantação das soluções propostas:'''
 +
<br>
 +
<br>
 +
 
 +
{| border="1"
 +
|-
 +
| '''Provimento via fibra''' ||
 +
#Conversores ópticos/elétricos em ambos os lados (OLT e ONT)
 +
# Fibras
 +
|-
 +
|}
 +
 
 +
<br>
 +
 
 +
{| border="1"
 +
|-
 +
| '''Enlace via rádio''' ||
 +
#Antenas no cliente e na operadora
 +
#Rádios no cliente e na operadora
 +
|-
 +
|}
 +
 
 +
<br>
 +
 
 +
{| border="1"
 +
|-
 +
| '''ADSL''' ||
 +
#Par metálico
 +
#Modens em ambos os lados
 +
#DSLAM na operadora
 +
#Concentrador de acesso
 +
#Servidor RADIUS
 +
|-
 +
|}
 +
 
 +
<br>
 +
 
 +
{| border="1"
 +
|-
 +
| '''Wi-Fi com controle de acesso integrado <br> e com ampla área de cobertura ''' ||
 +
# APs
 +
# Mapeamento de áreas de cobertura de cada AP
 +
# Uso de canais diferentes nos APs
 +
# Integração servidor RADIUS
 +
# Integração com LDAP
 +
|-
 +
|}
 +
 
 +
{{Collapse bottom | Aula 2 }}
 +
 
 +
==17/08/16: Discussão sobre os itens levantados pelo alunos ==
 +
 
 +
{{Collapse top | Aula 3}}
 +
 
 +
Memória da aula será acrescentada posteriormente
 +
 
 +
{{Collapse bottom | Aula 3}}
 +
 
 +
==18/08/16: ADSL ==
 +
 
 +
{{Collapse top | Aula 4}}
 +
 
 +
<br>
 +
Na infraestrutura ADSL, cabem destacar alguns elementos:
 +
 
 +
* '''modem ADSL:'''O  Modem  ADSL  que  temos  em  casa  também  é  chamado  por  outro  nome: tranceptor. Os engenheiros na companhia telefônica ou no provedor de internet (ISP) o  chamam  de  ATU-R.  Independentemente  do  nome  pelo  qual  é  chamado,  ele  é  o ponto em que os dados do computador ou rede do usuário se conectam com a linha
 +
DSL. O  Modem  pode  operar  basicamente  de  duas  formas:  como  roteador  ou  como bridge.  Quando  funciona  como  roteador,  o  modem  possui  recursos  internos  para estabelecer a conexão lógica com o AC. Quando funciona  como bridge,  os  recursos  necessários  para  o  estabelecimento  de  uma conexão  lógica  devem  estar  instalados  no  computador,  como  o  protocolo  PPPoE.
 +
* '''splitter:''' filtro que separa os sinais de voz e de dados. São usados tanto do lado do assinante quanto no DSLAM.
 +
* '''DSLAM (DSL Access Multiplexer):''' multiplexador de acesso ADSL, que recebe as linhas dos assinantes do lado da operadora. Esse componente faz a intermediação entre os assinantes e a rede de dados da operadora. Dentre suas atribuições, destacam-se a modulação do sinal das linhas dos assinantes, a limitação das taxas de ''downstream'' e ''upstream'' de acordo com o contratado pelos assinantes, e as conversões de protocolos de enlace (quando necessárias) para a rede da operadora.
 +
* '''AC (concentrador de acesso):''' equipamento que concentra as pontas dos enlaces de dados dos assinantes no lado da rede da operadora.
 +
 
 +
A parte da infraestrutura ADSL dentro da rede de dados da operadora inclui equipamentos DSLAM (muitos deles), um ou mais AC e as redes de comunicação para interligá-los. Note-se que quem dá acesso de fato à Internet é o AC. A figura abaixo ilustra esses componentes.
 +
 
 +
[[imagem:Dslam-infra.png]]
 +
 
 +
O enlace de dados entre o equipamento do assinante e a rede da operadora pode ser feita de diferentes formas. Esse enlace é visto pelo assinante como seu enlace para a Internet - i.e. ele obtém seu endereço IP fornecido pela operadora. Os tipos de enlace de dados ADSL mais usados são:
 +
* '''PPPoE (PPP over Ethernet):''' cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em quadros Ethernet. Esta é a forma mais utilizada para assinantes residenciais.
 +
* '''PPPoA (PPP over ATM):''' cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.
 +
* '''EoA (Ethernet over ATM):''' cria um enlace Ethernet, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.
 +
 
 +
<br>
 +
O enlace PPPoE funciona como se tivesse um link ponto-a-ponto entre o roteador ADSL e um concentrador de acesso (AC). Quer dizer, parece que existe um fio ligando diretamente esses dois equipamentos, apesar de na realidade existir toda uma infraestrutura entre os dois. Isso pode ser visualizado na figura abaixo. Em cada ponta desse link PPPoE há um endereço IP usado pelos respectivos equipamentos.
 +
 
 +
[[imagem:Enlace-pppoe.png]]
 +
 
 +
<br>
 +
=== ATIVIDADE 1===
 +
 
 +
<br>
 +
Cada equipe deve estabelecer seu enlace WAN usando ADSL. O modem ADSL deve ser configurado para trabalhar em modo PPPoE. Em seguida, fazer as configurações de rede necessárias em uma máquina virtual e fazer testes diversos afim de testar a conectividade de sua rede.
 +
 
 +
<br>
 +
==== Configurações ADSL ====
 +
 
 +
Cada link ADSL deve ter seu IP dinamicamente configurado, o qual deve ser um IP válido fornecido à equipe pelo provedor (professores).
 +
 
 +
Os seguintes parâmetros dos modems ADSL devem ter estes valores:
 +
* '''Port:''' ''0''
 +
* '''VPI:''' ''8''
 +
* '''VCI:''' ''35''
 +
* '''Encapsulamento:''' ''LLC/SNAP''
 +
* '''Modo:''' ''PPPoE''
 +
* '''User:''' usuario1
 +
* '''Password:''' senha1
 +
* '''NÃO''' ativar firewall.
 +
* '''Ativar''' NAT
 +
 
 +
<br>
 +
 
 +
=== ATIVIDADE 2 ===
 +
 
 +
<br>
 +
Nesta atividade o modem deve ser configurado para operar em modo Bridge e um computador Linux deve ser preparado para user PPPoE.
 +
 
 +
<br>
 +
A seguir há uma explicação sobre como realizar as configurações necessárias para estabelecer o enlace PPPoE em computador Linux:
 +
 
 +
# Instale o software necessário: <syntaxhighlight lang=bash>
 +
sudo apt-get install pppoe
 +
</syntaxhighlight>
 +
# Edite o arquivo ''/etc/ppp/peers/adsl'', que deve ficar com este conteúdo: <syntaxhighlight lang=text>
 +
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452 -C pji"
 +
noipdefault
 +
usepeerdns
 +
defaultroute
 +
hide-password
 +
lcp-echo-interval 20
 +
lcp-echo-failure 3
 +
connect /bin/true
 +
noauth
 +
persist
 +
mtu 1492
 +
noaccomp
 +
user usuario1
 +
default-asyncmap
 +
</syntaxhighlight>
 +
# Edite o arquivo ''/etc/ppp/chap-secrets'' e acrescente o seguinte: <syntaxhighlight lang=text>
 +
usuario1  *  senha1
 +
</syntaxhighlight>
 +
# Ative o enlace PPPoE executando o seguinte comando: <syntaxhighlight lang=bash>
 +
sudo pppd call adsl
 +
</syntaxhighlight>
 +
# Faça testes de conectividade
 +
 
 +
<br>
 +
=== PPPoE (PPP over Ethernet) ===
 +
 
 +
<br>
 +
PPPoE define um método para encapsular quadros PPP dentro de quadros Ethernet, e foi definido na [http://www.faqs.org/rfcs/rfc2516.html RFC 2516]. Ele foi criado para facilitar a integração de usuários discados e banda-larga em provedores de acesso (ISP - ''Internet Service Providers''). Além disso, torna mais fácil o controle de acesso, de uso da rede, e contabilização para usuários que a acessam via rede Ethernet. Assim, é possível implantar uma rede em que os usuários, para conseguirem acesso, precisam se autenticar como em um serviço discado. Uma vez obtido o acesso, pode-se também impor limitações de uso de banda de acordo com o usuário. Exemplos de infraestruturas que podem se beneficiar com essa técnica são redes de condomínios e de prédios comerciais. Finalmente, PPPoE é usado como protocolo de enlace em acessos aDSL, ilustrado na figura abaixo.
 +
 
 +
[[imagem:Pppoe_architecture.gif]]
 +
 
 +
 
 +
No PPPoE suas PDUs são encapsuladas em quadros Ethernet, usando o ''ethertype'' 8863H (estágio de descoberta) ou 8864H (estágio de sessão). Devido ao cabeçalho PPPoE (6 bytes) combinado ao identificador de protocolo do quadro PPP (2 bytes), a MTU em enlaces PPPoE não pode ser maior que 1492 bytes. O quadro PPP é simplificado, não possuindo as flags delimitadoras e os campos ''Address'', ''Control'' e ''FCS''. A PDU PPPoE é mostrada a seguir:
 +
 
 +
 
 +
[[imagem:Pppoe-pdu.png|800px]]
 +
 
 +
 
 +
 
 +
Em um enlace PPPoE um dos nodos é o ''host'' (cliente), e o outro o concentrador de acesso (AC, que tem papel de servidor). O estabelecimento do enlace é iniciado pelo ''host'', que procura um AC e em seguida solicita o início do enlace. Esse procedimento é composto por por dois estágios:
 +
* '''Descoberta (''Discovery''):''' o cliente descobre um concentrador de acesso (AC) para se conectar. Ocorre uma troca de 4 PDUs de controle:
 +
** ''PADI (PPPoE Active Discovery Indication):'' enviado em broadcast pelo cliente para descobrir os AC.
 +
** ''PADO (PPPoE Active Discovery Offer):'' resposta enviada por um ou mais AC, contendo seus identificadores e nomes de serviços disponíveis (no  âmbito do PPPoE).
 +
** ''PADR (PPPoE Active Discovery Request):'' enviado pelo cliente para o AC escolhido, requisitando o início de uma  sessão.
 +
** ''PADS (PPPoE Active  Discovery Session-Confirmation):'' resposta do AC escolhido.<br><br>[[imagem:Pppoe-discovery.png|300px]]<br><br>
 +
* '''Sessão (''Session''):''' nessa etapa são trocados quadros PPP como no estabelecimento de um enlace PPP usual. A sessão pode ser encerrada com a terminação PPP (i.e., via protocolo LCP), ou com a PDU PPPoE PADT (''PPPoE Active Discovery Terminate'').
 +
 
 +
===ATIVIDADE 3 ===
 +
 
 +
<br>
 +
Na Atividade 3 os alunos deverão, em um único grupo, criar o AC da operadora ADSL que será utilizada no projeto. Para isso devem executar nesta máquina que será o AC os seguintes passos:
 +
 
 +
#Instalar o pacote no AC:<code> sudo apt-get install pppoe</syntaxhighlight>
 +
#No AC crie o arquivo /etc/ppp/pppoe-server-options com o seguinte conteúdo:<code>
 +
require-chap
 +
noauth
 +
login
 +
lcp-echo-interval 10  
 +
lcp-echo-failure 2
 +
ms-dns 200.135.37.65
 +
netmask 255.255.255.0
 +
noipdefault
 +
debug
 +
kdebug 4
 +
</syntaxhighlight>
 +
#Crie no AC o arquivo /etc/ppp/chap-secrets com o seguinte conteúdo: <code>
 +
usuario1    *    senha1
 +
</syntaxhighlight>
 +
#Crie o arquivo /etc/ppp/faixa-ip no AC com o seguinte conteúdo:<code>
 +
192.168.10X.10-50</syntaxhighlight>
 +
#Ative o servidor PPPoE no AC:<code>
 +
pppoe-server -C pji -L 192.168.10X.200 -p /etc/ppp/faixa-ip -I eth1 </syntaxhighlight>
 +
# Em máquinas virtuais, testar estabelecer os enlaces PPPoE conforme foi feito na Atividade 2.
 +
# Veja no tcpdump o tráfego que foi criado durante o estabelecimento do enlace. Qual a sequência de quadros PPPoE trocada entre AC e computador?
 +
# Observe se foi criada a interface ppp0. Confira o IP que ela está usando, o tipo de encapsulamento e a MTU. Confira também as interfaces  ppp  no AC, observando as mesmas informações.
 +
#Tente usar a rede a partir do computador. Primeiro faça ping  no AC, e em seguida tente acessar a rede externa. Foi possível?
 +
#Coloque a máquina AC para rotear e mascarar pacotes.
 +
 
 +
===Demais itens configurados===
 +
 
 +
#A máquina onde foi feito o AC deve fazer a interface entre a rede da "Operadora" e a Internet. Sendo assim, esta máquina precisa rotear pacotes. O roteamento de pacotes nesta máquina pode ser ativado utilizando-se um dos dois comandos a seguir, sendo a primeira forma persistente e a segunda será perdida no ''boot'': <code>sudo sysctl -w net.ipv4.ip_forward=1
 +
echo 1 > /proc/sys/net/ipv4/ip_forward</syntaxhighlight>
 +
#Esta máquina também deve fazer NAT para trocar IPs privados por IPs públicos. Isto pode ser feito com o seguinte comando: <code>sudo iptables -t nat -A POSTROUTING -o int_saida -j MASQUERADE </syntaxhighlight>
 +
#Para que estas configurações não sejam perdidas quando a máquina for reiniciada, deve-se inserir estes comandos no arquivo ''/etc/rc.local''
 +
 
 +
{{Collapse bottom | Aula 4}}
 +
 
 +
==24/08/16: ADSL ==
 +
 
 +
{{Collapse top | Aula 5}}
 +
 
 +
Continuação da Aula 4.
 +
 
 +
{{Collapse bottom | Aula 5}}
 +
 
 +
==25/08/16: LAN ==
 +
 
 +
{{Collapse top | Aula 6}}
 +
 
 +
=== O problema dos ciclos (caminhos fechados) em uma rede local ethernet ===
 +
 
 +
A interligação acidental de duas portas de um switch cria um ciclo na rede local (''loop''). Mas isso pode ser feito também de forma intencional, pois em LANs grandes pode ser desejável ter enlaces redundantes, para evitar que a interrupção de um enlace isole parte da rede. A existência de interligações alternativas portanto é algo que pode ocorrer em uma rede local, seja por acidente ou com a finalidade de conferir algum grau de tolerância a falhas na infraestrutura da rede. Um caso em que uma rede possui um ciclo intencionalmente colocado pode ser visto na LAN abaixo:
 +
 
 +
[[imagem:LAN-anel-stp.png]]
 +
 
 +
Apesar de desejável em algumas situações, uma topologia de rede com caminhos fechados, como visto na figura acima, não pode ser instalada sem alguns cuidados. Uma rede como essa trancaria devido a um efeito chamado de tempestade de broadcasts (broadcast storm). Isso acontece porque, ao receber um quadro em broadcast, um switch sempre o retransmite por todas as demais portas. Para que a rede acima funcione como esperado, uma ou mais portas de switches precisarão ser desativadas de forma que o caminho fechado seja removido. Ter que fazer isso manualmente tira o sentido de ter tal configuração para tolerância a falhas (e não impede um "acidente" como aquele descrito no início desta secão), por isso foi criado o protocolo STP (Spanning Tree Protocol, definido na norma IEEE 802.1d) para realizar automaticamente essa tarefa.
 +
 
 +
===VLAN===
 +
 
 +
Os primeiros switches com suporte a VLANs as implementavam de forma legada (i.e. não seguiam um padrão da indústria). Isso impedia que houvesse interoperabilidade entre equipamentos de diferentes fabricantes. Logo a IEEE formou um grupo de trabalho para propor mecanismos padronizados para implantar VLANs, dando origem ao padrão [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/ieee/802.1Q-2005.pdf IEEE 802.1q]. Os fabricantes de equipamentos de rede o adoataram largamente, suplantando outras tecnologias legadas (ex: [http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094665.shtml ISL] e [http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml VTP] da Cisco). Com isso, VLANs IEEE 802.1q podem ser criadas usando switches de fabricantes diferentes.
 +
 
 +
Atualmente, a implantação de VLANs depende de switches com suporte ao padrão IEEE 802.1q. Assim, verifique quais dos switches do laboratório possuem suporte a VLAN:
 +
* D-Link DES-526 [http://www.sj.ifsc.edu.br/~msobral/IER/roteiros/manual-des3526.pdf (manual)]
 +
* Micronet SP 1658B [http://www.sj.ifsc.edu.br/~msobral/IER/roteiros/SP1658B_Manual.pdf (manual)]
 +
* 3Com 3224 [http://www.3com.com/prod/pt_la_amer/detail.jsp?tab=prodspec&sku=3C16479 (especificações)]
 +
 
 +
Uma VLAN é identificada por um número, chamado VID (''VLAN Identifier''), sendo que a VLAN com VID 1 é considerada a ''VLAN default'' (configuração de fábrica). Em um switch com suporte a VLAN IEEE 802.1q, cada porta possui um (ou mais ...) VID, o que define a que VLAN pertence. Assim, para criar uma VLAN, devem-se modificar os VID das portas de switches que dela farão parte. Por exemplo, em uma pequena rede com duas VLANs as portas dos switches podem estar configuradas da seguinte forma:
 +
 
 +
 
 +
Além do VID, a configuração da porta de um switch deve especificar o modo de operação da VLAN:
 +
* '''tagged:''' cada quadro transmitido ou recebido por essa porta deve conter o número da VLAN a que pertence. Esse modo é usado normalmente em portas que interligam switches.
 +
* '''untagged:''' quadros que entram e saem pela porta não possuem informação sobre a VLAN a que pertencem. Usado normalmente para conectar computadores e servidores a switches.
 +
 
 +
 
 +
Esses modos '''tagged''' e '''untagged''' implicam haver uma forma de um quadro Ethernet informar a que VLAN pertence. Isso é usado para restringir a propagação de quadros, fazendo com que sejam recebidos e transmitidos somente por portas de switches que fazem parte de suas VLANs.
 +
 
 +
 
 +
O padrão IEEE 802.1q define, entre outras coisas, uma extensão ao quadro MAC para identificar a que VLAN este pertence. Essa extensão, denominada tag (etiqueta) e mostrada na figura abaixo,  compõe-se de 4 bytes situados entre os campos de endereço de origem e ''Type''. O identificador de VLAN (VID) ocupa 12 bits, o que possibilita portanto 4096 diferentes VLANs.
 +
 
 +
 
 +
[[imagem:Quadro-8021q.png]]
 +
<br>''Quadro ethernet com a TAG IEEE 802.1q''
 +
 
 +
 
 +
A ''tag'' de VLAN, inserida em quadros Ethernet, está diretamente relacionada com os modos '''tagged''' e '''untagged''' de portas de switches. Portas em modo '''tagged''' transmitem e recebem quadros que possuem ''tag'', e portas em modo '''untagged''' recebem e transmitem quadros que não possuem ''tag''. Isso foi pensado para tornar a implantação de VLANs transparente para os usuários finais, pois seus computadores não precisarão saber que existem VLANs (i.e. não precisarão interpretar ''tags''). Por isso equipamentos que não interpretam ''tags'' são denominados ''VLAN-unaware'' (desconhecem VLAN), e equipamentos que recebem e transmitem quadros com ''tag'' são referidos como ''VLAN-aware'' (conhecem VLAN).
 +
 
 +
 
 +
'''Exemplo: simulador de switch com VLAN:'''
 +
<br>Esta animação possibilita simular a configuração de VLANs em um switch, e efetuar testes de transmissão. Experimente criar diferentes VLANs e observar o efeito em transmissões unicast e broadcast (clique na figura para acessar o simulador).
 +
 
 +
[[imagem:Simulador-vlan.png|link=http://www2.rad.com/networks/2006/vlan/demo.htm|Um simulador de VLANs]]
 +
 
 +
===Atividade===
 +
 
 +
Acessar o Switch Catalyst 2960 ([[Arquivo:2960_pbr.pdf | Guia cisco]]) e criar VLANs. Associar algumas interfaces a estas VLANs e posteriormente conectar computadores a elas e fazer testes de conectividades.
 +
 
 +
<br>
 +
'''Alguns comandos úteis no Switch Catalyst 2960:'''
 +
 
 +
<code>
 +
1- Modo privilegiado
 +
>enable
 +
 
 +
2- Modo configuração
 +
# configure terminal
 +
 
 +
3- Criar vlan
 +
(config)#vlan 10
 +
 
 +
4- Coloar interface em vlan
 +
(config)# interface fastethernet 0/6
 +
 
 +
5- Inserir interface na vlan
 +
(config if)# switchport access vlan 10
 +
 
 +
6- Ver vlans
 +
(config)#do show vlan brief
 +
 
 +
7- Remover vlan
 +
(config)#no vlan 10
 +
 
 +
8- Colocar interface em modo trunk
 +
(config-if)# switchport mode trunk
 +
 
 +
9- Permitir determinadas vlans no trunk
 +
(config-if)# switchport trunk allow vlan 15-20
 +
 
 +
10- Verificar configuração da interface
 +
# show interface brief
 +
 
 +
11- Configurar um range de portas
 +
(config)# interface range f0/4 - 5
 +
 
 +
14- Salve sua configuração através do comando abaixo
 +
(config)# copy running-config startup-config
 +
</syntaxhighlight>
 +
 
 +
<br>
 +
'''Links úteis'''
 +
[https://www.linkedin.com/pulse/20140801095018-42689831-comandos-b%C3%A1sicos-para-switches-cisco | Comandos]
 +
[https://fellipenobre.wordpress.com/2010/11/30/comandos-e-configuracoes-cisco-incluindo-configuracao-de-vlan/| Comandos]
 +
 
 +
{{Collapse bottom | Aula 6}}
 +
 
 +
==31/08/16: LAN ==
 +
 
 +
{{Collapse top | Aula 7}}
 +
 
 +
=== Agregação de enlace ===
 +
 
 +
Após implantada é natural que uma rede cresça ou tenha sua topologia alterada. Assim, seu dimensionamento, pensado (espera-se) cuidadosamente durante seu projeto, pode não ser mais o ideal ou mesmo tornar-se inadequado. Isso é particularmente observado nos equipamentos que interligam a rede, tais como switches de núcleo (''core switches'').
 +
 
 +
Num projeto de uma rede de médio ou grande porte, um ou mais switches de núcleo interligam os demais segmentos da rede. Desta forma, por esses switches potencialmente trafega uma grande quantidade de informação. Se os segmentos de rede forem ampliados, a quantidade de tráfego por esses switches possivelmente aumentará. Dependendo do caso, os enlaces entre esses switches e os segmentos de rede poderiam ficar saturados - isto é, não dariam mais conta da intensidade de tráfego que devem transportar. Nesse caso, uma saída poderia ser aumentar as capacidades desses enlaces.
 +
 
 +
As capacidades de enlaces Ethernet de um switch são determinadas pelas tecnologias por ele suportadas. Isso quer dizer que uma porta de switch tem sua capacidade predefinida, e não há como modificá-la. No entanto, uma forma barata de aumentar a capacidade de enlaces Ethernet é agregar duas ou mais portas de switches para que operem como se fossem uma única porta. Essa técnica tem tanta utilidade que o [http://standards.ieee.org/getieee802 IEEE] (órgão que padroniza diversas tecnologias de camada física e enlace de redes), criou para ele uma norma específica chamada [http://tele.sj.ifsc.edu.br/~msobral/IER/802.1AX-2008.pdf IEEE 802.1AX].
 +
 
 +
 
 +
[[imagem:Link-aggregation.png|400px|Exemplo de uma LAN com agregação de enlaces - figura obtida do manual do switch D-Link DES-3526]]
 +
 
 +
 
 +
A norma IEEE 802.1AX define como equipamentos devem implementar a agregação de enlaces (''link aggregation''). Graças a ela, switches de diferentes fabricantes podem interoperar. De acordo com essa norma, a agregação de enlaces implica agrupar portas do switch para operarem como uma única porta, como pode ser visto na figura abaixo. No entanto, cada porta individual mantém suas funções normalmente, com seu MAC trabalhando de forma independente. A agregação de enlaces faz com que os quadros sejam enviados de forma balanceada pelas portas agrupadas, assim distribuindo o tráfego entre elas. O interessante disso é que se uma porta perder comunicação (ex: o cabo for desconectado), o grupo de portas se ajusta para usar somente as portas que possuem comunicação. Assim, além de aumentar a capacidade de enlaces, essa técnica proporciona tolerância a falhas de portas ou enlaces individuais.
 +
 
 +
[[imagem:Link-addregation2.png|Localização da agregação de enlaces na arquitetura de redes IEEE 802 - figura obtida da norma IEEE 802.1AX]]
 +
 
 +
===Atividade===
 +
 
 +
Criar um ''Link Aggregation'' no Switch e configurar os servidores tanto da Operadora como do Galpão para o utilizarem. Nas máquinas é necessário instalar o seguinte pacote:
 +
 
 +
<code>apt-get install -y ifenslave</syntaxhighlight>
 +
 
 +
{{Collapse bottom | Aula 7}}
 +
 
 +
==01/09/16: DHCP ==
 +
 
 +
{{Collapse top | Aula 8}}
 +
 
 +
===DHCP===
 +
 
 +
Ver capítulo 31 da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
 
 +
Toda máquina que for participar de uma rede, deve primeiro, ter um endereço IP. Em uma rede pequena (até 20 máquinas), a tarefa de configurar IPs é relativamente simples. Mas em uma rede grande com centenas de máquinas, esta tarefa de endereçamento torna-se trabalhosa. Para facilitar as coisas, foi criado um mecanismo de endereçamento automático
 +
de IP para máquinas em uma rede TCP/IP: o DHCP (Dynamic Host Configuration Protocol – Protocolo de configuração de máquinas dinâmico). Um servidor DHCP pode facilitar muito a vida do administrador da rede.
 +
 
 +
Dentre as configurações de serviços que podem ser passadas ao ''host'' cliente por dhcp são:
 +
 
 +
#Endereçamento IP, máscara de subrede, Gateway, Servidor(es) DNS,
 +
#nome de host e/ou de domínio;
 +
#Servidores e domínio NIS (autenticação);
 +
#Servidores WINS (para redes Microsoft®);
 +
#Servidores NTP (Hora);
 +
#Imagens de boot para Terminais burros;
 +
 
 +
Como podemos observar, tudo o que é necessário para que uma máquina esteja em condições de ingressar em uma rede e usufruir de tudo o que ela possa oferecer, o DHCP se faz útil para sua configuração automática.
 +
 
 +
=== Protocolo DHCP===
 +
 
 +
Entenda, com a explicação a seguir, como funciona o protocolo DHCP.
 +
 
 +
'''a) DHCP Discover''' – Quando uma máquina é ligada, ela tem um serviço (daemon) cliente do DHCP configurado para localizar o servidor neste momento. Este cliente DHCP envia um pacote UDP com destino à porta 67 do servidor chamado “DHCP Discover”. Este pacote broadcast tem o endereço IP de destino 255.255.255.255 e mac address de destino  ff:ff:ff:ff:ff:ff.
 +
 
 +
[[Arquivo:DHCP-discover.png|600px]]
 +
 
 +
'''b) DHCP Offer''' – O servidor ao receber o referido pacote em sua porta ethernet, irá analisá-lo e, em sua tabela de IPs, reservar um endereço e preparar um pacote de resposta ao cliente solicitante. Este pacote de resposta chama-se DHCP Offer.
 +
 
 +
[[Arquivo:DHCP-offer.png|600px]]
 +
 
 +
O único meio de a estação cliente saber que o pacote DHCP Offer se destina à ela, é através do mac address.
 +
 
 +
'''c) DHCP Request''' – O cliente ao receber o pacote do servidor, decide se aceita a configuração oferecida pois pode receber mais de uma oferta. Em caso positivo, retorna um novo pacote ao servidor, comunicando o aceitamento da oferta. Este pacote chama-se DHCP Request.
 +
 
 +
[[Arquivo:DHCP-request.png|600px]]
 +
 
 +
'''d) DHCP Ack''' – Para finalizar a “conversação” entre cliente e servidor DHCP, este finaliza (efetiva) o aluguel (lease) do endereço ao cliente em sua tabela de IPs, e envia àquele, um pacote DHCP Ack para que ele ajuste suas configurações.
 +
 
 +
[[Arquivo:DHCP-ack.png|600px]]
 +
 
 +
===Atividade===
 +
 
 +
Em nosso experimento será usado o [http://www.isc.org/software/dhcp servidor DHCP desenvolvido pelo ISC]. Para usá-lo devem-se seguir os passos descritos abaixo.
 +
 
 +
# Instalar o serviço: <syntaxhighlight lang=bash>
 +
apt-get install isc-dhcp-server
 +
</syntaxhighlight>
 +
# Configurar em ''/etc/dhcp/dhcpd.conf'', definindo as configurações globais e as redes onde o servidor DHCP irá ofertar endereços. Apague todo o conteúdo do arquivo original. '''X''' = 4, 5, 6 ou 7 a sua escolha, porém deve ser acordado entre os alunos quem usará cada faixa para não haver duplicação. <syntaxhighlight lang=text>
 +
default-lease-time 600;
 +
max-lease-time 7200;
 +
 
 +
subnet 192.168.1.0 netmask 255.255.255.0 {
 +
  #
 +
  # Faixa de IPs disponíveis:
 +
  range 192.168.1.X 192.168.1.Y;
 +
  #
 +
  # Máscara de rede
 +
  option subnet-mask 255.255.255.0;
 +
  #
 +
  #Endereço de 'broadcast'
 +
  option broadcast-address 192.168.1.255;
 +
  #
 +
  #Endereço do roteador
 +
  option routers 192.168.1.1;
 +
  #
 +
  #DNS
 +
  option domain-name-servers 200.135.37.65;
 +
}
 +
</syntaxhighlight>
 +
# Editar a interface que vai atender ao DHCP, no exemplo abaixo eth0, se a sua máquina utilizar uma interface diferente de eth0 faça a devida correção, por exemplo, eth1, eth2...: <syntaxhighlight lang=text>
 +
vi /etc/default/isc-dhcp-server
 +
    INTERFACES="eth0" </syntaxhighlight>
 +
# Iniciar o servidor DHCP: <syntaxhighlight lang=text>
 +
service isc-dhcp-server restart
 +
</syntaxhighlight>
 +
# Verifique o log no servidor e observe a troca de mensagens entre o cliente e o servidor: <syntaxhighlight lang=text>
 +
tail -f /var/log/syslog </syntaxhighlight>
 +
# Intale e use o utilitário o '''dhclient''' de sua máquina virtual com ambiente gráfico como cliente para testes <syntaxhighlight lang=bash>
 +
apt-get install isc-dhcp-client
 +
dhclient -v eth0 </syntaxhighlight>
 +
# Verifique o log no servidor e observe a troca de mensagens entre o cliente e o servidor. <syntaxhighlight lang=text>
 +
tail -f /var/log/syslog </syntaxhighlight>
 +
# Verifique os aluguéis no seu servidor com: <syntaxhighlight lang=text>
 +
cat /var/lib/dhcp/dhcpd.leases </syntaxhighlight>
 +
# Desafio: fixe um IP para algum cliente seu (por exemplo seu vizinho).
 +
 
 +
Maiores detalhes sobre esse servidor DHCP:
 +
* [http://manpages.ubuntu.com/manpages/karmic/en/man8/dhcpd.8.html dhcpd - o servidor DHCP]
 +
* [http://manpages.ubuntu.com/manpages/dapper/en/man5/dhcpd.conf.5.html dhcpd.conf - o arquivo de configuração do DHCP]
 +
* [http://manpages.ubuntu.com/manpages/karmic/en/man5/dhcp-options.5.html Opções do protocolo DHCP]
 +
* [http://manpages.ubuntu.com/manpages/dapper/en/man8/dhclient.8.html dhclient - o cliente DHCP]
 +
 
 +
{{Collapse bottom | Aula 8}}
 +
 
 +
==07/09/16: Feriado ==
 +
 
 +
{{Collapse top | Aula 9}}
 +
 
 +
{{Collapse bottom | Aula 9}}
 +
 
 +
==08/09/16: Configurações diversas ==
 +
 
 +
{{Collapse top | Aula 10}}
 +
 
 +
Criar uma interface lógica em '''/etc/network/interfaces'''. Já configuramos a interface, falta apenas associar um IP a esta interface:
 +
 
 +
<code>#eth0 é manualmente configurada e escrava de bond0
 +
auto eth0
 +
iface eth0 inet manual
 +
bond-master bond0
 +
 
 +
#eth1 é manualmente configurada e escrava de bond0
 +
auto eth1
 +
iface eth1 inet manual
 +
bond-master bond0
 +
 
 +
# bond0 pode ser configurada como qualquer outra interface de rede.
 +
# bond0 é configurada estaticamente.
 +
auto bond0
 +
iface bond0 inet static
 +
address 192.168.1.10
 +
gateway 192.168.1.1
 +
netmask 255.255.255.0
 +
bond-mode 802.3ad
 +
bond-miimon 100
 +
bond-slaves eth0 eth1</syntaxhighlight>
 +
 
 +
Para verificar sua configuração do ''Link Aggregation'' execute o comando abaixo:
 +
 
 +
<code>cat /proc/net/bonding/bond0</syntaxhighlight>
 +
 
 +
Ou:
 +
 
 +
<code>watch cat /proc/net/bonding/bond0</syntaxhighlight>
 +
 
 +
<br>
 +
Para configuração de VLANs é necessário instalar o seguinte pacote:
 +
 
 +
<code>apt-get install -y vlan</syntaxhighlight>
 +
 
 +
Configuração do arquivo '''/etc/network/interfaces''' usando VLANs:
 +
 
 +
<code>
 +
#eth0 é manualmente configurada e escrava de bond0
 +
auto eth0
 +
iface eth0 inet manual
 +
bond-master bond0
 +
 
 +
#eth1 é manualmente configurada e escrava de bond0
 +
auto eth1
 +
iface eth1 inet manual
 +
bond-master bond0
 +
 
 +
#bond0 é manualmente configurada
 +
auto bond0
 +
iface bond0 inet manual
 +
  bond-mode 4
 +
  bond-miimon 100
 +
  bond-lacp-rate 1
 +
  bond-xmit-hash-policy layer3+4
 +
  bond-slaves eth0 eth1
 +
 
 +
#Configuração da interface VLAN bond0.10
 +
auto bond0.10
 +
iface bond0.10 inet static
 +
  address 192.168.10.10
 +
  netmask 255.255.255.0
 +
  gateway 192.168.10.1
 +
 
 +
#Configuração da interface VLAN bond0.20
 +
auto bond0.20
 +
iface bond0.20 inet static
 +
  address 192.168.20.10
 +
  netmask 255.255.255.0
 +
  gateway 192.168.20.1
 +
 
 +
</syntaxhighlight>
 +
 
 +
===NTPdate===
 +
 
 +
#Instale o pacote <code>
 +
apt-get install ntpdate </syntaxhighlight>
 +
#sincronize o sistema <code>
 +
ntpdate ntp.on.br </syntaxhighlight>
 +
#Configure para sincronização automática diariamente fazendo uso do '''Crontab''' -- Agendador de tarefas do Linux. Material para consulta: [[Media:Gerencia_de_redes.pdf|Apostila]], capítulo 19. Ao criar o script abaixo (no diretório daily) o mesmo será executado diariamente pelo '''crontab'''.
 +
##Crie o script. '''vi /etc/cron.daily/ntpdate''' <code>
 +
#!/bin/sh
 +
ntpdate ntp.ubuntu.com </syntaxhighlight>
 +
##Torne o script executável: <code>
 +
chmod 755 /etc/cron.daily/ntpdate </syntaxhighlight>
 +
 
 +
{{Collapse bottom | Aula 10}}
 +
 
 +
==14/09/16: Conclusão das configurações dos Servidores ==
 +
 
 +
{{Collapse top | Aula 11}}
 +
 
 +
{{Collapse bottom | Aula 11}}
 +
 
 +
==15/09/16: Avaliação ==
 +
 
 +
{{Collapse top | Aula 12}}
 +
 
 +
A avaliação desta primeira etapa do projeto consiste em um '''Relatório Individual''' a ser entregue via '''e-mail''' (simara.sonaglio@ifsc.edu.br e etorresini@ifsc.edu.br) em formato '''PDF''' até o '''final da aula'''.
 +
 
 +
<br>
 +
Neste relatório deve constar:
 +
 
 +
#Descrição do cenário completo implementado;
 +
#Descrição das configurações efetuadas tanto na Operadora como no cliente (Galpão);
 +
#Ao descrever as atividades realizadas deve-se destacar quais as camadas (física, enlace ou rede) que estão envolvidas em cada etapa.
 +
 
 +
{{Collapse bottom | Aula 12}}
 +
 
 +
==21/09/16: Conclusão das configurações nos servidores==
 +
 
 +
{{Collapse top | Aula 13}}
 +
 
 +
 
 +
{{Collapse bottom | Aula 13}}
 +
 
 +
==22/09/16: DNS ==
 +
 
 +
{{Collapse top | Aula 14}}
 +
 
 +
Não houve aula. Apenas 2 alunos compareceram.
 +
 
 +
{{Collapse bottom | Aula 14}}
 +
 
 +
==28/09/16: DNS ==
 +
 
 +
{{Collapse top | Aula 15}}
 +
 
 +
Ver capítulo 25 da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
 
 +
'''DNS ''(Domain Name System)''''' é uma base de dados distribuída e hierárquica. Nela se armazenam informações para mapear nomes de máquinas da Internet para endereços IP e vice-versa, informação para roteamento de email, e outros dados utilizados por aplicações da Internet.
 +
 
 +
A informação armazenada no DNS é identificada por nomes de domínio que são organizados em uma árvore, de acordo com as divisões administrativas ou organizacionais. Cada nodo dessa árvore, chamado de ''domínio'', possui um rótulo. O nome de domínio de um nodo é a concatenação de todos os rótulos no caminho do nodo até a raiz. Isto é representado como uma ''string'' de rótulos listados da direita pra esquerda e separados por pontos (ex: ifsc.edu.br, sj.ifsc.edu.br). Um rótulo precisa ser único somente dentro do domínio pai a que pertence.
 +
 
 +
Por exemplo, um nome de domínio de uma máquina no IFSC pode ser ''mail.ifsc.edu.br.'', em que o ''"."'' (último) significa o ''root level domain''  ''.br'' é o domínio do topo da hierarquia (no Brasil feito em [https://registro.br/])ao qual ''mail.sj.ifsc.edu.br'' pertence. ''.ifsc.edu'' é um subdomínio de ''.br.'', e ''mail'' o nome da máquina em questão.
 +
 
 +
Por razões administrativas, o espaço de nomes é dividido em áreas chamadas de ''zonas'', cada uma iniciando em um nodo e se estendendo para baixo para os nodos folhas ou nodos onde outras zonas iniciam. Os dados de cada zona são guardados em um ''servidor de nomes'', que responde a consultas sobre uma zona usando o protocolo DNS.
 +
 
 +
Clientes buscam informação no DNS usando uma biblioteca de resolução (''resolver library''), que envia as consultas para um ou mais servidores de nomes e interpreta as respostas.
 +
 
 +
[[Imagem:dns2.jpg|400px]]
 +
 
 +
(tirado do [http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch01.html#id2546234 manual do BIND9])
 +
 
 +
Ver também o [http://my.safaribooksonline.com/0-596-00158-4/dns4-CHP-2 livro sobre DNS e BIND] da O'Reilly.
 +
 
 +
=== Registros DNS ===
 +
 
 +
Cada rótulo na hierarquia DNS possui um conjunto de informações associadas a si. Essas informações são guardas em registros
 +
de diferentes tipos, dependendo de seu significado e propósito. Cada consulta ao DNS retorna assim as informações do registro pedido associado ao rótulo. Por exemplo, para ver o registro de endereço IP associado a www.ifsc.edu.br pode-se executar esse comando (o resultado teve alguns comentários removidos):
 +
 
 +
<syntaxhighlight lang=bash>
 +
root@freeman:~$ dig sj.ifsc.edu.br mx
 +
 
 +
;; QUESTION SECTION:
 +
;sj.ifsc.edu.br. IN MX
 +
 
 +
;; ANSWER SECTION:
 +
sj.ifsc.edu.br. 3600 IN MX 10 hendrix.sj.ifsc.edu.br.
 +
 
 +
;; AUTHORITY SECTION:
 +
sj.ifsc.edu.br. 3600 IN NS ns.pop-udesc.rct-sc.br.
 +
sj.ifsc.edu.br. 3600 IN NS ns.pop-ufsc.rct-sc.br.
 +
sj.ifsc.edu.br. 3600 IN NS hendrix.sj.ifsc.edu.br.
 +
 
 +
;; ADDITIONAL SECTION:
 +
hendrix.sj.ifsc.edu.br. 3600 IN A 200.135.37.65
 +
ns.pop-ufsc.rct-sc.br. 11513 IN A 200.135.15.3
 +
ns.pop-udesc.rct-sc.br. 37206 IN A 200.135.14.1
 +
</syntaxhighlight>
 +
 
 +
Cada uma das informações acima mostra um determinado registro e seu conteúdo, como descrito na tabela abaixo:
 +
 
 +
{| border="1" cellpadding="2"
 +
!Nome
 +
!TTL
 +
!Classe
 +
!Registro
 +
!Conteúdo do registro
 +
|-
 +
|hendrix.sj.ifsc.edu.br.||3600||IN||A||200.135.37.65
 +
|-
 +
|sj.ifsc.edu.br.||3600||IN||NS||hendrix.sj.ifsc.edu.br.
 +
|-
 +
|sj.ifsc.edu.br.||3600||IN||MX||10 hendrix.sj.ifsc.edu.br.
 +
|}
 +
 
 +
Obs: ''TTL'' (''Time To Live'') é o tempo de validade (em segundos) da informação retornada do servidor de nomes, e ''classe'' é o tipo de endereço (no caso IN equivale a endereços Internet).
 +
 
 +
Os tipos de registros mais comuns são:
 +
 
 +
{| border="1" cellpadding="2"
 +
!Registro
 +
!Descrição
 +
!Exemplo
 +
|-
 +
|A || Endereço (Address) IPv4|| www.sj.ifsc.edu.br. IN A 200.135.37.76
 +
|-
 +
|AAAA || Endereço (Address) IPv6|| www.sj.ifsc.edu.br. IN AAAA 2804:1454:1004:100::76
 +
|-
 +
|NS|| Servidor de nomes (Name Server) || sj.ifsc.edu.br. IN NS hendrix.sj.ifsc.edu.br.
 +
|-
 +
|CNAME || Apelido (Canonical Name) || mail.sj.ifsc.edu.br. IN CNAME hendrix.sj.ifsc.edu.br.
 +
|-
 +
|MX || Roteador de email (Mail Exchanger) || sj.ifsc.edu.br. IN MX 0 mail.sj.ifsc.edu.br.
 +
|-
 +
|SOA || dados sobre o domínio (Start of Authority)||sj.ifsc.edu.br. IN SOA hendrix.sj.ifsc.edu.br. root.sj.ifsc.edu.br. ( 2009120102 1200 120 604800 3600 )
 +
|-
 +
|PTR || Ponteiro para nome (Pointer) || 65.37.135.200.in-addr.arpa. IN PTR hendrix.sj.ifsc.edu.br.
 +
|-
 +
|TXT || Texto genérico (Text) || sj.ifsc.edu.br IN TXT "v=spf1 a mx ~all"
 +
|}
 +
 
 +
===Configuração===
 +
 
 +
1. Instale o servidor DNS em sua máquina:<code>apt-get install bind9. Instalando o Bind.</syntaxhighlight>
 +
2. Como o arquivo principal <tt>/etc/bind/named.conf</tt> faz apenas referências a outros 3 arquivos, o primeiro arquivo de fato a ser modificado é <tt>/etc/bind/named.conf.options</tt>:
 +
options {
 +
    ...
 +
    listen-on-v6 { any; };
 +
    listen-on { any; };
 +
    allow-recursion { 127.0.0.0/8; 10.0.0.16/30; };
 +
    allow-query { any; };
 +
    allow-query-cache { any; };
 +
};
 +
assumindo, assim como nos outros serviços (como [[#DHCP|DHCP]]), que a rede local é <tt>10.0.0.16/30</tt>.
 +
 
 +
3. Enquanto que o arquivo anterior tratava do serviço em linhas gerais, no arquivo <tt>/etc/bind/named.conf.local</tt> será criado o domínio <tt>redes.sj.ifsc.edu.br</tt> e seu reverso:
 +
...
 +
zone "redes.sj.ifsc.edu.br" {
 +
    type master;
 +
    file "/etc/bind/redes.sj.ifsc.edu.br";
 +
};
 +
zone "10.in-addr.arpa" {
 +
    type master;
 +
    file "/etc/bind/10.in-addr.arpa";
 +
};
 +
 
 +
Obs: Deve-se alterar o domínio ''redes.sj.ifsc.edu.br'' pelo domínio que você realmente deseja criar. Este é apenas um exemplo =)
 +
 
 +
4. Próxima etapa: as informações específicas de domínio em <tt>/etc/bind/redes.sj.ifsc.edu.br</tt>:
 +
$TTL 86400
 +
@        IN  SOA  ns1.redes.sj.ifsc.edu.br.  ederson.redes.sj.ifsc.edu.br. (
 +
    2010033101  ; serial
 +
            1d  ; refresh
 +
            1h  ; retry
 +
            1w  ; expire
 +
            1d  ; negative cache ttl
 +
)
 +
@        IN  NS    ns1
 +
ns1      IN  A      10.0.0.1
 +
www      IN  CNAME  ns1
 +
servidor IN  CNAME  ns1
 +
 
 +
* A primeira linha ($TTL) indica o tempo que os registros permanecem no cache do DNS sem atualização e é obrigatória, normalmente é dada em segundos, mas pode ser dada em horas, dias, semanas;
 +
 
 +
* A segunda linha: início da configuração da zona de domínio, contém inicialmente o nome da zona (representado por um sinal de @ o que equivale ao nome da zona de domínio). A sigla IN indicando que se refere a Internet, a sigla SOA indicando que se trata do início do documento, o nome do servidor primário DNS e o e-mail do administrador;
 +
 
 +
* Depois há uma série de números, que obrigatoriamente devem ser informados, esses números indicam respectivamente:
 +
#O número de série da zona de domínio, normalmente iniciando com o ano, seguido do mês, dia e um número sequencial qualquer.
 +
#Período de refresh para servidores slave.
 +
#Período de espera até uma nova tentativa de refresh em caso de erro.
 +
#Período de expiração para servidores slave e
 +
#TTL default para os RR que não possuem valor especificado.
 +
 
 +
* Em seguida informamos os nameservers (NS), no caso ns1;
 +
* Podemos informar também um registro do tipo MX (Mail Exchanger) que se trata do servidor de e-mail no recebimento de e-mails;
 +
* E por último foram feitas as associações entre nomes de máquinas e seus respectivos IP’s.
 +
 
 +
5. Configuração do DNS reverso, arquivo <tt>/etc/bind/10.in-addr.arpa</tt>:
 +
$TTL 86400
 +
@      IN  SOA  ns1.redes.sj.ifsc.edu.br.  ederson.redes.sj.ifsc.edu.br. (
 +
    2010033101  ; serial
 +
            1d  ; refresh
 +
            1h  ; retry
 +
            1w  ; expire
 +
            1d  ; negative cache ttl
 +
)
 +
@      IN  NS    ns1.redes.sj.ifsc.edu.br.
 +
1.0.0 IN  PTR  ns1
 +
6. Utilitário para testar o arquivo que contém o conteúdo de uma zona: named-checkzone nome_do_dominio arquivo_da_zona ==> Aponta possíveis erros no arquivo de configuração.<code> named-checkzone redesX.edu.br /etc/bind/db.redesX</syntaxhighlight>
 +
7. Utilitário para testar a configuração do BIND: <code> named-checkconf -z </syntaxhighlight>
 +
8. Como este serviço pode rodar com má configuração, é interessante (re)iniciar o serviço com um monitor dos registros em uma janela:
 +
<syntaxhighlight lang=bash>
 +
tail -f /var/log/syslog
 +
</syntaxhighlight>
 +
 
 +
9. E em outra janela reiniciar o serviço:
 +
<syntaxhighlight lang=bash>
 +
/etc/init.d/bind9 restart
 +
</syntaxhighlight>
 +
 
 +
===Testes===
 +
 
 +
# Altere o arquivo /etc/resolv.conf<code>
 +
nameserver IP-do-seu-DNS
 +
</syntaxhighlight>
 +
#Utilize o comando ''dig'' para testes diversos ao seu domínio. Abaixo alguns exemplos:<code>dig -x 150.162.12.25            ; consulta ao DNS reverso
 +
dig www.das.ufsc.br              ; consulta ao DNS direto
 +
dig +trace www.polito.it        ; consulta ao DNS direto mostrando toda a árvore de DNS consultados
 +
dig @200.135.37.65 www.polito.it ; consulta ao servidor DNS 200.135.37.65</syntaxhighlight>
 +
#Você também pode fazer testes de ping à maquinas configuradas no seu domínio.
 +
 
 +
{{Collapse bottom | Aula 15}}
 +
 
 +
==29/09/16: DNS ==
 +
 
 +
{{Collapse top | Aula 16}}
 +
 
 +
#Implementação de servidor DNS em máquinas virtuais segundo roteiro da aula passada;
 +
#Implementação de servidor DNS nos servidores da Operadora e Galpão;
 +
#Não deu tempo de fazer o DNS reverso;
 +
 
 +
{{Collapse bottom | Aula 16}}
 +
 
 +
==05/10/16: Conclusão do DNS e LDAP ==
 +
 
 +
{{Collapse top | Aula 17}}
 +
 
 +
===Atividade sobre DNS===
 +
 
 +
#Instalar o servidor DNS na Operadora e no Galpão;
 +
#Fazer as devidas configurações do DNS direto, conforme laboratório executado na Aula 13;
 +
#Configurar o DNS reverso;
 +
#Permitir consulta recursiva apenas das redes internas.
 +
 
 +
 
 +
=== LDAP ===
 +
 
 +
Ver [http://www.openldap.org/doc/admin24/ documentação oficial] do projeto Openldap.
 +
 
 +
LDAP (Lightweight Directory Access Protocol) é um protocolo de acesso a um  serviço de diretório. Um diretório é um banco de dados hierárquico especificamente projetado para busca e navegação, além das funções básicas de localização e atualização. Diretórios costumam possuir informações definidas por atributos, e suportam  mecanismos  de filtragem sofisticados. Sem  implementar as operações complexas encontradas em um banco de dados típico, diretórios  costumam ser ajustados  para prover respostas rápidas a operações de busca ou localização de grande volume. Para aumentar a disponibilidade e robustez, pode haver a replicação e distribuição das informações.
 +
 
 +
Como se vê, um serviço de diretório engloba novos conceitos e elementos em sua composição. Dentre os serviços já estudados, DNS é um tipo de diretório, e possui características como as descritas acima. No entanto, DNS foi criado com o propósito específico de prover um esquema de nomeação de ''hosts'' e serviços na Internet. LDAP, por outro  lado, se apresenta como um diretório de uso geral, onde se podem guardar informações de qualquer natureza, e ser usado para qualquer finalidade.
 +
 
 +
Sendo um diretório, uma base de dados LDAP  contém um conjunto de informações organizadas em árvore. O  exemplo abaixo demonstra uma parte de uma possível árvore LDAP:
 +
 
 +
[[imagem:Ldap_dctree.png]]
 +
 
 +
Dentro do LDAP  as informações são modeladas com objetos que possuem  um  conjunto de atributos. Os diferentes tipos de objetos são definidos por um atributo especial chamado ''objectClass''. Cada ''objectClass'' define que atributos deve possuir um objeto, incluindo atributos obrigatórios e opcionais. A isso se chama ''schema'' da base LDAP, sendo  uma parte importante de sua implantação. Existem  vários ''schemas'' predefinidos e padronizados, que são incluídos nos softwares que implementam o LDAP. Um exemplo de ''objectClass'' segue abaixo:
 +
 
 +
<syntaxhighlight lang=text>
 +
dn: uid=msobral,ou=People,dc=sj,dc=cefetsc,dc=edu,dc=br
 +
objectClass: top
 +
objectClass: inetOrgPerson
 +
objectClass: posixAccount
 +
objectClass: shadowAccount
 +
objectClass: sambaSamAccount
 +
cn: MARCELO MAIA SOBRAL
 +
sn: msobral
 +
uid: msobral
 +
uidNumber: 3100
 +
gidNumber: 500
 +
homeDirectory: /home/professores/msobral
 +
loginShell: /bin/bash
 +
gecos: MARCELO MAIA SOBRAL
 +
description: MARCELO MAIA SOBRAL
 +
sambaLogonTime: 0
 +
sambaLogoffTime: 2147483647
 +
sambaKickoffTime: 2147483647
 +
sambaPwdCanChange: 0
 +
sambaPwdMustChange: 2147483647
 +
displayName: MARCELO MAIA SOBRAL
 +
sambaAcctFlags: [UX]
 +
sambaSID: S-1-5-21-1612827373-3948523564-3779644005-7200
 +
sambaPrimaryGroupSID: S-1-5-21-1612827373-3948523564-3779644005-2001
 +
sambaProfilePath: \\DK\profiles\msobral
 +
sambaHomePath: \\DK\msobral
 +
sambaHomeDrive: H:
 +
</syntaxhighlight>
 +
 
 +
Esse objeto representa uma conta de usuário na rede IFSC. Como se pode ver, uma conta é descrita por diversos atributos, mostrados acima  no formato:
 +
 
 +
nome_do_atributo: valor_do_atributo
 +
 
 +
Os vários atributos ''objectClass'' definem  os ''schemas'' a serem aplicados a esse objeto. No caso, diferentes informações sobre  um usuário para diferentes finalidades (identificação,  conta Unix, conta Samba).
 +
 
 +
Cada objeto na base LDAP possui um localizador único, chamado ''Distinguished Name''(ou simplesmente ''DN''),  e que funciona como o endereço do objeto dentro da base. O ''DN'' pode ser entendido  também como o equivalente  ao caminho do objeto na base, de forma similar ao caminho de um  arquivo dentro de um sistema de arquivos. No objeto acima,  seu ''DN'' aparece  na  primeira linha:
 +
 
 +
dn: uid=msobral,ou=People,dc=sj,dc=cefetsc,dc=edu,dc=br
 +
 
 +
Na terminologia LDAP,  o objeto na base é chamado  de entrada (''entry''). O ''DN'' se compõe do identificador da própria entrada (no exemplo, ''uid=msobral''), concatenado aos identificadores das entradas antecessoras na árvore, até  chegar à raiz (''dc=br'').
 +
 
 +
Outra entrada  de uma  base LDAP segue abaixo:
 +
 
 +
<syntaxhighlight lang=text>
 +
dn: cn=licenciatura,ou=Group,dc=sj,dc=cefetsc,dc=edu,dc=br
 +
objectClass: posixGroup
 +
cn: licenciatura
 +
gidNumber: 1007
 +
memberUid: divina
 +
memberUid: mlucia
 +
memberUid: anasch
 +
</syntaxhighlight>
 +
 
 +
Esse exemplo se refere a um  grupo de usuários. Note a diferença no ''DN'' e no  ''objectClass''. Esse objeto possui assim um conjunto diferente de atributos, comparado ao ''objectClass posixAccount''.
 +
 
 +
A principal aplicação LDAP é o armazenamento de informações administrativas em uma rede. Por exemplo, as contas de usuários, os grupos, apelidos de email (''aliases''), catálogos de endereços de email (''address books''), dentre outras informações. No caso particular de contas e grupos de usuários, o uso do LDAP proporciona  a definição de contas distribuídas, que são válidas em todos os computadores que fazem parte de um domínio  administrativo. Aqui no IFSC se usa o LDAP  com esse propósito.
 +
 
 +
==== Pesquisando na  base LDAP ====
 +
 
 +
Existe o utilitário [http://manpages.ubuntu.com/manpages/karmic/man1/ldapsearch.1.html ldapsearch] para pesquisa na  base LDAP. Para instalá-lo:
 +
 
 +
<syntaxhighlight lang=bash>
 +
sudo apt-get install -y ldap-utils
 +
</syntaxhighlight>
 +
 
 +
Seu uso pode ser complexo, mas uma forma simples de utilizá-lo segue  abaixo:
 +
 
 +
<syntaxhighlight lang=bash>
 +
$ ldapsearch  -x -h IP_servidor_LDAP atributo=valor
 +
</syntaxhighlight>
 +
 
 +
Ex: para obter o objeto do tipo conta de usuário mostrado anteriormente:
 +
 
 +
<syntaxhighlight lang=bash>
 +
$ ldapsearch  -x -h 172.18.0.1 -b dc=sj,dc=cefetsc,dc=edu,dc=br uid=msobral
 +
</syntaxhighlight>
 +
 
 +
... e para obter uma listagem  de todos os grupos na base LDAP:
 +
 
 +
<syntaxhighlight lang=bash>
 +
$ ldapsearch  -x -h 172.18.0.1 -b dc=sj,dc=cefetsc,dc=edu,dc=br "objectClass=posixGroup"
 +
</syntaxhighlight>
 +
 
 +
 
 +
Além disso, também existem ferramentas gráficas para este fim. Um exemplo é o Jxplorer apresentado abaixo:
 +
 
 +
 
 +
[[Imagem:jxplorer.png|600px]]
 +
 
 +
 
 +
Para instalá-lo utilize o comando <code>sudo apt-get install jxplorer</syntaxhighlight>
 +
 
 +
{{Collapse bottom | Aula 17}}
 +
 
 +
==06/10/16: Laboratório sobre LDAP ==
 +
 
 +
{{Collapse top | Aula 18}}
 +
 
 +
O texto abaixo foi obtido de: [https://www.mundotibrasil.com.br/introducao-ao-openldap/ Mundo TI Brasil]
 +
 
 +
 
 +
'''Schema'''
 +
 
 +
Os schemas em LDAP permitem manter a consistência dos dados do Diretório. Uma importante característica é serem extensíveis e assim podemos adicionar mais atributos ou classes dependente das necessidades. Para usar um schema é necessário inclui-lo no arquivo de configuração slapd.conf. Os schemas definem:
 +
 
 +
* Quais as object classes que podem ser inseridas num Diretório;
 +
 
 +
* Quais os atributos de uma determinada object class;
 +
 
 +
* Os valores possíveis para os atributos;
 +
 
 +
Obs.: Se um objeto (entrada), não obedecer às regras do schema, este não pode ser inserido no diretório. Portanto cada entrada estará condicionada a uma hierarquia de armazenamento dos dados na base LDAP. Isto é especificado através do Distinguished Name (DN).
 +
 
 +
 
 +
'''Distinguished Names'''
 +
 
 +
O Distinguished Name (DN) é usado para identificar uma entrada de forma não ambígua num Serviço de Diretório. Os DN ́s são compostos por uma sequência de Relative Distinguished Name (RDN) ́s e cada RDN corresponde a um ramo na DIT, desde a raiz até a entrada a qual o DN faz referência. Um DN é formado por uma série de RDN ́s separados por vírgulas. Por exemplo:
 +
 
 +
<syntaxhighlight lang=text> dn: uid=1050,ou=people,dc=mundotibrasil,dc=com,dc=br </syntaxhighlight>
 +
 
 +
 
 +
'''Atributos'''
 +
 
 +
Os atributos são identificados por um nome ou acrônimo, possuem um tipo e um ou mais valores. O tipo de atributo está associado a uma sintaxe. A sintaxe define que tipo de valor pode ser armazenado no atributo.
 +
 
 +
Alguns exemplos de atributos:
 +
 
 +
<syntaxhighlight lang=text>
 +
Abreviatura            Nome do atributo por extenso
 +
dn                      distinguishedName
 +
cn                      commonName
 +
sn                      surName
 +
gn                      givenName
 +
o                      organizationName
 +
ou                      organizationalUnitName
 +
st                      stateOrProvinceName
 +
l                      localityName
 +
c                      country
 +
dc                      domainComponent
 +
uid                    userID
 +
</syntaxhighlight>
 +
 
 +
 
 +
'''LDIF'''
 +
 
 +
LDAP Data Interchange Format (LDIF) é um arquivo de texto usado para:
 +
 
 +
* Importar dados para o Diretório;
 +
 
 +
* Alterar objetos existentes;
 +
 
 +
* Criar o Backup do Diretório;
 +
 
 +
* A replicação;
 +
 
 +
 
 +
'''Entrada'''
 +
 
 +
A unidade básica de informação armazenada num Diretório é denominada por entrada. As entradas são compostas por um conjunto de atributos referentes a um objecto, sendo organizadas numa estrutura semelhante a uma árvore, isto é, organizada segundo uma DIT (Directory Information Tree). Abaixo, exemplo de uma entrada num arquivo LDIF
 +
 
 +
<syntaxhighlight lang=text>
 +
# Entrada root dn
 +
dn: dc=mundotibrasil,dc=com,dc=br
 +
objectClass: dcObject
 +
objectClass: organization
 +
o: Mundotibrasil
 +
dc=mundotibrasil
 +
 
 +
# Administrador do Diretório
 +
dn: cn=admin,dc=mundotibrasil,dc=com,dc=br
 +
objectClass: simpleSecurityObject
 +
objectClass: organizationalRole
 +
cn: admin
 +
userPassword: topsecret
 +
description: Administrador LDAP
 +
</syntaxhighlight>
 +
 
 +
Obs.: Podem ser adicionadas várias entradas no mesmo arquivo LDIF. O comando para adicionar uma ao mais entradas ao Diretório é o sldapadd/ldapadd que será abordado com mais pormenor mais à frente na parte da implementação.
 +
 
 +
 
 +
'''ObjectClass'''
 +
 
 +
Consiste num conjunto de atributos referentes a uma entrada. Quando uma entrada é definida, são atribuídas um ou mais object classes. Esses object class possuem atributos que podem ser opcionais ou obrigatórios. Existem dois tipos de object classes: structural e auxiliary. Toda a entrada deve ter um object class do tipo structural e pode ter uma ou mais object class auxiliary.
 +
 
 +
Um exemplo retirado do core.schema da object class “person”:
 +
 
 +
<syntaxhighlight lang=text>
 +
objectclass ( 2.5.6.6 NAME ’person’
 +
DESC ’RFC2256: a person’
 +
SUP top STRUCTURAL
 +
MUST ( sn $ cn )
 +
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
 +
</syntaxhighlight>
 +
 
 +
Como podemos ver no exemplo, é obrigatório o uso de sn (surname) ou cn (common name) e os atributos opcionais são: userPassword; telephoneNumber; seeAlso; e description.
 +
 
 +
===Atividade===
 +
 
 +
 
 +
No servidor executar:
 +
 
 +
# Caso ainda não esteja instalado, devemos instalar o servidor LDAP e demais utilitários necessários: <code> apt-get install slapd ldap-utils</syntaxhighlight>
 +
# Caso já esteja instalado executar o comando a seguir e responder as questões solicitadas conforme abaixo: <code> dpkg-reconfigure slapd</syntaxhighlight>
 +
## Omitir a configuração do servidor OpenLDAP? '''Não''';
 +
## Nome do domínio DNS: '''pasteltele.com.br''';
 +
## Nome da organização: '''Pastel Telecom''';
 +
## Senha de administrador: '''definir''';
 +
## "Backend" de base de dados a ser usado: '''recomendado''';
 +
## Você deseja que a base de dados seja removida quando o pacote slapd for expurgado ("purged")? '''Recomendado''';
 +
## Mover a base de dados antiga? '''Recomendado''';
 +
## Permitir o protocolo LDAPv2? '''Não'''.
 +
# Verifique se sua base de dados foi criada: <code> slapcat</syntaxhighlight>
 +
# Vamos criar duas organizationalUnit ('''grupos''' para agrupar grupos de usuários e '''usuarios''' para agrupar usuários). Devemos para isso criar um arquivo LDIF: <code>  vi ou.ldif
 +
 
 +
dn: ou=usuarios,dc=pasteltele,dc=com,dc=br
 +
objectClass: top
 +
objectClass: organizationalUnit
 +
ou: usuarios
 +
 
 +
dn: ou=grupos,dc=pasteltele,dc=com,dc=br
 +
objectClass: top
 +
objectClass: organizationalUnit
 +
ou: grupos </syntaxhighlight>
 +
# Adicionar as informações a base de LDAP: <code> ldapadd -x -D cn=admin,dc=pasteltele,dc=com,dc=br -W -f ou.ldif</syntaxhighlight>
 +
##As opções usadas são: -x Autenticação simples;-D Usuário utilizado para fazer a importação; -W Solicita senha e -f Nome do arquivo LDIF
 +
# Para conferir: <code> slapcat </syntaxhighlight>
 +
# Também podemos acrescentar usuários e grupos para autenticação no Linux. Para isso devemos criar outro arquivo LDIF com as configurações necessárias;
 +
##Antes de mais nada, cada usuário criado deverá ter uma senha. Então primeiramente a criaremos utilizando: <code>slappasswd
 +
New password:
 +
Re-enter new password:
 +
'''{SSHA}Rz5tH7rwkX+SHDLwh84E+eVpuQyya5XK''' (Copiar esta saída)</syntaxhighlight>
 +
## Após isso, podemos criar o arquivo LDIF com as configurações de usuários e grupos: <code>vi users.ldif
 +
 
 +
dn: uid=silvia,ou=usuarios,dc=pasteltele,dc=com,dc=br
 +
uid: silvia
 +
cn: Silvia Sonaglio
 +
objectClass: account
 +
objectClass: posixAccount
 +
objectClass: shadowAccount
 +
shadowLastChange:15376
 +
shadowMax: 99999
 +
shadowWarning: 7
 +
loginShell: /bin/bash
 +
uidNumber: 1007
 +
gidNumber: 1007
 +
homeDirectory: /home/silvia
 +
gecos: Conta Silvia,,,
 +
userPassword: {SSHA}Rz5tH7rwkX+SHDLwh84E+eVpuQyya5XK #colar aquela senha AQUI!!!
 +
 
 +
dn: cn=diretores,ou=grupos,dc=pasteltele,dc=com,dc=br
 +
objectClass: posixGroup
 +
cn: diretores
 +
gidNumber: 1007
 +
memberUid: simara
 +
memberUid: solange
 +
memberUid: silvia
 +
memberUid: schai</syntaxhighlight>
 +
 
 +
Caso seja necessário alguma alteração das entradas criadas, existem comandos que permitem fazer isso. Alguns são listados aqui [http://www.cooperati.com.br/2012/02/14/comandos-de-gerenciamento-do-ldap/ Modificar]
 +
 
 +
 
 +
No cliente executar:
 +
 
 +
#Instalar os pacotes: <code> apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd</syntaxhighlight>
 +
## LDAP server Uniform Resource Identifier:'''ldap://ip-do-servidor'''
 +
## Distinguished name of the search base: '''dc=pasteltele,dc=com,dc=br'''
 +
## LDAP version to use:'''3'''
 +
## '''Não''' para as próximas duas
 +
# Editar: <code>vi /etc/nsswitch.conf
 +
 
 +
passwd:        compat ldap
 +
group:          compat ldap
 +
shadow:        compat ldap</syntaxhighlight>
 +
#Conferir <code> vi /etc/ldap.conf</syntaxhighlight> Já deve estar OK, devido a configuração que fizemos na instalação. Do contrários, deve-se acrescentar as seguintes linhas: <code> base dc=pasteltele,dc=com,dc=br
 +
uri ldap://IP-servidor-LDAP
 +
ldap_version 3</syntaxhighlight>
 +
#Editar o arquivo <code> /etc/pam.d/common-session</syntaxhighlight> e acrescentar as seguintes linhas: <code> session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
 +
session optional pam_ldap.so </syntaxhighlight>
 +
# Para testar se a máquina está obtendo informações do servidor LDAP, utilize os seguinte comandos: <code> # getent passwd
 +
# getent shadow
 +
# getent group</syntaxhighlight>
 +
 
 +
{{Collapse bottom | Aula 18}}
 +
 
 +
==12/10/16: Feriado ==
 +
 
 +
{{Collapse top | Aula 19}}
 +
 
 +
{{Collapse bottom | Aula 19}}
 +
 
 +
==13/10/16: Laboratório sobre LDAP - continuação ==
 +
 
 +
{{Collapse top | Aula 20}}
 +
 
 +
*Aula iniciou após o intervalo. Pré conselho de classe.
 +
 
 +
{{Collapse bottom | Aula 20}}
 +
 
 +
==19/10/16: LDAP - configuração dos servidores ==
 +
 
 +
{{Collapse top | Aula 21}}
 +
 
 +
*Aula iniciou após o intervalo. Palestra MCC.
 +
 
 +
{{Collapse bottom | Aula 21}}
 +
 
 +
==20/10/16: Radius ==
 +
 
 +
{{Collapse top | Aula 22}}
 +
 
 +
===Norma 802.1x===
 +
 
 +
A norma IEEE 802.1x define o controle de acesso em nível de enlace em uma LAN. Um usuário ou equipamento deve primeiro se identificar frente à rede para somente então poder se comunicar. Esse controle de acesso depende de três componentes:
 +
 
 +
# Cliente (supplicant): o equipamento que deseja usar a rede
 +
# Autenticador: o equipamento da rede (switch ou AP) que faz o controle de acesso do cliente.
 +
# Servidor de autenticação: serviço que verifica as credenciais fornecidas pelo cliente  (usualmente RADIUS).
 +
 
 +
 
 +
Na figura abaixo são apresentados os componentes de controle de acesso da norma 802.1x:
 +
 
 +
<br>
 +
[[Imagem: norma802-1x.png | 400px]]
 +
 
 +
<br>
 +
A autenticação se faz com protocolos específicos definidos na norma IEEE 802.1x:
 +
 
 +
* '''EAP (Extensible Authentication Protocol):''' protocolo para intercâmbio de informações de autenticação entre supplicant e servidor de autenticação.
 +
* '''EAPOL (EAP over LAN):''' protocolo para transportar as PDUs EAP entre supplicant e autenticador.
 +
 
 +
[[imagem:Ieee-802x-eap.png]]
 +
 
 +
Existem vários métodos EAP, que correspondem a diferentes mecanismos de autenticação. Assim, o método de autenticação pode ser escolhido de acordo com as necessidades de uma rede.
 +
 
 +
 
 +
===Radius===
 +
 
 +
'''Remote Authentication Dial In User Service''' (RADIUS) é um protocolo de rede que provê de forma centralizada autenticação, autorização e contabilização(Accounting em inglês) no processo de gerenciar computadores que estarão se conectando e usando um determinado serviço de rede. O Radius é um servidor de autenticação standard definido pelos RFC 2865 e 2866. O protocolo RADIUS foi desenvolvido pela Livingston Enterprises, Inc., em 1991 para acesso a servidores de autenticação e protocolos de contabilização, sendo mais tarde introduzido como padrão do Internet Engineering Task Force (IETF).1
 +
 
 +
Por causa do amplo apoio e da forte presença do protocolo RADIUS, ele é muito usado por ISP's nas empresas no gerenciamento de acesso a internet ou intranet, e também é integrado a serviços de e-mail. Algumas dessas redes podem incorporar o protocolo em suas implementações. Como por exemplo modens, DSL, ponto de acesso wireless, VPN's, servidores WEB e etc. 2
 +
 
 +
RADIUS é um protocolo do tipo cliente/servidor que roda como um protocolo da camada de aplicação, usa como apoio o protocolo de transferência UDP. Tanto Servidores de Acesso Remoto(RAS), como servidores de Redes Virtuais Privadas(VPNs) e Servidores de Acesso a Rede(NAS), e todos os gateways que controlam o acesso a rede possuem um componente cliente do protocolo RADIUS que se comunica com o servidor RADIUS. Este servidor normalmente é um processo de background rodando no UNIX ou Microsoft Windows server.3
 +
 
 +
 
 +
O servidor RADIUS possui três funções básicas:
 +
 
 +
1. autenticação de usuários ou dispositivos antes da concessão de acesso a rede.
 +
 
 +
2. autorização de outros usuários ou dispositivos a usar determinados serviços providos pela rede.
 +
 
 +
3. para informar sobre o uso de outros serviços.
 +
 
 +
 
 +
O protocolo RADIUS é resumidamente, um serviço baseado em UDP de pergunta e resposta. As requisições e respostas seguem uma padrão de tabelas (variável=valor).
 +
 
 +
A variável não possui um nome e sim um número. A relação entre este número e seu nome é obtida através de dicionários. Exemplo de dicionário padrão:
 +
 
 +
<syntaxhighlight lang=bash>
 +
ATTRIBUTE      User-Name              1      string
 +
ATTRIBUTE      Password                2      string
 +
ATTRIBUTE      CHAP-Password          3      string
 +
ATTRIBUTE      NAS-IP-Address          4      ipaddr
 +
ATTRIBUTE      NAS-Port-Id            5      intege
 +
ATTRIBUTE      Service-Type            6      integer
 +
ATTRIBUTE      Framed-Protocol        7      integer
 +
ATTRIBUTE      Framed-IP-Address      8      ipaddr
 +
ATTRIBUTE      Framed-IP-Netmask      9      ipaddr
 +
</syntaxhighlight>
 +
 
 +
 
 +
O valor tem um tipo definido no dicionário, e os tipos comuns são: string, inteiro (numero), octeto ou ipaddr (endereço IP: 4 bytes) e tipo estendido (usado para transportar parâmetros personalizados de fabricantes de equipamentos).
 +
 
 +
 
 +
Nas respostas positivas (Access-Accept) os parâmetros de resposta são usados para orientar o NAS de como tratar o cliente.
 +
Numa rede wireless, nos parâmetros podem constar por exemplo, o tempo máximo de conexão permitida, ou a chave de criptografia que deverá ser usada no canal de comunicação entre o cliente e o NAS.
 +
 
 +
 
 +
O serviço RADIUS é amplamente usado em provedores de acesso a internet. No Brasil por exemplo, a Oi (empresa de telecomunicações) costumava usar RADIUS no seu produto ADSL chamado Velox. No sistema Velox, o cliente inicia um pedido de conexão via protocolo PPPoE, um roteador Cisco série 7000 atende o pedido e envia o nome de usuário e senha para o servidor RADIUS (localizado num datacenter no Rio de Janeiro), o RADIUS por sua vez confere as credênciais em seu banco de dados e retorna para o roteador se o cliente pode se conectar ou não. Se a resposta for positiva, o cliente receberá um IP público e poderá navegar, caso a resposta seja negativa, o acesso é negado.
 +
 
 +
 
 +
===Atividade===
 +
 
 +
O Radius pode ser utilizado com um banco de dados LDAP, para que o mesmo busque usuário e senha ou pode-se usar o arquivo de texto '''users''' da mesma forma determinando usuário e senha. Utilizaremos o arquivo de texto '''users''' devido a facilidade de implementar, pois o tempo da aula de hoje será reduzido. Na próxima aula integraremos o Radius com o LDAP.
 +
 
 +
Procedimento no AP (Access Point) '''TP-LINK''':
 +
 
 +
1- Acesse o AP via browser. Após o reset, o IP padrão do AP é 192.168.0.1, usuário admin, senha admin;
 +
 
 +
2- Fazer configurações prévias de rede e SSID;
 +
 
 +
3- Na aba '''Wireless Security''' configurar conforme figura abaixo:
 +
 
 +
 
 +
[[Imagem: Radius-TP-Link.png | 400px]]
 +
 
 +
 
 +
4- Habilite o DHCP Server. Configure uma faixa de IPs para serem entregues dentro da mesma faixa que você usou para configurar a LAN do sou AP. Faça as demais configurações necessárias para o correto funcionamento do DHCP do AP;
 +
 
 +
5- Após fazer todas as configurações, o equipamento deve ser rebootado;
 +
 
 +
6- O acesso direto ao AP será perdido caso tenha sido alterado o seu IP;
 +
 
 +
 
 +
 
 +
Procedimentos que devem serem realizados na máquina do servidor Radius caso ainda não estejam feitos todos os pontos:
 +
 
 +
 
 +
#Configure o servidor para repasse de pacotes: <code>
 +
echo 1 > /proc/sys/net/ipv4/ip_forward </syntaxhighlight>
 +
#Configure o NAT no servidor <code>
 +
iptables -t nat -A POSTROUTING -o interface-saída -j MASQUERADE </syntaxhighlight>
 +
#Instale o pacote: <code>
 +
apt-get update
 +
apt-get install freeradius </syntaxhighlight>
 +
#Após isso é necessário a configuração de dois arquivos. O <tt>/etc/freeradius/clients.conf</tt>, arquivo onde são cadastrados os equipamentos que irão fornecer a conexão de rede para os usuários. Acrescente ao final do arquivo: <code>
 +
client 192.168.X.X {
 +
      ipaddr = 192.168.X.X
 +
      shortname = nome_ficticio_do_AP
 +
      secret  = 1234
 +
      nastype = other
 +
} </syntaxhighlight>
 +
#e <tt>/etc/freeradius/users</tt>, arquivo onde são cadastrados os usuários que podem se conectar a rede. É necessário determinar dentro deste arquivo o '''login''' e '''senha''' que serão utilizados por cada usuário: <code>
 +
login Cleartext-Password :="senha"</syntaxhighlight>
 +
##O login e senha que estão acima serão os respectivos login e senha do usuário para que o mesmo possa se autenticar na rede.
 +
#No arquivo <tt>/etc/freeradius/radiusd.conf</tt> deixe a configuração de logs da seguinte forma:<code>
 +
log {
 +
destination = files
 +
file = ${logdir}/radius.log
 +
syslog_facility = daemon
 +
stripped_names = no
 +
auth = yes
 +
auth_badpass = yes
 +
auth_goodpass = no
 +
}</syntaxhighlight>
 +
#Como root, reinicie o serviço: <code>
 +
service freeradius restart </syntaxhighlight>
 +
#Execute o comando <code> tail -f /var/log/freeradius/radius.log</syntaxhighlight>
 +
#e em outro console (qualquer usuário): <code>
 +
radtest <usuário> <senha> <servidor> <porta> <senha_cliente> </syntaxhighlight>
 +
#Pode-se verificar os logs em '''/var/log/freeradius/radius.log''';
 +
#Teste a autenticação de usuários no AP previamente configurado.
 +
 
 +
{{Collapse bottom | Aula 22}}
 +
 
 +
==26/10/16: Revisão ==
 +
 
 +
{{Collapse top | Aula 23}}
 +
 
 +
* Revisão das configurações feitas até o momento nos servidores;
 +
* Readequação do cronograma.
 +
 
 +
{{Collapse bottom | Aula 23}}
 +
 
 +
==27/10/16: Radius ==
 +
 
 +
{{Collapse top | Aula 24}}
 +
 
 +
*Concluir o Laboratório da Aula 22;
 +
*Replicar  configuração nos servidores da operadora e do galpão.
 +
 
 +
<!--
 +
 
 +
===Integrar o Radius ao LDAP===
 +
 
 +
#intalar o módulo freeradius-ldap: <code> apt-get install freeradius-ldap</syntaxhighlight>
 +
#editar o arquivo: <code>vi /etc/freeradius/modules/ldap
 +
.
 +
.
 +
.
 +
server = "ip_do_LDAP"
 +
basedn = "dc=pasteltele,dc=com,dc=br"
 +
filter = "(uid=%u)"
 +
.
 +
.
 +
.</syntaxhighlight>
 +
#Editar o arquivo /etc/freeradius/sites-enabled/default e em authorize habilitar o LDAP e em authenticate  permitir a autenticação via LDAP;
 +
#Parar o freeradius: <code>/etc/init.d/freeradius stop</syntaxhighlight>
 +
#Rodar o freeradius em modo debug:<code>freeradius -XXX</syntaxhighlight>
 +
#Em outro terminal testar a autenticação com um usuário da base LDAP: <code> radtest login senha ip_servidor_radius 1812 senha_autenticador</syntaxhighlight>
 +
-->
 +
 
 +
{{Collapse bottom | Aula 24}}
 +
 
 +
==02/11/16: Feriado ==
 +
 
 +
{{Collapse top | Aula 25}}
 +
 
 +
{{Collapse bottom | Aula 25}}
 +
 
 +
==03/11/16: Radius com LDAP ==
 +
 
 +
{{Collapse top | Aula 26}}
 +
 
 +
* Responder a [https://limesurvey.ifsc.edu.br/index.php/846789?lang=pt-BR PESQUISA]
 +
 
 +
 
 +
===Integrar o Radius ao LDAP===
 +
 
 +
#intalar o módulo freeradius-ldap: <code> apt-get install freeradius-ldap</syntaxhighlight>
 +
#editar o arquivo: <code>vi /etc/freeradius/modules/ldap
 +
.
 +
.
 +
.
 +
server = "ip_do_LDAP"
 +
basedn = "dc=pasteltele,dc=com,dc=br"
 +
filter = "(uid=%u)"
 +
.
 +
.
 +
.</syntaxhighlight>
 +
#Editar o arquivo /etc/freeradius/sites-enabled/default e em authorize habilitar o LDAP e em authenticate  permitir a autenticação via LDAP;
 +
#Parar o freeradius: <code>/etc/init.d/freeradius stop</syntaxhighlight>
 +
#Rodar o freeradius em modo debug:<code>freeradius -XXX</syntaxhighlight>
 +
#Em outro terminal testar a autenticação com um usuário da base LDAP: <code> radtest login senha ip_servidor_radius 1812 senha_autenticador</syntaxhighlight>
 +
 +
* [https://networkradius.com/doc/FreeRADIUS-Implementation-Ch5.pdf Arquivo sobre métodos de autenticação]
 +
{{Collapse bottom | Aula 26}}
 +
 
 +
==09/11/16: Radius com LDAP ==
 +
{{Collapse top | Aula 27}}
 +
A aula foi conduzida com o apoio do [https://public.etherpad-mozilla.org/p/pji320162 Etherpad da disciplina].
 +
{{Collapse bottom | Aula 27}}
 +
 
 +
==10/11/16: Radius com LDAP e descrição da AVALIAÇÃO 2 ==
 +
{{Collapse top | Aula 28}}
 +
 
 +
===Atividade===
 +
 
 +
Conclusão da atividade da Aula 27 e integração LDAP/Radius no servidor do Galpão.
 +
 
 +
===Avaliação 2===
 +
 
 +
Gerar um relatório em formato PDF a ser entregue em 23/11/2016. Este relatório deve conter a descrição dos itens que foram implementados nesta segunda etapa do projeto nos servidores da Operadora e do Galpão, sendo elas DNS, LDAP, Radius e integração LDAP/RADIUS.
 +
 
 +
Deem uma breve descrição do que é cada um dos serviços implementados (o que é, para que serve, etc) e descreva como eles foram implementados nos servidores.
 +
 
 +
{{Collapse bottom | Aula 28}}
 +
 
 +
==16/11/16: Roteamento==
 +
{{Collapse top | Aula 29}}
 +
 
 +
=== Roteadores e Rotas estáticas ===
 +
 
 +
Ver capítulo 23 da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
 
 +
Um roteador, por definição, é um equipamento com no mínimo duas interfaces de rede que encaminha os pacotes oriundos de uma das interfaces à outra, de acordo com regras pré-definidas. No mercado existem roteadores com uma interface ethernet e uma, duas ou três interfaces WAN (Wide Area Network), normalmente utilizados para conexão da rede local com a internet. Existem também ou chamados modem/router que, além de roteadores, são modens e são comumente usados para conexão ADSL.
 +
 
 +
O roteamento é o processo de encaminhar pacotes entre redes conectadas. Para redes baseadas em TCP/IP, o roteamento faz parte do protocolo IP e é usado em combinação com outros serviços de protocolo de rede para fornecer recursos de encaminhamento entre ''hosts'' localizados em segmentos de rede diferentes em uma rede maior baseada em TCP/IP. Ele é sem dúvida um dos principais serviços (protocolos) da rede TCP/IP, já que é por meio dele que é possível um pacote originado na Brasil chegar rapidamente ao Japão, por exemplo. Uma máquina Linux, com duas ou mais interfaces de rede, também pode funcionar como um roteador. Esta pode ser uma opção interessante se desejarmos criar
 +
sub-redes na instituição e obrigatória na implementação de um firewall transparente.
 +
 
 +
O roteamento estático trabalha com uma tabela que é lida linha-a-linha de tal modo que quando for encontrada uma regra que atenda a "demanda", o sistema pára imediatamente e encaminha a informação por esta regra. Rotas estáticas podem ser adicionadas a uma tabela de roteamento. Nos sistemas operacionais Unix, usa-se o programa [http://manpages.ubuntu.com/manpages/karmic/en/man8/route.8.html route]:
 +
 
 +
<syntaxhighlight lang=bash>
 +
# adiciona uma rota para a rede 10.0.0.0/24 via o gateway 192.168.1.254
 +
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254
 +
 
 +
# adiciona uma rota para a rede 172.18.0.0/16 via a interface PPP pp0
 +
route add -net 172.18.0.0 netmask 255.255.0.0 dev ppp0
 +
 
 +
# adiciona a rota default via o gateway 192.168.1.254
 +
route add default gw 192.168.1.254
 +
 
 +
# adiciona uma rota para o host 192.168.1.101 via o gateway 192.168.1.253
 +
route add -host 192.168.1.101 gw 192.168.1.253
 +
</syntaxhighlight>
 +
 
 +
Também pode ser utilizado o comando ip, conforme exemplo abaixo:
 +
 
 +
<code>
 +
# adiciona a rota default via o gateway 192.168.1.254
 +
ip route add default via 192.168.1.254
 +
 
 +
# adiciona uma rota para a rede 10.10.20.0/24 via o gateway 192.168.1.254
 +
ip route add 10.10.20.0/24 via 192.168.1.254 dev eth1
 +
</syntaxhighlight>
 +
 
 +
Para configurar a máquina para repassar pacotes entre as interfaces (rotear) deve-se setar o bit do ip_forward, com um dos comandos abaixo:
 +
<code> echo 1 > /proc/sys/net/ipv4/ip_forward
 +
sudo sysctl -w net.ipv4.ip_forward=1 </syntaxhighlight>
 +
 
 +
 
 +
A tabela de rotas pode ser consultada com o programa [http://manpages.ubuntu.com/manpages/karmic/en/man8/netstat.8.html netstat]:
 +
 
 +
<syntaxhighlight lang=bash>
 +
root@gerencia:~> netstat -rn
 +
Kernel IP routing table
 +
Destination    Gateway        Genmask        Flags  MSS Window  irtt Iface
 +
10.0.0.0        192.168.1.254  255.255.255.0  U        0 0          0 eth1
 +
192.168.1.101  192.168.1.253  255.255.255.0  UH        0 0          0 eth1
 +
172.18.0.0      0.0.0.0        255.255.0.0    U        0 0          0 ppp0
 +
192.168.1.0    0.0.0.0        255.255.255.0  U        0 0          0 eth1
 +
127.0.0.0      0.0.0.0        255.0.0.0      U        0 0          0 lo
 +
0.0.0.0        192.168.1.254  0.0.0.0        U        0 0          0 eth1
 +
</syntaxhighlight>
 +
 
 +
 
 +
Ou utilizando o comando abaixo:
 +
 
 +
<code> route -n</syntaxhighlight>
 +
 
 +
 
 +
Ou ainda:
 +
 
 +
<code> ip route show</syntaxhighlight>
 +
 
 +
 
 +
Rotas podem ser removidas também com '''''route''''':
 +
 
 +
<syntaxhighlight lang=bash>
 +
# remove a rota para 10.0.0.0/24
 +
route delete -net 10.0.0.0 netmask 255.255.255.0
 +
 
 +
# remove a rota para o host 192.168.1.101
 +
route delete -host 192.168.1.101
 +
</syntaxhighlight>
 +
 
 +
 
 +
Ou com o comando ip, conforme abaixo:
 +
 
 +
<code> ip route del 10.10.20.0/24</syntaxhighlight>
 +
 
 +
=== Coleta e análise de tráfego ===
 +
 
 +
Uma ferramenta básica de análise de tráfego de rede faz a coleta das PDUs por interfaces de rede, revelando as informações nelas contidas. Dois programas bastante populares
 +
para essa finalidade são:
 +
 
 +
* [http://manpages.ubuntu.com/manpages/karmic/en/man8/tcpdump.8.html tcpdump]: um analisador de tráfego em modo texto<syntaxhighlight lang=bash>
 +
lab01:/data/tmp # tcpdump -i dsl0 -ln tcp port 80
 +
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 +
listening on dsl0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
 +
22:14:37.797702 IP 74.125.47.136.80 > 201.35.226.9.21688: F 3660173220:3660173220(0) ack 4262495618 win 122 <nop,nop,timestamp 403588225 348814601>
 +
22:14:37.836844 IP 201.35.226.9.21688 > 74.125.47.136.80: . ack 1 win 54 <nop,nop,timestamp 348874613 403588225>
 +
22:14:38.410477 IP 201.35.226.9.21688 > 74.125.47.136.80: F 1:1(0) ack 1 win 54 <nop,nop,timestamp 348874756 403588225>
 +
22:14:38.770653 IP 74.125.47.136.80 > 201.35.226.9.21688: . ack 2 win 122 <nop,nop,timestamp 403589203 348874756>
 +
22:14:39.906734 IP 64.233.163.83.80 > 201.35.226.9.23018: P 534213879:534214123(244) ack 1779175654 win 133 <nop,nop,timestamp 2294865159 348870211>
 +
</syntaxhighlight>
 +
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/wireshark.1.html wireshark]: o equivalente em modo gráfico (porém com muitas outras funcionalidades)
 +
 
 +
====Simulação====
 +
 
 +
[https://tele.sj.ifsc.edu.br/~msobral/IER/ipkit/ IP Kit]
 +
 
 +
====Atividade====
 +
 
 +
[[Imagem:roteamento.png]]
 +
 
 +
{{Collapse bottom | Aula 29}}
 +
 
 +
==17/11/16: Roteamento e NAT==
 +
{{Collapse top | Aula 30}}
 +
 
 +
===Atividade 1 ===
 +
 
 +
*Concluir o laboratório da Aula 29.
 +
 
 +
 
 +
=== NAT ===
 +
 
 +
A tradução de endereço de rede (NAT - Network Address Translation), proposta pela [http://www.faqs.org/rfcs/rfc1631.html RFC 1631] em 1994, é uma função de rede criada para contornar o problema da escassez de endereços IP. Com a explosão no crescimento da Internet, e o mau aproveitamento dos endereços IP (agravado pelo endereçamento hierárquico), percebeu-se que o esgotamento de endereços poderia ser logo alcançado a não ser que algumas medidas fossem tomadas. Esse problema somente seria eliminado com a reformulação do protocolo IP, de forma a aumentar o espaço de endereços, que resultou na proposta do [http://www.faqs.org/rfcs/rfc2460.html IPv6] em 1998. Porém no início dos anos 1990 a preocupação era mais imediata, e pensou-se em uma solução provisória para possibilitar a expansão da rede porém reduzindo-se a pressão por endereços IP. O NAT surgiu assim como uma técnica com intenção de ser usada temporariamente, enquanto soluções definitivas não se consolidassem. Ainda hoje NAT é usado em larga escala, e somente deve ser deixado de lado quando IPv6 for adotado mundialmente (o que deve demorar).
 +
 
 +
NAT parte de um princípio simples: endereços IP podem ser compartilhados por nós em uma rede. Para isto, usam-se endereços IP ditos não roteáveis (também chamados de inválidos) em uma rede, sendo que um ou mais endereços IP roteáveis (válidos) são usados na interface externa roteador que a liga a Internet. Endereços não roteáveis pertencem às subredes 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12, e correspondem a faixas de endereços que não foram alocados a nenhuma organização e, portanto, não constam das tabelas de roteamento dos roteadores na Internet. A figura abaixo mostra uma visão geral de uma rede em que usa NAT:
 +
 
 +
[[Imagem:Nat-exemplo.png]]
 +
 
 +
Para ser possível compartilhar um endereço IP, NAT faz mapeamentos ''(IP origem, port origem, protocolo transporte)'' -> ''(IP do NAT, port do NAT, , protocolo transporte)'', sendo ''protocolo de transporte'' TCP ou UDP. Assim, para cada par ''(IP origem, port origem TCP ou UDP)'' o NAT deve associar um par ''(IP do NAT, port do NAT TCP ou UDP)'' (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte.
 +
 
 +
==== NAT no Linux ====
 +
 
 +
Ver capítulo 35, seção 4, da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
 
 +
O NAT no Linux se configura com [http://manpages.ubuntu.com/manpages/jaunty/man8/iptables.8.html iptables]. As regras devem ser postas na tabela ''nat'', e aplicadas a chain ''POSTROUTING'', como no seguinte exemplo:
 +
 
 +
<syntaxhighlight lang=bash>
 +
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ;Habilita o NAT
 +
iptables -t nat -L ;Lista as atuais regras da tabela NAT
 +
</syntaxhighlight>
 +
 
 +
A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface ''eth0'' deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo ''MASQUERADE'' foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar.
 +
 
 +
=== Atividade 2===
 +
 
 +
#Desfaça as tabelas de roteamento, exceto as rotas entre matriz e filial e as rotas ''default''.
 +
#Configure as máquinas servidoras para fazer NAT, por exemplo, no servidor do professor da Figura acima:<code>iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE</syntaxhighlight> Lembre-se de adequar a interface (eth0, eth1, ...) para o seu caso e também a rede (10.0.2.0/24, 10.0.3.0/24. ...).
 +
#A partir do cliente faça testes “pingando” para:
 +
##o próprio servidor
 +
##o servidor de colegas
 +
##redes externas
 +
##redes dos colegas.
 +
#Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?
 +
 
 +
 
 +
===DNAT===
 +
 
 +
Anteriormente estudamos NAT com o intuito de mascarar IPs não roteáveis no âmbito da internet para IPs roteáveis no âmbito da internet. Este tipo de NAT é denominado SNAT e é aplicado quando desejamos alterar o endereço de origem de um determinado pacote.
 +
 
 +
Agora iremos estudar uma outra forma de implementar NAT, o DNAT. O DNAT aplica-se quando desejamos alterar o endereço de destino de um pacote. O redirecionamento de portas e o redirecionamento de servidores são um exemplo de DNAT e iremos utilizá-los nesta aula.
 +
 
 +
Para fazermos redirecionamento de porta apenas, devemos executar o seguinte comando: <code> iptables -t nat -A PREROUTING -p tcp -d ip_de_destino_do_pacote --dport porta_de_destino -j REDIRECT --to-port porta_da_aplicação </syntaxhighlight>
 +
 
 +
Para fazermos o redirecionamento de um fluxo entrante para outro servidor, devemos executar o seguinte: <code> iptables -t nat -A PREROUTING -d ip_de_destino_do_pacote -p tcp --dport porta_de_destino -j DNAT --to ip_servidor_interno:porta_servidor_interno </syntaxhighlight>
 +
 
 +
Para vermos as regras de NAT criadas executamos o seguinte comando: <code> iptables -t nat -L</syntaxhighlight>
 +
 
 +
===Atividade 3===
 +
 
 +
#Permitir acesso externo via SSH ao PC da filial e da matriz;
 +
#Permitir acesso externo via SSH ao roteador da filial e da matriz.
 +
 
 +
 
 +
{{Collapse bottom | Aula 30}}
 +
 
 +
==23/11/16: Visita técnica==
 +
{{Collapse top | Aula 31}}
 +
Visita técnica à fábrica da empresa [http://audaces.com Audaces Informática e Automação Industrial Ltda.]
 +
 
 +
Mapa: https://goo.gl/maps/tSPrftTE2Mr
 +
 
 +
'''Horário:''' 19 horas
 +
{{Collapse bottom | Aula 31}}
 +
 
 +
==24/11/16: HTTP e Proxy transparente==
 +
{{Collapse top | Aula 32}}
 +
 
 +
===Proxy Transparente===
 +
 
 +
Ver capítulo 34 da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
[http://wiki.squid-cache.org/SquidFaq/SquidAcl#ACL_elements ACLs]
 +
 
 +
Um proxy é um servidor que age como um intermediário para requisições de clientes solicitando recursos de outros servidores. Podemos resumir o significado de servidor proxy como uma espécie de "cache
 +
comunitário", onde toda página que um usuário visualizar ficará armazenada e quando outro (ou o mesmo) usuário requisitar a mesma página, ela não será trazida da Internet novamente, simplesmente será lida do disco e entregue, economizando tráfego de rede (isso se a página não tiver sido modificada na origem, caso isto tenha acontecido, ela será trazida da Internet novamente).
 +
 
 +
[[Imagem:proxy.png]]
 +
 
 +
 
 +
 
 +
Outra função importante de um proxy pode é fazer o controle de conteúdo, barrando o acesso a certos sites. Este controle de acesso pode ser feito de forma não transparente ou transparente. Na forma não transparente, é configurado o proxy no navegador do cliente. Já no transparente, o trafego HTTP dos usuários é interceptado sem que o cliente tomem conhecimento ou que qualquer configuração tenha sido feita em seus navegadores. Esta última abordagem será utilizada na nossa aula hoje. Logo, teremos um cenário semelhante ao abaixo:
 +
 
 +
 
 +
[[Imagem:proxy-transparente.png]]
 +
 
 +
 
 +
===Proxy transparente com o Squid===
 +
 
 +
# Primeiramente, deve ser montada uma estrutura como a da figura acima. Para isso, pode-se utilizar uma máquina virtual gráfico como cliente e uma máquina virtual servidora como gateway e proxy da rede. Caso os alunos queiram trabalhar em duplas, é possível utilizar mais uma máquina virtual cliente em outro PC e deixar a máquina servidora com 3 interfaces de rede. Assim, pode-se testar o bloquio/desbloqueio de diferentes redes;
 +
#Para instalar o [http://www.squid-cache.org/ Squid]: <syntaxhighlight lang=text>
 +
apt-get install squid </syntaxhighlight>
 +
#Para reiniciar o serviço: <syntaxhighlight lang=text>
 +
service squid3 restart </syntaxhighlight>
 +
#Para Verificar os logs do mesmo: <syntaxhighlight lang=text>
 +
tail /var/log/squid3/cache.log
 +
tail /var/log/squid3/access.log
 +
tail /var/log/upstart/squid3.log </syntaxhighlight>
 +
#As configurações do Squid são feitas em '''/etc/squid3/squid.conf'''. Tanto a configuração do funcionamento geral do Squid quanto as regras de controle de acesso são feitas neste arquivo.
 +
##Um ponto bastante importante é alterar a linha '''http_port 3128''' para '''http_port 3128 transparent'''
 +
#Criar todas as regras desejadas;
 +
#Restartar o serviço sempre que alguma alteração for efetuada;
 +
#Como o nosso proxy será do tipo transparente, devemos desviar o trafego Web no gateway para o proxy. Isso pode ser feito da seguinte forma: <code>
 +
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 </syntaxhighlight>
 +
#Faça testes de bloqueio para algum site de sua preferência. Teste.
 +
#Bloqueie o acesso a sites que contenham a palavra uol. Teste acessando http://www.folha.uol.com.br/ !
 +
#Bloqueie o acesso à rede no horário atual (veja a hora de sua máquina). Teste!
 +
#Ao final dos testes, discuta com sua equipe que bloqueios manter em seu servidor.
 +
 
 +
{{Collapse bottom | Aula 32}}
 +
 
 +
==30/11/16: Proxy com cache e autenticação==
 +
{{Collapse top | Aula 33}}
 +
 
 +
* Ver capítulo 34 da [[Media:Gerencia_de_redes.pdf|apostila]].
 +
* SARG: [http://www.tecmint.com/sarg-squid-analysis-report-generator-and-internet-bandwidth-monitoring-tool/]
 +
* Testar usuários do LDAP: <code> cd /usr/lib/squid3
 +
./basic_ldap_auth -R -b "dc=pasteltele,dc=com,dc=br" -D "cn=admin,dc=pasteltele,dc=com,dc=br" -w 123456789 -f "uid=%s" -h 172.18.19.165
 +
USUARIO SENHA
 +
 
 +
</syntaxhighlight>
 +
 
 +
* basic_ldap_auth [http://www.squid-cache.org/Versions/v3/3.2/manuals/basic_ldap_auth.html]
 +
* Configurar arquivo squid.conf [https://assuntonerd.com.br/2013/02/07/ldap-e-squid/]
 +
 
 +
{{Collapse bottom | Aula 33}}
 +
 
 +
==01/12/16: Filtro de pacotes e descrição da AVALIAÇÃO 3==
 +
{{Collapse top | Aula 34}}
 +
 
 +
* [http://tele.sj.ifsc.edu.br/~msobral/rmu/slides/aula-08.pdf Transparências]
 +
 
 +
=== Uma introdução ao iptables ===
 +
 
 +
O filtro IP do Linux se chama [http://www.netfilter.org/ NetFilter], e suas regras são configuradas por meio do utilitário [https://help.ubuntu.com/community/IptablesHowTo iptables] (ver também seu [http://manpages.ubuntu.com/manpages/natty/man8/iptables.8.html manual]). Com iptables se podem adicionar ou remover regras do Netfilter, além de consultar estatísticas sobre essas regras (ex: contadores dos pacotes e bytes que selecionaram cada regra). As regras são agrupadas em conjuntos denominados ''chains'' ("cadeias"), as quais estão relacionadas com o contexto que cada pacote está sendo analisado. Existem três ''chains'' predefinidas:
 +
* '''INPUT:''' contém as regras a serem aplicadas aos pacotes destinados ao próprio firewall.
 +
* '''OUTPUT:''' contém as regras a serem aplicadas aos pacotes transmitidos pelo próprio firewall.
 +
* '''FORWARD:''' contém as regras a serem aplicadas aos pacotes em trânsito pelo firewall (isto é, pacotes recebidos de uma interface e sendo encaminhados através de outra interface).
 +
 
 +
[[imagem:Iptables-fluxo-filter.png]]
 +
 
 +
 
 +
Assim, usando-se o iptables podem ser adicionadas regras a cada uma dessas ''chains'', dependendo do policiamento de tráfego a ser implantado no firewall.
 +
 
 +
 
 +
[[imagem:Iptables-chains.png|400px]]
 +
 
 +
 
 +
Uma regra deve especificar basicamente três coisas:
 +
* '''Chain''': em que ''chain'' deve ser adicionada.
 +
* '''Seletor:''' informações a serem usadas para selecionar os pacotes a que ela deve ser aplicada.
 +
* '''Alvo (''target''):''' ação a ser executada sobre o pacote que ativar a regra.
 +
 
 +
Por exemplo, a regra abaixo permite o encaminhamento de todos os segmentos TCP destinados a porta 80:
 +
 
 +
 
 +
[[imagem:Iptables-intro.png]]
 +
 
 +
 
 +
Desta forma, a escrita das regras depende de conhecer as opções para definição de seletores, e os possíveis alvos. Algumas opções de uso comum para composição de  seletores são listadas abaixo, sendo que o que está entre colchetes ([]) é opcional. Um seletor pode ser composto por uma combinação dessas opções. Para mais detalhes leia o [http://manpages.ubuntu.com/manpages/natty/man8/iptables.8.html manual].
 +
 
 +
{| border="1" cellpadding="2"
 +
!Opção
 +
!Descrição
 +
!Exemplo
 +
|-
 +
| -s IP[/Mascara] || endereço IP de origem|| -s 200.135.37.64/26
 +
|-
 +
| -d IP[/Mascara] || endereço IP de destino|| -d 8.8.8.8
 +
|-
 +
| -p Protocolo || protocolo de transporte (tcp ou udp) || -p tcp
 +
|-
 +
| --dport numero || Port de destino || --dport 80
 +
|-
 +
| --sport numero || Port de origem || --sport 53
 +
|-
 +
| --syn || Se flag SYN está acesa (somente TCP) ||
 +
|-
 +
| --tcp-flags Flags1 Flags2 || Se somente as flags listadas em Flags1 estão acesas dentre as Flags2 || --tcp-flags SYN,ACK,RST,FIN SYN
 +
|-
 +
| -i interface || Se pacote foi recebido pela interface || -i eth0
 +
|-
 +
| -o interface || Se pacote vai sair pela interface || -o eth1
 +
|-
 +
| -m state --state ESTADO || Identifica o estado do fluxo, o qual pode ser:<br>NEW: início de um fluxo<br>ESTABLISHED: parte de um fluxo estabelecido<br>RELATED: inicia um novo fluxo, porém relacionado com um fluxo existente || -m state --state NEW,RELATED
 +
|}
 +
 
 +
 
 +
Os alvos definem o que fazer com um pacote selecionado por uma regra. As ações possíveis estão listadas abaixo:
 +
 
 +
 
 +
{| border="1" cellpadding="2"
 +
!Alvo
 +
!Descrição
 +
!Exemplo
 +
|-
 +
| ACCEPT || aceita o pacote|| -j ACCEPT
 +
|-
 +
| DROP || descarta o pacocte || -j DROP
 +
|-
 +
| REJECT || rejeita o pacote, devolvendo um código de erro ICMP para seu remetente || -j REJECT
 +
|-
 +
|LOG || registra o pacote no log do sistema || -j LOG
 +
|-
 +
|uma_chain || passa o pacote para ser processado pela chain uma_chain || -j rede_interna
 +
|}
 +
 
 +
 
 +
==== Salvando e restaurando regras do iptables ====
 +
 
 +
Uma vez obtido um conjunto de regras que funcione como desejado, deve-se poder salvá-lo para que possa ser reativado sempre que desejado (ex: no boot). Existem dois utilitários que auxiliam nessa tarefa, sendo eles:
 +
* '''iptables-save''': escreve as regras atuais na saída padrão, que normalmente é redirecionada para um arquivo: <syntaxhighlight lang=bash>
 +
iptables-save > minhas_regras
 +
</syntaxhighlight>
 +
* '''iptables-restore''': instala as regras lidas da entrada padrão, normalmente redirecionada de um arquivo: <syntaxhighlight lang=bash>
 +
iptables-restore < minhas_regras
 +
</syntaxhighlight>
 +
 
 +
====Alterando a política da ''chain''====
 +
 
 +
Para alterar a política padrão de uma ''chain'' utilize o comando abaixo: <code>iptables -P qual-a-chain ALVO</syntaxhighlight>
 +
 
 +
=== Atividade ===
 +
 
 +
Cada aluno deve implantar a seguinte rede virtual em seu computador utilizando máquinas virtuais para serem os PC's e uma máquina Servidor para ser o Firewall:
 +
 
 +
 
 +
[[imagem:lab-fw-pji3.png]]
 +
 
 +
 
 +
Inicie as máquinas virtuais, certificando-se de que suas interfaces de rede estejam em modo bridge e que a máquina servidora possui duas interfaces ativadas. Configure os endereços IP de suas interfaces e também suas rotas ''default''.
 +
 
 +
==== DICA ====
 +
 
 +
É útil ativar o NAT na interface externa do firewall:
 +
 
 +
<syntaxhighlight lang=bash>
 +
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 +
</syntaxhighlight>
 +
 
 +
Comando para tornar uma máquina Linux roteador:
 +
 
 +
<syntaxhighlight lang=bash>
 +
echo 1 > /proc/sys/net/ipv4/ip_forward
 +
</syntaxhighlight>
 +
 
 +
 
 +
====Protocolos e portas a serem utilizadas====
 +
 
 +
'''DNS''': protocolo UDP e porta 53;
 +
 
 +
'''HTTP''': protocolo TCP e porta 80;
 +
 
 +
'''HTTPS''': protocolo TCP e porta 443;
 +
 
 +
'''SSH''': protocolo TCP e porta 22.
 +
 
 +
 
 +
====Itens a serem desenvolvidos====
 +
 
 +
#Configurar a rede adequadamente;
 +
#PC1 e PC2 utilizarão a máquina 192.168.1.101 como DNS;
 +
#PC1 tem acesso a todos os serviços de rede oferecidos pela máquina 192.168.1.101 (estão descritos na figura), porém nada além disso;
 +
#PC2 também tem acesso a qualquer um dos serviços na máquina 192.168.1.101. Além disso, pode fazer acesso Web (HTTP e HTTPS) à qualquer página da internet. No entanto, não acessa nada além disso;
 +
#A máquina firewall não aceita acesso via SSH da rede externa e via rede interna aceita acesso SSH apenas de PC2;
 +
#A máquina firewall não faz acesso Web;
 +
#Desenvolver nos servidores Galpão e Operadora os filtros que acharem pertinentes.
 +
 
 +
===Avaliação 3===
 +
 
 +
Gerar um relatório '''em formato PDF''' a ser entregue em''' 09/12/2016'''. Este relatório deve conter a descrição dos itens que foram implementados nesta terceira etapa do projeto nos servidores da Operadora e do Galpão, sendo elas Roteamento, NAT, Proxy transparente e filtro de pacotes.
 +
 
 +
Deem uma breve descrição do que é cada um dos serviços implementados (o que é, para que serve, etc) e descreva como eles foram implementados nos servidores.
 +
 
 +
{{Collapse bottom | Aula 34}}
 +
 
 +
==07/12/16: Preparação da apresentação final==
 +
{{Collapse top | Aula 35}}
 +
 
 +
{{Collapse bottom | Aula 35}}
 +
 
 +
==08/12/16: Entrevista individual==
 +
 
 +
{{Collapse top | Aula 36}}
 +
 
 +
{{Collapse bottom | Aula 36}}
 +
 
 +
==14/12/16: Apresentação==
 +
 
 +
{{Collapse top | Aula 37}}
 +
 
 +
{{Collapse bottom | Aula 37}}
 +
 
 +
==15/12/16: Recuperação - Prática==
 +
 
 +
{{Collapse top | Aula 38}}
 +
 
 +
Os alunos que não atingirem pelo menos 6,0 em cada avaliação deverão fazer recuperação. A recuperação acontecerá na próxima quinta-feira (15/12). No caso de recuperação dos conteúdos de algum dos relatórios, a recuperação consistirá de uma avaliação prática e abrangerá apenas o conteúdo do relatório em questão. Já para quem precisar recuperar a nota da entrevista, será feita nova entrevista nos moldes da anterior.
 +
 
 +
===Recuperação Avaliação 02===
 +
 
 +
# Criar uma zona de domínio seu-nome.pji3.br;
 +
# Criar um usuário com o seu nome em uma base LDAP que permita tanto autenticação em cliente Linux como via PEAP;
 +
# Configurar um servidor Radius;
 +
# Integrar Radius e LDAP;
 +
# Configurar Access Point;
 +
# Demonstrar o correto funcionamento.
 +
 
 +
===Recuperação Avaliação 03 ===
 +
 
 +
[[Arquivo: Rec-av03.pdf]]
 +
 
 +
===Recuperação Entrevista ===
 +
 
 +
* realizada nova entrevista.
  
==Aula 2 - 11/08/16: Discussão dos itens do projeto ==
+
{{Collapse bottom | Aula 38}}

Edição atual tal como às 15h17min de 19 de dezembro de 2016


Índice

Diário de aula de PJI3 - 2016-2

Dados Importantes

Professora: Simara Sonaglio
Email: simara.sonaglio@ifsc.edu.br

Professor: Ederson Torresini
Email: etorresini@ifsc.edu.br

Encontros: quartas e quintas das 18:50 às 22:10 horas.

Avaliações

Aluno(a) Relatório 1 Relatório 2 Relatório 3 Entrevista Rec-av02 Rec-av03 Rec- Entrevista Conceito final**
Anderson 7,0 6,0 6,0 6,0 6,0
Andreza 7,5 (5,0+7,0*)/2=6,0 6,5 4,0 7,5 7,0
Felipe 9,0 9,5 10,0 10,0 10,0
Giordano 7,0 6,5 7,0 5,0 6,0 7,0
Higino 8,0 8,0 7,5 9,0 8,0
Kleiton 8,0 (5,0+7,0*)/2=6,0 5,0 8,0 3,0 7,0
Leonardo 7,5 2,5 x x 2,0
Mike 8,0 7,0 7,0 9,0 8,0
Ronaldo (5,0+7,0*)/2=6,0 3,0 4,0 1,0 x x x 3,0

(*) Recuperação extra. (**) Somente números inteiros.

Acesso remoto aos servidores

Os servidores da Operadora e do Galpão podem ser acessados remotamente da seguinte forma:

  1. Operadora

ssh pasteltelecom@200.135.37.125

  1. Galpão

ssh root@200.135.37.123 </syntaxhighlight>

A senha deve ser memorizada.

Diário de aulas

10/08/16: Apresentação da disciplina e discussão do projeto a ser desenvolvido

Aula 1


Itens sugeridos pelos alunos para possível implementação no projeto:

  1. Provimento com IP válido via fibra [[1]] [[2]] e redundância via rádio [[3]] [[4]]
  2. Controle de acesso [[5]] [[6]] [[7]]
  3. Wi-Fi [[8]] [[9]]
  4. Combate automatizado a incêndio
  5. Sistema de energia com nobreak
  6. Câmera de vigilância com acesso remoto
  7. Sistema de alarme
  8. Backup de dados
  9. Acesso remoto ao sistema da empresa
  10. Provimento via fibra e par metálico
  11. Dispositivos móveis para controle de estoque
  12. Acesso a visitantes e colaboradores
  13. Servidores de banco de dados
  14. Sensores de alarme e presença
  15. Identificação facial
  16. Serviço de domínio integrado com tag
  17. Portão com portal RFID [[10]]
  18. Servidor de email
  19. Servidor HTTP na nuvem
  20. Servidor DHCP
  21. Servidor DNS com cache
  22. Firewall
  23. Proxy com controle por usuário
  24. PABX IP com URA
  25. Registro na operadora VoIP
  26. Wi-Fi para visitantes e para colaboradores com controle de acesso [[11]] [[12]] [[13]] apostila
  27. Túnel MPLS com serviços integrados, como VoIP
  28. Sistema ERP [[14]] via Web integrado a RFID
  29. Câmeras sem fio
  30. Banco de baterias
  31. CFTV com acesso externo
  32. Notificação de recebimento/entrega de carga no galpão
  33. Rastreamento por GPS da entrega integrado ao site
  34. Antena repetidora GSM

11/08/16: Discussão sobre os itens levantados pelo alunos

Aula 2
Física/Enlace

Provimento com IP válido via fibra e redundância via rádio Wi-Fi
Sistema de energia com nobreak
Provimento via fibra e par metálico
Wi-Fi para visitantes e para colaboradores com controle de acesso
Banco de baterias
Antena repetidora GSM

Rede

Firewall
Túnel MPLS com serviços integrados, como VoIP

Aplicações

Controle de acesso
Combate automatizado a incêndio
Câmera de vigilância com acesso remoto
Sistema de alarme
Backup de dados
Acesso remoto ao sistema da empresa
Dispositivos móveis para controle de estoque
Acesso a visitantes e colaboradores
Servidores de banco de dados
Sensores de alarme e presença
Identificação facial
Serviço de domínio integrado com tag
Portão com portal RFID
Servidor de email
Servidor HTTP na nuvem
Servidor DHCP
Servidor DNS com cache
Proxy com controle por usuário
PABX IP com URA
Registro na operadora VoIP
Sistema ERP via Web integrado a RFID
Câmeras sem fio
CFTV com acesso externo
Notificação de recebimento/entrega de carga no galpão
Rastreamento por GPS da entrega integrado ao site


Levantamento de itens necessários para implantação das soluções propostas:

Provimento via fibra
  1. Conversores ópticos/elétricos em ambos os lados (OLT e ONT)
  2. Fibras


Enlace via rádio
  1. Antenas no cliente e na operadora
  2. Rádios no cliente e na operadora


ADSL
  1. Par metálico
  2. Modens em ambos os lados
  3. DSLAM na operadora
  4. Concentrador de acesso
  5. Servidor RADIUS


Wi-Fi com controle de acesso integrado
e com ampla área de cobertura
  1. APs
  2. Mapeamento de áreas de cobertura de cada AP
  3. Uso de canais diferentes nos APs
  4. Integração servidor RADIUS
  5. Integração com LDAP

17/08/16: Discussão sobre os itens levantados pelo alunos

Aula 3

Memória da aula será acrescentada posteriormente

18/08/16: ADSL

Aula 4


Na infraestrutura ADSL, cabem destacar alguns elementos:

  • modem ADSL:O Modem ADSL que temos em casa também é chamado por outro nome: tranceptor. Os engenheiros na companhia telefônica ou no provedor de internet (ISP) o chamam de ATU-R. Independentemente do nome pelo qual é chamado, ele é o ponto em que os dados do computador ou rede do usuário se conectam com a linha

DSL. O Modem pode operar basicamente de duas formas: como roteador ou como bridge. Quando funciona como roteador, o modem possui recursos internos para estabelecer a conexão lógica com o AC. Quando funciona como bridge, os recursos necessários para o estabelecimento de uma conexão lógica devem estar instalados no computador, como o protocolo PPPoE.

  • splitter: filtro que separa os sinais de voz e de dados. São usados tanto do lado do assinante quanto no DSLAM.
  • DSLAM (DSL Access Multiplexer): multiplexador de acesso ADSL, que recebe as linhas dos assinantes do lado da operadora. Esse componente faz a intermediação entre os assinantes e a rede de dados da operadora. Dentre suas atribuições, destacam-se a modulação do sinal das linhas dos assinantes, a limitação das taxas de downstream e upstream de acordo com o contratado pelos assinantes, e as conversões de protocolos de enlace (quando necessárias) para a rede da operadora.
  • AC (concentrador de acesso): equipamento que concentra as pontas dos enlaces de dados dos assinantes no lado da rede da operadora.

A parte da infraestrutura ADSL dentro da rede de dados da operadora inclui equipamentos DSLAM (muitos deles), um ou mais AC e as redes de comunicação para interligá-los. Note-se que quem dá acesso de fato à Internet é o AC. A figura abaixo ilustra esses componentes.

Dslam-infra.png

O enlace de dados entre o equipamento do assinante e a rede da operadora pode ser feita de diferentes formas. Esse enlace é visto pelo assinante como seu enlace para a Internet - i.e. ele obtém seu endereço IP fornecido pela operadora. Os tipos de enlace de dados ADSL mais usados são:

  • PPPoE (PPP over Ethernet): cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em quadros Ethernet. Esta é a forma mais utilizada para assinantes residenciais.
  • PPPoA (PPP over ATM): cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.
  • EoA (Ethernet over ATM): cria um enlace Ethernet, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.


O enlace PPPoE funciona como se tivesse um link ponto-a-ponto entre o roteador ADSL e um concentrador de acesso (AC). Quer dizer, parece que existe um fio ligando diretamente esses dois equipamentos, apesar de na realidade existir toda uma infraestrutura entre os dois. Isso pode ser visualizado na figura abaixo. Em cada ponta desse link PPPoE há um endereço IP usado pelos respectivos equipamentos.

Enlace-pppoe.png


ATIVIDADE 1


Cada equipe deve estabelecer seu enlace WAN usando ADSL. O modem ADSL deve ser configurado para trabalhar em modo PPPoE. Em seguida, fazer as configurações de rede necessárias em uma máquina virtual e fazer testes diversos afim de testar a conectividade de sua rede.


Configurações ADSL

Cada link ADSL deve ter seu IP dinamicamente configurado, o qual deve ser um IP válido fornecido à equipe pelo provedor (professores).

Os seguintes parâmetros dos modems ADSL devem ter estes valores:

  • Port: 0
  • VPI: 8
  • VCI: 35
  • Encapsulamento: LLC/SNAP
  • Modo: PPPoE
  • User: usuario1
  • Password: senha1
  • NÃO ativar firewall.
  • Ativar NAT


ATIVIDADE 2


Nesta atividade o modem deve ser configurado para operar em modo Bridge e um computador Linux deve ser preparado para user PPPoE.


A seguir há uma explicação sobre como realizar as configurações necessárias para estabelecer o enlace PPPoE em computador Linux:

  1. Instale o software necessário:
    sudo apt-get install pppoe
    
  2. Edite o arquivo /etc/ppp/peers/adsl, que deve ficar com este conteúdo:
    pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452 -C pji"
    noipdefault
    usepeerdns
    defaultroute
    hide-password
    lcp-echo-interval 20
    lcp-echo-failure 3
    connect /bin/true
    noauth
    persist
    mtu 1492
    noaccomp
    user usuario1
    default-asyncmap
    
  3. Edite o arquivo /etc/ppp/chap-secrets e acrescente o seguinte:
    usuario1   *   senha1
    
  4. Ative o enlace PPPoE executando o seguinte comando:
    sudo pppd call adsl
    
  5. Faça testes de conectividade


PPPoE (PPP over Ethernet)


PPPoE define um método para encapsular quadros PPP dentro de quadros Ethernet, e foi definido na RFC 2516. Ele foi criado para facilitar a integração de usuários discados e banda-larga em provedores de acesso (ISP - Internet Service Providers). Além disso, torna mais fácil o controle de acesso, de uso da rede, e contabilização para usuários que a acessam via rede Ethernet. Assim, é possível implantar uma rede em que os usuários, para conseguirem acesso, precisam se autenticar como em um serviço discado. Uma vez obtido o acesso, pode-se também impor limitações de uso de banda de acordo com o usuário. Exemplos de infraestruturas que podem se beneficiar com essa técnica são redes de condomínios e de prédios comerciais. Finalmente, PPPoE é usado como protocolo de enlace em acessos aDSL, ilustrado na figura abaixo.

Pppoe architecture.gif


No PPPoE suas PDUs são encapsuladas em quadros Ethernet, usando o ethertype 8863H (estágio de descoberta) ou 8864H (estágio de sessão). Devido ao cabeçalho PPPoE (6 bytes) combinado ao identificador de protocolo do quadro PPP (2 bytes), a MTU em enlaces PPPoE não pode ser maior que 1492 bytes. O quadro PPP é simplificado, não possuindo as flags delimitadoras e os campos Address, Control e FCS. A PDU PPPoE é mostrada a seguir:


Pppoe-pdu.png


Em um enlace PPPoE um dos nodos é o host (cliente), e o outro o concentrador de acesso (AC, que tem papel de servidor). O estabelecimento do enlace é iniciado pelo host, que procura um AC e em seguida solicita o início do enlace. Esse procedimento é composto por por dois estágios:

  • Descoberta (Discovery): o cliente descobre um concentrador de acesso (AC) para se conectar. Ocorre uma troca de 4 PDUs de controle:
    • PADI (PPPoE Active Discovery Indication): enviado em broadcast pelo cliente para descobrir os AC.
    • PADO (PPPoE Active Discovery Offer): resposta enviada por um ou mais AC, contendo seus identificadores e nomes de serviços disponíveis (no âmbito do PPPoE).
    • PADR (PPPoE Active Discovery Request): enviado pelo cliente para o AC escolhido, requisitando o início de uma sessão.
    • PADS (PPPoE Active Discovery Session-Confirmation): resposta do AC escolhido.

      Pppoe-discovery.png

  • Sessão (Session): nessa etapa são trocados quadros PPP como no estabelecimento de um enlace PPP usual. A sessão pode ser encerrada com a terminação PPP (i.e., via protocolo LCP), ou com a PDU PPPoE PADT (PPPoE Active Discovery Terminate).

ATIVIDADE 3


Na Atividade 3 os alunos deverão, em um único grupo, criar o AC da operadora ADSL que será utilizada no projeto. Para isso devem executar nesta máquina que será o AC os seguintes passos:

  1. Instalar o pacote no AC: sudo apt-get install pppoe</syntaxhighlight>
  2. No AC crie o arquivo /etc/ppp/pppoe-server-options com o seguinte conteúdo:

require-chap noauth login lcp-echo-interval 10 lcp-echo-failure 2 ms-dns 200.135.37.65 netmask 255.255.255.0 noipdefault debug kdebug 4 </syntaxhighlight>

  1. Crie no AC o arquivo /etc/ppp/chap-secrets com o seguinte conteúdo:

usuario1 * senha1 </syntaxhighlight>

  1. Crie o arquivo /etc/ppp/faixa-ip no AC com o seguinte conteúdo:

192.168.10X.10-50</syntaxhighlight>

  1. Ative o servidor PPPoE no AC:

pppoe-server -C pji -L 192.168.10X.200 -p /etc/ppp/faixa-ip -I eth1 </syntaxhighlight>

  1. Em máquinas virtuais, testar estabelecer os enlaces PPPoE conforme foi feito na Atividade 2.
  2. Veja no tcpdump o tráfego que foi criado durante o estabelecimento do enlace. Qual a sequência de quadros PPPoE trocada entre AC e computador?
  3. Observe se foi criada a interface ppp0. Confira o IP que ela está usando, o tipo de encapsulamento e a MTU. Confira também as interfaces ppp no AC, observando as mesmas informações.
  4. Tente usar a rede a partir do computador. Primeiro faça ping no AC, e em seguida tente acessar a rede externa. Foi possível?
  5. Coloque a máquina AC para rotear e mascarar pacotes.

Demais itens configurados

  1. A máquina onde foi feito o AC deve fazer a interface entre a rede da "Operadora" e a Internet. Sendo assim, esta máquina precisa rotear pacotes. O roteamento de pacotes nesta máquina pode ser ativado utilizando-se um dos dois comandos a seguir, sendo a primeira forma persistente e a segunda será perdida no boot: sudo sysctl -w net.ipv4.ip_forward=1

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

  1. Esta máquina também deve fazer NAT para trocar IPs privados por IPs públicos. Isto pode ser feito com o seguinte comando: sudo iptables -t nat -A POSTROUTING -o int_saida -j MASQUERADE </syntaxhighlight>
  2. Para que estas configurações não sejam perdidas quando a máquina for reiniciada, deve-se inserir estes comandos no arquivo /etc/rc.local

24/08/16: ADSL

Aula 5

Continuação da Aula 4.

25/08/16: LAN

Aula 6

O problema dos ciclos (caminhos fechados) em uma rede local ethernet

A interligação acidental de duas portas de um switch cria um ciclo na rede local (loop). Mas isso pode ser feito também de forma intencional, pois em LANs grandes pode ser desejável ter enlaces redundantes, para evitar que a interrupção de um enlace isole parte da rede. A existência de interligações alternativas portanto é algo que pode ocorrer em uma rede local, seja por acidente ou com a finalidade de conferir algum grau de tolerância a falhas na infraestrutura da rede. Um caso em que uma rede possui um ciclo intencionalmente colocado pode ser visto na LAN abaixo:

LAN-anel-stp.png

Apesar de desejável em algumas situações, uma topologia de rede com caminhos fechados, como visto na figura acima, não pode ser instalada sem alguns cuidados. Uma rede como essa trancaria devido a um efeito chamado de tempestade de broadcasts (broadcast storm). Isso acontece porque, ao receber um quadro em broadcast, um switch sempre o retransmite por todas as demais portas. Para que a rede acima funcione como esperado, uma ou mais portas de switches precisarão ser desativadas de forma que o caminho fechado seja removido. Ter que fazer isso manualmente tira o sentido de ter tal configuração para tolerância a falhas (e não impede um "acidente" como aquele descrito no início desta secão), por isso foi criado o protocolo STP (Spanning Tree Protocol, definido na norma IEEE 802.1d) para realizar automaticamente essa tarefa.

VLAN

Os primeiros switches com suporte a VLANs as implementavam de forma legada (i.e. não seguiam um padrão da indústria). Isso impedia que houvesse interoperabilidade entre equipamentos de diferentes fabricantes. Logo a IEEE formou um grupo de trabalho para propor mecanismos padronizados para implantar VLANs, dando origem ao padrão IEEE 802.1q. Os fabricantes de equipamentos de rede o adoataram largamente, suplantando outras tecnologias legadas (ex: ISL e VTP da Cisco). Com isso, VLANs IEEE 802.1q podem ser criadas usando switches de fabricantes diferentes.

Atualmente, a implantação de VLANs depende de switches com suporte ao padrão IEEE 802.1q. Assim, verifique quais dos switches do laboratório possuem suporte a VLAN:

Uma VLAN é identificada por um número, chamado VID (VLAN Identifier), sendo que a VLAN com VID 1 é considerada a VLAN default (configuração de fábrica). Em um switch com suporte a VLAN IEEE 802.1q, cada porta possui um (ou mais ...) VID, o que define a que VLAN pertence. Assim, para criar uma VLAN, devem-se modificar os VID das portas de switches que dela farão parte. Por exemplo, em uma pequena rede com duas VLANs as portas dos switches podem estar configuradas da seguinte forma:


Além do VID, a configuração da porta de um switch deve especificar o modo de operação da VLAN:

  • tagged: cada quadro transmitido ou recebido por essa porta deve conter o número da VLAN a que pertence. Esse modo é usado normalmente em portas que interligam switches.
  • untagged: quadros que entram e saem pela porta não possuem informação sobre a VLAN a que pertencem. Usado normalmente para conectar computadores e servidores a switches.


Esses modos tagged e untagged implicam haver uma forma de um quadro Ethernet informar a que VLAN pertence. Isso é usado para restringir a propagação de quadros, fazendo com que sejam recebidos e transmitidos somente por portas de switches que fazem parte de suas VLANs.


O padrão IEEE 802.1q define, entre outras coisas, uma extensão ao quadro MAC para identificar a que VLAN este pertence. Essa extensão, denominada tag (etiqueta) e mostrada na figura abaixo, compõe-se de 4 bytes situados entre os campos de endereço de origem e Type. O identificador de VLAN (VID) ocupa 12 bits, o que possibilita portanto 4096 diferentes VLANs.


Quadro-8021q.png
Quadro ethernet com a TAG IEEE 802.1q


A tag de VLAN, inserida em quadros Ethernet, está diretamente relacionada com os modos tagged e untagged de portas de switches. Portas em modo tagged transmitem e recebem quadros que possuem tag, e portas em modo untagged recebem e transmitem quadros que não possuem tag. Isso foi pensado para tornar a implantação de VLANs transparente para os usuários finais, pois seus computadores não precisarão saber que existem VLANs (i.e. não precisarão interpretar tags). Por isso equipamentos que não interpretam tags são denominados VLAN-unaware (desconhecem VLAN), e equipamentos que recebem e transmitem quadros com tag são referidos como VLAN-aware (conhecem VLAN).


Exemplo: simulador de switch com VLAN:
Esta animação possibilita simular a configuração de VLANs em um switch, e efetuar testes de transmissão. Experimente criar diferentes VLANs e observar o efeito em transmissões unicast e broadcast (clique na figura para acessar o simulador).

Um simulador de VLANs

Atividade

Acessar o Switch Catalyst 2960 (Arquivo:2960 pbr.pdf) e criar VLANs. Associar algumas interfaces a estas VLANs e posteriormente conectar computadores a elas e fazer testes de conectividades.


Alguns comandos úteis no Switch Catalyst 2960:

1- Modo privilegiado >enable

2- Modo configuração

  1. configure terminal

3- Criar vlan (config)#vlan 10

4- Coloar interface em vlan (config)# interface fastethernet 0/6

5- Inserir interface na vlan (config if)# switchport access vlan 10

6- Ver vlans (config)#do show vlan brief

7- Remover vlan (config)#no vlan 10

8- Colocar interface em modo trunk (config-if)# switchport mode trunk

9- Permitir determinadas vlans no trunk (config-if)# switchport trunk allow vlan 15-20

10- Verificar configuração da interface

  1. show interface brief

11- Configurar um range de portas (config)# interface range f0/4 - 5

14- Salve sua configuração através do comando abaixo (config)# copy running-config startup-config </syntaxhighlight>


Links úteis | Comandos Comandos

31/08/16: LAN

Aula 7

Agregação de enlace

Após implantada é natural que uma rede cresça ou tenha sua topologia alterada. Assim, seu dimensionamento, pensado (espera-se) cuidadosamente durante seu projeto, pode não ser mais o ideal ou mesmo tornar-se inadequado. Isso é particularmente observado nos equipamentos que interligam a rede, tais como switches de núcleo (core switches).

Num projeto de uma rede de médio ou grande porte, um ou mais switches de núcleo interligam os demais segmentos da rede. Desta forma, por esses switches potencialmente trafega uma grande quantidade de informação. Se os segmentos de rede forem ampliados, a quantidade de tráfego por esses switches possivelmente aumentará. Dependendo do caso, os enlaces entre esses switches e os segmentos de rede poderiam ficar saturados - isto é, não dariam mais conta da intensidade de tráfego que devem transportar. Nesse caso, uma saída poderia ser aumentar as capacidades desses enlaces.

As capacidades de enlaces Ethernet de um switch são determinadas pelas tecnologias por ele suportadas. Isso quer dizer que uma porta de switch tem sua capacidade predefinida, e não há como modificá-la. No entanto, uma forma barata de aumentar a capacidade de enlaces Ethernet é agregar duas ou mais portas de switches para que operem como se fossem uma única porta. Essa técnica tem tanta utilidade que o IEEE (órgão que padroniza diversas tecnologias de camada física e enlace de redes), criou para ele uma norma específica chamada IEEE 802.1AX.


Exemplo de uma LAN com agregação de enlaces - figura obtida do manual do switch D-Link DES-3526


A norma IEEE 802.1AX define como equipamentos devem implementar a agregação de enlaces (link aggregation). Graças a ela, switches de diferentes fabricantes podem interoperar. De acordo com essa norma, a agregação de enlaces implica agrupar portas do switch para operarem como uma única porta, como pode ser visto na figura abaixo. No entanto, cada porta individual mantém suas funções normalmente, com seu MAC trabalhando de forma independente. A agregação de enlaces faz com que os quadros sejam enviados de forma balanceada pelas portas agrupadas, assim distribuindo o tráfego entre elas. O interessante disso é que se uma porta perder comunicação (ex: o cabo for desconectado), o grupo de portas se ajusta para usar somente as portas que possuem comunicação. Assim, além de aumentar a capacidade de enlaces, essa técnica proporciona tolerância a falhas de portas ou enlaces individuais.

Localização da agregação de enlaces na arquitetura de redes IEEE 802 - figura obtida da norma IEEE 802.1AX

Atividade

Criar um Link Aggregation no Switch e configurar os servidores tanto da Operadora como do Galpão para o utilizarem. Nas máquinas é necessário instalar o seguinte pacote:

apt-get install -y ifenslave</syntaxhighlight>

01/09/16: DHCP

Aula 8

DHCP

Ver capítulo 31 da apostila.

Toda máquina que for participar de uma rede, deve primeiro, ter um endereço IP. Em uma rede pequena (até 20 máquinas), a tarefa de configurar IPs é relativamente simples. Mas em uma rede grande com centenas de máquinas, esta tarefa de endereçamento torna-se trabalhosa. Para facilitar as coisas, foi criado um mecanismo de endereçamento automático de IP para máquinas em uma rede TCP/IP: o DHCP (Dynamic Host Configuration Protocol – Protocolo de configuração de máquinas dinâmico). Um servidor DHCP pode facilitar muito a vida do administrador da rede.

Dentre as configurações de serviços que podem ser passadas ao host cliente por dhcp são:

  1. Endereçamento IP, máscara de subrede, Gateway, Servidor(es) DNS,
  2. nome de host e/ou de domínio;
  3. Servidores e domínio NIS (autenticação);
  4. Servidores WINS (para redes Microsoft®);
  5. Servidores NTP (Hora);
  6. Imagens de boot para Terminais burros;

Como podemos observar, tudo o que é necessário para que uma máquina esteja em condições de ingressar em uma rede e usufruir de tudo o que ela possa oferecer, o DHCP se faz útil para sua configuração automática.

Protocolo DHCP

Entenda, com a explicação a seguir, como funciona o protocolo DHCP.

a) DHCP Discover – Quando uma máquina é ligada, ela tem um serviço (daemon) cliente do DHCP configurado para localizar o servidor neste momento. Este cliente DHCP envia um pacote UDP com destino à porta 67 do servidor chamado “DHCP Discover”. Este pacote broadcast tem o endereço IP de destino 255.255.255.255 e mac address de destino ff:ff:ff:ff:ff:ff.

DHCP-discover.png

b) DHCP Offer – O servidor ao receber o referido pacote em sua porta ethernet, irá analisá-lo e, em sua tabela de IPs, reservar um endereço e preparar um pacote de resposta ao cliente solicitante. Este pacote de resposta chama-se DHCP Offer.

DHCP-offer.png

O único meio de a estação cliente saber que o pacote DHCP Offer se destina à ela, é através do mac address.

c) DHCP Request – O cliente ao receber o pacote do servidor, decide se aceita a configuração oferecida pois pode receber mais de uma oferta. Em caso positivo, retorna um novo pacote ao servidor, comunicando o aceitamento da oferta. Este pacote chama-se DHCP Request.

DHCP-request.png

d) DHCP Ack – Para finalizar a “conversação” entre cliente e servidor DHCP, este finaliza (efetiva) o aluguel (lease) do endereço ao cliente em sua tabela de IPs, e envia àquele, um pacote DHCP Ack para que ele ajuste suas configurações.

DHCP-ack.png

Atividade

Em nosso experimento será usado o servidor DHCP desenvolvido pelo ISC. Para usá-lo devem-se seguir os passos descritos abaixo.

  1. Instalar o serviço:
    apt-get install isc-dhcp-server
    
  2. Configurar em /etc/dhcp/dhcpd.conf, definindo as configurações globais e as redes onde o servidor DHCP irá ofertar endereços. Apague todo o conteúdo do arquivo original. X = 4, 5, 6 ou 7 a sua escolha, porém deve ser acordado entre os alunos quem usará cada faixa para não haver duplicação.
    default-lease-time 600;
    max-lease-time 7200;
    
    subnet 192.168.1.0 netmask 255.255.255.0 {
       #
       # Faixa de IPs disponíveis:
       range 192.168.1.X 192.168.1.Y;
       #
       # Máscara de rede
       option subnet-mask 255.255.255.0;
       #
       #Endereço de 'broadcast'
       option broadcast-address 192.168.1.255;
       #
       #Endereço do roteador
       option routers 192.168.1.1;
       #
       #DNS
       option domain-name-servers 200.135.37.65;
    }
    
  3. Editar a interface que vai atender ao DHCP, no exemplo abaixo eth0, se a sua máquina utilizar uma interface diferente de eth0 faça a devida correção, por exemplo, eth1, eth2...:
    vi /etc/default/isc-dhcp-server
         INTERFACES="eth0"
    
  4. Iniciar o servidor DHCP:
    service isc-dhcp-server restart
    
  5. Verifique o log no servidor e observe a troca de mensagens entre o cliente e o servidor:
     tail -f /var/log/syslog
    
  6. Intale e use o utilitário o dhclient de sua máquina virtual com ambiente gráfico como cliente para testes
    apt-get install isc-dhcp-client
    dhclient -v eth0
    
  7. Verifique o log no servidor e observe a troca de mensagens entre o cliente e o servidor.
     tail -f /var/log/syslog
    
  8. Verifique os aluguéis no seu servidor com:
    cat /var/lib/dhcp/dhcpd.leases
    
  9. Desafio: fixe um IP para algum cliente seu (por exemplo seu vizinho).

Maiores detalhes sobre esse servidor DHCP:

07/09/16: Feriado

Aula 9

08/09/16: Configurações diversas

Aula 10

Criar uma interface lógica em /etc/network/interfaces. Já configuramos a interface, falta apenas associar um IP a esta interface:

#eth0 é manualmente configurada e escrava de bond0 auto eth0 iface eth0 inet manual bond-master bond0

  1. eth1 é manualmente configurada e escrava de bond0

auto eth1 iface eth1 inet manual bond-master bond0

  1. bond0 pode ser configurada como qualquer outra interface de rede.
  2. bond0 é configurada estaticamente.

auto bond0 iface bond0 inet static address 192.168.1.10 gateway 192.168.1.1 netmask 255.255.255.0 bond-mode 802.3ad bond-miimon 100 bond-slaves eth0 eth1</syntaxhighlight>

Para verificar sua configuração do Link Aggregation execute o comando abaixo:

cat /proc/net/bonding/bond0</syntaxhighlight>

Ou:

watch cat /proc/net/bonding/bond0</syntaxhighlight>


Para configuração de VLANs é necessário instalar o seguinte pacote:

apt-get install -y vlan</syntaxhighlight>

Configuração do arquivo /etc/network/interfaces usando VLANs:

  1. eth0 é manualmente configurada e escrava de bond0

auto eth0 iface eth0 inet manual bond-master bond0

  1. eth1 é manualmente configurada e escrava de bond0

auto eth1 iface eth1 inet manual bond-master bond0

  1. bond0 é manualmente configurada

auto bond0 iface bond0 inet manual

 bond-mode 4
 bond-miimon 100
 bond-lacp-rate 1
 bond-xmit-hash-policy layer3+4
 bond-slaves eth0 eth1
  1. Configuração da interface VLAN bond0.10

auto bond0.10 iface bond0.10 inet static

 address 192.168.10.10
 netmask 255.255.255.0
 gateway 192.168.10.1
  1. Configuração da interface VLAN bond0.20

auto bond0.20 iface bond0.20 inet static

 address 192.168.20.10
 netmask 255.255.255.0
 gateway 192.168.20.1

</syntaxhighlight>

NTPdate

  1. Instale o pacote

apt-get install ntpdate </syntaxhighlight>

  1. sincronize o sistema

ntpdate ntp.on.br </syntaxhighlight>

  1. Configure para sincronização automática diariamente fazendo uso do Crontab -- Agendador de tarefas do Linux. Material para consulta: Apostila, capítulo 19. Ao criar o script abaixo (no diretório daily) o mesmo será executado diariamente pelo crontab.
    1. Crie o script. vi /etc/cron.daily/ntpdate
  2. !/bin/sh

ntpdate ntp.ubuntu.com </syntaxhighlight>

    1. Torne o script executável:

chmod 755 /etc/cron.daily/ntpdate </syntaxhighlight>

14/09/16: Conclusão das configurações dos Servidores

Aula 11

15/09/16: Avaliação

Aula 12

A avaliação desta primeira etapa do projeto consiste em um Relatório Individual a ser entregue via e-mail (simara.sonaglio@ifsc.edu.br e etorresini@ifsc.edu.br) em formato PDF até o final da aula.


Neste relatório deve constar:

  1. Descrição do cenário completo implementado;
  2. Descrição das configurações efetuadas tanto na Operadora como no cliente (Galpão);
  3. Ao descrever as atividades realizadas deve-se destacar quais as camadas (física, enlace ou rede) que estão envolvidas em cada etapa.

21/09/16: Conclusão das configurações nos servidores

Aula 13


22/09/16: DNS

Aula 14

Não houve aula. Apenas 2 alunos compareceram.

28/09/16: DNS

Aula 15

Ver capítulo 25 da apostila.

DNS (Domain Name System) é uma base de dados distribuída e hierárquica. Nela se armazenam informações para mapear nomes de máquinas da Internet para endereços IP e vice-versa, informação para roteamento de email, e outros dados utilizados por aplicações da Internet.

A informação armazenada no DNS é identificada por nomes de domínio que são organizados em uma árvore, de acordo com as divisões administrativas ou organizacionais. Cada nodo dessa árvore, chamado de domínio, possui um rótulo. O nome de domínio de um nodo é a concatenação de todos os rótulos no caminho do nodo até a raiz. Isto é representado como uma string de rótulos listados da direita pra esquerda e separados por pontos (ex: ifsc.edu.br, sj.ifsc.edu.br). Um rótulo precisa ser único somente dentro do domínio pai a que pertence.

Por exemplo, um nome de domínio de uma máquina no IFSC pode ser mail.ifsc.edu.br., em que o "." (último) significa o root level domain .br é o domínio do topo da hierarquia (no Brasil feito em [15])ao qual mail.sj.ifsc.edu.br pertence. .ifsc.edu é um subdomínio de .br., e mail o nome da máquina em questão.

Por razões administrativas, o espaço de nomes é dividido em áreas chamadas de zonas, cada uma iniciando em um nodo e se estendendo para baixo para os nodos folhas ou nodos onde outras zonas iniciam. Os dados de cada zona são guardados em um servidor de nomes, que responde a consultas sobre uma zona usando o protocolo DNS.

Clientes buscam informação no DNS usando uma biblioteca de resolução (resolver library), que envia as consultas para um ou mais servidores de nomes e interpreta as respostas.

Dns2.jpg

(tirado do manual do BIND9)

Ver também o livro sobre DNS e BIND da O'Reilly.

Registros DNS

Cada rótulo na hierarquia DNS possui um conjunto de informações associadas a si. Essas informações são guardas em registros de diferentes tipos, dependendo de seu significado e propósito. Cada consulta ao DNS retorna assim as informações do registro pedido associado ao rótulo. Por exemplo, para ver o registro de endereço IP associado a www.ifsc.edu.br pode-se executar esse comando (o resultado teve alguns comentários removidos):

root@freeman:~$ dig sj.ifsc.edu.br mx

;; QUESTION SECTION:
;sj.ifsc.edu.br.			IN	MX

;; ANSWER SECTION:
sj.ifsc.edu.br.		3600	IN	MX	10 hendrix.sj.ifsc.edu.br.

;; AUTHORITY SECTION:
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-udesc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-ufsc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	hendrix.sj.ifsc.edu.br.

;; ADDITIONAL SECTION:
hendrix.sj.ifsc.edu.br.	3600	IN	A	200.135.37.65
ns.pop-ufsc.rct-sc.br.	11513	IN	A	200.135.15.3
ns.pop-udesc.rct-sc.br.	37206	IN	A	200.135.14.1

Cada uma das informações acima mostra um determinado registro e seu conteúdo, como descrito na tabela abaixo:

Nome TTL Classe Registro Conteúdo do registro
hendrix.sj.ifsc.edu.br. 3600 IN A 200.135.37.65
sj.ifsc.edu.br. 3600 IN NS hendrix.sj.ifsc.edu.br.
sj.ifsc.edu.br. 3600 IN MX 10 hendrix.sj.ifsc.edu.br.

Obs: TTL (Time To Live) é o tempo de validade (em segundos) da informação retornada do servidor de nomes, e classe é o tipo de endereço (no caso IN equivale a endereços Internet).

Os tipos de registros mais comuns são:

Registro Descrição Exemplo
A Endereço (Address) IPv4 www.sj.ifsc.edu.br. IN A 200.135.37.76
AAAA Endereço (Address) IPv6 www.sj.ifsc.edu.br. IN AAAA 2804:1454:1004:100::76
NS Servidor de nomes (Name Server) sj.ifsc.edu.br. IN NS hendrix.sj.ifsc.edu.br.
CNAME Apelido (Canonical Name) mail.sj.ifsc.edu.br. IN CNAME hendrix.sj.ifsc.edu.br.
MX Roteador de email (Mail Exchanger) sj.ifsc.edu.br. IN MX 0 mail.sj.ifsc.edu.br.
SOA dados sobre o domínio (Start of Authority) sj.ifsc.edu.br. IN SOA hendrix.sj.ifsc.edu.br. root.sj.ifsc.edu.br. ( 2009120102 1200 120 604800 3600 )
PTR Ponteiro para nome (Pointer) 65.37.135.200.in-addr.arpa. IN PTR hendrix.sj.ifsc.edu.br.
TXT Texto genérico (Text) sj.ifsc.edu.br IN TXT "v=spf1 a mx ~all"

Configuração

1. Instale o servidor DNS em sua máquina:apt-get install bind9. Instalando o Bind.</syntaxhighlight> 2. Como o arquivo principal /etc/bind/named.conf faz apenas referências a outros 3 arquivos, o primeiro arquivo de fato a ser modificado é /etc/bind/named.conf.options:

options {
   ...
   listen-on-v6 { any; };
   listen-on { any; };
   allow-recursion { 127.0.0.0/8; 10.0.0.16/30; };
   allow-query { any; };
   allow-query-cache { any; };
};

assumindo, assim como nos outros serviços (como DHCP), que a rede local é 10.0.0.16/30.

3. Enquanto que o arquivo anterior tratava do serviço em linhas gerais, no arquivo /etc/bind/named.conf.local será criado o domínio redes.sj.ifsc.edu.br e seu reverso:

...
zone "redes.sj.ifsc.edu.br" {
   type master;
   file "/etc/bind/redes.sj.ifsc.edu.br";
};
zone "10.in-addr.arpa" {
   type master;
   file "/etc/bind/10.in-addr.arpa";
};

Obs: Deve-se alterar o domínio redes.sj.ifsc.edu.br pelo domínio que você realmente deseja criar. Este é apenas um exemplo =)

4. Próxima etapa: as informações específicas de domínio em /etc/bind/redes.sj.ifsc.edu.br:

$TTL 86400
@         IN   SOA   ns1.redes.sj.ifsc.edu.br.   ederson.redes.sj.ifsc.edu.br. (
    2010033101   ; serial
            1d   ; refresh
            1h   ; retry
            1w   ; expire
            1d   ; negative cache ttl
)
@        IN   NS     ns1
ns1      IN   A      10.0.0.1
www      IN   CNAME  ns1
servidor IN   CNAME  ns1
  • A primeira linha ($TTL) indica o tempo que os registros permanecem no cache do DNS sem atualização e é obrigatória, normalmente é dada em segundos, mas pode ser dada em horas, dias, semanas;
  • A segunda linha: início da configuração da zona de domínio, contém inicialmente o nome da zona (representado por um sinal de @ o que equivale ao nome da zona de domínio). A sigla IN indicando que se refere a Internet, a sigla SOA indicando que se trata do início do documento, o nome do servidor primário DNS e o e-mail do administrador;
  • Depois há uma série de números, que obrigatoriamente devem ser informados, esses números indicam respectivamente:
  1. O número de série da zona de domínio, normalmente iniciando com o ano, seguido do mês, dia e um número sequencial qualquer.
  2. Período de refresh para servidores slave.
  3. Período de espera até uma nova tentativa de refresh em caso de erro.
  4. Período de expiração para servidores slave e
  5. TTL default para os RR que não possuem valor especificado.
  • Em seguida informamos os nameservers (NS), no caso ns1;
  • Podemos informar também um registro do tipo MX (Mail Exchanger) que se trata do servidor de e-mail no recebimento de e-mails;
  • E por último foram feitas as associações entre nomes de máquinas e seus respectivos IP’s.

5. Configuração do DNS reverso, arquivo /etc/bind/10.in-addr.arpa:

$TTL 86400
@      IN   SOA   ns1.redes.sj.ifsc.edu.br.   ederson.redes.sj.ifsc.edu.br. (
    2010033101   ; serial
            1d   ; refresh
            1h   ; retry
            1w   ; expire
            1d   ; negative cache ttl
)
@      IN   NS    ns1.redes.sj.ifsc.edu.br.
1.0.0 IN   PTR   ns1

6. Utilitário para testar o arquivo que contém o conteúdo de uma zona: named-checkzone nome_do_dominio arquivo_da_zona ==> Aponta possíveis erros no arquivo de configuração. named-checkzone redesX.edu.br /etc/bind/db.redesX</syntaxhighlight> 7. Utilitário para testar a configuração do BIND: named-checkconf -z </syntaxhighlight> 8. Como este serviço pode rodar com má configuração, é interessante (re)iniciar o serviço com um monitor dos registros em uma janela:

tail -f /var/log/syslog

9. E em outra janela reiniciar o serviço:

/etc/init.d/bind9 restart

Testes

  1. Altere o arquivo /etc/resolv.conf

nameserver IP-do-seu-DNS </syntaxhighlight>

  1. Utilize o comando dig para testes diversos ao seu domínio. Abaixo alguns exemplos:dig -x 150.162.12.25  ; consulta ao DNS reverso

dig www.das.ufsc.br  ; consulta ao DNS direto dig +trace www.polito.it  ; consulta ao DNS direto mostrando toda a árvore de DNS consultados dig @200.135.37.65 www.polito.it ; consulta ao servidor DNS 200.135.37.65</syntaxhighlight>

  1. Você também pode fazer testes de ping à maquinas configuradas no seu domínio.

29/09/16: DNS

Aula 16
  1. Implementação de servidor DNS em máquinas virtuais segundo roteiro da aula passada;
  2. Implementação de servidor DNS nos servidores da Operadora e Galpão;
  3. Não deu tempo de fazer o DNS reverso;

05/10/16: Conclusão do DNS e LDAP

Aula 17

Atividade sobre DNS

  1. Instalar o servidor DNS na Operadora e no Galpão;
  2. Fazer as devidas configurações do DNS direto, conforme laboratório executado na Aula 13;
  3. Configurar o DNS reverso;
  4. Permitir consulta recursiva apenas das redes internas.


LDAP

Ver documentação oficial do projeto Openldap.

LDAP (Lightweight Directory Access Protocol) é um protocolo de acesso a um serviço de diretório. Um diretório é um banco de dados hierárquico especificamente projetado para busca e navegação, além das funções básicas de localização e atualização. Diretórios costumam possuir informações definidas por atributos, e suportam mecanismos de filtragem sofisticados. Sem implementar as operações complexas encontradas em um banco de dados típico, diretórios costumam ser ajustados para prover respostas rápidas a operações de busca ou localização de grande volume. Para aumentar a disponibilidade e robustez, pode haver a replicação e distribuição das informações.

Como se vê, um serviço de diretório engloba novos conceitos e elementos em sua composição. Dentre os serviços já estudados, DNS é um tipo de diretório, e possui características como as descritas acima. No entanto, DNS foi criado com o propósito específico de prover um esquema de nomeação de hosts e serviços na Internet. LDAP, por outro lado, se apresenta como um diretório de uso geral, onde se podem guardar informações de qualquer natureza, e ser usado para qualquer finalidade.

Sendo um diretório, uma base de dados LDAP contém um conjunto de informações organizadas em árvore. O exemplo abaixo demonstra uma parte de uma possível árvore LDAP:

Ldap dctree.png

Dentro do LDAP as informações são modeladas com objetos que possuem um conjunto de atributos. Os diferentes tipos de objetos são definidos por um atributo especial chamado objectClass. Cada objectClass define que atributos deve possuir um objeto, incluindo atributos obrigatórios e opcionais. A isso se chama schema da base LDAP, sendo uma parte importante de sua implantação. Existem vários schemas predefinidos e padronizados, que são incluídos nos softwares que implementam o LDAP. Um exemplo de objectClass segue abaixo:

dn: uid=msobral,ou=People,dc=sj,dc=cefetsc,dc=edu,dc=br
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: MARCELO MAIA SOBRAL
sn: msobral
uid: msobral
uidNumber: 3100
gidNumber: 500
homeDirectory: /home/professores/msobral
loginShell: /bin/bash
gecos: MARCELO MAIA SOBRAL
description: MARCELO MAIA SOBRAL
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
displayName: MARCELO MAIA SOBRAL
sambaAcctFlags: [UX]
sambaSID: S-1-5-21-1612827373-3948523564-3779644005-7200
sambaPrimaryGroupSID: S-1-5-21-1612827373-3948523564-3779644005-2001
sambaProfilePath: \\DK\profiles\msobral
sambaHomePath: \\DK\msobral
sambaHomeDrive: H:

Esse objeto representa uma conta de usuário na rede IFSC. Como se pode ver, uma conta é descrita por diversos atributos, mostrados acima no formato:

nome_do_atributo: valor_do_atributo

Os vários atributos objectClass definem os schemas a serem aplicados a esse objeto. No caso, diferentes informações sobre um usuário para diferentes finalidades (identificação, conta Unix, conta Samba).

Cada objeto na base LDAP possui um localizador único, chamado Distinguished Name(ou simplesmente DN), e que funciona como o endereço do objeto dentro da base. O DN pode ser entendido também como o equivalente ao caminho do objeto na base, de forma similar ao caminho de um arquivo dentro de um sistema de arquivos. No objeto acima, seu DN aparece na primeira linha:

dn: uid=msobral,ou=People,dc=sj,dc=cefetsc,dc=edu,dc=br

Na terminologia LDAP, o objeto na base é chamado de entrada (entry). O DN se compõe do identificador da própria entrada (no exemplo, uid=msobral), concatenado aos identificadores das entradas antecessoras na árvore, até chegar à raiz (dc=br).

Outra entrada de uma base LDAP segue abaixo:

dn: cn=licenciatura,ou=Group,dc=sj,dc=cefetsc,dc=edu,dc=br
objectClass: posixGroup
cn: licenciatura
gidNumber: 1007
memberUid: divina
memberUid: mlucia
memberUid: anasch

Esse exemplo se refere a um grupo de usuários. Note a diferença no DN e no objectClass. Esse objeto possui assim um conjunto diferente de atributos, comparado ao objectClass posixAccount.

A principal aplicação LDAP é o armazenamento de informações administrativas em uma rede. Por exemplo, as contas de usuários, os grupos, apelidos de email (aliases), catálogos de endereços de email (address books), dentre outras informações. No caso particular de contas e grupos de usuários, o uso do LDAP proporciona a definição de contas distribuídas, que são válidas em todos os computadores que fazem parte de um domínio administrativo. Aqui no IFSC se usa o LDAP com esse propósito.

Pesquisando na base LDAP

Existe o utilitário ldapsearch para pesquisa na base LDAP. Para instalá-lo:

sudo apt-get install -y ldap-utils

Seu uso pode ser complexo, mas uma forma simples de utilizá-lo segue abaixo:

$ ldapsearch  -x -h IP_servidor_LDAP atributo=valor

Ex: para obter o objeto do tipo conta de usuário mostrado anteriormente:

$ ldapsearch  -x -h 172.18.0.1 -b dc=sj,dc=cefetsc,dc=edu,dc=br uid=msobral

... e para obter uma listagem de todos os grupos na base LDAP:

$ ldapsearch  -x -h 172.18.0.1 -b dc=sj,dc=cefetsc,dc=edu,dc=br "objectClass=posixGroup"


Além disso, também existem ferramentas gráficas para este fim. Um exemplo é o Jxplorer apresentado abaixo:


Jxplorer.png


Para instalá-lo utilize o comando sudo apt-get install jxplorer</syntaxhighlight>

06/10/16: Laboratório sobre LDAP

Aula 18

O texto abaixo foi obtido de: Mundo TI Brasil


Schema

Os schemas em LDAP permitem manter a consistência dos dados do Diretório. Uma importante característica é serem extensíveis e assim podemos adicionar mais atributos ou classes dependente das necessidades. Para usar um schema é necessário inclui-lo no arquivo de configuração slapd.conf. Os schemas definem:

  • Quais as object classes que podem ser inseridas num Diretório;
  • Quais os atributos de uma determinada object class;
  • Os valores possíveis para os atributos;

Obs.: Se um objeto (entrada), não obedecer às regras do schema, este não pode ser inserido no diretório. Portanto cada entrada estará condicionada a uma hierarquia de armazenamento dos dados na base LDAP. Isto é especificado através do Distinguished Name (DN).


Distinguished Names

O Distinguished Name (DN) é usado para identificar uma entrada de forma não ambígua num Serviço de Diretório. Os DN ́s são compostos por uma sequência de Relative Distinguished Name (RDN) ́s e cada RDN corresponde a um ramo na DIT, desde a raiz até a entrada a qual o DN faz referência. Um DN é formado por uma série de RDN ́s separados por vírgulas. Por exemplo:

 dn: uid=1050,ou=people,dc=mundotibrasil,dc=com,dc=br


Atributos

Os atributos são identificados por um nome ou acrônimo, possuem um tipo e um ou mais valores. O tipo de atributo está associado a uma sintaxe. A sintaxe define que tipo de valor pode ser armazenado no atributo.

Alguns exemplos de atributos:

Abreviatura             Nome do atributo por extenso
dn                      distinguishedName
cn                      commonName
sn                      surName
gn                      givenName
o                       organizationName
ou                      organizationalUnitName
st                      stateOrProvinceName
l                       localityName
c                       country
dc                      domainComponent
uid                     userID


LDIF

LDAP Data Interchange Format (LDIF) é um arquivo de texto usado para:

  • Importar dados para o Diretório;
  • Alterar objetos existentes;
  • Criar o Backup do Diretório;
  • A replicação;


Entrada

A unidade básica de informação armazenada num Diretório é denominada por entrada. As entradas são compostas por um conjunto de atributos referentes a um objecto, sendo organizadas numa estrutura semelhante a uma árvore, isto é, organizada segundo uma DIT (Directory Information Tree). Abaixo, exemplo de uma entrada num arquivo LDIF

# Entrada root dn
dn: dc=mundotibrasil,dc=com,dc=br
objectClass: dcObject
objectClass: organization
o: Mundotibrasil
dc=mundotibrasil

# Administrador do Diretório
dn: cn=admin,dc=mundotibrasil,dc=com,dc=br
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: topsecret
description: Administrador LDAP

Obs.: Podem ser adicionadas várias entradas no mesmo arquivo LDIF. O comando para adicionar uma ao mais entradas ao Diretório é o sldapadd/ldapadd que será abordado com mais pormenor mais à frente na parte da implementação.


ObjectClass

Consiste num conjunto de atributos referentes a uma entrada. Quando uma entrada é definida, são atribuídas um ou mais object classes. Esses object class possuem atributos que podem ser opcionais ou obrigatórios. Existem dois tipos de object classes: structural e auxiliary. Toda a entrada deve ter um object class do tipo structural e pode ter uma ou mais object class auxiliary.

Um exemplo retirado do core.schema da object class “person”:

objectclass ( 2.5.6.6 NAME ’person’
DESC ’RFC2256: a person’
SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

Como podemos ver no exemplo, é obrigatório o uso de sn (surname) ou cn (common name) e os atributos opcionais são: userPassword; telephoneNumber; seeAlso; e description.

Atividade

No servidor executar:

  1. Caso ainda não esteja instalado, devemos instalar o servidor LDAP e demais utilitários necessários: apt-get install slapd ldap-utils</syntaxhighlight>
  2. Caso já esteja instalado executar o comando a seguir e responder as questões solicitadas conforme abaixo: dpkg-reconfigure slapd</syntaxhighlight>
    1. Omitir a configuração do servidor OpenLDAP? Não;
    2. Nome do domínio DNS: pasteltele.com.br;
    3. Nome da organização: Pastel Telecom;
    4. Senha de administrador: definir;
    5. "Backend" de base de dados a ser usado: recomendado;
    6. Você deseja que a base de dados seja removida quando o pacote slapd for expurgado ("purged")? Recomendado;
    7. Mover a base de dados antiga? Recomendado;
    8. Permitir o protocolo LDAPv2? Não.
  3. Verifique se sua base de dados foi criada: slapcat</syntaxhighlight>
  4. Vamos criar duas organizationalUnit (grupos para agrupar grupos de usuários e usuarios para agrupar usuários). Devemos para isso criar um arquivo LDIF: vi ou.ldif

dn: ou=usuarios,dc=pasteltele,dc=com,dc=br objectClass: top objectClass: organizationalUnit ou: usuarios

dn: ou=grupos,dc=pasteltele,dc=com,dc=br objectClass: top objectClass: organizationalUnit ou: grupos </syntaxhighlight>

  1. Adicionar as informações a base de LDAP: ldapadd -x -D cn=admin,dc=pasteltele,dc=com,dc=br -W -f ou.ldif</syntaxhighlight>
    1. As opções usadas são: -x Autenticação simples;-D Usuário utilizado para fazer a importação; -W Solicita senha e -f Nome do arquivo LDIF
  2. Para conferir: slapcat </syntaxhighlight>
  3. Também podemos acrescentar usuários e grupos para autenticação no Linux. Para isso devemos criar outro arquivo LDIF com as configurações necessárias;
    1. Antes de mais nada, cada usuário criado deverá ter uma senha. Então primeiramente a criaremos utilizando: slappasswd

New password: Re-enter new password: {SSHA}Rz5tH7rwkX+SHDLwh84E+eVpuQyya5XK (Copiar esta saída)</syntaxhighlight>

    1. Após isso, podemos criar o arquivo LDIF com as configurações de usuários e grupos: vi users.ldif

dn: uid=silvia,ou=usuarios,dc=pasteltele,dc=com,dc=br uid: silvia cn: Silvia Sonaglio objectClass: account objectClass: posixAccount objectClass: shadowAccount shadowLastChange:15376 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1007 gidNumber: 1007 homeDirectory: /home/silvia gecos: Conta Silvia,,, userPassword: {SSHA}Rz5tH7rwkX+SHDLwh84E+eVpuQyya5XK #colar aquela senha AQUI!!!

dn: cn=diretores,ou=grupos,dc=pasteltele,dc=com,dc=br objectClass: posixGroup cn: diretores gidNumber: 1007 memberUid: simara memberUid: solange memberUid: silvia memberUid: schai</syntaxhighlight>

Caso seja necessário alguma alteração das entradas criadas, existem comandos que permitem fazer isso. Alguns são listados aqui Modificar


No cliente executar:

  1. Instalar os pacotes: apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd</syntaxhighlight>
    1. LDAP server Uniform Resource Identifier:ldap://ip-do-servidor
    2. Distinguished name of the search base: dc=pasteltele,dc=com,dc=br
    3. LDAP version to use:3
    4. Não para as próximas duas
  2. Editar: vi /etc/nsswitch.conf

passwd: compat ldap group: compat ldap shadow: compat ldap</syntaxhighlight>

  1. Conferir vi /etc/ldap.conf</syntaxhighlight> Já deve estar OK, devido a configuração que fizemos na instalação. Do contrários, deve-se acrescentar as seguintes linhas: base dc=pasteltele,dc=com,dc=br

uri ldap://IP-servidor-LDAP ldap_version 3</syntaxhighlight>

  1. Editar o arquivo /etc/pam.d/common-session</syntaxhighlight> e acrescentar as seguintes linhas: session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
session	optional			pam_ldap.so </syntaxhighlight>
  1. Para testar se a máquina está obtendo informações do servidor LDAP, utilize os seguinte comandos: # getent passwd
  2. getent shadow
  3. getent group</syntaxhighlight>

12/10/16: Feriado

Aula 19

13/10/16: Laboratório sobre LDAP - continuação

Aula 20
  • Aula iniciou após o intervalo. Pré conselho de classe.

19/10/16: LDAP - configuração dos servidores

Aula 21
  • Aula iniciou após o intervalo. Palestra MCC.

20/10/16: Radius

Aula 22

Norma 802.1x

A norma IEEE 802.1x define o controle de acesso em nível de enlace em uma LAN. Um usuário ou equipamento deve primeiro se identificar frente à rede para somente então poder se comunicar. Esse controle de acesso depende de três componentes:

  1. Cliente (supplicant): o equipamento que deseja usar a rede
  2. Autenticador: o equipamento da rede (switch ou AP) que faz o controle de acesso do cliente.
  3. Servidor de autenticação: serviço que verifica as credenciais fornecidas pelo cliente (usualmente RADIUS).


Na figura abaixo são apresentados os componentes de controle de acesso da norma 802.1x:


Norma802-1x.png


A autenticação se faz com protocolos específicos definidos na norma IEEE 802.1x:

  • EAP (Extensible Authentication Protocol): protocolo para intercâmbio de informações de autenticação entre supplicant e servidor de autenticação.
  • EAPOL (EAP over LAN): protocolo para transportar as PDUs EAP entre supplicant e autenticador.

Ieee-802x-eap.png

Existem vários métodos EAP, que correspondem a diferentes mecanismos de autenticação. Assim, o método de autenticação pode ser escolhido de acordo com as necessidades de uma rede.


Radius

Remote Authentication Dial In User Service (RADIUS) é um protocolo de rede que provê de forma centralizada autenticação, autorização e contabilização(Accounting em inglês) no processo de gerenciar computadores que estarão se conectando e usando um determinado serviço de rede. O Radius é um servidor de autenticação standard definido pelos RFC 2865 e 2866. O protocolo RADIUS foi desenvolvido pela Livingston Enterprises, Inc., em 1991 para acesso a servidores de autenticação e protocolos de contabilização, sendo mais tarde introduzido como padrão do Internet Engineering Task Force (IETF).1

Por causa do amplo apoio e da forte presença do protocolo RADIUS, ele é muito usado por ISP's nas empresas no gerenciamento de acesso a internet ou intranet, e também é integrado a serviços de e-mail. Algumas dessas redes podem incorporar o protocolo em suas implementações. Como por exemplo modens, DSL, ponto de acesso wireless, VPN's, servidores WEB e etc. 2

RADIUS é um protocolo do tipo cliente/servidor que roda como um protocolo da camada de aplicação, usa como apoio o protocolo de transferência UDP. Tanto Servidores de Acesso Remoto(RAS), como servidores de Redes Virtuais Privadas(VPNs) e Servidores de Acesso a Rede(NAS), e todos os gateways que controlam o acesso a rede possuem um componente cliente do protocolo RADIUS que se comunica com o servidor RADIUS. Este servidor normalmente é um processo de background rodando no UNIX ou Microsoft Windows server.3


O servidor RADIUS possui três funções básicas:

1. autenticação de usuários ou dispositivos antes da concessão de acesso a rede.

2. autorização de outros usuários ou dispositivos a usar determinados serviços providos pela rede.

3. para informar sobre o uso de outros serviços.


O protocolo RADIUS é resumidamente, um serviço baseado em UDP de pergunta e resposta. As requisições e respostas seguem uma padrão de tabelas (variável=valor).

A variável não possui um nome e sim um número. A relação entre este número e seu nome é obtida através de dicionários. Exemplo de dicionário padrão:

ATTRIBUTE       User-Name               1       string
ATTRIBUTE       Password                2       string
ATTRIBUTE       CHAP-Password           3       string
ATTRIBUTE       NAS-IP-Address          4       ipaddr
ATTRIBUTE       NAS-Port-Id             5       intege
ATTRIBUTE       Service-Type            6       integer
ATTRIBUTE       Framed-Protocol         7       integer
ATTRIBUTE       Framed-IP-Address       8       ipaddr
ATTRIBUTE       Framed-IP-Netmask       9       ipaddr


O valor tem um tipo definido no dicionário, e os tipos comuns são: string, inteiro (numero), octeto ou ipaddr (endereço IP: 4 bytes) e tipo estendido (usado para transportar parâmetros personalizados de fabricantes de equipamentos).


Nas respostas positivas (Access-Accept) os parâmetros de resposta são usados para orientar o NAS de como tratar o cliente. Numa rede wireless, nos parâmetros podem constar por exemplo, o tempo máximo de conexão permitida, ou a chave de criptografia que deverá ser usada no canal de comunicação entre o cliente e o NAS.


O serviço RADIUS é amplamente usado em provedores de acesso a internet. No Brasil por exemplo, a Oi (empresa de telecomunicações) costumava usar RADIUS no seu produto ADSL chamado Velox. No sistema Velox, o cliente inicia um pedido de conexão via protocolo PPPoE, um roteador Cisco série 7000 atende o pedido e envia o nome de usuário e senha para o servidor RADIUS (localizado num datacenter no Rio de Janeiro), o RADIUS por sua vez confere as credênciais em seu banco de dados e retorna para o roteador se o cliente pode se conectar ou não. Se a resposta for positiva, o cliente receberá um IP público e poderá navegar, caso a resposta seja negativa, o acesso é negado.


Atividade

O Radius pode ser utilizado com um banco de dados LDAP, para que o mesmo busque usuário e senha ou pode-se usar o arquivo de texto users da mesma forma determinando usuário e senha. Utilizaremos o arquivo de texto users devido a facilidade de implementar, pois o tempo da aula de hoje será reduzido. Na próxima aula integraremos o Radius com o LDAP.

Procedimento no AP (Access Point) TP-LINK:

1- Acesse o AP via browser. Após o reset, o IP padrão do AP é 192.168.0.1, usuário admin, senha admin;

2- Fazer configurações prévias de rede e SSID;

3- Na aba Wireless Security configurar conforme figura abaixo:


Radius-TP-Link.png


4- Habilite o DHCP Server. Configure uma faixa de IPs para serem entregues dentro da mesma faixa que você usou para configurar a LAN do sou AP. Faça as demais configurações necessárias para o correto funcionamento do DHCP do AP;

5- Após fazer todas as configurações, o equipamento deve ser rebootado;

6- O acesso direto ao AP será perdido caso tenha sido alterado o seu IP;


Procedimentos que devem serem realizados na máquina do servidor Radius caso ainda não estejam feitos todos os pontos:


  1. Configure o servidor para repasse de pacotes:

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

  1. Configure o NAT no servidor

iptables -t nat -A POSTROUTING -o interface-saída -j MASQUERADE </syntaxhighlight>

  1. Instale o pacote:

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

  1. Após isso é necessário a configuração de dois arquivos. O /etc/freeradius/clients.conf, arquivo onde são cadastrados os equipamentos que irão fornecer a conexão de rede para os usuários. Acrescente ao final do arquivo:

client 192.168.X.X {

      ipaddr = 192.168.X.X
      shortname = nome_ficticio_do_AP
      secret  = 1234
      nastype = other

} </syntaxhighlight>

  1. e /etc/freeradius/users, arquivo onde são cadastrados os usuários que podem se conectar a rede. É necessário determinar dentro deste arquivo o login e senha que serão utilizados por cada usuário:

login Cleartext-Password :="senha"</syntaxhighlight>

    1. O login e senha que estão acima serão os respectivos login e senha do usuário para que o mesmo possa se autenticar na rede.
  1. No arquivo /etc/freeradius/radiusd.conf deixe a configuração de logs da seguinte forma:

log { destination = files file = ${logdir}/radius.log syslog_facility = daemon stripped_names = no auth = yes auth_badpass = yes auth_goodpass = no }</syntaxhighlight>

  1. Como root, reinicie o serviço:

service freeradius restart </syntaxhighlight>

  1. Execute o comando tail -f /var/log/freeradius/radius.log</syntaxhighlight>
  2. e em outro console (qualquer usuário):

radtest <usuário> <senha> <servidor> <porta> <senha_cliente> </syntaxhighlight>

  1. Pode-se verificar os logs em /var/log/freeradius/radius.log;
  2. Teste a autenticação de usuários no AP previamente configurado.

26/10/16: Revisão

Aula 23
  • Revisão das configurações feitas até o momento nos servidores;
  • Readequação do cronograma.

27/10/16: Radius

Aula 24
  • Concluir o Laboratório da Aula 22;
  • Replicar configuração nos servidores da operadora e do galpão.


02/11/16: Feriado

Aula 25

03/11/16: Radius com LDAP

Aula 26


Integrar o Radius ao LDAP

  1. intalar o módulo freeradius-ldap: apt-get install freeradius-ldap</syntaxhighlight>
  2. editar o arquivo: vi /etc/freeradius/modules/ldap

. . . server = "ip_do_LDAP" basedn = "dc=pasteltele,dc=com,dc=br" filter = "(uid=%u)" . . .</syntaxhighlight>

  1. Editar o arquivo /etc/freeradius/sites-enabled/default e em authorize habilitar o LDAP e em authenticate permitir a autenticação via LDAP;
  2. Parar o freeradius: /etc/init.d/freeradius stop</syntaxhighlight>
  3. Rodar o freeradius em modo debug:freeradius -XXX</syntaxhighlight>
  4. Em outro terminal testar a autenticação com um usuário da base LDAP: radtest login senha ip_servidor_radius 1812 senha_autenticador</syntaxhighlight>

09/11/16: Radius com LDAP

Aula 27

A aula foi conduzida com o apoio do Etherpad da disciplina.

10/11/16: Radius com LDAP e descrição da AVALIAÇÃO 2

Aula 28

Atividade

Conclusão da atividade da Aula 27 e integração LDAP/Radius no servidor do Galpão.

Avaliação 2

Gerar um relatório em formato PDF a ser entregue em 23/11/2016. Este relatório deve conter a descrição dos itens que foram implementados nesta segunda etapa do projeto nos servidores da Operadora e do Galpão, sendo elas DNS, LDAP, Radius e integração LDAP/RADIUS.

Deem uma breve descrição do que é cada um dos serviços implementados (o que é, para que serve, etc) e descreva como eles foram implementados nos servidores.

16/11/16: Roteamento

Aula 29

Roteadores e Rotas estáticas

Ver capítulo 23 da apostila.

Um roteador, por definição, é um equipamento com no mínimo duas interfaces de rede que encaminha os pacotes oriundos de uma das interfaces à outra, de acordo com regras pré-definidas. No mercado existem roteadores com uma interface ethernet e uma, duas ou três interfaces WAN (Wide Area Network), normalmente utilizados para conexão da rede local com a internet. Existem também ou chamados modem/router que, além de roteadores, são modens e são comumente usados para conexão ADSL.

O roteamento é o processo de encaminhar pacotes entre redes conectadas. Para redes baseadas em TCP/IP, o roteamento faz parte do protocolo IP e é usado em combinação com outros serviços de protocolo de rede para fornecer recursos de encaminhamento entre hosts localizados em segmentos de rede diferentes em uma rede maior baseada em TCP/IP. Ele é sem dúvida um dos principais serviços (protocolos) da rede TCP/IP, já que é por meio dele que é possível um pacote originado na Brasil chegar rapidamente ao Japão, por exemplo. Uma máquina Linux, com duas ou mais interfaces de rede, também pode funcionar como um roteador. Esta pode ser uma opção interessante se desejarmos criar sub-redes na instituição e obrigatória na implementação de um firewall transparente.

O roteamento estático trabalha com uma tabela que é lida linha-a-linha de tal modo que quando for encontrada uma regra que atenda a "demanda", o sistema pára imediatamente e encaminha a informação por esta regra. Rotas estáticas podem ser adicionadas a uma tabela de roteamento. Nos sistemas operacionais Unix, usa-se o programa route:

# adiciona uma rota para a rede 10.0.0.0/24 via o gateway 192.168.1.254
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254

# adiciona uma rota para a rede 172.18.0.0/16 via a interface PPP pp0
route add -net 172.18.0.0 netmask 255.255.0.0 dev ppp0

# adiciona a rota default via o gateway 192.168.1.254
route add default gw 192.168.1.254

# adiciona uma rota para o host 192.168.1.101 via o gateway 192.168.1.253
route add -host 192.168.1.101 gw 192.168.1.253

Também pode ser utilizado o comando ip, conforme exemplo abaixo:

  1. adiciona a rota default via o gateway 192.168.1.254

ip route add default via 192.168.1.254

  1. adiciona uma rota para a rede 10.10.20.0/24 via o gateway 192.168.1.254

ip route add 10.10.20.0/24 via 192.168.1.254 dev eth1

</syntaxhighlight>

Para configurar a máquina para repassar pacotes entre as interfaces (rotear) deve-se setar o bit do ip_forward, com um dos comandos abaixo: echo 1 > /proc/sys/net/ipv4/ip_forward sudo sysctl -w net.ipv4.ip_forward=1 </syntaxhighlight>


A tabela de rotas pode ser consultada com o programa netstat:

root@gerencia:~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        192.168.1.254   255.255.255.0   U         0 0          0 eth1
192.168.1.101   192.168.1.253   255.255.255.0   UH        0 0          0 eth1
172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 ppp0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.1.254   0.0.0.0         U         0 0          0 eth1


Ou utilizando o comando abaixo:

route -n</syntaxhighlight>


Ou ainda:

ip route show</syntaxhighlight>


Rotas podem ser removidas também com route:

# remove a rota para 10.0.0.0/24
route delete -net 10.0.0.0 netmask 255.255.255.0

# remove a rota para o host 192.168.1.101
route delete -host 192.168.1.101


Ou com o comando ip, conforme abaixo:

ip route del 10.10.20.0/24</syntaxhighlight>

Coleta e análise de tráfego

Uma ferramenta básica de análise de tráfego de rede faz a coleta das PDUs por interfaces de rede, revelando as informações nelas contidas. Dois programas bastante populares para essa finalidade são:

  • tcpdump: um analisador de tráfego em modo texto
    lab01:/data/tmp # tcpdump -i dsl0 -ln tcp port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on dsl0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
    22:14:37.797702 IP 74.125.47.136.80 > 201.35.226.9.21688: F 3660173220:3660173220(0) ack 4262495618 win 122 <nop,nop,timestamp 403588225 348814601>
    22:14:37.836844 IP 201.35.226.9.21688 > 74.125.47.136.80: . ack 1 win 54 <nop,nop,timestamp 348874613 403588225>
    22:14:38.410477 IP 201.35.226.9.21688 > 74.125.47.136.80: F 1:1(0) ack 1 win 54 <nop,nop,timestamp 348874756 403588225>
    22:14:38.770653 IP 74.125.47.136.80 > 201.35.226.9.21688: . ack 2 win 122 <nop,nop,timestamp 403589203 348874756>
    22:14:39.906734 IP 64.233.163.83.80 > 201.35.226.9.23018: P 534213879:534214123(244) ack 1779175654 win 133 <nop,nop,timestamp 2294865159 348870211>
    
  • wireshark: o equivalente em modo gráfico (porém com muitas outras funcionalidades)

Simulação

IP Kit

Atividade

Roteamento.png

17/11/16: Roteamento e NAT

Aula 30

Atividade 1

  • Concluir o laboratório da Aula 29.


NAT

A tradução de endereço de rede (NAT - Network Address Translation), proposta pela RFC 1631 em 1994, é uma função de rede criada para contornar o problema da escassez de endereços IP. Com a explosão no crescimento da Internet, e o mau aproveitamento dos endereços IP (agravado pelo endereçamento hierárquico), percebeu-se que o esgotamento de endereços poderia ser logo alcançado a não ser que algumas medidas fossem tomadas. Esse problema somente seria eliminado com a reformulação do protocolo IP, de forma a aumentar o espaço de endereços, que resultou na proposta do IPv6 em 1998. Porém no início dos anos 1990 a preocupação era mais imediata, e pensou-se em uma solução provisória para possibilitar a expansão da rede porém reduzindo-se a pressão por endereços IP. O NAT surgiu assim como uma técnica com intenção de ser usada temporariamente, enquanto soluções definitivas não se consolidassem. Ainda hoje NAT é usado em larga escala, e somente deve ser deixado de lado quando IPv6 for adotado mundialmente (o que deve demorar).

NAT parte de um princípio simples: endereços IP podem ser compartilhados por nós em uma rede. Para isto, usam-se endereços IP ditos não roteáveis (também chamados de inválidos) em uma rede, sendo que um ou mais endereços IP roteáveis (válidos) são usados na interface externa roteador que a liga a Internet. Endereços não roteáveis pertencem às subredes 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12, e correspondem a faixas de endereços que não foram alocados a nenhuma organização e, portanto, não constam das tabelas de roteamento dos roteadores na Internet. A figura abaixo mostra uma visão geral de uma rede em que usa NAT:

Nat-exemplo.png

Para ser possível compartilhar um endereço IP, NAT faz mapeamentos (IP origem, port origem, protocolo transporte) -> (IP do NAT, port do NAT, , protocolo transporte), sendo protocolo de transporte TCP ou UDP. Assim, para cada par (IP origem, port origem TCP ou UDP) o NAT deve associar um par (IP do NAT, port do NAT TCP ou UDP) (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte.

NAT no Linux

Ver capítulo 35, seção 4, da apostila.

O NAT no Linux se configura com iptables. As regras devem ser postas na tabela nat, e aplicadas a chain POSTROUTING, como no seguinte exemplo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ;Habilita o NAT
iptables -t nat -L ;Lista as atuais regras da tabela NAT

A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth0 deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo MASQUERADE foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar.

Atividade 2

  1. Desfaça as tabelas de roteamento, exceto as rotas entre matriz e filial e as rotas default.
  2. Configure as máquinas servidoras para fazer NAT, por exemplo, no servidor do professor da Figura acima:iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE</syntaxhighlight> Lembre-se de adequar a interface (eth0, eth1, ...) para o seu caso e também a rede (10.0.2.0/24, 10.0.3.0/24. ...).
  3. A partir do cliente faça testes “pingando” para:
    1. o próprio servidor
    2. o servidor de colegas
    3. redes externas
    4. redes dos colegas.
  4. Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?


DNAT

Anteriormente estudamos NAT com o intuito de mascarar IPs não roteáveis no âmbito da internet para IPs roteáveis no âmbito da internet. Este tipo de NAT é denominado SNAT e é aplicado quando desejamos alterar o endereço de origem de um determinado pacote.

Agora iremos estudar uma outra forma de implementar NAT, o DNAT. O DNAT aplica-se quando desejamos alterar o endereço de destino de um pacote. O redirecionamento de portas e o redirecionamento de servidores são um exemplo de DNAT e iremos utilizá-los nesta aula.

Para fazermos redirecionamento de porta apenas, devemos executar o seguinte comando: iptables -t nat -A PREROUTING -p tcp -d ip_de_destino_do_pacote --dport porta_de_destino -j REDIRECT --to-port porta_da_aplicação </syntaxhighlight>

Para fazermos o redirecionamento de um fluxo entrante para outro servidor, devemos executar o seguinte: iptables -t nat -A PREROUTING -d ip_de_destino_do_pacote -p tcp --dport porta_de_destino -j DNAT --to ip_servidor_interno:porta_servidor_interno </syntaxhighlight>

Para vermos as regras de NAT criadas executamos o seguinte comando: iptables -t nat -L</syntaxhighlight>

Atividade 3

  1. Permitir acesso externo via SSH ao PC da filial e da matriz;
  2. Permitir acesso externo via SSH ao roteador da filial e da matriz.


23/11/16: Visita técnica

Aula 31

Visita técnica à fábrica da empresa Audaces Informática e Automação Industrial Ltda.

Mapa: https://goo.gl/maps/tSPrftTE2Mr

Horário: 19 horas

24/11/16: HTTP e Proxy transparente

Aula 32

Proxy Transparente

Ver capítulo 34 da apostila. ACLs

Um proxy é um servidor que age como um intermediário para requisições de clientes solicitando recursos de outros servidores. Podemos resumir o significado de servidor proxy como uma espécie de "cache comunitário", onde toda página que um usuário visualizar ficará armazenada e quando outro (ou o mesmo) usuário requisitar a mesma página, ela não será trazida da Internet novamente, simplesmente será lida do disco e entregue, economizando tráfego de rede (isso se a página não tiver sido modificada na origem, caso isto tenha acontecido, ela será trazida da Internet novamente).

Proxy.png


Outra função importante de um proxy pode é fazer o controle de conteúdo, barrando o acesso a certos sites. Este controle de acesso pode ser feito de forma não transparente ou transparente. Na forma não transparente, é configurado o proxy no navegador do cliente. Já no transparente, o trafego HTTP dos usuários é interceptado sem que o cliente tomem conhecimento ou que qualquer configuração tenha sido feita em seus navegadores. Esta última abordagem será utilizada na nossa aula hoje. Logo, teremos um cenário semelhante ao abaixo:


Proxy-transparente.png


Proxy transparente com o Squid

  1. Primeiramente, deve ser montada uma estrutura como a da figura acima. Para isso, pode-se utilizar uma máquina virtual gráfico como cliente e uma máquina virtual servidora como gateway e proxy da rede. Caso os alunos queiram trabalhar em duplas, é possível utilizar mais uma máquina virtual cliente em outro PC e deixar a máquina servidora com 3 interfaces de rede. Assim, pode-se testar o bloquio/desbloqueio de diferentes redes;
  2. Para instalar o Squid:
    apt-get install squid
    
  3. Para reiniciar o serviço:
    service squid3 restart
    
  4. Para Verificar os logs do mesmo:
    tail /var/log/squid3/cache.log
    tail /var/log/squid3/access.log
    tail /var/log/upstart/squid3.log
    
  5. As configurações do Squid são feitas em /etc/squid3/squid.conf. Tanto a configuração do funcionamento geral do Squid quanto as regras de controle de acesso são feitas neste arquivo.
    1. Um ponto bastante importante é alterar a linha http_port 3128 para http_port 3128 transparent
  6. Criar todas as regras desejadas;
  7. Restartar o serviço sempre que alguma alteração for efetuada;
  8. Como o nosso proxy será do tipo transparente, devemos desviar o trafego Web no gateway para o proxy. Isso pode ser feito da seguinte forma:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 </syntaxhighlight>

  1. Faça testes de bloqueio para algum site de sua preferência. Teste.
  2. Bloqueie o acesso a sites que contenham a palavra uol. Teste acessando http://www.folha.uol.com.br/ !
  3. Bloqueie o acesso à rede no horário atual (veja a hora de sua máquina). Teste!
  4. Ao final dos testes, discuta com sua equipe que bloqueios manter em seu servidor.

30/11/16: Proxy com cache e autenticação

Aula 33
  • Ver capítulo 34 da apostila.
  • SARG: [16]
  • Testar usuários do LDAP: cd /usr/lib/squid3

./basic_ldap_auth -R -b "dc=pasteltele,dc=com,dc=br" -D "cn=admin,dc=pasteltele,dc=com,dc=br" -w 123456789 -f "uid=%s" -h 172.18.19.165 USUARIO SENHA

</syntaxhighlight>

  • basic_ldap_auth [17]
  • Configurar arquivo squid.conf [18]

01/12/16: Filtro de pacotes e descrição da AVALIAÇÃO 3

Aula 34

Uma introdução ao iptables

O filtro IP do Linux se chama NetFilter, e suas regras são configuradas por meio do utilitário iptables (ver também seu manual). Com iptables se podem adicionar ou remover regras do Netfilter, além de consultar estatísticas sobre essas regras (ex: contadores dos pacotes e bytes que selecionaram cada regra). As regras são agrupadas em conjuntos denominados chains ("cadeias"), as quais estão relacionadas com o contexto que cada pacote está sendo analisado. Existem três chains predefinidas:

  • INPUT: contém as regras a serem aplicadas aos pacotes destinados ao próprio firewall.
  • OUTPUT: contém as regras a serem aplicadas aos pacotes transmitidos pelo próprio firewall.
  • FORWARD: contém as regras a serem aplicadas aos pacotes em trânsito pelo firewall (isto é, pacotes recebidos de uma interface e sendo encaminhados através de outra interface).

Iptables-fluxo-filter.png


Assim, usando-se o iptables podem ser adicionadas regras a cada uma dessas chains, dependendo do policiamento de tráfego a ser implantado no firewall.


Iptables-chains.png


Uma regra deve especificar basicamente três coisas:

  • Chain: em que chain deve ser adicionada.
  • Seletor: informações a serem usadas para selecionar os pacotes a que ela deve ser aplicada.
  • Alvo (target): ação a ser executada sobre o pacote que ativar a regra.

Por exemplo, a regra abaixo permite o encaminhamento de todos os segmentos TCP destinados a porta 80:


Iptables-intro.png


Desta forma, a escrita das regras depende de conhecer as opções para definição de seletores, e os possíveis alvos. Algumas opções de uso comum para composição de seletores são listadas abaixo, sendo que o que está entre colchetes ([]) é opcional. Um seletor pode ser composto por uma combinação dessas opções. Para mais detalhes leia o manual.

Opção Descrição Exemplo
-s IP[/Mascara] endereço IP de origem -s 200.135.37.64/26
-d IP[/Mascara] endereço IP de destino -d 8.8.8.8
-p Protocolo protocolo de transporte (tcp ou udp) -p tcp
--dport numero Port de destino --dport 80
--sport numero Port de origem --sport 53
--syn Se flag SYN está acesa (somente TCP)
--tcp-flags Flags1 Flags2 Se somente as flags listadas em Flags1 estão acesas dentre as Flags2 --tcp-flags SYN,ACK,RST,FIN SYN
-i interface Se pacote foi recebido pela interface -i eth0
-o interface Se pacote vai sair pela interface -o eth1
-m state --state ESTADO Identifica o estado do fluxo, o qual pode ser:
NEW: início de um fluxo
ESTABLISHED: parte de um fluxo estabelecido
RELATED: inicia um novo fluxo, porém relacionado com um fluxo existente
-m state --state NEW,RELATED


Os alvos definem o que fazer com um pacote selecionado por uma regra. As ações possíveis estão listadas abaixo:


Alvo Descrição Exemplo
ACCEPT aceita o pacote -j ACCEPT
DROP descarta o pacocte -j DROP
REJECT rejeita o pacote, devolvendo um código de erro ICMP para seu remetente -j REJECT
LOG registra o pacote no log do sistema -j LOG
uma_chain passa o pacote para ser processado pela chain uma_chain -j rede_interna


Salvando e restaurando regras do iptables

Uma vez obtido um conjunto de regras que funcione como desejado, deve-se poder salvá-lo para que possa ser reativado sempre que desejado (ex: no boot). Existem dois utilitários que auxiliam nessa tarefa, sendo eles:

  • iptables-save: escreve as regras atuais na saída padrão, que normalmente é redirecionada para um arquivo:
    iptables-save > minhas_regras
    
  • iptables-restore: instala as regras lidas da entrada padrão, normalmente redirecionada de um arquivo:
    iptables-restore < minhas_regras
    

Alterando a política da chain

Para alterar a política padrão de uma chain utilize o comando abaixo: iptables -P qual-a-chain ALVO</syntaxhighlight>

Atividade

Cada aluno deve implantar a seguinte rede virtual em seu computador utilizando máquinas virtuais para serem os PC's e uma máquina Servidor para ser o Firewall:


Lab-fw-pji3.png


Inicie as máquinas virtuais, certificando-se de que suas interfaces de rede estejam em modo bridge e que a máquina servidora possui duas interfaces ativadas. Configure os endereços IP de suas interfaces e também suas rotas default.

DICA

É útil ativar o NAT na interface externa do firewall:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Comando para tornar uma máquina Linux roteador:

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


Protocolos e portas a serem utilizadas

DNS: protocolo UDP e porta 53;

HTTP: protocolo TCP e porta 80;

HTTPS: protocolo TCP e porta 443;

SSH: protocolo TCP e porta 22.


Itens a serem desenvolvidos

  1. Configurar a rede adequadamente;
  2. PC1 e PC2 utilizarão a máquina 192.168.1.101 como DNS;
  3. PC1 tem acesso a todos os serviços de rede oferecidos pela máquina 192.168.1.101 (estão descritos na figura), porém nada além disso;
  4. PC2 também tem acesso a qualquer um dos serviços na máquina 192.168.1.101. Além disso, pode fazer acesso Web (HTTP e HTTPS) à qualquer página da internet. No entanto, não acessa nada além disso;
  5. A máquina firewall não aceita acesso via SSH da rede externa e via rede interna aceita acesso SSH apenas de PC2;
  6. A máquina firewall não faz acesso Web;
  7. Desenvolver nos servidores Galpão e Operadora os filtros que acharem pertinentes.

Avaliação 3

Gerar um relatório em formato PDF a ser entregue em 09/12/2016. Este relatório deve conter a descrição dos itens que foram implementados nesta terceira etapa do projeto nos servidores da Operadora e do Galpão, sendo elas Roteamento, NAT, Proxy transparente e filtro de pacotes.

Deem uma breve descrição do que é cada um dos serviços implementados (o que é, para que serve, etc) e descreva como eles foram implementados nos servidores.

07/12/16: Preparação da apresentação final

Aula 35

08/12/16: Entrevista individual

Aula 36

14/12/16: Apresentação

Aula 37

15/12/16: Recuperação - Prática

Aula 38

Os alunos que não atingirem pelo menos 6,0 em cada avaliação deverão fazer recuperação. A recuperação acontecerá na próxima quinta-feira (15/12). No caso de recuperação dos conteúdos de algum dos relatórios, a recuperação consistirá de uma avaliação prática e abrangerá apenas o conteúdo do relatório em questão. Já para quem precisar recuperar a nota da entrevista, será feita nova entrevista nos moldes da anterior.

Recuperação Avaliação 02

  1. Criar uma zona de domínio seu-nome.pji3.br;
  2. Criar um usuário com o seu nome em uma base LDAP que permita tanto autenticação em cliente Linux como via PEAP;
  3. Configurar um servidor Radius;
  4. Integrar Radius e LDAP;
  5. Configurar Access Point;
  6. Demonstrar o correto funcionamento.

Recuperação Avaliação 03

Arquivo:Rec-av03.pdf

Recuperação Entrevista

  • realizada nova entrevista.