Mudanças entre as edições de "GAR12503-2014-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 1 057: Linha 1 057:
 
#Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?
 
#Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?
  
 +
{{Collapse bottom}}
 +
 +
=== Aula 07 (10/09) - DNS ===
 +
 +
Conteúdo:
 +
*Serviço de tradução de nomes
 +
 +
{{Collapse top | DNS}}
 +
 +
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:hierarquia-DNS.gif|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) || www.sj.ifsc.edu.br IN A 200.135.37.66
 +
|-
 +
|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 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"
 +
|}
 +
 +
Uma zona assim é composta de um conjunto de registros com todas as informações dos domínios nela contidos. O conteúdo de uma zona, contendo o domínio ''example.com'', pode ser visualizado abaixo:
 +
 +
<syntaxhighlight lang=text>
 +
example.com  86400  IN SOA ns1.example.com. hostmaster.example.com. (
 +
      2002022401 ; serial
 +
      10800 ; refresh
 +
      15 ; retry
 +
      604800 ; expire
 +
      10800 ; minimum
 +
    )
 +
      IN  NS    ns1.example.com.
 +
      IN  NS    ns2.smokeyjoe.com.
 +
      IN  MX  10 mail.another.com.
 +
      IN  TXT  "v=spf1 mx -all"
 +
 +
ns1    IN  A      192.168.0.1
 +
www    IN  A      192.168.0.2
 +
ftp    IN  CNAME  www.example.com.
 +
 +
bill  IN  A      192.168.0.3
 +
fred  IN  A      192.168.0.4
 +
</syntaxhighlight>
 +
{{Collapse bottom}}
 +
 +
Atividades:
 +
 +
{{Collapse top | Roteiro}}
 +
O objetivo é montar a seguinte estrutura:
 +
 +
[[Arquivo:Diagrama_DNS.png]]
 +
 +
Vamos configurar e testar um servidor DNS. Para tanto montaremos a estrutura indicada no diagrama, onde cada máquina será um servidor DNS, com um domínio próprio e, ao mesmo tempo, será cliente do servidor DNS da máquina 192.168.3.101. Esta, por sua vez, será servidor: um servidor master do domínio redes.edu.br e servidor escravo, recebendo automaticamente uma cópia das zonas dos servidores masters, de todos os demais domínios criados. Esta, será também a única máquina com servidor DNS com zona reversa. Sendo assim todos os domínios, diretos e reversos, serão visíveis por meio deste servidor.
 +
 +
# Entendendo o serviço DNS. Antes de qualquer reconfiguração faça testes usando a ferramenta “dig”: <syntaxhighlight lang=bash>
 +
dig -x 200.135.37.65;
 +
dig www.das.ufsc.br;
 +
dig +trace www.polito.it;
 +
dig @200.135.37.65 www.polito.it.</syntaxhighlight>
 +
# Siga o roteiro da apostila e inicialize o servidor DNS, criando o domínio redesX.edu.br (onde X é o último dígito do ip de sua máquina). Por questões práticas, acima mencionadas, não crie zona reversa. Adaptações para a nova versão do Bind juntamente com Ubuntu:
 +
## apt-get install bind9. Instalando o Bind.
 +
## vi /etc/bind/named.conf.local. Editando o equivalente ao named.conf da apostila.
 +
##  vi /etc/bind/db.redesX. Editando o equivalente ao /var/lib/named/var/named/master/redesX.zone da apostila.
 +
# O servidor DNS deverá responder pelos nomes: da própria máquina: m2 à m15, www, ftp e mail, todos apontando para o mesmo IP.
 +
# No ''/etc/resolv.conf'' declare nameserver 192.168.3.101.
 +
# Faça testes “pingando” nos nomes, ex: <syntaxhighlight lang=bash>
 +
ping www.redes4.edu.br
 +
ping m4.redes4.edu.br
 +
ping www.redes3.edu.br
 +
</syntaxhighlight>
 +
# Teste o DNS reverso.
 +
# Faça testes usando a ferramenta “dig”: <syntaxhighlight lang=bash>
 +
dig -x número.do.ip
 +
dig maquina.dominio.extensao.br;
 +
dig +trace maquina.dominio.extensao.br;
 +
dig @servidor.de.nomes maquina.dominio.extensao.br.
 +
</syntaxhighlight>
 +
<!--
 +
''' Gabarito para Bind9 em Ubuntu Server 12.04 '''
 +
 +
*vim /etc/bind/named.conf.locaL
 +
<code>
 +
zone "redes4.edu.br" {
 +
  type master;
 +
  file "/etc/bind/db.redes4";
 +
  allow-transfer {
 +
    192.168.3.101;
 +
  };
 +
};
 +
 +
</syntaxhighlight>
 +
 +
*vim /etc/bind/db.redes4
 +
<code>
 +
@  IN    SOA  ns.redes4.edu.br. admin.redes4.edu.br. (
 +
                              2014040902; serial
 +
                              3H ; refresh
 +
                              60 ; retry
 +
                              1W ; expire
 +
                              3W ; minimum
 +
                            )
 +
@      IN  NS    ns.redes4.edu.br. ; este é o servidor master deste domínio
 +
@      IN  MX    10 mail.redes4.edu.br.
 +
$ORIGIN redes4.edu.br.
 +
m4  A 192.168.3.104
 +
mail A 192.168.3.104
 +
www  A 192.168.3.104
 +
ftp  A 192.168.3.104
 +
ns  A 192.168.3.104
 +
</syntaxhighlight>
 +
 +
*vim /etc/resolv.conf
 +
<code>
 +
nameserver 192.168.3.101
 +
</syntaxhighlight>
 +
 +
* Utilitário para testar o arquivo que contém o conteúdo de uma zona:
 +
# named-checkzone nome_do_dominio arquivo_da_zona
 +
# Assume que você esteja no diretório onde está o redes.zone
 +
named-checkzone redes4.edu.br db.redes4
 +
 +
* Utilitário para testar a configuração do BIND:
 +
# Assume que você esteja no diretório onde está o named.conf
 +
named-checkconf -z
 +
 +
* Restart do serviço:
 +
service bind9 restart
 +
 +
* Verificando se está tudo certo:
 +
tail -n 200 /var/log/syslog. Se necessário filtre por named.
 +
 +
* Seqüênica de Testes:
 +
dig redes4.edu.br soa
 +
dig mail.redes4.edu.br a
 +
ping mail.redes4.edu.br
 +
 +
'' Arquivos na máquina '''Professor''' ''
 +
 +
/etc/named/named.conf.local
 +
<code>
 +
//
 +
// Do any local configuration here
 +
//
 +
 +
// Consider adding the 1918 zones here, if they are not used in your
 +
// organization
 +
//include "/etc/bind/zones.rfc1918";
 +
 +
zone "redes1.edu.br" {
 +
        type master;
 +
        file "/etc/bind/db.redes1";
 +
};
 +
zone "3.168.192.in-addr.arpa" IN {
 +
        type master;
 +
        file "/etc/bind/db.3.168.192";
 +
};
 +
 +
zone "redes2.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes2";
 +
        masters { 192.168.3.102; };
 +
};
 +
 +
zone "redes3.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes3";
 +
        masters { 192.168.3.103; };
 +
};
 +
 +
zone "redes4.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes4";
 +
        masters { 192.168.3.104; };
 +
};
 +
 +
zone "redes5.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes5";
 +
        masters { 192.168.3.105; };
 +
};
 +
 +
zone "redes6.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes6";
 +
        masters { 192.168.3.106; };
 +
};
 +
 +
zone "redes7.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes7";
 +
        masters { 192.168.3.107; };
 +
};
 +
 +
zone "redes8.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes8";
 +
        masters { 192.168.3.108; };
 +
};
 +
 +
zone "redes9.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes9";
 +
        masters { 192.168.3.109; };
 +
};
 +
 +
zone "redes10.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes10";
 +
        masters { 192.168.3.110; };
 +
};
 +
 +
zone "redes11.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes11";
 +
        masters { 192.168.3.111; };
 +
};
 +
zone "redes12.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes12";
 +
        masters { 192.168.3.112; };
 +
};
 +
 +
zone "redes13.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes13";
 +
        masters { 192.168.3.113; };
 +
};
 +
 +
zone "redes14.edu.br" IN {
 +
        type slave;
 +
        file "/var/cache/bind/slaves/db.redes14";
 +
        masters { 192.168.3.114; };
 +
};
 +
</syntaxhighlight>
 +
/etc/named/db.redes1
 +
<code>
 +
; BIND reverse data file for empty rfc1918 zone
 +
;
 +
; DO NOT EDIT THIS FILE - it is used for multiple zones.
 +
; Instead, copy it, edit named.conf, and use that copy.
 +
;
 +
$TTL 86400
 +
@ IN SOA m1.redes1.edu.br. root (
 +
    2014040900 ; Serial
 +
604800 ; Refresh
 +
  86400 ; Retry
 +
2419200 ; Expire
 +
  86400 ) ; Negative Cache TTL
 +
;
 +
@ IN NS m1.redes1.edu.br.
 +
@ IN MX 10 mail.redes1.edu.br.
 +
$ORIGIN redes1.edu.br.
 +
m1 A 192.168.3.101
 +
www A 192.168.3.101
 +
ftp A 192.168.3.101
 +
mail A 192.168.3.101
 +
</syntaxhighlight>
 +
 +
/etc/named/db.3.168.192 (Zona reversa)
 +
<code>
 +
$TTL 86400
 +
@ IN SOA m1.redes1.edu.br. root (
 +
    2014040900 ; Serial
 +
604800 ; Refresh
 +
  86400 ; Retry
 +
2419200 ; Expire
 +
  86400 ) ; Negative Cache TTL
 +
;
 +
IN      NS      m1.redes1.edu.br.
 +
101      IN      PTR    m1.redes1.edu.br.
 +
102      IN      PTR    m2.redes2.edu.br.
 +
103      IN      PTR    m3.redes3.edu.br.
 +
104      IN      PTR    m4.redes4.edu.br.
 +
105      IN      PTR    m5.redes5.edu.br.
 +
106      IN      PTR    m6.redes6.edu.br.
 +
107      IN      PTR    m7.redes7.edu.br.
 +
108      IN      PTR    m8.redes8.edu.br.
 +
109      IN      PTR    m9.redes9.edu.br.
 +
110      IN      PTR    m10.redes10.edu.br.
 +
111      IN      PTR    m11.redes11.edu.br.
 +
112      IN      PTR    m12.redes12.edu.br.
 +
113      IN      PTR    m13.redes13.edu.br.
 +
114      IN      PTR    m14.redes14.edu.br.
 +
</syntaxhighlight>
 +
-->
 
{{Collapse bottom}}
 
{{Collapse bottom}}

Edição das 16h49min de 10 de setembro de 2014

Informações da disciplina

  • Professor: Tomas Grimm
  • Turma: 1250331
  • Encontros: terças e quintas das 18:30 às 20:20 e quartas das 18:30 às 22:30
  • Atendimento paralelo:
    • terças das 13:30 às 15:20

Plano de aula

Cronograma
Aula Data Horas Conteúdo Recursos
1 30/7 4 Introdução a Gerência e Administração de Redes. Visão das disciplinas e suas relações. Metodologia de avaliação. Lab Redes 1
2 31/7 4 Revisão dos comandos básicos do Linux, TAR. Lab Redes 1
3 6/8 4 Editor Vi. Shell. Lab Redes 1
4 7/8 4 APT-GET. Sistemas de Arquivos. Lab Redes 1
5 12/8 2 APT-GET. Sistemas de Arquivos. Lab Redes 1
6 13/8 4 Gerenciamento de usuários e grupos e Cotas em disco. Lab Redes 1
7 14/8 2 Processo de Boot Lab Redes 1
8 19/8 2 RAID Lab Redes 1
9 20/8 4 Processos. Lab Redes 1
10 21/8 2 Crontab. Lab Redes 1
11 26/8 2 Crontab. Lab Redes 1
12 27/8 4 Revisão. Lab Redes 1
13 28/8 2 1a avaliação individual teórica. Lab Redes 1
14 2/9 2 1a avaliação individual prática. Lab Redes 1
15 3/9 4 Correção das avaliações. Interfaces de redes, endereçamento IP, roteamento, sub-redes e NAT. Lab Redes 1
16 4/9 2 DNS. Lab Redes 1
17 9/9 2 DNS. Lab Redes 1
18 10/9 4 Postfix. Lab Redes 1
19 11/9 2 Apache. Lab Redes 1
20 16/9 2 Apache. Lab Redes 1
21 17/9 4 SMB. Lab Redes 1
22 18/9 2 NFS. Lab Redes 1
23 23/9 2 NFS. Lab Redes 1
24 24/9 4 Revisão Lab Redes 1
25 25/9 2 2a avaliação individual teórica Lab Redes 1
26 30/9 2 2a avaliação individual prática Lab Redes 1
27 1/10 4 Correção das avaliações. DHCP. Lab Redes 1
28 2/10 2 DHCP. Lab Redes 1
29 7/10 2 FTP e SSH. Lab Redes 1
30 8/10 4 FTP e SSH. DenyHosts. Lab Redes 1
31 9/10 2 Squid. Lab Redes 1
32 14/10 2 Firewall e iptables Lab Redes 1
33 15/10 4 Firewall e iptables Lab Redes 1
34 16/10 2 VPN Lab Redes 1
35 21/10 2 VPN Lab Redes 1
36 22/10 4 Revisão Lab Redes 1
37 23/10 2 3a avaliação individual teórica. Lab Redes 1
38 28/10 2 3a avaliação individual prática. Lab Redes 1
39 29/10 4 Correção das avaliações. Webmin. Lab Redes 1
40 30/10 2 Revisão geral Lab Redes 1
41 4/11 2 Revisão geral Lab. Redes 1
42 5/11 4 Recuperação de conceitos. Lab. Redes 1
43 6/11 2 Correção da recuperação. Lab. Redes 1
44 11/11 2 Projeto Integrador. Lab. Redes 1
45 12/11 4 Projeto Integrador. Lab. Redes 1
46 13/11 2 Projeto Integrador. Lab. Redes 1
47 18/11 2 Projeto Integrador. Lab. Redes 1
48 19/11 4 Projeto Integrador. Lab. Redes 1
49 20/11 2 Projeto Integrador. Lab. Redes 1
50 25/11 2 Projeto Integrador. Lab. Redes 1
51 26/11 4 Projeto Integrador. Lab. Redes 1
52 27/11 2 Projeto Integrador. Lab. Redes 1
53 2/12 2 Projeto Integrador. Lab. Redes 1
54 3/12 4 Projeto Integrador. Lab. Redes 1
55 4/12 2 Projeto Integrador. Lab. Redes 1
56 9/12 2 Projeto Integrador. Lab. Redes 1
57 10/12 4 Projeto Integrador. Lab. Redes 1
58 11/12 2 Projeto Integrador. Lab. Redes 1
TOTAL 160

Material auxiliar

Aulas

Aula 01 (06/08) - Introdução, SO Linux, Shell e comandos básicos

Conteúdo:

  • Apresentação da disciplina
  • Introdução a Gerência de Redes de Computadores (slides)
  • Sistema Operacional Linux e Redes (slides)
  • Shell
  • Comandos básicos de Linux
  • Editor VI
Comandos básicos Linux
# Comandos de navegação e interação com arquivos:
ls		# listar arquivos
cd		# mudar diretório
rm		# remover arquivos
cp		# copiar arquivos
mv		# mover arquivos ou renomeá-los
cat		# mostra o conteúdo de um arquivo ou concatena com outro arquivo
more		# exibe o conteúdo de um artigo de forma paginada
pwd		# mostra o caminho para o diretório atual
rmdir		# deleção de diretório
mkdir		# criação de diretório
clear		# limpa a tela

# Comandos relacionados aos usuários:
who		# mostra as sessões abertas na máquina
whoami		# mostra o nome do usuário atual
finger		# mostra informações de usuário

# Comandos relacionados ao status da memória e do disco:
df		# informações de espaço em disco
du		# utilização do disco
free		# informações de memória
top		# mostra processos

Atividades:

Aula 02 (07/08) - Instalação de aplicativos e Sistemas de arquivos

Conteúdo:

  • Gerenciador de pacotes apt
  • Sistemas de arquivos
Instalação de aplicativos

A instalação de software pode ser feita de diversas formas, dentre as quais serão destacadas três:

  • Com utilitário apt-get: busca o software de um repositório de rede e o instala; dependências (outros softwares necessários) são automaticamente instaladas. Esses softwares buscados da rede estão no formato dpkg (Debian Package).

Exemplo de uso do apt-get:

    • Instalar o navegador de texto lynx
    • Testar o navegador lynx
lynx http://www.ifsc.edu.br/
    • Remover o lynx
  • Diretamente com utilitário dpkg: instala um software que está contido em um arquivo no formato dpkg.

Exemplo de uso:

    • Obter os pacotes Debian para o lynx
wget ftp://ftp.cn.debian.org/ubuntu-old-releases/ubuntu/pool/main/l/lynx-cur/lynx_2.8.7pre6-1_all.deb
wget ftp://mirror.linux.org.au/ubuntu/pool/main/l/lynx-cur/lynx-cur_2.8.7pre6-1_i386.deb
    • Instalar os pacotes
    • Testar o lynx
lynx ...
    • Remover os pacotes instalados


  • A partir do código fonte: busca-se manualmente na rede o código fonte do software desejado, que deve então ser compilado e instalado. Esta opção se aplica quando não existe o software no formato dpkg, ou a versão disponível em formato dpkg foi compilada de uma forma que não atende os requisitos para seu uso em seu servidor.

Atividades:

Exercícios de instalação de pacotes
  1. Instale o pacote WireShark.
  2. Liste todos os pacotes instalados em sua máquina.
  3. Liste todos os arquivos e diretórios que foram criados na instalação do WireShark.
  4. Desinstale o WireShark.
  5. Instale o pacote lynx (navegador web modo texto).
  6. Teste-o com: lynx www.sj.ifsc.edu.br
  7. Remova o lynx.
  8. Utilize as opções apt-get update, apt-get upgrade e apt-get check. Qual é a funcionalidade de cada uma?
  9. Qual é o arquivo que indica quais repositórios o sistema operacional deve consultar quando se deseja instalar um software?
Exercícios sobre sistemas de arquivos
  1. Diferencie partição primária, estendida e lógica.
  2. Cite um programa para particionamento do disco e suas características?
  3. Qual o principal comando para formatar o sistema de arquivos numa partição?
  4. Verifique quais as partições que você tem montado em sua máquina e qual a taxa de ocupação das mesmas.
  5. Verifique o espaço total ocupado pelo diretório /etc.
  6. Qual a função do arquivo /etc/fstab? Qual o significado das colunas deste arquivo?
  7. Faça uma descrição dos diretórios:
    1. Raiz (/);
    2. /bin;
    3. /dev;
    4. /etc;
    5. /home;
    6. /media;
    7. /proc;
    8. /root;
    9. /sbin;
    10. /usr
  8. Usando o cfdisk crie uma nova partição, usando 100 MB do espaço livre, com tipo de arquivo ext4.
  9. Formate esta partição com o tipo ext4.
  10. Crie, em seu diretório home, um novo diretório de nome novapart e monte esta partição neste diretório. Teste copiando alguns arquivos.
  11. Faça com que esta partição seja montada automaticamente no reboot. Teste.
  12. Desmonte esta partição.

Aula 03 (12/08) - Gerenciamento de usuários e grupos e Cotas de disco

Conteúdo:

  • Gerenciamento de usuários e grupos.
  • Permissionamento.
  • Cotas de usuário.
Roteiro

Criação de contas de usuários e de grupos, e seu uso para conferir permissões de acesso a arquivos, diretórios e recursos do sistema operacional. Apostila, páginas 61 a 65.

Um usuário no Linux (e no Unix em geral) é definido pelo seguinte conjunto de informações:

  • Nome de usuário (ou login): um apelido que identifica o usuário no sistema
  • UID (User Identifier): um número único que identifica o usuário
  • GID (Group Identifier): o número do grupo primário do usuário
  • Senha (password): senha para verificação de acesso
  • Nome completo (full name): nome completo do usuário
  • Diretório inicial (homedir): o subddiretório pessoal do usuário, onde ele é colocado ao entrar no sistema
  • Shell: o programa a ser executado quando o usuário entrar no sistema

As contas de usuários, que contêm as informações acima, podem ficar armazenadas em diferentes bases de dados (chamadas de bases de dados de usuários). Dentre elas, a mais simples é composta pelo arquivo /etc/passwd:

root:x:0:0:root:/root:/bin/bash
sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false
suse-ncc:x:105:107:Novell Customer Center User:/var/lib/YaST2/suse-ncc-fakehome:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
roberto:x:1001:100:Roberto de Matos:/data1/roberto:/bin/bash

Acima um exemplo de arquivo /etc/passwd

Cada linha desse arquivo define uma conta de usuário no seguinte formato:

nome de usuário:senha:UID:GID:Nome completo:Diretório inicial:Shell

O campo senha em /etc/passwd pode assumir os valores:

  • x: significa que a senha se encontra em /etc/shadow
  • *: significa que a conta está bloqueada
  • senha encriptada: a senha de fato, porém encriptada usando algoritmo hash MD5 ou crypt. Porém usualmente a senha fica armazenada no arquivo /etc/shadow.

O arquivo /etc/shadow armazena exclusivamente as informações relativas a senha e validade da conta. Nele cada conta possui as seguintes informações:

  • Nome de usuário
  • Senha encriptada (sobrepõe a senha que porventura exista em /etc/passwd)
  • Data da última modificação da senha
  • Dias até que a senha possa ser modificada (validade mínima da senha)
  • Dias após que a senha deve ser modificada
  • Dias antes da expiração da senha em que o usuário deve ser alertado
  • Dias após a expiração da senha em que a conta é desabilitada
  • Data em que a conta foi desabilitada

Um exemplo do arquivo /etc/shadow segue abaixo:

root:$2a$05$8IZNUuFTMoA3xv5grggWa.oBUBfvrE4MfgRDTlUI1zWDXGOHi9dzG:13922::::::
suse-ncc:!:13922:0:99999:7:::
uucp:*:13922::::::
wwwrun:*:13922::::::
roberto:$1$meoaWjv3$NUhmMHVdnxjmyyRNlli5M1:14222:0:99999:7:::

Exercício: quando a senha do usuário roberto irá expirar ?

Um grupo é um conjunto de usuários definido da seguinte forma:

  • Nome de group (group name): o nome que identifica o grupo no sistema
  • GID (Group Identifier): um número único que identifica o grupo
  • Lista de usuários: um conjunto de usuários que são membros do grupo

Assim como as contas de usuários, os grupos ficam armazenados em bases de dados de usuários, sendo o arquivo /etc/group a mais simples delas:

root:x:0:
trusted:x:42:
tty:x:5:
utmp:x:22:
uucp:x:14:
video:x:33:roberto
www:x:8:roberto
users:x:100:
radiusd:!:108:
vboxusers:!:1000:

Os membros de um grupo são os usuários que o têm como grupo primário (especificado na conta do usuário em /etc/passwd), ou que aparecem listados em /etc/group.

Gerenciamento de usuários e grupos

Para gerenciar usuários e grupos podem-se editar diretamente os arquivos /etc/passwd, /etc/shadow e /etc/group, porém existem utilitários que facilitam essa tarefa:

  • useradd ou adduser: adiciona um usuário
    • Ex: useradd -c "Roberto de Matos" -m roberto : cria o usuário roberto com nome completo "Roberto de Matos"
    • Ex: useradd -c "Roberto de Matos" -g users -u 5000 -d /usuarios/roberto -s /bin/tcsh -m roberto : cria o usuário roberto com nome completo "Roberto de Matos", UID 5000, grupo users, diretório inicial /usuarios/roberto e shell /bin/tcsh
  • userdel: remove um usuário
    • Ex: userdel roberto : remove o usuário roberto, porém preservando seu diretório home
    • Ex: userdel -r roberto : remove o usuário roberto, incluindo seu diretório home
  • usermod: modifica as informações da conta de um usuário
    • Ex: usermod -u 5001 roberto : modifica o UID do usuário roberto
    • Ex: usermod -g wheel roberto : modifica o GID do usuário roberto
    • Ex: usermod -G users,wheel roberto : modifica os grupos secundários do usuário roberto
    • Ex: usermod -d /contas/roberto roberto : modifica o diretório inicial do usuário roberto (mas não copia os arquivos ...)
  • groupadd: adiciona um grupo
    • Ex: groupadd -g 4444 ger: cria o grupo ger com GID 4444
  • groupdel: remove um grupo
    • Ex: groupdel ger: remove o grupo ger
  • groupmod: modifica um grupo
    • Ex: groupmod -g 5555 ger: modifica o GID do grupo ger
    • Ex: groupmod -A roberto ger: adiciona o usuário roberto ao grupo ger
    • Ex: groupmod -R roberto ger: remove o usuário roberto do grupo ger

Esses utilitários usam os arquivos /etc/login.defs e /etc/default/useradd para obter seus parâmetros padrão. O /etc/adduser.conf tem o mesmo intuito mas é seta exclusivamente os parâmetros do comando adduser. O arquivo /etc/login.defs contém uma série de diretivas e padrões que serão utilizados na criação das próximas contas de usuários. Seu principal conteúdo é:

MAIL_DIR dir # Diretório de e-mail
PASS_MAX_DAYS	99999 #Número de dias até que a senha expire
PASS_MIN_DAYS	0 #Número mínimo de dias entre duas trocas senha
PASS_MIN_LEN 5	#Número mínimo de caracteres para composição da senha
PASS_WARN_AGE 7 #Número de dias para notificação da expiração da senha
UID_MIN 500 #Número mínimo para UID
UID_MAX 60000 #Número máximo para UID
GID_MIN 500 #Número mínimo para GID
GID_MAX 60000 #Número máximo para GID
CREATE_HOME yes #Criar ou não o diretório home

Como o login.defs o arquivo /etc/default/useradd contém padrões para criação de contas. Seu principal conteúdo é:

GROUP=100 #GID primário para os usuários criados 
HOME=/home #Diretório a partir do qual serão criados os “homes”
INACTIVE=-1 #Quantos dias após a expiração da senha a conta é desativada
EXPIRE=AAAA/MM/DD #Dia da expiração da conta
SHEL=/bin/bash #Shell atribuído ao usuário.
SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários.
GROUPS=video,dialout
CREATE_MAIL_SPOOL=no

O /etc/adduser.conf também possui uma série de padrões que funcionam especificamente para o comando adduser:

DSHELL=/bin/bash #Shell atribuído ao usuário.
DHOME=/home #Diretório a partir do qual serão criados os “homes”
SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários.
FIRST_UID=1000 #Número mínimo para UID
LAST_UID=29999 #Número máximo para UID
FIRST_GID=1000 #Número mínimo para GID
LAST_GID=29999 #Número máximo para GID
QUOTAUSER="" #Se o sistema de cotas estiver funcional, pode atribuir quota ao usuário criado.

Permissões

Há uma maneira de restringir o acesso aos arquivos e diretórios para que somente determinados usuários possam acessá-los. A cada arquivo e diretório é associado um conjunto de permissões. Essas permissões determinam quais usuários podem ler, e escrever (alterar) um arquivo e, no caso de ser um arquivo executável, quais usuários podem executá-lo. Se um usuário tem permissão de execução para um diretório, significa que ele pode realizar buscas dentro daquele diretório, e não executá-lo como se fosse um programa.

Quando um usuário cria um arquivo ou um diretório, o LINUX determina que ele é o proprietário (owner) daquele arquivo ou diretório. O esquema de permissões do LINUX permite que o proprietário determine quem tem acesso e em que modalidade eles poderão acessar os arquivos e diretórios que ele criou. O super-usuário (root), entretanto, tem acesso a qualquer arquivo ou diretório do sistema de arquivos.

O conjunto de permissões é dividido em três classes: proprietário, grupo e usuários. Um grupo pode conter pessoas do mesmo departamento ou quem está trabalhando junto em um projeto. Os usuários que pertencem ao mesmo grupo recebem o mesmo número do grupo (também chamado de Group Id ou GID). Este número é armazenado no arquivo /etc/passwd junto com outras informações de identificação sobre cada usuário. O arquivo /etc/group contém informações de controle sobre todos os grupos do sistema. Assim, pode -se dar permissões de acesso diferentes para cada uma destas três classes.

Quando se executa ls -l em um diretório qualquer, os arquivos são exibidos de maneira semelhante a seguinte:

> ls -l
total 403196
drwxr-xr-x 4 odilson admin 4096 Abr 2 14:48 BrOffice_2.1_Intalacao_Windows/
-rw-r--r-- 1 luizp admin 113811828 Out 31 21:28 broffice.org.2.0.4.rpm.tar.bz2
-rw-r--r-- 1 root root 117324614 Dez 27 14:47 broffice.org.2.1.0.rpm.tar.bz2
-rw-r--r-- 1 luizp admin 90390186 Out 31 22:04 BrOo_2.0.4_Win32Intel_install_pt-BR.exe
-rw-r--r-- 1 root root 91327615 Jan 5 21:27 BrOo_2.1.0_070105_Win32Intel_install_pt-BR.exe
>

As colunas que aparecem na listagem são:

  1. Esquema de permissões;
  2. Número de ligações do arquivo;
  3. Nome do usuário dono do arquivo;
  4. Nome do grupo associado ao arquivo;
  5. Tamanho do arquivo, em bytes;
  6. Mês da criação do arquivo; Dia da criação do arquivo;
  7. Hora da criação do arquivo;
  8. Nome do arquivo;

O esquema de permissões está dividido em 10 colunas, que indicam se o arquivo é um diretório ou não (coluna 1), e o modo de acesso permitido para o proprietário (colunas 2, 3 e 4), para o grupo (colunas 5, 6 e 7) e para os demais usuários (colunas 8, 9 e 10).

Existem três modos distintos de permissão de acesso: leitura (read), escrita (write) e execução (execute). A cada classe de usuários você pode atribuir um conjunto diferente de permissões de acesso. Por exemplo, atribuir permissão de acesso irrestrito (de leitura, escrita e execução) para você mesmo, apenas de leitura para seus colegas, que estão no mesmo grupo que você, e nenhum acesso aos demais usuários. A permissão de execução somente se aplica a arquivos que podem ser executados, obviamente, como programas já compilados ou script shell. Os valores válidos para cada uma das colunas são os seguintes:

  • 1 d se o arquivo for um diretório;-se for um arquivo comum;
  • 2,5,8 r se existe permissão de leitura;-caso contrário;
  • 3,6,9 w se existe permissão de alteração;-caso contrário;
  • 4,7,10 x se existe permissão de execução;-caso contrário;

A permissão de acesso a um diretório tem outras considerações. As permissões de um diretório podem afetar a disposição final das permissões de um arquivo. Por exemplo, se o diretório dá permissão de gravação a todos os usuários, os arquivos dentro do diretório podem ser removidos, mesmo que esses arquivos não tenham permissão de leitura, gravação ou execução para o usuário. Quando a permissão de execução é definida para um diretório, ela permite que se pesquise ou liste o conteúdo do diretório.

A modificação das permissões de acesso a arquivos e diretórios pode ser feita usando-se os utilitários:

  • chmod: muda as permissões de acesso (também chamado de modo de acesso). Somente pode ser executado pelo dono do arquivo ou pelo superusuário
    • Ex: chmod +x /home/usuario/programa : adiciona para todos os usuários a permissão de execução ao arquivo /home/usuario/programa
    • Ex: chmod -w /home/usuario/programa : remove para todos os usuários a permissão de escrita do arquivo /home/usuario/programa
    • Ex: chmod o-rwx /home/usuario/programa : remove todas as permissões de acesso ao arquivo /home/usuario/programa para todos os usuários que não o proprietário e membros do grupo proprietário
    • Ex: chmod 755 /home/usuario/programa : define as permissões rwxr-xr-x para o arquivo /home/usuario/programa
  • chown: muda o proprietário de um arquivo. Somente pode ser executado pelo superusuário.
    • Ex: chown roberto /home/usuario/programa: faz com que o usuário roberto seja o dono do arquivo
  • chgrp: muda o grupo dono de um arquivo. Somente pode ser executado pelo superusuário.
    • Ex: chgrp users /home/usuario/programa: faz com que o grupo users seja o grupo dono do arquivo /home/usuario/programa

Há também o utilitário umask, que define as permissões default para os novos arquivos e diretórios que um usuário criar. Esse utilitário define uma máscara (em octal) usada para indicar que permissões devem ser removidas. Exemplos:

  • umask 022: tira a permissão de escrita para group e demais usuários
  • umask 027: tira a permissão de escrita para group, e todas as permissões para demais usuários

Atividades:

Roteiro
  1. Crie o grupo turma.
  2. Crie o diretório /home/contas.
  3. Faça cópia dos arquivos a serem alterados: /etc/login.defs e /etc/default/useradd.
  4. Faça com que o diretório home dos usuários, a serem criados a partir de agora, seja por padrão dentro de /home/contas.
  5. Faça com que os usuários sejam criados com o seguinte perfil, por padrão:
    1. Expiração de senha em 15 dias a partir da criação da conta;
    2. Usuário possa alterar senha a qualquer momento;
    3. Data do bloqueio da conta em 7 dias após a expiração da senha.
    4. Inicie os avisos de expiração da senha 4 dia antes de expirar.
    5. Iniciar a numeração de usuários (ID) a partir de 1500.
  6. Crie um usuário com o nome de manoel, pertencente ao grupo turma.
  7. Dê ao usuário manoel a senha mane123.
  8. Acrescente ao perfil do usuário seu nome completo e endereço: Manoel da Silva, R. dos Pinheiros, 2476666.
  9. Verifique o arquivo /etc/passwd.
  10. Mude, por comandos, o diretório home do manoel de /home/contas/manoel para /home/manoel.
  11. Mude o login do manoel para manoelsilva.
  12. Logue como manoelsilva.
  13. Recomponha os arquivos originais do item 3.

Permissionamento de arquivos e grupos de usuários

  1. Crie a partir do /home 3 diretórios, um com nome aln (aluno), outro prf (professor) e o último svd (servidor).
  2. Crie 3 grupos com os mesmos nomes acima.
  3. Crie 3 contas pertencentes ao grupo aln: aluno1, aluno2, aluno3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/aln/. Por exemplo para o aluno1 teremos /home/aln/aluno1.
  4. Crie 3 contas pertencentes ao grupo prf: prof1, prof2, prof3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/prf/.
  5. Crie 3 contas pertencentes ao grupo svd: serv1, serv2, serv3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/svd/.
  6. Os diretórios dos alunos, e todo o seu conteúdo, devem ser visíveis e editáveis aos membros do próprio grupo, visíveis mas não apagáveis a todos os demais usuários da rede.
  7. Já os diretórios dos professores e servidores, devem ser mutuamente visíveis, mas não apagáveis, entre os membros dos grupos professores e servidores mas não deve ser sequer visível aos membros do grupo alunos.

Questionário conceitual de gerência

Aula 04 (20/08) - Processo de Boot e RAID

Conteúdo:

  • Processo de Boot
  • upstart
Roteiro

Boot:

O processo de inicialização do sistema operacional, chamado de boot. Tradicionalmente no Unix System V isto se faz com a definição de níveis de execução (runlevels) e uma tabela que descreve que processos ou serviços devem existir em cada nível. Os níveis de execução são:

  1. Monousuário (single-user), ou administrativo: usado para manutenção do sistema, admite somente o login do superusuário. Não inicia serviços de rede.
  2. Multiusuário com rede (parcial): admite logins de usuários, mas não ativa acesso a recursos de rede (como sistemas de arquivo remotos)
  3. Multiusuário com rede plena
  4. Não usado
  5. Multiusuário com rede plena e ambiente gráfico: ativa também o ambiente gráfico X11
  6. Reinício do sistema (reboot)

As distribuições Linux em geral adotam a inicialização no estilo Unix System V. No entanto, o Ubuntu usa um outro processo chamado de upstart. Esse serviço de inicialização confere maior flexibilidade e mesmo simplicidade à definição de que serviços devem ser executados. O upstart não usa o conceito de níveis de execução, mas devido à sua flexibilidade ele pode emular esse estilo de inicialização. Para o upstart, um serviço deve ser iniciado ou parado dependendo de uma combinação de eventos, sendo que um evento indica a ocorrência de uma etapa da inicialização.

O upstart é implementado pelo processo init (programa /sbin/init), que é o primeiro processo criado pelo sistema operacional. Quer dizer, logo após terminar a carga e inicialização do kernel, este cria um processo que executa o programa /sbin/init. O upstart lista o subdiretório /etc/init e procura arquivos com extensão .conf. Cada arquivo desses descreve um serviço a ser controlado pelo upstart. Por exemplo, o serviço tty2 é escrito no arquivo tty2.conf:

# tty2 - getty
#
# This service maintains a getty on tty2 from the point the system is
# started until it is shut down again.

start on runlevel [23]
stop on runlevel [!23]

respawn
exec /sbin/getty -8 38400 tty2

Abaixo segue o significado de cada linha:

  • start on runlevel [23]: o serviço deve ser iniciado quando ocorrerem os eventos "runlevel 2" ou "runlevel 3"
  • stop on runlevel [!23]: o serviço deve ser parado quando ocorrer qualquer evento "runlevel X", sendo X diferente de 2 e 3
  • respawn: o serviço deve ser reiniciado automaticamente caso termine de forma anormal
  • exec /sbin/getty -8 38400 tty2: a ativação do serviço implica executar o /sbin/getty -8 38400 tty2

Em linhas gerais, a descrição do serviço informa quando ele deve ser ativado (start), quando deve ser parado (stop), o tipo de execução (respawn para reinício automático, ou task para uma única execução), e que ação deve ser executada para ativar o serviço (exec para executar um programa, ou script .. end script para executar uma sequência de comandos de shell). Maiores detalhes podem ser lidos na página de manual do init.

  • RAID:
Roteiro

RAID (Redundant Array of Independent Disks) se destina a combinar discos de forma a incrementar o desempenho de entrada e saída e, principalmente, segurança dos dados contra defeitos em discos. RAID pode ser provido via software ou hardware (melhor este último). O Linux possui implementação por software em seu kernel, e neste HOWTO há uma descrição resumida.

Há vários níveis RAID, que correspondem a diferentes combinações de discos e partições. São eles:

  • LINEAR: concatena discos ou partições, mas não provê acréscimos de desempenho, nem de segurança dos dados (pelo contrário ! se um disco falhar, perdem-se todos os dados ...).
  • RAID 0 (ou striping): combina discos ou partições de forma alternada, para distribuir os acessos entre eles (aumentar desempenho). Porém, se um disco falhar perdem-se todos os dados. Requer um mínimo de dois discos.
    RAID 0.png
  • RAID 1 (ou mirroring): combina discos ou partições para espelhar dados (segurança). Requer o dobro de discos necessários para guardar os dados (ex: se há dois discos com dados, são necessários outros dois para espelhamento). Se todos os discos falharem, é possível continuar a operar usando os discos espelhados. Requer no mínimo dois discos.
    RAID 1.png
  • RAID 4 e 5: combina discos ou partições para ter redundância de dados (segurança), usando um esquema baseado em paridade. Se um disco falhar, é capaz de continuar operando (porém com desempenho reduzido até que esse disco seja reposto). RAID 4 na prática não se usa, pois apresenta um gargalo no disco onde residem os blocos de paridades. Requer no mínimo três discos.
    RAID 4.png RAID 5.png
  • RAID 6: combina discos ou partições para ter redundância de dados (segurança), usando um esquema baseado em paridade de forma duplicada. Isto garante que os dados se preservam mesmo que dois discos se danifiquem. Requer no mínimo quatro discos (pois há dois discos adicionais para paridades).
    RAID 6.png
  • RAID 10: combina RAID 1 e RAID 0, criando um volume com espelhamento (RAID 1), e depois fazendo o striping (RAID 0). Requer no mínimo quatro discos.
    RAID 10.png
  • RAID 01: combina RAID 0 e RAID 1, criando um volume com striping (RAID 0), e depois fazendo o espelhamento (RAID 1). Requer no mínimo quatro discos.
    RAID 01.png

Criação de um volume RAID no Linux:

  1. Usar o comando mdadm --create --verbose /dev/md0 --level=NIVEL_RAID --raid-devices=NUM_PARTICOES PARTICAO_1 PARTICAO_2 ...
    • NIVEL_RAID pode ser linear, 0, 1, 4, 5, 6, 10, mp, faulty (mais comuns são 0, 1 e 5).
    • NUM_PARTICOES é a quantidade de partições usadas no volume.
    • As partições são identificadas com o caminho (pathname) do dispositivo correspondente no Linux. Ex: a primeira partição do primeiro disco SCSI ou SATA é /dev/sda1, a segunda partição desse disco é /dev/sda2, a primeira partição do segundo disco SCSI ou SATA é /dev/sdb1, e assim por diante.
    • /dev/md0 é o caminho do dispositivo que corresponde ao volume RAID a ser criado. O primeiro volume RAID é /dev/md0, o segundo é /dev/md1, e assim por diante.
  2. Formatar o volume RAID: mkfs.ext4 -j /dev/md0
  3. Uma vez testado o volume RAID, sua configuração pode ser salva para posterior uso: mdadm --detail --scan >> /etc/mdadm/mdadm.conf
    • Isto é importante para que o volume possa ser ativado automaticamente no próximo boot.

Para ativar um volume já criado, basta executar mdadm --assemble caminho_do_volume. Ex: mdadm --assemble /dev/md0, mdadm --assemble /dev/md1.

Atividades:

Roteiro upstart

Um exemplo de criação de serviço no upstart

  1. Analisar alguns serviços no /etc/init/ e verificar o conteúdo dos upstarts. Tentar replicar a ideia para o faxineiro.
  2. Criar um serviço chamado faxineiro, para remover dos diretórios temporários (/var/tmp) todos os arquivos.
  3. Configurar esse novo serviço para executar no boot, logo após o serviço mountall.
  4. Reiniciar o sistema para testá-lo (executar reboot)
Roteiro RAID
  1. Dica: crie uma cópia de sua máquina virtual (snapshot - ferramenta do VirtualBox) antes de executar o roteiro, caso dê problemas a recuperação é muito simples.
  2. Crie duas partições de mesmo tamanho no disco /dev/sdb usando o cfdisk. Marque-as como sendo do tipo Linux RAID (fdisk t = "fd").
  3. Crie um volume RAID nível 1 com essas partições. Formate-o e monte-o em /mnt. Qual o tamanho total dele ?
  4. Desmonte e Pare o volume existente, com mdadm -S /dev/md0
  5. Crie um volume RAID nível 0 com essas partições. Formate-o e monte-o em /mnt. Qual o tamanho total dele ?
  6. Desmonte e Pare o volume existente, com mdadm -S /dev/md0
  7. Crie um volume RAID nível 5 com essas partições. Formate-o e monte-o em /mnt. Qual o tamanho total dele ?
  8. Desmonte e Pare o volume existente, com mdadm -S /dev/md0

Aula 05 (21/08) - Cron

Conteúdo:

  • Agendamento de tarefas
  • cron

Agendamento de tarefas administrativas com crontab. Apostila de Gerência de Redes, capítulo 19.

Roteiro

O cron é um programa de agendamento de tarefas. Com ele pode-se fazer a programação para execução de qualquer programa numa certa periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso comum do cron é o agendamento de tarefas administrativas de manutenção do seu sistema, como por exemplo, análise de segurança w backup. Estas tarefas são programadas para, todo dia, toda semana ou todo mês, serem automaticamente executadas através da crontab e um script shell comum. A configuração do cron geralmente é chamada de crontab.

Os sistemas Linux possuem o cron na instalação padrão. A configuração tem duas partes: uma global, e uma por usuário. Na global, controlada pelo root, o crontab pode ser configurado para executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte por usuário, cada usuário tem seu próprio crontab, sendo restringido apenas ao que o usuário pode fazer (e não tudo, como é o caso do root).

Uso do crontab

Para configurar um crontab por usuário, utiliza-se o comando crontab, junto com um parâmetro, dependendo do que se deseja fazer. Abaixo uma relação:

  • crontab -e: Edita a crontab atual do usuário logado
  • crontab -l: Exibe o atual conteúdo da crontab do usuário
  • crontab -r: Remove a crontab do usuário

Se você quiser verificar os arquivos crontab dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos usuários no diretório /var/spool/cron/crontabs . Por exemplo, a crontab do usuário aluno estará no arquivo /var/spool/cron/crontabs/aluno.

Existe também uma crontab global, que fica no arquivo /etc/crontab, e só pode ser modificado pelo root. Vamos estudar o formato da linha do crontab, que é quem vai dizer o que executar e quando. Vamos ver um exemplo:

30 12,22 * * *  /home/aluno/scripts/backup.sh >/dev/null 2>&1

A linha é dividida em campos separados por tabs ou espaço:

Campo Função
1o Minuto
2o Hora
3o Dia do mês
4o Mês
5o Dia da semana
6o Programa a ser executrado

Todos estes campos, sem contar com o 6o., são especificados por números. Veja a tabela abaixo para os valores destes campos:


Campo Função
Minuto 0-59
Hora 0-23
Dia do mês 1-31
Mês 1-12
Dia da semana 0-6 (0=domingo, 6=sábado)

Além destes temos também alguns parâmetros ativos:

@reboot = run at boot and reboot only

@yearly = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)

@annually = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)

@monthly = run at midnight on the first day of each month (equiv to 0 0 1 * *)

@weekly = run at midnight each Sunday (equiv to 0 0 * * 0)

@daily = run at midnight each day (equiv to 0 0 * * *)

@ midnight = run at midnight each day (equiv to 0 0 * * *)

@ hourly = run on the first second of every hour (equiv to 0 * * * *)


Então o que nosso primeiro exemplo estava dizendo? A linha está dizendo: "Execute o comando /root/scripts/backup.sh às 12:30 h e às 22:30h, todos os dias".

Vamos analisar mais alguns exemplos:

1,21,41 *       *       *       *       echo "Meu crontab rodou mesmo!"

Aqui está dizendo: "Executar o comando do sexto campo toda hora, todo dia, nos minutos 1, 21 e 41".

30      4       *       *       1       rm -rf /tmp/*

Aqui está dizendo: "Apagar todo conteúdo do diretório /tmp toda segunda-feira, as 4:30 da manhã."

45      19      1,15    *       *       /usr/local/bin/backup

Aqui está dizendo: "Executar o comando 'backup' todo dia 1 e 15 às 19:45.".

E assim pode-se ir montando inúmeros jeitos de agendamento possível. No arquivo do crontab global, o sexto campo pode ser substituído pelo nome do usuário, e um sétimo campo adicionado com o programa para a execução, como mostrado no exemplo a seguir:

*/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Aqui está dizendo: "Executar o mrtg como usuário root, de 5 em 5 minutos sempre."

0      19-23/2      *    *       *       /root/script

Aqui está dizendo: “Executar o 'script' entre as 19 e 23 de 2 em duas horas.”

Atividades:

Roteiro cron
  1. Crie uma regra cron que faça o backup (tar zipado) de todo o /etc para ser executada todos os dias às 02h30min. Adicione comentários no arquivo indicando a tarefa a ser executada.
  2. Crie uma regra cron para que seja feita uma limpeza total do /tmp todos os domingos as 03 h. Faça comentários no crontab para que outros usuários entendam o que foi feito.
  3. Crie uma regra cron para que seja eliminado o usuário visitante, bem como seu diretório home, todo dia 1° de janeiro as 00 h 30 min. Faça comentários.
  4. Crie uma regra cron para que seja criado novamente o usuário visitante todo dia 1° de janeiro a 01 h 00 min. Faça comentários.
  5. Agende o comando date para escrever/adicionar sua saída ao arquivo /root/date a cada minuto.
  6. Pressuponha que o script /root/abacaxi.sh exista, agende o mesmo para ser executado:
    1. De dois em dois dias às 11 h e 55 min.
    2. Todo dia 5 às 3 h e 50 min.
    3. No dia 14 de cada mês entre as 8 e 18 h, de hora em hora.

Aula 06 (03/09) - Configuração de interface de rede, rotas estáticas e NAT

Conteúdo:

  • Visão geral das redes de computadores
  • Configuração de interfaces de redes
  • Rotas estáticas
  • NAT
Roteiro

Ver capítulo 22 da apostila.

Visão geral de serviços e funções de rede típicos: Configuração de interfaces de rede. Noções de roteamento.

Visão geral de serviços de rede

Rede-servicos.jpg

  • DHCP: configuração automática de endereços IP em máquinas clientes
  • DNS: serviço de nomes, que associa nomes a endereços IP, entre outras finalidades.
  • LDAP: serviço de diretórios (um banco de dados hierárquico), para guardar informações administrativas, tais como usuários, grupos e contatos de email, usadas por outros serviços de rede.
  • HTTP: acesso a documentos em geral (uso mais notório para acesso a páginas Web)
  • FTP: transferência de arquivos
  • SMTP, IMAP4, POP3, LMTP: protocolos para envio de email e acesso a caixas de entrada
  • NFS e Samba: sistemas de arquivos de rede
  • Web proxy: controle de acesso e cache para acesso a WWW
  • NAT: tradução transparente de endereços IP, para mascarar endereços internos de uma rede (função de rede)
  • Filtro IP: restrições aplicadas a tráfego IP, visando melhorar o nível de segurança (função de rede)
  • SSH: acesso remoto seguro ao shell em um servidor
  • VPN: redes privativas virtuais

Interfaces de rede

Qualquer dispositivo (físico ou lógico) capaz de transmitir e receber datagramas IP. Interfaces de rede ethernet são o exemplo mais comum, mas há também interfaces PPP (seriais), interfaces tipo túnel e interfaces loopback. De forma geral, essas interfaces podem ser configuradas com um endereço IP e uma máscara de rede, e serem ativadas ou desabilitadas. Em sistemas operacionais Unix a configuração de interfaces de rede se faz com o programa ifconfig:

Para mostrar todas as interfaces:

root@gerencia:~> ifconfig -a
dsl0      Link encap:Point-to-Point Protocol
          inet addr:189.30.70.200  P-t-P:200.138.242.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:34260226 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37195398 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:19484812547 (18582.1 Mb)  TX bytes:10848608575 (10346.0 Mb)

eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37283974 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42055625 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20939614658 (19969.5 Mb)  TX bytes:18284980569 (17437.9 Mb)
          Interrupt:16 Base address:0xc000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:273050 errors:0 dropped:0 overruns:0 frame:0
          TX packets:273050 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:21564572 (20.5 Mb)  TX bytes:21564572 (20.5 Mb)
root@gerencia:~>

Para configurar uma interface de rede (que fica automaticamente ativada):

root@gerencia:~> ifconfig eth1 192.168.1.100 netmask 255.255.255.0

Para desativar uma interface:

root@gerencia:~> ifconfig eth1 down

Para ativar uma interface:

root@gerencia:~> ifconfig eth1 up

Ao se configurar uma interface de rede, cria-se uma rota automática para a subrede diretamente acessível via aquela interface. Isto se chama roteamento mínimo.

root@gerencia:~> ifconfig eth1 192.168.10.0 netmask 255.255.0.0
root@gerencia:~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
root@gerencia:~>

Pode-se associar mais de um endreço a uma mesma interface de rede. Isto se chama IP alias:

root@gerencia:~> ifconfig eth1:0 192.168.1.110 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1:1 192.168.2.100 netmask 255.255.255.0
root@gerencia:~> ifconfig -a
eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37295731 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42068558 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20942258027 (19972.0 Mb)  TX bytes:18294794452 (17447.2 Mb)
          Interrupt:16 Base address:0xc000

eth1:0    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000

eth1:1    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000
root@gerencia:~>

Configuração no boot

Todo sistema operacional possui alguma forma de configurar suas interfaces de rede, para que sejam automaticamente ativadas no boot com seus endereços IP. Por exemplo, em sistemas Linux Ubuntu (descrito em maiores detalhes em seu manual online).

A configuração de rede se concentra no arquivo /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth1
iface lo inet loopback
        address 127.0.0.1
        netmask 255.0.0.0

# a interface ethernet eth1
iface eth1 inet static
	address 192.168.1.100
	netmask 255.255.255.0
	gateway 192.168.1.254

# apelido para eth1
iface eth1:0 inet static
       address 192.168.5.100
       netmask 255.255.255.0

No Ubuntu deve-se em primeiro lugar desabilitar um serviço automático de atualização do /etc/resolv.conf, através do comando dpkg-reconfigure resolvconf, escolhendo a primeira opção como yes e as demais opções deixando o padrão. Em seguida edita-se o arquivo /etc/resolv.conf:

nameserver 200.135.37.65
nameserver 8.8.8.8

Esses arquivo é lido pelos scripts ifup e ifdown. Esses scripts servem para ativar ou parar interfaces específicas, fazendo todas as operações necessárias para isto:

# Ativa a interface eth1
ifup eth1

# Desativa a interface eth1
ifdown eth1

Para ativar, desativar ou recarregar as configurações de todas as interfaces de rede:

# desativa todas as interfaces de rede
sudo /etc/init.d/networking stop

# ativa todas as interfaces de rede
sudo /etc/init.d/networking start

# recarrega as configurações de todas as interfaces de rede
sudo /etc/init.d/networking restart

Rotas estáticas

Ver capítulo 23 da apostila.

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

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

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

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)

Outros programas úteis (ou ao menos interessantes):

  • iptraf: gera estatísticas de tráfego por interfaces de rede
  • iftop: mostra os fluxos em uma interface de rede
  • nstreams: analisa a saída do tcpdump, e revela os fluxos em uma rede
  • driftnet: analisa o tráfego em uma interface, e captura imagens, videos e audio

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

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. Para uso mais geral, com links permanentes, deve-se usar o alvo SNAT:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 200.135.37.66

Uma outra possibilidade é mapear para um endereço da rede interna um tráfego originado externamente. Por exemplo, pode haver um servidor na rede interna que precisa ser acessado externamente, porém ele não possui um endereço IP roteável. O NAT no Linux possui a função DNAT que pode fazer essa tarefa:

iptables -t nat -A PREROUTING -p tcp -d 200.135.37.66 --dport 8080 -i eth0 -j DNAT --to-destination 192.168.1.10:80

Nesse exemplo, datagramas com IP destino 200.135.37.66 e contendo um segmento TCP com port 8080 são desviados para o port 80 no IP 192.168.1.10. Quer dizer, o IP de destino desses datagramas é de fato substituído por 192.168.1.10, e o port de destino é mudado para 80.

Note que DNAT é aplicado a chain PREROUTING.

Com estas configurações o cliente acessa qualquer site na internet mas não pode ser acessado. Por isto alguns textos colocam NAT na categoria de técniccas de segurança. Apesar de NAT prover o isolamento entre rede externa e interna, a não ser para os tráfegos mapeados, não se pode usá-lo sozinho como proteção de uma rede. Quer dizer, não se pode prescindir de um bom firewall e políticas de segurança adequadas.

Verificando as tabelas A ferramenta conntrack permite o monitoramento da tabela ativa, ou seja, é possível visualizar quais as conexões abertas que estão fazendo uso do NAT. Exemplo:

conntrack -L --src-nat

Atividades:

Roteiro

A) Configurar interface de rede

  1. Verifique a configuração de sua interface de rede eth0 e/ou eth1, na sua máquina virtual. Se necessário corrija-a assim: ip 192.168.1.X, sendo X o número do computador + 100 (exemplo: para o micro 2 X=102), roteador default = 192.168.1.1.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.1.1. Tente pingar outras máquinas da rede.
    2. Tente também pingar o IP 200.135.37.65.
    3. Veja a tabela de rotas, usando netstat -rn.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 200.135.37.65.
  2. Configure sua máquina virtual para que a informação de rede, configurada manualmente acima, fique permanente. Quer dizer, no próximo boot essa configuração deve ser ativada automaticamente.
  3. Adicione um IP alias a sua interface eth0 ou eth1. Esse novo IP deve estar na subrede 10.0.0.0/24
    1. Tente pingar os computadores de seus colegas, usando ambos endereços: da rede 192.168.1.0/24 e da rede 10.0.0.0/24.
    2. Enquanto acontecem os pings, visualize o tráfego pela interface eth0 ou eth1, usando o programa tcpdump:
      # Mostra o tráfego ICMP que passa pela interface eth1
      tcpdump -i eth1 -ln icmp
      
    3. Pense em uma utilidade para IP alias ...

B) Coleta de tráfego

  1. Faça um ou mais pings para algum(ns) sítios e, com o uso de parâmetros apropriados, faça com que o tcpdump:
  2. Capture todos os pacotes da rede.
  3. Capture somente os pacotes gerados por sua máquina.
  4. Capture somente pacotes destinados à sua máquina.
  5. Capture pacotes destinados ou originados da máquina 200.135.37.65.
  6. Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados“.
  7. Se desejar instale e capture pacotes com o WireShark.

C) Tabelas estáticas de roteamento

Diagrama para construir tabelas de roteamento com maquinas virtuais.jpg

  1. Configure as interfaces de rede (uma interface virtual – ip alias) de sua máquina servidora, conforme números de IPs sugeridos na. Todas as máscaras de rede devem ser 255.255.255.0 ou /24. Neste caso o gateway será: 192.168.1.101.
  2. Configure sua máquina virtual servidora para rotear pacotes.
  3. Configure sua máquina virtual cliente para ser seu cliente de rede, conforme Figura.
  4. Montar as tabelas estáticas de roteamento de modo que todas as máquinas tenham acesso entre si (“pingando” ente elas).
  5. Faça testes. Se houver problemas usar tcpdump para monitorar individualmente as interfaces e verificar onde está o problema. Lembre-se que os pacotes devem ter rota de ida e volta, portanto o problema pode ser no seu roteador ou de seu vizinho. Uma boa sequência de testes é:
    1. Pingar entre cliente e roteador.
    2. Do cliente pingar a interface externa do roteador.
    3. Do cliente pingar a máquina do professor. Se funcionar até aqui seu roteador estará corretamente configurado.
    4. Do roteador pingar a interface externa de outro roteador.
    5. Do roteador pingar outro cliente.
    6. Do seu cliente pingar outro cliente.

D) NAT

  1. Desfaça as tabelas de roteamento e configure a máquina servidora para fazer NAT, nos mesmos moldes do item C).
  2. Faça testes “pingando” para redes externas e para as redes dos colegas.
  3. Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?

Aula 07 (10/09) - DNS

Conteúdo:

  • Serviço de tradução de nomes
DNS

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 [1])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.

Hierarquia-DNS.gif

(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) www.sj.ifsc.edu.br IN A 200.135.37.66
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 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"

Uma zona assim é composta de um conjunto de registros com todas as informações dos domínios nela contidos. O conteúdo de uma zona, contendo o domínio example.com, pode ser visualizado abaixo:

example.com  86400  IN	 SOA ns1.example.com.	hostmaster.example.com. (
			      2002022401 ; serial
			      10800 ; refresh
			      15 ; retry
			      604800 ; expire
			      10800 ; minimum
			     )
       IN  NS     ns1.example.com.
       IN  NS     ns2.smokeyjoe.com.
       IN  MX  10 mail.another.com.
       IN  TXT   "v=spf1 mx -all"

ns1    IN  A      192.168.0.1
www    IN  A      192.168.0.2
ftp    IN  CNAME  www.example.com.

bill   IN  A      192.168.0.3
fred   IN  A      192.168.0.4

Atividades:

Roteiro

O objetivo é montar a seguinte estrutura:

Diagrama DNS.png

Vamos configurar e testar um servidor DNS. Para tanto montaremos a estrutura indicada no diagrama, onde cada máquina será um servidor DNS, com um domínio próprio e, ao mesmo tempo, será cliente do servidor DNS da máquina 192.168.3.101. Esta, por sua vez, será servidor: um servidor master do domínio redes.edu.br e servidor escravo, recebendo automaticamente uma cópia das zonas dos servidores masters, de todos os demais domínios criados. Esta, será também a única máquina com servidor DNS com zona reversa. Sendo assim todos os domínios, diretos e reversos, serão visíveis por meio deste servidor.

  1. Entendendo o serviço DNS. Antes de qualquer reconfiguração faça testes usando a ferramenta “dig”:
    dig -x 200.135.37.65;
    dig www.das.ufsc.br;
    dig +trace www.polito.it;
    dig @200.135.37.65 www.polito.it.
    
  2. Siga o roteiro da apostila e inicialize o servidor DNS, criando o domínio redesX.edu.br (onde X é o último dígito do ip de sua máquina). Por questões práticas, acima mencionadas, não crie zona reversa. Adaptações para a nova versão do Bind juntamente com Ubuntu:
    1. apt-get install bind9. Instalando o Bind.
    2. vi /etc/bind/named.conf.local. Editando o equivalente ao named.conf da apostila.
    3. vi /etc/bind/db.redesX. Editando o equivalente ao /var/lib/named/var/named/master/redesX.zone da apostila.
  3. O servidor DNS deverá responder pelos nomes: da própria máquina: m2 à m15, www, ftp e mail, todos apontando para o mesmo IP.
  4. No /etc/resolv.conf declare nameserver 192.168.3.101.
  5. Faça testes “pingando” nos nomes, ex:
    ping www.redes4.edu.br
    ping m4.redes4.edu.br
    ping www.redes3.edu.br
    
  6. Teste o DNS reverso.
  7. Faça testes usando a ferramenta “dig”:
    dig -x número.do.ip
    dig maquina.dominio.extensao.br;
    dig +trace maquina.dominio.extensao.br;
    dig @servidor.de.nomes maquina.dominio.extensao.br.