PJI11103-2015-2

De MediaWiki do Campus São José
Revisão de 12h08min de 18 de março de 2016 por Simara.sonaglio (discussão | contribs) (AVALIAÇÕES)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

PJI11103-2015-2

Índice

Diário de aula de PJI - 2015-2 - Prof. Simara Sonaglio

Dados Importantes

Professor: Simara Sonaglio
Email: simara.sonaglio@ifsc.edu.br
Atendimento paralelo: terças e quintas das 18 às 19 horas. Local: Lab. Redes II.

  • Avaliação
    • Avaliações individuais em cada etapa do projeto com conceito numérico: A, B, C e D. Conceito mínimo necessário em cada avaliação: C.
    • Avaliação baseada no projeto. Avaliação individual com acesso ao servidor da equipe e com questões relativas aos serviços e configurações do mesmo.
    • Um ou mais conceitos D implica na realização da reavaliação: uma única avaliação a ser realizada no último dia de aula.

IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação e aguardar o parecer da coordenação.

AVALIAÇÕES

Avaliação 1 142002047-1 142002006-4 142003381-6 142001234-7 141000804-5 142003354-9 142001326-2 142006774-5
Prova 1 9,75 5,5 10 7,75 9 10 8,25 9,75
Lista 10 10 10 9 10 10 10 10
Média Av 1 9,8 6,4 10 8 9,2 10 8,6 9,8
Conceito Av1 A C A B A A B A


Avaliação 2 142002047-1 142002006-4 142003381-6 142001234-7 141000804-5 142003354-9 142001326-2 142006774-5
DNS e Apache 9 9 8 10 9 9 8 7
FTP e Correio 10 6 9 8 9 8 8,5 8
Prática 10 10 10 9 9 9 9 9
Média Av 2 9,67 8,33 9 9 9 8,67 8,5 8
Conceito Av2 A B A A A B B B


Relatório 142002047-1 142002006-4 142003381-6 142001234-7 141000804-5 142003354-9 142001326-2 142006774-5
Conceito B B B B B B B B


Conceitos finais

Relatório 142002047-1 142002006-4 142003381-6 142001234-7 141000804-5 142003354-9 142001326-2 142006774-5
Conceito A B A B B A B B

Plano de Ensino

Diário de aulas

Projeto-PJI11103-2015-2.png


IPs e sub-domínios DNSs destinados às respectivas equipes:

  1. 200.135.37.121 - prji1.sj.ifsc.edu.br
  2. 200.135.37.122 - prji2.sj.ifsc.edu.br
  3. 200.135.37.123 - prji3.sj.ifsc.edu.br


Aula 1 - 06/10/15: Apresentação da disciplina

Apresentação
  • Apresentação da disciplina, plano de aula, trabalhos e métodos de avaliação.
  1. Auto apresentação
  2. Apresentação da Wiki
  3. Ementa
  4. Proposta de Cronograma de atividades
  5. Apresentação do modelo de aulas a ser adotado
    1. Projeto
  6. Avaliações
Revisão dos comandos básicos
Objetivo: Revisão dos comandos básicos, familiarização e fixação do conteúdo.

Material Auxiliar (Comandos básicos 01) (Comandos básicos 02 ) ( Slides Aula Introdução ao Linux Tulio.)

  1. Abra um terminal, no qual todos os passos a seguir serão executados.
  2. Execute o comando pwd. Escreva a saída resultante deste comando. Este será o seu diretório raiz.
  3. Crie um diretório de trabalho, por exemplo execute mkdir revisao. OBS: todos os diretórios e arquivos que você for trabalhar daqui para frente, faça dentro da sua pasta REVISAO.
  4. A partir do seu diretório REVISAO, crie a seguinte árvore de diretórios, utilizando o comando mkdir e o conceito de caminho relativo.
    1. Brasil
      1. regiaoNorte
        1. amazonas
        2. acre
      2. regiaoSul
        1. parana
        2. santaCatarina
  5. Entre no diretório regiaoNorte.
  6. Liste os diretórios existentes dentro do diretório atual, e anote a saída.
  7. Copie o diretório amazonas com o nome para.
  8. Execute o comando ls, e escreva abaixo a saída resultante deste comando.
  9. Entre no diretório regiaoSul, e renomeie o diretório parana para o nome rioGrandeSul.
  10. Liste os diretórios e escreva abaixo a saída resultante deste comando.
  11. Volte para o diretório raiz.
  12. Liste o conteúdo do diretório raiz e redirecione a saída para um arquivo com o nome saidaDirRaiz.arq e que este arquivo fique dentro do diretório amazonas.
  13. Liste o conteúdo do seu diretório REVISAO, e redirecione a saída para um arquivo com o nome saidaRevisao.arq e que este arquivo fique dentro do diretório amazonas.
  14. Liste o conteúdo do diretório regiaoSul e redirecione sua saída para um arquivo com o nome estados.sul e que este arquivo fique dentro do diretório amazonas.
  15. Vá até o diretório amazonas, execute o comando cat /etc/services e more /etc/services (um de cada vez). Qual a diferença entre os dois comandos?
  16. Apague os arquivos terminados em .arq e .sul.
  17. Verifique qual é o diretório corrente e, caso não seja o diretório home (/home/aluno) do seu usuário, vá para o mesmo.
  18. Liste o conteúdo do diretório home do seu usuário.
  19. Verifique se há a ocorrência da palavra “Protocol” no arquivo /etc/protocols.
  20. Liste as doze primeiras linhas do arquivo /etc/protocols.
  21. Liste as quinze últimas linhas do arquivo /etc/protocols.
  22. Mostre quantas linhas, palavras e caracteres possui o arquivo /etc/protocols.
  23. Quantos caracteres têm as cinco primeiras linhas do arquivo /etc/passwd.
  24. Quantas palavras têm as 8 ultimas linhas do arquivo /etc/protocols.
  25. Mostre as linhas de 6 a 10 do arquivo /etc/protocols.
  26. Mostre as 50 primeiras linhas do arquivo /etc/protocols na ordem alfabética inversa.
  27. Mostre as 10 últimas linhas do arquivo /etc/passwd na ordenado alfabeticamente.
  28. Entre os processos que estão rodando, mostre os que possuem a string “usr”.
  29. Dentre as 30 primeiras linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “protocol”.
  30. Dentre as 20 ultimas linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “Protocol”.
  31. Mostre apenas as 5 ultimas linhas que possuem a string “Protocol” do arquivo /etc/protocols.
  32. Conte quantas linhas possuem a palavra “root” dentre os processos que estão rodando.
Editor VI

(Material de Apoio)

Objetivo: Familiarização com o editor e ser capaz de executar comandos simples, porém úteis para manipulação de arquivos.

  1. Crie um arquivo com o editor VI com o nome de poema.txt, e que dentro dele esteja o texto abaixo:

Desejo que você Não tenha medo da vida, tenha medo de não vivê-la. Não há céu sem tempestades, nem caminhos sem acidentes. Só é digno do pódio quem usa as derrotas para alcançá-lo. Só é digno da sabedoria quem usa as lágrimas para irrigá-la. Os frágeis usam a força; os fortes, a inteligência. Seja um sonhador, mas una seus sonhos com disciplina, Pois sonhos sem disciplina produzem pessoas frustradas. Seja um debatedor de ideias. Lute pelo que você ama.</syntaxhighlight>

  1. Salve o arquivo e saia do editor.
  2. Copie o arquivo do item anterior com o nome editadoPoema.txt.
  3. Entre no arquivo editadoPoema.txt, e saia sem salvar.
  4. Entre novamente no arquivo editadoPoema.txt, e no modo insert, faça uma alteração qualquer (Ex: deixe duas linhas em branco no início do arquivo). Saia do editor sem salvar a alteração feita.
  5. Entre no arquivo editadoPoema.txt, copie todo o poema e cole logo abaixo, sem deixar espaço entre os textos, utilizando os comandos nyy e p. Salve e saia do editor.
  6. Entre no arquivo editadoPoema.txt e exclua as 2 primeiras linhas. Desfaça a alteração, salve e saia do editor.
  7. Entre no arquivo editadoPoema.txt e exclua as 9 primeiras linhas. Salve as alterações e saia do editor.
  8. Entre no arquivo poema.txt e procure pela palavra sonhos, utilizando o comando /palavra_procurada. Navegando pela pesquisa com o comando n, responda quantas ocorrências dessa palavra existem no texto?
  9. No modo last line, substitua a palavra produzem por geram do arquivo poema.txt.
  10. No arquivo poema.txt, substitua todas as ocorrências da palavra digno por DIGNO.
  11. No arquivo editatoPoema.txt, copie todo o texto e cole 3 vezes, um embaixo do outro. Salve e saia do editor.
  12. Com o comando grep, procure pela palavra sonhos no arquivo do item acima. Em quantas linhas esta palavra aparece?
  13. Utilize o comando head para visualizar o começo do texto do arquivo editadoPoema.txt.
  14. Com o comando tail visualize o final do texto do arquivo editadoPoema.txt.
  15. No arquivo editadoPoema.txt, utilizando o comando sed substitua a palavra disciplina por DISCIPLINA. Em seguida, visualize o conteúdo do arquivo e responda: as alterações feitas pelo comando foram salvas no arquivo?
  16. Com o comando sort, ordene alfabeticamente o texto do arquivo editadoPoema.txt e redirecione a saída deste comando para um novo arquivo, chamado de poemaOrdenado.txt.
  17. Quantas linhas possui o arquivo poemaOrdenado.txt?
  18. Entre no arquivo editadoPoema.txt e insira o conteúdo do arquivo poemaOrdenado.txt logo abaixo do texto que ele já contém.
  19. Entre no arquivo poema.txt e salve-o com outro nome.

Gabarito 1 vi poema.txt editar texto ESC :wq ==> salva e sai 2 cp poema.txt editadoPoema.txt 3 ESC :q 4 ESC :q! 5 ESC 20yy ==> copia 20 linhas ESC G ==> vai ao final do arquivo ESC p ==> cola o texto 6 ESC 2dd ==> apaga 2 linhas ESC u ==> desfaz (undo) o último comando ESC wq! 7 ESC 9dd ESC wq! 8 ESC /sonhos 9 ESC :s/produzem/geram 10 ESC :%s/digno/DIGNO/g 11 ESC 30yy ESC p ESC p ESC p ESC wq 12 grep sonhos editadoPoema.txt | wc -l 13 head editadoPoema.txt 14 tail editadoPoema.txt 15 sed 's/disciplina/DISCIPLINA/g' Não sed -i 's/disciplina/DISCIPLINA/g' Sim 16 sort editadoPoema.txt > poemaOrdenado.txt 17 wc -l poemaOrdenado.txt 18 vi editadoPoema.txt ESC :r poemaOrdenado.txt 19 vi poema.txt ESC w outroNome.txt </syntaxhighlight>

Aula 2 - 08/10/15: Formatação, instalação e início da configuração do servidor principal

Formatação, instalação e início da configuração do servidor principal

O objetivo inicial é instalar e configurar basicamente o sistema operacional na máquina que atuará como principal servidor da rede.

Instalando o sistema operacional

As etapas básicas consistem em:

  1. Conectar todos os periféricos mínimos na torre recebida e ligá-la à tomada.
  2. Instalar o sistema operacional lendo com atenção todas as mensagens recebidas e escolhendo adequadamente as opções, com as seguintes características:
    1. Na etapa de formação escolha formatação manual ou avançada e crie a seguinte tabela de partição: i) / 30 GB ext4; i) /home 30 GB ext4; i) swap 4 GB swap; /var "espaço restante" ext4.
    2. Se necessário configure manualmente os IPs, conforme passado pelo prof.
    3. Opte por atualizar automaticamente e baixar aplicativos de terceiros.
    4. Crie uma conta (que será definitiva) para um dos usuários da equipe, com o respectivo login e senha.
    5. Aguarde a finalização da instalação e reinicie a máquina.
  3. Logue na máquina com a conta criada.

Aula 3 - 13/10/15: Criação de usuários e grupos e permissionamento de arquivos

Criação de usuários e grupos e permissionamento de arquivos

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.

Slides Aula Tulio: Slides Aula Usuários, Grupos e Permissões

Usuários e grupos

Um usuário Linux é uma entidade que possui uma identificação no sistema onde os principais parâmetros são: login, senha, e número de identificação. Estas informações permitem ao Linux controlar como o acesso é garantido aos usuários e o que eles podem fazer depois de obter a permissão de acesso. Um grupo é um conjunto de usuários. Cada grupo também possui identificação única no sistema, um nome e um número. O administradores de sistemas normalmente fazem controle de acesso por meio dos grupos.

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 -m roberto : cria o usuário roberto juntamente com o diretório (-m --makedir).
    • 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 -m -d /usuarios/roberto -s /bin/tcsh roberto : cria o usuário roberto com nome completo "Roberto de Matos", 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 -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 ...)
    • Ex: usermod -l robertomatos roberto : modifica o login do usuário roberto
    • Ex: usermod -m ... : cria o diretório home do usuário roberto
    • Ex: usermod -c "Roberto Matos, R. dos Navegantes, 33333333" : atribui comentários ao usuário roberto
  • passwd: modifica a senha de usuário
    • Ex: passwd roberto
  • login: logo como outro usuário. Tem de estar como root
    • Ex: login roberto
  • groupadd: adiciona um grupo
    • Ex: groupadd ger: cria o grupo ger
  • groupdel: remove um grupo
    • Ex: groupdel ger: remove o 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.

Atividade

Esta parte da atividade cada aluno executa individualmente em sua máquina, fazendo uso da devida máquina virtual (PRJ3).


  1. Crie o grupo turma.
  2. Crie o diretório /home/contas.
  3. Copie dos arquivos /etc/login.defs, /etc/default/useradd e /etc/adduser.conf para o /home/aluno.
  4. Modificando os arquivos /etc/login.defs, faça com que os usuários sejam criados com o seguinte perfil, por padrão:
    1. Iniciar a numeração de usuários (ID) a partir de 1500.
  5. Modificando os arquivos /etc/adduser.conf, faça com que os usuários sejam criados com o seguinte perfil, por padrão:
    1. O diretório home dos usuários seja /home/contas.
  6. Crie um usuário com o nome de jose usando o comando adduser, pertencente ao grupo turma.
  7. Dê ao usuário manoel a senha jose123.
  8. Confirme a correta criação do usuário jose.
     tail /etc/passwd
    
  9. Confirme se o diretório home de jose foi criado corretamente dentro de /home/contas.
  10. Crie o diretório manoel em /home/contas.
  11. Crie um usuário com o nome de manoel usando o comando useradd. Deve-se ao criar o usuário definir os seguintes parâmentros:
    1. Pertencer ao grupo turma;
    2. O diretório home deve ser /home/contas/manoel;
    3. Configurar o shell do usuário como sendo /bin/bash;
    4. Observar qual a diferença entre os comandos adduser e useradd.
       useradd -g turma -d /home/contas/manoel -s /bin/bash manoel
      
  12. Dê ao usuário manoel a senha mane123.
     passwd manoel
    
  13. Acrescente, por comandos, ao perfil do usuário seu nome completo e endereço: Manoel da Silva, R. dos Pinheiros, 2476666.
     usermod -c "Manoel da Silva, R. dos Pinheiros, 2476666" manoel
    
  14. Verifique o arquivo /etc/passwd e confirme se o usuário manoel está OK.
  15. Mude, por comandos, o diretório home do manoel de /home/contas/manoel para /home/manoel.
     usermod -d /home/manoel manoel
    
  16. Verifique o arquivo /etc/passwd e confirme a alteração.
  17. Logue como manoel e verifique as mensagens na tela.
     login manoel
    
  18. Crie o diretório /home/manoel e tente logar novamente.
  19. Mude o login do manoel para manoelsilva.
     usermod -l manoelsilva manoel
    
  20. Crie o diretório /home/manoel e tente logar novamente.
  21. Logue como manoelsilva.
  22. Recomponha os arquivos originais do item 3.

Permissionamento

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

Aula 4 - 15/10/15: Permissionamento de arquivos

Permissionamento de arquivos

Atividade

  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 de usuários 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. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  6. Crie senhas para os usuários.
  7. Logue com o usuário aluno1 e crie um arquivo com o comando touch chamado aluno1.txt. Execute o comando echo "Teste aluno1" > aluno1.txt. Saia do usuário aluno1.
  8. 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.
  9. Logue com a conta Aluno2. De um ls -l dentro do diretório home do usuário Aluno1. Dê um cat no arquivo aluno1.txt.
  10. Posteriormente, tente dar um echo "Teste Aluno2" >> aluno1.txt. Foi possível executar este comando? Se não, por quê?
  11. Deslogue do usuário Aluno2
  12. Logue com Prf1 e crie um arquivo com o comando touch chamado prf1.txt. Execute o comando echo "Teste prf1" > prf1.txt. Saia do usuário Prf1.
  13. 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.
  14. Logue com um outro usuário Prf e teste se você consegue listar o conteúdo do diretório home do usuário Prf1, exibir o conteúdo do arquivo criado acima e escrever algo neste mesmo arquivo.
  15. Logue com o usuário servidor1 e de um ls -l dentro do diretório home do usuário prf1. Dê um cat no arquivo prf1.txt. Tente editar o arquivo.
  16. Logue com um usuário aluno e de um ls -l dentro do diretório home do usuário prf1. Foi possível executar este comando? Se não, por quê?

Aula 5 - 20/10/15: SSH

SSH

Ver capítulo 33 da apostila. Gabarito do roteiro Gabarito.

Habilitando acesso remoto com SSH

Em informática, o Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma máquina remota. Possui as mesmas funcionalidades do TELNET, com a vantagem da conexão entre o cliente e o servidor ser criptografada, ou seja, mais segura. O SSH faz parte da suíte de protocolos TCP/IP que torna segura a administração remota de um servidor Linux/Unix.

O scp (Secure Copy) é uma maneira segura de fazer cópias de arquivos e diretórios usando o protocolo SSH.

Atividade

Atividade individual, cada aluno em sua máquina virtual (PRJ)

  1. Instale o SSH em sua máquina.
  2. De sua máquina real conecte na máquina virtual.
     ssh aluno@192.168.2.X
    
  3. Deslogue da máquina remota.
  4. Crie uma senha para o usuário root utilizando o comando passwd.
  5. Tente logar com o usuário root na máquina remota. Foi possível?
  6. Habilite o login do root.
     vi /etc/ssh/sshd_config 
       PermitRootLogin yes
    
  7. Reinicie o serviço
     service ssh restart
    
  8. Tente logar como root e em sequência deslogue.
  9. Desfaça a alteração em PermitRootLogin.
  10. Tente logar com o usuário root novamente. Foi possível?
  11. Remova a senha do usuário root para que não seja mais possível logar utilizando-a.
  12. De sua máquina real conecte e faça testes diversos.
     ssh aluno@192.168.2.X
    
  13. Habilite o acesso somente para um conjunto de usuários (desafio).
  14. Teste.
  15. Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários (desafio).
  16. Teste.
  17. Instale o SSH em sua máquina virtual com ambiente gráfico, Ip 192.168.2.X.
  18. Habilite e desabilite o X11Forwarding.
  19. Da máquina real teste esta funcionalidade:
     ssh -X aluno@192.168.2.X 
      firefox
    
  20. Teste a funcionalidade do scp, copiando arquivos locais para o servidor e vice-versa.
  21. Teste a execução de comandos no seu servidor, sem "sair" do cliente.
  22. Faça testes fornecendo usuário e/ou senha errados e verifique o log:
     tail /var/log/auth.log
    
  23. Permitindo acesso ao serviço somente para algumas máquinas:

vi /etc/hosts.allow

     sshd: 192.168.X.X

vi /etc/hosts.deny

     sshd: ALL

Aula 6 - 22/10/15: Configurações no servidor

Configurações no servidor

Configuração básica da interface de rede do servidor

Ver capítulo 22 da apostila.

  1. vi /etc/network/interfaces
  2. This file describes the network interfaces available on your system
  3. and how to activate them. For more information, see interfaces(5).
  1. The loopback network interface

auto lo iface lo inet loopback

       address 127.0.0.1
       netmask 255.0.0.0

  1. a interface ethernet eth0

auto eth0 iface eth0 inet static address 200.135.37.12X netmask 255.255.255.192 gateway 200.135.37.126

       dns-nameservers 200.135.37.65

</syntaxhighlight>

Onde X varia de 1 a 3. Ou seja, o primeiro servidores terá o IP de final .121, o segundo .122 e o terceiro .123.

  1. ifdown -a && ifup -a

Conferindo e aprendendo sobre instalação de pacotes

Slide). Página oficial do apt-get

É necessário estar com a rede funcional. Teste com o comando:

ping www.ifsc.edu.br
  1. Com o apt-get --help veja quais as opções possíveis que o instalador de pacotes do Ubuntu fornece.
  2. Sincronize o sistema.
  3. Atualize as versões de todos os pacotes instalados no sistema.
  4. Com o apt-cache search procure por sudoku, escolha o sudoku (nenhum outro) e instale-o. Após a instalação execute o programa instalado (digite o nome do pacote instalado) e veja se foi instalado corretamente (se rodou).
  5. Remova o programa instalado no item anterior. Confira se ele realmente foi removido.

Instalar o SSH no servidor

Com o comando apt-get instale o SSH e teste a conexão remotamente.

Criar usuários no servidor

Com os membros da equipe proponham e criem:

  1. Criem uma conta para cada membro da equipe com poder de comando sudo.
  2. Política de segurança a ser empregada para os usuários as serem criados por convite dos membros da equipe (familiares e amigos). Criem uma conta neste padrão, por hora denominada visitante.
  3. Uma conta para a professora, com direito a executar comandos via sudo.

Liberação de acesso SSH

Liberem o acesso SSH somente para pessoal autorizado (membros do grupo e professora).

Testem o acesso.

Aula 7 - 27/10/15: Interfaces de rede e rotas estáticas

Interfaces de rede e rotas estáticas

Apostila, capítulo 22.

Para adicionarmos uma máquina à rede é obrigatória a configuração de no mínimo os seguintes parâmetros: endereço ip, máscara de rede. Com estes dois parâmetros a máquina já se comunica com outras máquinas da rede local. Para uma configuração completa é necessário configurarmos ainda o nome de máquina, o servidor de nomes (DNS) e o roteador padrão (default gateway). Todos estes parâmetros de rede podem ser configurados estaticamente ou por meio de um servidor DHCP (dinamicamente). No caso de servidores de rede é praticamente obrigatório, para alguns serviços é obrigatório, que a configuração seja estática. Para a maioria dos clientes a configuração clássica é como cliente DHCP. Nesta aula iremos nos concentrar na configuração estática de rede.

Interface 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

Os scripts ifup e ifdown servem para ativar ou parar interfaces específicas, fazendo todas as operações necessárias para isto:

# Desativam e ativam todas as interfaces de rede
ifdown -a && ifup -a

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 (ou: route -n)
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 endereç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
        dns-nameservers 200.135.37.65

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

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

# Desativam e ativam todas as interfaces de rede
ifdown -a && ifup -a

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

Para configurar a máquina para repassar pacotes entre as interfaces (rotear) deve-se setar o bit do ip_forward, com o comando:

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

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

Atividade

A) Configurar interface de rede

  1. Verifique a configuração de sua interface de rede eth0, na sua máquina virtual. Se necessário corrija-a assim: ip 192.168.2.X, sendo X o número do computador + 100 (exemplo: para o micro 2 (M2) X=102), roteador default = 192.168.2.1. Nameserver 200.135.37.65.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.2.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 ou route -n.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 200.135.37.65. Se o traceroute não estiver instalado insta-le-o (apt-get install traceroute).
  2. Configure sua máquina virtual servidora 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. Esse novo IP deve ser configurado para 10.0.0.X/24 (X = item 1).
    1. Tente pingar os computadores de seus colegas, usando ambos endereços: da rede 192.168.2.0/24 e da rede 10.0.0/24.
    2. Enquanto acontecem os pings, visualize o tráfego pela interface eth0, 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:
    1. Capture todos os pacotes da rede.
    2. Capture somente os pacotes gerados por sua máquina.
    3. Capture somente pacotes destinados à sua máquina.
    4. Capture pacotes destinados ou originados da máquina 200.135.37.65.
    5. Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados“.

C) Tabelas estáticas de roteamento

Diagrama para construir tabelas de roteamento com maquinas virtuais-rede-2.jpg

  1. Configure as interfaces de rede (uma interface virtual – ip alias) de sua máquina servidora, conforme números de IPs sugeridos na Figura. Todas as máscaras de rede devem ser 255.255.255.0 ou /24. Não configure gateway.
  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 para todas as redes de todos os seus colegas, de modo que todas as máquinas cliente 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 (servidor).
    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.

Aula 8 - 29/10/15: Interfaces de rede e rotas estáticas

Interfaces de rede e rotas estáticas

Atividade

A) Configurar interface de rede

  1. Verifique a configuração de sua interface de rede eth0, na sua máquina virtual. Se necessário corrija-a assim: ip 192.168.2.X, sendo X o número do computador + 100 (exemplo: para o micro 2 (M2) X=102), roteador default = 192.168.2.1. Nameserver 200.135.37.65.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.2.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 ou route -n.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 200.135.37.65. Se o traceroute não estiver instalado insta-le-o (apt-get install traceroute).
  2. Configure sua máquina virtual servidora 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. Esse novo IP deve ser configurado para 10.0.0.X/24 (X = item 1).
    1. Tente pingar os computadores de seus colegas, usando ambos endereços: da rede 192.168.2.0/24 e da rede 10.0.0/24.
    2. Enquanto acontecem os pings, visualize o tráfego pela interface eth0, 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:
    1. Capture todos os pacotes da rede.
    2. Capture somente os pacotes gerados por sua máquina.
    3. Capture somente pacotes destinados à sua máquina.
    4. Capture pacotes destinados ou originados da máquina 200.135.37.65.
    5. Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados“.

C) Tabelas estáticas de roteamento

Diagrama para construir tabelas de roteamento com maquinas virtuais-rede-2.jpg

  1. Configure as interfaces de rede (uma interface virtual – ip alias) de sua máquina servidora, conforme números de IPs sugeridos na Figura. Todas as máscaras de rede devem ser 255.255.255.0 ou /24. Não configure gateway.
  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 para todas as redes de todos os seus colegas, de modo que todas as máquinas cliente 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 (servidor).
    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.

Aula 9 - 03/11/15: NAT e DHCP

NAT e DHCP

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

D) NAT

  1. Desfaça as tabelas de roteamento.
  2. Configure a máquina cliente com os parâmetros:
    1. IP, conforme o modelo da Figura
    2. máscara: 255.255.255.0 ou /24
    3. default gw: ip_interno_do_seu_servidor
    4. nameserver:200.135.37.65
  3. Configure a máquina servidora para encaminhar pacote de uma interface a outra (ip_forward).
  4. Configure a máquina servidora 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. ...).
  5. 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.
  6. Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?

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 -y dhcp3-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 = 1 para M1, 2 para M2, ..., 13 para M13 e 14 para M14.
    default-lease-time 600;
    max-lease-time 7200;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.2.255;
    option routers 192.168.2.1;
    option domain-name-servers 200.135.37.65;
    
    subnet 192.168.2.0 netmask 255.255.255.0 {
       range 192.168.2.X1 192.168.2.X5;
    }
    
  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:

Aula 10 - 05/11/15: Lista de exercícios

Lista de exercícios

Lista 1

Entregar em: 10/11/2015

Aula 11 - 10/11/15: DNS

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.

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) 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:

$TTL  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

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. SOA – é o preâmbulo, o 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 ou seja debian.com.br) a diferença de usar o arroba é que ele será repetido automaticamente nas demais linhas caso não seja informado outro nome de zona, depois 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. Em resumo um registro de recurso é uma tupla (linha) contendo 5 campos, sendo que alguns podem ser omitidos, seguem a seguinte ordem: Domain Name Informa o domínio ao qual o registro se aplica, existem muitos registros para cada domínio, e cada cópia do banco de dados armazena informações sobre vários domínios, esse campo é a chave de pesquisa primária utilizada para atender às consultas Time_to_live indica a estabilidade do registro, é dado em segundos Class caso esteja relacionado a internet seu valor será sempre IN Type informa o tipo de registro, dentre os mais importantes podemos os que aparecem na segunda tabela.

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 que o servidor de DNS primário irá armazenar, informamos no arquivo em questão o ns1.debian.com.br. e o ns2.debian.com.br. Informamos também um registro do tipo MX (Mail Exchanger) com prioridade 10 (quanto menor o número da prioridade maior será a prioridade dada ao servidor de e-mail no recebimento de e-mails). E por último foram feitas as associações entre nameserver e seus respectivos IP’s.

Comando útil

Comando para recarregar os arquivos de configuração e zonas:

 rndc reload

Atividade

O objetivo é montar a seguinte estrutura:

Diagrama DNS redesII.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.2.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 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
    dig ufsc.br ANY                  ; consulta "total" ao domínio
    
  2. Instale o servidor DNS em sua máquina:apt-get install bind9. Instalando o Bind.</syntaxhighlight>
  3. Configure a sua zona, onde X = 2 para M2, 3 Para M3, ... 10 para M10, ..., 14 para M14 e Y = 100 + o número da sua máquina.

vi /etc/bind/named.conf.local zone "redesX.edu.br" {

 type master;
 file "/etc/bind/db.redesX";
 allow-transfer {
   192.168.2.101;
 };

};</syntaxhighlight>

  1. vi /etc/bind/db.redesX

$TTL 86400 @ IN SOA ns.redesX.edu.br. admin.redesX.edu.br. (

                             2014040902; serial
                             3H ; refresh
                             60 ; retry
                             1W ; expire
                             3W ; minimum
                            )

@ IN NS ns.redesX.edu.br. ; este é o servidor master deste domínio @ IN MX 10 mail.redesX.edu.br. $ORIGIN redesX.edu.br. m80 A 192.168.2.1Y mail A 192.168.2.1Y www A 192.168.2.1Y ftp A 192.168.2.1Y ns A 192.168.2.1Y </syntaxhighlight>

  1. vi /etc/resolv.conf

nameserver 192.168.2.101 </syntaxhighlight>

  1. 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 redes18.edu.br /etc/bind/db.redesX</syntaxhighlight>
  2. Utilitário para testar a configuração do BIND: named-checkconf -z </syntaxhighlight>
  3. Restart do serviço: service bind9 restart </syntaxhighlight>
  4. Verificando se está tudo certo: tail -n 200 /var/log/syslog. Se necessário filtre por named. </syntaxhighlight>
  • Seqüênica de Testes:
ping www.redes12.edu.br
ping m8.redes108.edu.br
ping www.redesXX.edu.br ; dos seus colegas
dig @localhost m14.redes14.edu.br
dig @192.168.2.101 m7.redes7.edu.br
dig redesX.edu.br ANY
  • Teste o DNS reverso. Faça testes usando a ferramenta “dig”:
    dig -x 192.168.2.101
    

Arquivos na máquina Professor, somente para exemplificar

mkdir /var/cache/bind/slaves
chown bind:bind /var/cache/bind/slaves
/etc/bind/named.conf.local

// // 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 "2.168.192.in-addr.arpa" IN {

       type master;
       file "/etc/bind/db.2.168.192";

};

zone "redes2.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes2";
       masters { 192.168.2.102; };

};

zone "redes3.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes3";
       masters { 192.168.2.103; };

};

zone "redes4.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes4";
       masters { 192.168.2.104; };

};

zone "redes5.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes5";
       masters { 192.168.2.105; };

};

zone "redes6.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes6";
       masters { 192.168.2.106; };

};

zone "redes7.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes7";
       masters { 192.168.2.107; };

};

zone "redes8.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes8";
       masters { 192.168.2.108; };

};

zone "redes9.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes9";
       masters { 192.168.2.109; };

};

zone "redes10.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes10";
       masters { 192.168.2.110; };

};

zone "redes11.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes11";
       masters { 192.168.2.111; };

}; zone "redes12.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes12";
       masters { 192.168.2.112; };

};

zone "redes13.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes13";
       masters { 192.168.2.113; };

};

zone "redes14.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes14";
       masters { 192.168.2.114; };

}; </syntaxhighlight>

/etc/bind/db.redes1

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.2.101 www A 192.168.2.101 ftp A 192.168.2.101 mail A 192.168.2.101 </syntaxhighlight>

/etc/bind/db.2.168.192 (Zona reversa)

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

Aula 12 - 12/11/15: Revisão e Lista de exercícios

Revisão e Lista de exercícios

Lista de exercícios

Entregar em: 17/11/2015

Aula 13 - 17/11/15: Avaliação e Apache

Avaliação e Apache


A avaliação será realizada antes do intervalo.

Apache

Ver capítulo 26 da apostila.

O servidor Apache (Apache server) é o mais bem sucedido servidor web livre. Foi criado em 1995 por Rob McCool, então funcionário do NCSA (National Center for Supercomputing Applications), Universidade de Illinois. Ele descende diretamente do NCSA httpd, um servidor web criado e mantido por essa organização. Seu nome vem justamente do reaproveitamento do NCSA httpd (e do fator de tê-lo tornado modular) fazendo um trocadilho com a expressão "a patchy httpd (um httpd remendável). Para ter ideia de sua popularidade, em maio de 2010, o Apache serviu aproximadamente 54,68% de todos os sites e mais de 66% dos milhões de sites mais movimentados. O servidor é compatível com o protocolo HTTP versão 1.1. Suas funcionalidades são mantidas através de uma estrutura de módulos, podendo inclusive o usuário escrever seus próprios módulos — utilizando a API do software. É disponibilizado em versões para os sistemas Windows, Novell Netware, OS/2 e diversos outros do padrão POSIX (Unix, GNU/Linux, FreeBSD, etc).

Um servidor web é capaz de atender requisições para transferência de documentos. Essas requisições são feitas com o protocolo HTTP (HyperText Transfer Protocol), e se referem a documentos que podem ser de diferentes tipos. Uma requisição HTTP simples é mostrada abaixo:

GET / HTTP/1.1 Host: www.ifsc.edu.br

Para o servidor Web, os principais componentes de uma requisição HTTP são o método HTTP a executar e o localizador do documento a ser retornado (chamado de URI - Uniform Resource Indicator). No exemplo acima, a requisição pede o método GET aplicado à URI /. O resultado é composto do status do atendimento, cabeçalhos informativos e o conteúdo da resposta. No exemplo, o status é a primeira linha (HTTP/1.1 200 OK), com os cabeçalhos logo a seguir. Os cabeçalhos terminam ao aparecer uma linha em branco, e em seguida vem o conteúdo (ou corpo) da resposta.

Todo documento possui um especificador de tipo de conteúdo, chamado de Internet media Type. O cabeçalho de resposta Content-type indica o media type, para que o cliente HTTP (usualmente um navegador web) saiba como processá-lo. No exemplo acima, o documento retornado é do tipo text/html, o que indica ser um texto HTML. Outros possíveis media types são: text/plain (texto simples), application/pdf (um texto PDF), application/x-gzip (um conteúdo compactado com gzip).

Um documento no contexto do servidor web é qualquer conteúdo que pode ser retornado como resposta a uma requisição HTTP. No caso mais simples, um documento corresponde a um arquivo em disco, mas também podem ser gerados dinamicamente. Existem diversas tecnologias para gerar documentos, tais como PHP, JSP, ASP, CGI, Python, Perl, Ruby, e possivelmente outras. Todas se caracterizam por uma linguagem de programação integrada intimamente ao servidor web, obtendo dele informação sobre como gerar o conteúdo da resposta. Atualmente, boa parte dos documentos que compõem um site web são gerados dinamicamente, sendo PHP, JSP e ASP as tecnologias mais usadas.

Informações gerais sobre Apache no Ubuntu

  • Instalação:
    sudo apt-get install apache2
    
  • Arquivos de configuração ficam em /etc/apache2:
    • apache2.conf: a configuração inicia aqui
    • Diretório sites-available: configurações de hosts virtuais
    • Diretório sites-enabled: hosts virtuais atualmente ativados
  • Para iniciar o Apache:
    sudo service apache2 start
    
  • Para testar o Apache: com um navegador acesse a URL http://192.168.2.1X/ (X é 02 para o micro 2, 03 para o 3, e assim por diante).

Uma configuração básica

O servidor Apache precisa de algumas informações básicas para poder ativar um site:

  • Qual seu nome de servidor: seu nome DNS , como www.redesX.edu.br
  • Em que portas ele atende requisições: as portas TCP onde ele recebe requisições HTTP. Por default é a porta 80, mas outras portas podem ser especificadas.
  • Onde estão os documentos que compõem o site hospedado: o caminho do diretório onde estão esses documentos
  • Quem pode acessar os documentos: restrições baseadas em endereços IP de clientes e/ou nomes de usuários e grupos.

No exemplo abaixo, define-se um servidor WWW chamado www.prj.edu.br, que atende requisições no ports 8080.

  1. Crie um arquivo vi /etc/apache2/sites-available/prj.conf, com o seguinte conteúdo:
    # O nome de servidor
    ServerName www.prj.edu.br
    # As portas onde se atendem requisições HTTP
    Listen 8080
    # Onde estão os documentos desse site
    DocumentRoot /var/www/html/prj
    # As restrições de acesso aos documentos
    <Directory /var/www/html/prj>
      Options Indexes
      DirectoryIndex index.html index.php
      order allow,deny
      allow from all
    </Directory>
    
  2. Crie um link simbólico para o arquivo prj:
     ln -s /etc/apache2/sites-available/prj.conf /etc/apache2/sites-enabled/
    
  3. Edite o arquivo /etc/hosts e acrescente:
     192.168.2.1X   www.prj.edu.br
    
  4. Crie o diretório /var/www/html/prj
  5. Dentro do diretório criado acima, crie um arquivo de nome index.html com o seguinte conteúdo:
     <html><body><h1>PRJ!</h1>
     <p>Esta e minha pagina.</p>
     </body></html>
    
  6. Restarte o Apache:
     service apache2 restart
    
  7. Com o navegador acesse: 192.168.2.1X e 192.168.2.1X:8080
  8. Crie uma página personalizada e coloque em /var/www/html/pessoal/index.html. Acesse 192.168.2.1X/pessoal e visualize a mesma.

Aula 14 - 19/11/15: Apache

Apache

Na arquitetura de redes da Internet, são as aplicações que se comunicam, gerando dados no transmissor e consumindo-os no receptor.

Res-camadas3.png

Aplicações residem em equipamentos de rede, e se comunicam através da rede usando os serviços das camadas inferiores

Aplicações são processos que se comunicam através da rede (lembre lá de ICO que processos são programas em execução). Exemplos de aplicações são navegadores web (Firefox, Chrome) e bate-papo (Skype, GTalk). A comunicação pode ser feita de diferentes formas, de acordo com o modelo de comunicação adotado pela aplicação em questão. O modelo de comunicação define o papel de cada participante da comunicação, e por consequência acaba determinando como a comunicação acontece (quem a inicia, quando se transmitem e recebem mensagens). Três modelos conhecidos são:

  • Cliente-Servidor: um participante é o cliente, e o outro o servidor. O cliente inicia a comunicação, ao enviar uma mensagem ao servidor pedindo algum serviço. Cabe ao servidor responder aos pedidos dos clientes. Este é o modelo mais comum de se encontrar em aplicações, tais como correio eletrônico, WWW, bancos de dados, compartilhamento de arquivos e outros.
  • Peer-to-Peer (P2P): cada participante pode ser tanto cliente quanto servidor, assim qualquer um pode iniciar uma comunicação. Tornou-se popular com aplicações como compartilhamento de arquivos (ex: BitTorrent, eDonkey) e sistemas de chamadas VoIP.
  • Publisher/Subscriber: neste modelo existem os publicadores de conteúdo (publishers) e os assinantes ou interessados (subscribers). Os assinantes registram seus interesses por demais tipos de dados (isso é, assinam canais de dados). Os publicadores eventualmente divulgam dados, que são distribuídos aos assinantes. Não é comum de ser encontrado em aplicações, porém é o modelo usado para detecção de presença em aplicações de conversa on-line (Skype, Gtalk).

Cada aplicação usa diretamente os serviços da camada de transporte, e indiretamente os de camadas inferiores. Assim, para uma aplicação é a camada de transporte que envia e recebe suas mensagens. Como visto na aula passada, um serviço importante da camada de transporte é classificar e separar os pacotes recebidos de acordo com a aplicação que deve recebê-los, e para isso se um número chamado de port. O número de port pode ser entendido como um endereçador de aplicações dentro de um mesmo host. Vimos também que a camada de transporte na Internet apresenta dois protocolos, e ambos usam números de port para separar os pacotes de acordo com a comunicação que os contém:

  • TCP: usado por aplicações quando há necessidade de ter certeza de que os dados foram recebidos. Esse protocolo faz retransmissões automáticas no caso de perdas de mensagens. Para estabelecer a comunicação, ele usa o conceito de conexão (em que os dois participantes entram em acordo sobre a comunicação, e lembram disso a cada mensagem enviada e recebida) e realiza confirmações das mensagens recebidas. Este é o protocolo de transporte mais usado.
  • UDP: usado quando não é imprescindível ter certeza de que cada mensagem chegou ao destino, ou o custo de fazer isso com TCP não compensar. Não há conexões, tampouco confirmações. Exemplos de uso são chamadas VoIP e consultas DNS.

O estudo das aplicações da Internet inicia com WWW, que foi responsável por popularizar a Internet nos anos 90 e ainda é a aplicação mais difundida e acessada.

WWW e protocolo HTTP

WWW (World Wide Web) é um sistema de documentos em hipermidia que são ligados e acessados na Internet (FONTE: Wikipedia). Tendo início em 1990 como uma aplicação experimental desenvolvida por Tim Berners-Lee, que então trabalhava no CERN, na Suíça, em pouco tempo caiu no gosto de demais usuários e se difundiu. WWW se tornou tão popular que para muitos passou a ser sinônimo de Internet (equivocadamente). Por trás da sua rápida aceitação há um protocolo de aplicação simples e funcional, além claro do modelo de informação em hipermidia que agradou as pessoas.

Se o WWW é um sistema de documentoshipermidia online mantido de forma distribuída na Internet, o protocolo HTTP (Hypertext Transfer Protocol) é o protocolo usado para acessá-los. Esse protocolo segue o modelo cliente-servidor, e as comunicações são feitas com mensagens de pedido e resposta. Um cliente (navegador web) envia uma mensagem HTTP de pedido a um servidor web, que a responde com uma mensagem de resposta contendo o conteúdo solicitado. O protocolo HTTP usa o protocolo TCP para transmitir suas mensagens.

Mensagens de pedido HTTP

Mensagens HTTP de pedido possuem a seguinte estrutura:

Método URI HTTP/versão_do_protocolo
Cabeçalho1: valor do cabeçalho1
Cabeçalho2: valor do cabeçalho2
Cabeçalho3: valor do cabeçalho3
CabeçalhoN: valor do cabeçalhoN

corpo da mensagem

A primeira linha usa o campo método para indicar o tipo de pedido a ser realizado. O método HTTP pode ser entendido como um comando a ser realizado pelo servidor. Os métodos mais comuns são:

  • GET: obtém um documento.
  • POST: envia algum conteúdo e obtém como resposta um documento.
  • HEAD: obtém informações sobre um documento.

O campo URI (Uniform Resource Indicator) identifica o documento que o servidor deve acessar. Ele se aparenta com um caminho de arquivo (pathname), porém possui algumas extensões para poder enviar informação adicional.

Os cabeçalhos servem para complementar o pedido, informando ao servidor mais detalhes sobre o que está sendo requisitado. Por fim, o corpo da mensagem é opcional, podendo conter dados a serem enviados ao servidor quando necessário.

Tendo entendido os componentes de um pedido HTTP, segue abaixo um exemplo de uma requisição real (note que ela não possui corpo de mensagem):

GET /wiki/ HTTP/1.1
Host: wiki.sj.ifsc.edu.br
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: wiki2010UserID=614; wiki2010UserName=Msobral; wiki2010Token=4ed97239498a2fc74596b0f0a62331b5; wiki2010_session=f4e6b1hl4ctlkbpe5gc5gkosi4
Connection: keep-alive
If-Modified-Since: Mon, 20 May 2013 00:38:20 GMT

Mensagens de resposta HTTP

Mensagens HTTP de resposta possuem a seguinte estrutura:

HTTP/versão_do_protocolo status info 
Cabeçalho1: valor do cabeçalho1
Cabeçalho2: valor do cabeçalho2
Cabeçalho3: valor do cabeçalho3
CabeçalhoN: valor do cabeçalhoN

corpo da mensagem

A linha inicial informa o resultado do atendimento do pedido (se teve sucesso ou não), contendo um código numérico de status seguido de uma breve descrição. Os códigos numéricos e info mais comuns são:

  • 200 OK: pedido atendido com sucesso.
  • 302 Moved Temporarily: o pedido pode ser atendido em outra URL.
  • 401 Authorization Required: acesso negado, pois exige-se autenticação.
  • 403 Forbidden: acesso negado em definitivo.
  • 404 Not Found: documento não encontrado.

Após a linha inicial há os cabeçalhos, usados da mesma forma que em pedidos HTTP. Por fim, pode haver o corpo da mensagem (opcional). Um exemplo de mensagem de resposta segue abaixo:

HTTP/1.1 200 OK
Date: Thu, 23 May 2013 20:43:31 GMT
Server: Apache
Last-Modified: Fri, 10 May 2013 14:09:58 GMT
ETag: "757236-40-4dc5db8df272a"
Accept-Ranges: bytes
Content-Length: 64
Vary: Accept-Encoding
Connection: close
Content-Type: text/plain; charset=UTF-8

Este é um pequeno arquivo de teste, sem informação útil ...


Exemplos

Captura de página somente HTML

Captura de página HTML com uma figura

Captura de página HTML com duas figuras

Atividade Apache

Para criar páginas HTML um pouco mais completas você pode ler o tutorial disponível aqui

Teste fazer alterações em sua página, como alteração de layout, inserção de tabelas e figuras, etc. Use os exemplos disponibilizados no link acima.

Teste com DNS

Reconfigurar o experimento com DNS feito na Aula 11 e testar o acesso às páginas dos colegas.

Aula 15 - 24/11/15: Continuação Apache e FTP

Continuação Apache e FTP

Atividade Apache

  1. Terminar os testes com DNS iniciados na aula passada.
  2. Instalar e configurar o Apache no Servidor.
  3. Instalar e configurar o DNS no Servidor.

FTP

Atividade FTP

  1. Instalar um servidor FTP.
  2. Configurar o arquivo proftpd.conf.
  3. Criar um usuário para testes (ex. userftp).
  4. Acessar o servidor FTP via terminal.
  5. Copiar arquivos da máquina local para o servidor e vice-e-versa.
  6. Acessar o servidor via Browser.

Aula 16 - 26/11/15: Continuação FTP

Continuação FTP

Atividade FTP

Na máquina virtual executar os seguintes passos:

  1. Instalar um servidor FTP.sudo apt-get install proftpd</syntaxhighlight>
  2. Configurar o arquivo proftpd.conf e alterar os seguintes pontos:

UseIPv6 off ServerName "Seu nome" ServerIdent on "Saudação qualquer" DefaultRoot ~ </syntaxhighlight>

  1. Criar um usuário para testes (ex. userftp) colocando a shell do usuário como /bin/false.
  2. Acessar o servidor FTP via terminal da máquina real usando este novo usuário e o usuário aluno.

ftp ip_do_servidor</syntaxhighlight>

  1. Copiar arquivos da máquina local para o servidor e vice-e-versa.

put nome_arquivo get nome_arquivo</syntaxhighlight>

  1. Acessar o servidor via Browser na máquina real. Fazer login com ambos os usuários e testar subir níveis de diretórios. Foi possível? Por quê?
  2. Baixar o cliente Filezilla na sua máquina virtual com gráfico.

sudo apt-get -y install filezilla</syntaxhighlight>

  1. Conectar no servidor FTP via Filezilla com os usuários e testar enviar e receber arquivos.
  2. Editar o arquivo proftpd.conf e comentar a opção DefaultRoot.
  3. Acessar o Servidor FTP pelo Browser e verificar se é possível subir na árvore de diretórios.
  4. Editar o arquivo proftpd.conf, descomentar a opção DefaultRoot novamente e descomentar também de <Anonymous ~ftp> até </Anonymous>.
  5. Logar como Anonymous tanto via Browser como via Filezilla.
  6. No Filezilla, tentar enviar e receber arquivos. Foi possível?

Disponibilização de arquivos via Apache

As configurações padrões do Apache já fazem com que ele possa disponibilizar arquivos para download via web. Para isso, faça o seguinte:

  1. Crie o link simbólico arquivos do diretório home do seu usuário dentro da pasta base do apache (/var/www/html):

ln -s /home/aluno/ /var/www/html/arquivos</syntaxhighlight>

  1. Acesse o seu servidor Apache da seguinte forma no Browser:

http://ip_apache/arquivos</syntaxhighlight>

Atividade para casa

Gerar um documento sobre os serviços (APACHE e DNS) que já estão rodando na máquina Servidor de cada Equipe. O trabalho deve ser individual e deve ser entregue em 03/12.

O trabalho deve contemplar os seguintes pontos:

  1. Escrever uma breve fundamentação teórica sobre APACHE e DNS. Esta parte teórica deve dizer para que serve e como é o princípio de funcionamento do APACHE e DNS.
  2. Descrever como foi configurado o APACHE e DNS na máquina servidora. Comentar sobre os arquivos de configuração e as configurações efetuadas.
  3. Demonstrar o funcionamento através de prints, logs, saídas de comandos, etc. Comentar os resultados obtidos.

Aula 17 - 01/12/15: Postfix

Postfix

O correio eletrônico (email) é um dos principais serviços na Internet. De fato foi o primeiro serviço a ser usado em larga escala. Trata-se de um método para intercâmbio de mensagens digitais. Os sistemas de correio eletrônico se baseiam em um modelo armazena-e-encaminha (store-and-forward) em que os servidores de email aceitam, encaminham, entregam e armazenam mensagens de usuários.

Uma mensagem de correio eletrônico se divide em duas partes:

  • Cabeçalhos: contém informações de controle e atributos da mensagem
  • Corpo: o conteúdo da mensagem
From: Roberto de Matos <roberto@eel.ufsc.br>
Content-Type: text/plain;
	charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
X-Smtp-Server: smtp.ufsc.br:roberto.matos@posgrad.ufsc.br
Subject: =?iso-8859-1?Q?Teste_Ger=EAncia?=
Message-Id: <0595A764-EEAE-41E7-99F0-80DC11FB5327@eel.ufsc.br>
X-Universally-Unique-Identifier: 684c3833-bbbe-420b-8b66-d92d9a419bc0
Date: Wed, 20 Nov 2013 11:36:35 -0200
To: Roberto de Matos <roberto.matos@ifsc.edu.br>
Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\))

Ol=E1 Pessoal,

Hoje vamos aprender o funcionamento do Email!!

Abra=E7o,

Roberto=

Na mensagem acima, os cabeçalhos são as linhas iniciais. Os cabeçalhos terminam quando aparece uma linha em branco, a partir de que começa o corpo da mensagem.

Funcionamento do email

Os componentes da infraestrutura de email são:

  • MUA (Mail User Agent): o aplicativo que o usuário usa para envio e acesso a mensagens. Atualmente é bastante comum MUA do tipo webmail, mas existem outros como Mozilla Thunderbird, KMail e Microsoft Outlook.
  • MDA (Mail Delivery Agent): o servidor responsável por receber dos usuários mensagens a serem enviadas. Assim, quando um usuário quer enviar uma mensagem, usa um MUA que contata o MDA para fazer o envio. Exemplos de software são Postfix, Sendmail, Qmail e Microsoft Exchange.
  • MTA (Mail Transport Agent): o servidor responsável por transmitir mensagens até seu destino, e receber mensagens da rede para seus usuários. Comumente faz também o papel de MDA. Exemplos de softwares são Postfix, Sendmail, Qmail e Microsoft Exchange.

A figura abaixo ilustra uma infraestrutura de email típica.

Email-intro.png

Os protocolos envolvidos são:

  • SMTP (Simple Mail Transfer Protocol): usado para envios de mensagens entre MTAs, e entre MUA e MDA/MTA.
  • IMAP (Internet Mail Access Protocol): usado por MUAs para acesso a mensagens armazenadas em caixas de email em servidores.
  • POP (Post Office Protocol): mesma finalidade que IMAP, porém com funcionalidade mais limitada. Se destina a situações em que o normal é copiar as mensagens parao computador do usuário, e então removê-las do servidor.
  • LMTP (Local Mail Transfer Protocol): usado para entrega de mensagens entre MTA e MDA/MTA, sendo que o servidor de destino não mantém uma fila de mensagens (quer dizer, ele entrega diretamente na caixa de entrada de um usuário ou a encaminha imediatamente).


Antes de implementar um serviço de correio eletrônico é importante que o administrador entenda como funciona a troca de mensagens, seja na Internet, seja em uma rede local. Para uma simples troca de mensagens entre dois usuários, pode ser necessária a utilização de vários protocolos e de várias aplicações. Será visto a seguir como isso acontece. Um usuário que queira enviar uma mensagem para outro utilizará um aplicativo cliente de e-mail, também conhecido como MUA, ou Agente de Mensagens do Usuário. Ao terminar de redigir a sua mensagem o MUA enviará a mensagem a um MTA (Agente Transportador de Mensagens) que se encarregará então de entregar a mensagem ao MTA do destinatário, caso ele se encontre em outra máquina ou simplesmente colocar a mensagem na caixa postal do destinatário, caso ele se encontre no mesmo servidor. A transferência da mensagem entre o MUA e o MTA se efetua utilizando um protocolo chamado SMTP ou Protocolo Simples de Transferência de Mensagens. O protocolo SMTP será utilizado também entre o MTA do remetente e o MTA do destinatário. O servidor de e-mail do destinatário, ao receber uma mensagem para um dos seus usuários, simplesmente a coloca na caixa postal deste usuário. Se o usuário possui uma conta shell neste servidor, ele poderá ler os seus e-mails direto no servidor, caso contrário o usuário deverá transferir suas mensagens para sua máquina a fim de lê-las com o seu cliente de e-mail. A transferência de mensagens recebidas entre o servidor e o cliente de e-mail requer a utilização de outros programas e protocolos. Usualmente é utilizado para este fim o protocolo POP, Protocolo de "Agência" de Correio, que recebe este nome por agir como uma agência de correios mesmo, que guarda as mensagens dos usuários em caixas postais e aguarda que estes venham buscar suas mensagens. Outro protocolo que pode ser utilizado para este mesmo fim é o IMAP, Protocolo para Acesso de Mensagens via Internet, que implementa, além das funcionalidades fornecidas pelo POP, muitos outros recursos. Os protocolos POP e IMAP são protocolos para recebimentos de mensagens, ao contrário do protocolo SMTP, que serve para enviar mensagens, logo, possuem funcionalidades diferenciadas, como por exemplo, autenticação do usuário. Para a utilização dos protocolos POP e IMAP é necessária a instalação do servidor apropriado, que vai ser o responsável por atender as solicitações do cliente de e-mail por novas mensagens. O recebimento de mensagens pelo cliente se dá através da solicitação do MUA do usuário ao seu servidor de e-mail, que após a autenticação do usuário vai informar se existem mensagens em sua caixa postal e quantas são. A seguir o MUA solicita a transferência das mensagens para a máquina local, finalizando assim o processo de troca de mensagens entre dois usuários. A figura abaixo resume todo esse processo:

Postfix.png

Endereçamento

Endereços de email estão intimamente ligados ao DNS. Cada usuário de email possui um endereço único mundial, definido por um identificador de usuário e um domínio de email, escritos usando-se o símbolo especial @ (lê-se at, do original em inglês) para conectá-los:

tele@ifsc.edu.br

Nesse exemplo, o identificador de usuário é tele, e o domínio é ifsc.edu.br.

Os domínios de email tem correspondência direta com domínios DNS. De fato, para criar um domínio de email deve-se primeiro criá-lo no DNS. Além disto, o domínio DNS deve ter associado a si um ou mais registros MX (Mail exchanger) para apontar os MTAs responsáveis por receber emails para o domínio. Por exemplo, o domínio DNS ifsc.edu.br possui esse registro MX:

> dig ifsc.edu.br mx

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

;; ANSWER SECTION:
ifsc.edu.br.            3581    IN      MX      5 hermes.ifsc.edu.br.

... e o domínio gmail.com:

> dig gmail.com mx

;; QUESTION SECTION:
;gmail.com.                     IN      MX

;; ANSWER SECTION:
gmail.com.              3600    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      10 alt1.gmail-smtp-in.l.google.com.

MTA Postfix

O primeiro software MTA usado em larga escala na Internet foi o sendmail. Esse MTA possui muitas funcionalidades, e enfatiza a flexibilidade em sua configuração. No entanto, configurá-lo e ajustá-lo não é tarefa fácil. Além disto, houve vários problemas de segurança no passado envolvendo esse software. Assim outras propostas surgiram, como qmail e postfix. Tanto qmail quanto postfix nasceram como projetos preocupados com a segurança nas operações de um MTA, e também se apresentaram como MTAs mais simples de configurar e operar. Em nossas aulas será usado o postfix, mas recomenda-se experimentar usar as outras duas opcões citadas.

O postfix é um MTA modularizado, que divide as tarefas de processamento das mensagens em diversos componentes que rodam como processos separados. Isto difere bastante do sendmail, que se apresenta como um software monolítico. No postfix, um conjunto de subsistemas cuida de processar cada etapa da recepção ou envio de uma mensagem, como mostrado na figura abaixo:

Postfix architecture.gif

Configuração

A configuração do postfix é armazenada em arquivos, que normalmente residem no diretório /etc/postfix. Os dois principais são:

  • master.cf: configurações para execução dos subsistemas do Postfix (define que subsistemas estão ativados, quantas instâncias rodar de cada um, e seus argumentos de execução)
  • main.cf: configurações usadas pelos subsistemas

No Ubuntu deve-se iniciar o uso do Postfix com esses comandos:

apt-get install -y postfix

# O comando abaixo deve ser usado se o postfix já foi instalado, mas deseja-se recriar sua configuração
dpkg-reconfigure postfix

As configurações iniciais informadas na instalação são suficientes para que o postfix possa ser iniciado. No entanto muitos detalhes provavelmente precisarão ser ajustados para que ele opere como desejado.

Para um rápido teste do postfix pode-se fazer a sequência abaixo:

> sudo service postfix restart
> telnet localhost 25
220 ger ESMTP postfix (Ubuntu)
helo mail
250 ger
mail from: aluno@ifsc.edu.br
250 2.1.0 OK
rcpt to: postmaster@ger.edu.br
250 2.1.5 OK
data
354 End data with <CR><LF>.<CR><LF>
subject: Teste

blabla
.
250 2.0.0 OK: queued as 71259CCA3
quit
221 2.0.0 Bye
Connection closed by foreign host
>

O resultado do teste (a mensagem entreguepara o usuário postmaster) pode ser visto no arquivo de log do postfix. No Ubuntu esse arquivo é /var/log/mail.log :

> tail /var/log/mail.log
May  2 17:29:42 ger postfix/smtpd[1965]: 71259CCA3: client=localhost[127.0.0.1]
May  2 17:30:48 ger postfix/cleanup[1970]: 71259CCA3: message-id=<20100502202942.71259CCA3@ger>
May  2 17:30:48 ger postfix/qmgr[1894]: 71259CCA3: from=<aluno@ifsc.edu.br>, size=323, nrcpt=1 (queue active)
May  2 17:30:48 ger postfix/local[1972]: 71259CCA3: to=<root@ger.edu.br>, orig_to=<postmaster@ger.edu.br>, relay=local, delay=102, delays=102/0.05/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
May  2 17:30:48 ger postfix/qmgr[1894]: 71259CCA3: removed
May  2 17:31:25 ger postfix/smtpd[1965]: disconnect from localhost[127.0.0.1]
>

A mensagem de teste foi entregue em /var/mail/root:

> sudo cat /var/mail/root
From aluno@ifsc.edu.br  Sun May  2 17:30:48 2010
Return-Path: <aluno@ifsc.edu.br>
X-Original-To: postmaster@ger.edu.br
Delivered-To: postmaster@ger.edu.br
Received: from mail (localhost [127.0.0.1])
        by ger (Postfix) with SMTP id 71259CCA3
        for <postmaster@ger.edu.br>; Sun,  2 May 2010 17:29:06 -0300 (BRT)
Subject: teste
Message-Id: <20100502202942.71259CCA3@ger>
Date: Sun,  2 May 2010 17:29:06 -0300 (BRT)
From: aluno@ifsc.edu.br
To: undisclosed-recipients:;

blabla

Outra maneira para testar e um pouco mais amigável é utilizar a ferramenta mail. Instale o pacote:

apt-get install mailutils

Para enviar uma mensagem proceda do seguinte modo: mail usuario@redesX.edu.br <Enter>, inserir o subjet <Enter>, inserir a mensagem, <Enter> <Ctrl>+<d>. //Finaliza e encaminha o Email </syntaxhighlight> Verifique o encaminhamento ou não em:

tail -f /var/log/mail.log

Atividades

  1. Tenha certeza que seu serviço DNS esteja funcionando corretamente e você consiga acessar os domínios internos criados. ping mail.redesX.edu.br </syntaxhighlight>
  2. Instale o postfix em sua máquina virtual: apt-get install postfix. Escolha Site Internet e nome como mail.redesX.edu.br, este nome deve ser exatamente igual ao declarado no serviço DNS, na definição MX.
  3. Configure-o para que se comunicar na Internet, criando o domínio de email redesX.edu.br. Edite o arquivo /etc/postfix/main.cf e crie ou edite os seguintes parâmetros, deixando-os da seguinte forma:
    myhostname = mail.redesX.edu.br
    mydomain = redesX.edu.br
    myorigin = $mydomain
    inet_interfaces = all
    mynetworks = 192.168.2.0/24, 127.0.0.0/8
    mynetworks_style = subnet
    mydestination = $myhostname, $mydomain
    
  4. Reinicie o serviço: service postfix restart.
  5. Verifique se o servidor "subiu" corretamente: tail /var/log/syslog.
  6. Verifique se não houve erros de configuração: tail -n 30 /var/log/mail.log.
  7. Caso tudo esteja correto, instale um cliente de Email: apt-get install mailutils
  8. Envie um email:
    mail aluno@redesX.edu.br
    Cc: 
    Subject: Teste de email
    Isto é somente um teste...
    ... para sair, em uma linha em branco digite: CTRL d
    
  9. Verifique se o email foi perfeitamente encaminhado procurando pela string sent no /var/log/mail.log.
  10. Para ler email, logado com o usuário desejado, execute o comando mail e digite o número da mensagem desejada.
  11. Teste o envio de mensagens para usuários dos domínios de seus colegas. Acompanhe o processamento das mensagens olhando o log.
  12. Crie um grupo de email com pelo menos três usuários, envie uma mensagem para o grupo e verifique se todos os usuários cadastrados no grupo receberam tal mensagem.

Dicas

Atenção para vários problemas comuns na implantação do correio eletrônico:

  • Domínio DNS sem registro MX: sem isso os MTAs não sabem como enviar mensagens para esse domínio
  • Registro MX aponta um nome de host desconhecido: causa o mesmo problema acima
  • Nome de host configurado como localhost no Postfix: o nome de host (parâmetro myhostname em /etc/postfix/main.cf) deve ser o nome DNS do servidor onde roda o Postfix.
  • Erros de configuração (sintaxe) em /etc/postfix/main.cf: tais erros podem fazer com que um dos subsistemas do Postfix aborte sua execução, impedindo que se processe uma mensagem. Por exemplo, se um parâmetro usado pelo subsistema smtpd (que recebe mensagens com protocolo SMTP) estiver errado, o smtpd não iniciam, ou termina abruptamente, abortando a recepção de mensagens.

Passo a passo para criar uma aliases (apelidos/grupos):

  1. Adicione as diretivas para criação de grupos:

vi /etc/postfix/main.cf

    alias_maps = hash:/etc/postfix/aliases
    alias_database = hash:/etc/postfix/aliases</syntaxhighlight>
  1. Crie os grupos e adicione os respectivos usuários, por exemplo:

vi /etc/postfix/aliases

    todos: root, aluno
    batman: aluno</syntaxhighlight>
  1. Execute o comando para criação da base de grupos:

postalias /etc/postfix/aliases</syntaxhighlight>

  1. Reinicie o serviço:

service postfix reload </syntaxhighlight>

  1. Teste os apelidos enviando email para todos e batman e verifique quais usuários (root e/ou aluno) receberam as respectivas mensagens.

Aula 18 - 03/12/15: Crontab e Shell Script

Crontab e Shell Script

Crontab

Capítulo 19 da Apostila [[2]]

Shell Script

Exemplo:

#!/bin/bash
dia=`date | cut -d' ' -f4`
mes=`date | cut -d' ' -f2`
nome=/home/aluno/scripts/info-sistema-"$dia"-"$mes"
touch $nome
echo "=========================================================" >> $nome
echo "Data e Horário:" >> $nome
date >> $nome
echo >> $nome
echo "Uso do disco:" >> $nome
df >> $nome
echo >> $nome
echo "Usuários conectados:" >> $nome
who >> $nome

Aula 19 - 08/12/15: Correio eletrônico

Correio eletrônico

Na Aula 17 instalamos e testamos o Servidor de e-mail Postfix. Com ele pudemos testar o envio de e-mails utilizando o protocolo SMTP.

Agora queremos, também, instalar e testar o acesso dos usuários às suas caixas de e-mail. Para isso, é necessário os protocolos POP3 e IMAP. Com estes dois protocolos poderemos acessar as contas de e-mails dos usuários tanto com clientes instalados na máquina (Mozilla Thunderbird, Outlook Express, etc) como através de Webmails.

Nesta aula iremos instalar e testar o Webmail Squirrelmail.

Instalação POP/IMAP e testes

Executar os passos seguintes nas máquinas virtuais. Utilizaremos a máquina virtual server para instalar os serviços e a cliente para configurar os clientes de e-mail e demais testes.

  1. Instalar Servidor POP
    apt-get install courier-pop
    
  2. Instalar Servidor POP com encriptação
    apt-get install courier-pop-ssl
    
  3. Instalar Servidor IMAP
    apt-get install courier-imap
    
  4. Instalar Servidor IMAP com encriptação
    apt-get install courier-imap-ssl
    
  5. Pacotes para gerência de usuários do Postfix
    apt-get install postfix-ldap postfix-mysql
    
  6. Fazer bkp do certificado do IMAP em /etc/courier
    mv /etc/courier/imapd.pem /etc/courier/imapd.pem-bkp
    
  7. Editar imapd.conf e alterar localização e domínio
    vi /etc/courier/imapd.cnf
    
  8. Gerar novo certificado
    mkimapdcert
    
  9. Mesma coisa para POP
  10. Configurando caixa de e-mail dos usuários
    postconf -e 'home_mailbox=Maildir/'
    
  11. Criando usuário de e-mail: cada usuário de e-mail deve ter um usuário criado na máquina servidora do Postfix
    adduser usuárioX
    
  12. Criando os diretórios onde ficarão as caixas de e-mails de cada usuário
    mkdir /home/usuario/Maildir
    mkdir /home/usuario/Maildir/cur
    mkdir /home/usuario/Maildir/new
    mkdir /home/usuario/Maildir/tmp
    
  13. Mudar dono e grupo dos diretórios
    chown usuario:usuario /home/usuario/Maildir
    chown usuario:usuario /home/usuario/Maildir/cur
    chown usuario:usuario /home/usuario/Maildir/new
    chown usuario:usuario /home/usuario/Maildir/tmp
    
  14. Configurar Thunderbird com POP e IMAP e testar envio e recebimento de e-mail.

Instalação Webmail

Este procedimento deverá ser executado na máquina onde está instalado o servidor Postfix e Apache.

  1. Instalar apache, caso ainda não esteja.
  2. Instalar módulo php
    apt-get install php5
    
  3. Instalar Squirrelmail
    apt-get install squirrelmail
    
  4. Criar link simbólico
    ln -s /etc/squirrelmail/apache.conf /etc/apache2/squirrelmail.conf
    ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf-available/squirrelmail.conf
    ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf-enabled/squirrelmail.conf
    
  5. Testar no browser
    http://ip_server_apache/squirrelmail/
    
  6. Configurar squirrelmail
    squirrelmail-configure
    
  7. Mudar Organization Preferences > Organization Name
  8. Configurar IMAP: menu inicial op D > selecionar courier
  9. Salvar (S) e sair (Q)
  10. Testar novamente no browser.
  11. Tentar fazer login
  12. Restartar serviços
    /etc/init.d/postfix restart
    /etc/init.d/courier-pop restart
    /etc/init.d/courier-imap restart
    
  13. Tentar fazer login novamente
  14. Fazer testes diversos

Aula 20 - 10/12/15: Continuação Correio Eletrônico

Continuação das atividades da Aula 19 e instalação dos serviços na máquina servidora.

Aula 21 - 15/12/15: Continuação Correio Eletrônico

Continuação Correio Eletrônico

Continuação das atividades da Aula 19 e instalação dos serviços na máquina servidora.

Relatório individual

Gerar um documento sobre os serviços (FTP e Correio Eletrônico) que já estão rodando na máquina Servidor de cada Equipe. O trabalho deve ser individual e deve ser entregue em 21/12.

O trabalho deve contemplar os seguintes pontos:

  1. Escrever uma breve fundamentação teórica sobre FTP e Correio eletrônico. Esta parte teórica deve dizer para que serve e como é o princípio de funcionamento do FTP e Correio Eletrônico.
  2. Descrever como foi configurado o FTP e Correio Eletrônico na máquina servidora. Comentar sobre os arquivos de configuração e as configurações efetuadas.
  3. Demonstrar o funcionamento através de prints, logs, saídas de comandos, etc. Comentar os resultados obtidos. No caso do FTP, apresentar as partes que estão operacionais.

Avaliação do servidor

Na terça-feira (21/12) será realizada avaliação dos serviços instalados na máquina servidora (APACHE, DNS, FTP e Correio Eletrônico). Será feito acesso aos servidores e testado as funcionalidades instaladas.

A apresentação será feita pela equipe. Poderá ser feito perguntas sobre as configurações feitas para qualquer um dos membro da equipe.

Aula 22 - 17/12/15: Aula utilizada pela Prof. Ana

Aula 23 - 22/12/15: Avaliação prática

Aula 24 - 02/02/16: Firewall

Firewall


Firewall

Ver capítulo 35 da apostila.

Configuração para ser feita individualmente nas máquinas virtuais.

  1. Configure seu servidor como roteador.
  2. Configure no Ubuntu Gráfico como roteador padrão seu servidor.
  3. Instale o iptables.
    apt-get install iptables
    
  4. Configure uma regra que impeça seu cliente (Ubuntu Gráfico) de acessar qualquer porta da máquina www.ifsc.edu.br.
  5. Repita a regra, mas agora mandando um aviso ao cliente.
  6. Proíba o seu cliente de fazer ping para qualquer máquina, liberando todos os demais serviços.
  7. Limpe as regras anteriores.
  8. Permita que seu cliente acesse qualquer máquina na porta 80, mas somente nesta porta.
  9. Limpe todas as regras.
  10. Mude a política para DROP e permita que o seu cliente acesse somente www.ifsc.edu.br.
  11. De seu cliente, faça um ataque do tipo ping of death em seu servidor:
    ping -f 192.168.3.1X
    
  12. Iniba ataques do tipo ping of death na chain INPUT do seu servidor.
  13. Teste novamente com seu cliente e tente perceber a diferença no comportamento dos dois ataques.

Aula 25 - 04/02/16: Firewall - continuação

Firewall - continuação

Continuação da aula 24, porém não mais utilizando máquinas virtuais para montagem do cenário. Na nova estrutura, foi utilizado o servidor de cada equipe como firewall e as máquinas dos alunos como "clientes" deste. Também foram usados como clientes dispositivos móveis conectados a AP's que inseridos na rede.

Aula 26 - 11/02/16: Firewall - continuação

Aula 27 - 16/02/16: Firewall - continuação

Firewall - continuação

Atividade

Valendo nota!!!

Cada grupo deve estudar quais regras de firewall querem implementar em seu servidor. Após isso, devem ser implementadas e testadas tais regras.

Cada grupo deverá gerar um relatório especificando tudo que foi implementado em relação ao firewall em seu servidor. Além disso, devem ser detalhadas todas as demais configurações que foram necessárias para que o cenário com firewall fosse desenvolvido (como roteamento, NAT, configuração de rede local).

Deverá ser entregue um relatório em formato PDF contendo o máximo possível de informações a respeito do cenário montado, explicação e justificativa das regras criadas, logs e prints que sejam necessários para a demonstração da configuração e funcionamento.

Data de entrega: 23/02/2016

Aula 28 - 18/02/16: Firewall - conclusão do trabalho

Aula 29 - 23/02/16: Webmin e NTPdate

Webmin e NTPdate

Em uma rede real costumam-se usar ferramentas de auxílio à administração dos equipamentos e serviços de rede. Dependendo da sofisticação da ferramenta, é possível tornar rara a necessidade de editar arquivos de configuração dos softwares e do próprio sistema operacional. Assim, pode-se concentrar em administrar de fato os serviços num nível mais elevado.

Dentre diversas ferramentas existentes, webmin se destaca pela longevidade, contínuo aperfeiçoamento, simplicidade e grande quantidade de tarefas administrativas suportadas. Praticamente todo sistema operacional variante do Unix possui uma versão do webmin sob medida (ex: Linux, FreeBSD, Solaris, AIX, OpenBSD). Essa ferramenta iniciou como um projeto de código aberto e gratuito, mantendo até hoje esse status porém com versões especializadas pagas.

Outras ferramentas similares para administração de sistema e rede:

Instalando o webmin no Ubuntu

  1. Execute esses pacotes, que são requisitos:
    aluno@m66:~$ sudo apt-get install -y libapt-pkg-perl libauthen-pam-perl  
    aluno@m66:~$ sudo apt-get install -y libio-pty-perl apt-show-versions
    aluno@m66:~$ sudo apt-get install -y libnet-ssleay-perl
    
  2. Faça o download do webmin, e instale-o em seguida:
    wget http://prdownloads.sourceforge.net/webadmin/webmin_1.780_all.deb
    dpkg --install webmin_1.780_all.deb
    
  1. Acesse a URL https://192.168.2.X:10000/, e faça login.

Atividades

  1. Use o webmin para:
    1. Ver a ocupação dos discos do servidor
    2. Ativar e desativar serviços a serem executados na inicialização (boot)
    3. Criar usuários e grupos
    4. Instalar e remover software
    5. Executar comandos no servidor
  2. Todos os serviços de rede vistos até o momento podem ser administrados com webmin. Investigue os seguintes módulos:
    1. BIND DNS Server
    2. DHCP Server
    3. Apache Web Server
    4. Postfix Mail Server

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>

Aula 30 - 25/02/16: Squid e Servidor de arquivos

ALUNOS NÃO COMPARECERAM

Ver capítulo 34 da apostila.

Squid

Squid

  1. Instalar o Squid:
    apt-get install squid
    
  2. Reiniciar o serviço:
    service squid3 restart
    
  3. Verificar os logs do mesmo:
    tail /var/log/squid3/cache.log
    tail /var/log/squid3/access.log
    tail /var/log/upstart/squid3.log
    
  4. Edite o /etc/squid3/squid.conf e descomente as regras explicitadas na apostila.
  5. Edite o /etc/squid3/squid.conf e inclua as regras abaixo. Observe que a primeira regra de cada bloco já exite no arquivo, crie as demais. A ordem sequencial é fundamental.
    .....
    acl localhost src 127.0.0.1/32 ::1
    acl redelocal src 192.168.3.0/24
    .....
    http_access allow localhost
    http_access allow redelocal
    
  6. Restarte o serviço
  7. Siga o roteiro da apostila a configure o navegador da máquina real para utilizar o Squid de seu servidor, substituindo localhost por 192.168.3.1X.
  8. faça o download de algum arquivo que não seja maior que o maximum_object_size configurado e procure o mesmo (por tamanho) no /var/spool/squid3 com os comandos:
    du -sh /var/spool/squid3/*
    du -sh /var/spool/squid3/00/*
    
  9. Faça testes de bloqueio para algum sítio de sua preferência. Teste.
  10. Bloqueie o acesso a sítios que contenham a palavra uol. Teste acessando http://www.folha.uol.com.br/ !
  11. Bloqueie o acesso à rede no horário atual (veja a hora de sua máquina). Teste!
  12. Ao final dos testes, discuta com sua equipe que bloqueios manter em seu servidor.


Ver capítulo 30 da apostila.

Servidor de arquivos

Um servidor de arquivos compartilha volumes (sistemas de arquivos) via rede. Para os computadores que acessam o servidor de arquivos, os volumes compartilhados parecem ser locais e se integram transparentemente às suas árvores de diretórios.

Um serviço de compartilhamento de sistema de arquivos possui algumas implicações:

  • Segurança: o servidor de arquivos deve impor mecanismos para controle de acesso dos usuários remotos aos arquivos dos volumes compartilhados, de forma consistente com as restrições e direitos concedidos aos usuários locais. Para isso ser efetivo, torna-se necessário que os usuários da rede estejam definidos em um domínio administrativo.
  • Desempenho: os acessos remotos aos arquivos são efetuados no nível de sistema de arquivos, o que significa que as transferências de dados são orientadas a blocos. Como a leitura e escrita de blocos se faz via mensagens na rede, há que cuidar para que o tamanho de blocos seja adequado para agilizar as transferências. Além disso, demais características no acesso ao sistema de arquivos remoto (atualização de atributos, gravação síncrona ou assíncrona) precisam ser ajustadas para reduzir os atrasos nas operações sobre arquivos e diretórios.
  • Integridade de dados: sendo o sistema de arquivos remoto, e podendo ser acessado por mais de um cliente simultaneamente, são necessários mecanismos para evitar inconsistências dos dados vistos pelos diversos clientes. Outro detalhe a se cuidar trata de erros de transmissão e quedas ou interrupções momentâneas no servidor de arquivos.

Existem muitos tipos de sistemas de arquivos de rede, como NFS, Coda, Andrew FS, SMB/CIFS, porém nos concentraremos nos dois mais usados:

  • NFS (Network File System): sistema de arquivos de rede nativo de muitos sistemas operacionais Unix
  • SMB/CIFS (Service Message Block/Common Internet File System): mais conhecido como compartilhamento de arquivos e impressoras do Windows

NFS

NFS é um sistema de arquivos de rede criado pela Sun Microsystems em 1989, e descrito na RFC 1094. Seu uso predomina em sistemas operacionais Unix, porém há implementações para outras famílias de sistemas operacionais.

No NFS, um servidor compartilha um ou mais diretórios. Cada diretório compartilhado está sujeito a várias opções e restrições de acesso, como:

  • clientes permitidos
  • se são permitidos acessos como superusuário (root)
  • se modificações são síncronas ou assíncronas
  • protocolo de transporte usado (TCP ou UDP)
  • tamanho de bloco para leitura ou escrita
  • ... e outras
Para ter suporte ao serviço NFS, deve-se instalar o pacote nfs-kernel-server:
apt-get install -y nfs-kernel-server

Um computador pode ser tanto servidor como cliente. Para o papel de servidor, uma tabela lista os diretórios a serem compartilhados e suas opções de compartilhamento. De forma geral, nos sistemas Unix essa tabela fica no arquivo /etc/exports, como neste exemplo:

# Compartilha /home para os computadores da rede 192.168.3.0/24, em modo leitura-escrita, com acessos 
# como superusuário. Modificações em modo assíncrono.
/home 192.168.3.0/24(rw,root_squash,async)

# Compartilha /data para os computadores da rede 192.168.3.0/24, em modo leitura-escrita, porém sem acessos 
# como superusuário. Modificações em modo assíncrono. Porém para 192.168.3.101 se permitem  acessos
# como  superusuário.
/data 192.168.3.101(rw,no_root_squash) 192.168.2.0/24(rw,root_squash,async)
Após editar esse arquivo, deve-se atualizar o serviço NFS com o comando exportfs:
exportfs -r
Podem-se ver os diretórios exportados com o comando showmount:
showmount -e

Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto: apt-get install nfs-common

Os sistemas de arquivos de rede a serem acessados são montados de forma semelhante a sistemas de arquivos locais (portanto, usando o comando mount e podendo ser incluídos em /etc/fstab):

# Monta o sistema de arquivos NFS IP_do_servidor:/home no ponto de montagem  /home. Quer dizer,
# esse sistema  de arquivos vai aparecer em /home. Usa blocos de 4kB para leitura e escrita.
$ mount IP_do_servidor:/home /dir_de_montagem
$ mount IP_do_servidor:/data /dir_de_montagem2

Para que esse sistema de arquivos possa ser sempre montado quando o computador reiniciar, ele deve ser incluído em /etc/fstab:

IP_do_servidor:/home   /home   nfs   rsize=4096,wsize=4096,async   0  0
Atividade
  1. Compartilhe para a rede interna algum diretório de seu servidor e permita acessos como superusuário. Use uma máquina virtual em rede com o seu servidor para ser o cliente NFS, montando lá esse diretório.
  2. Faça testes diversos.
  3. Compartilhe com o servidor dos colegas uma pasta, porém sem permitir acessos como superusuário.
  4. Teste com os colegas dos outros grupos.

Aula 31 - 01/03/16: Squid e Servidor de arquivos

Ver capítulo 34 da apostila.

Squid

Squid

  1. Instalar o Squid:
    apt-get install squid
    
  2. Reiniciar o serviço:
    service squid3 restart
    
  3. Verificar os logs do mesmo:
    tail /var/log/squid3/cache.log
    tail /var/log/squid3/access.log
    tail /var/log/upstart/squid3.log
    
  4. Edite o /etc/squid3/squid.conf e descomente as regras explicitadas na apostila.
  5. Edite o /etc/squid3/squid.conf e inclua as regras abaixo. Observe que a primeira regra de cada bloco já exite no arquivo, crie as demais. A ordem sequencial é fundamental.
    .....
    acl localhost src 127.0.0.1/32 ::1
    acl redelocal src 192.168.3.0/24
    .....
    http_access allow localhost
    http_access allow redelocal
    
  6. Restarte o serviço
  7. Siga o roteiro da apostila a configure o navegador da máquina real para utilizar o Squid de seu servidor, substituindo localhost por 192.168.3.1X.
  8. faça o download de algum arquivo que não seja maior que o maximum_object_size configurado e procure o mesmo (por tamanho) no /var/spool/squid3 com os comandos:
    du -sh /var/spool/squid3/*
    du -sh /var/spool/squid3/00/*
    
  9. Faça testes de bloqueio para algum sítio de sua preferência. Teste.
  10. Bloqueie o acesso a sítios que contenham a palavra uol. Teste acessando http://www.folha.uol.com.br/ !
  11. Bloqueie o acesso à rede no horário atual (veja a hora de sua máquina). Teste!
  12. Ao final dos testes, discuta com sua equipe que bloqueios manter em seu servidor.


Ver capítulo 30 da apostila.

Servidor de arquivos

Um servidor de arquivos compartilha volumes (sistemas de arquivos) via rede. Para os computadores que acessam o servidor de arquivos, os volumes compartilhados parecem ser locais e se integram transparentemente às suas árvores de diretórios.

Um serviço de compartilhamento de sistema de arquivos possui algumas implicações:

  • Segurança: o servidor de arquivos deve impor mecanismos para controle de acesso dos usuários remotos aos arquivos dos volumes compartilhados, de forma consistente com as restrições e direitos concedidos aos usuários locais. Para isso ser efetivo, torna-se necessário que os usuários da rede estejam definidos em um domínio administrativo.
  • Desempenho: os acessos remotos aos arquivos são efetuados no nível de sistema de arquivos, o que significa que as transferências de dados são orientadas a blocos. Como a leitura e escrita de blocos se faz via mensagens na rede, há que cuidar para que o tamanho de blocos seja adequado para agilizar as transferências. Além disso, demais características no acesso ao sistema de arquivos remoto (atualização de atributos, gravação síncrona ou assíncrona) precisam ser ajustadas para reduzir os atrasos nas operações sobre arquivos e diretórios.
  • Integridade de dados: sendo o sistema de arquivos remoto, e podendo ser acessado por mais de um cliente simultaneamente, são necessários mecanismos para evitar inconsistências dos dados vistos pelos diversos clientes. Outro detalhe a se cuidar trata de erros de transmissão e quedas ou interrupções momentâneas no servidor de arquivos.

Existem muitos tipos de sistemas de arquivos de rede, como NFS, Coda, Andrew FS, SMB/CIFS, porém nos concentraremos nos dois mais usados:

  • NFS (Network File System): sistema de arquivos de rede nativo de muitos sistemas operacionais Unix
  • SMB/CIFS (Service Message Block/Common Internet File System): mais conhecido como compartilhamento de arquivos e impressoras do Windows

NFS

NFS é um sistema de arquivos de rede criado pela Sun Microsystems em 1989, e descrito na RFC 1094. Seu uso predomina em sistemas operacionais Unix, porém há implementações para outras famílias de sistemas operacionais.

No NFS, um servidor compartilha um ou mais diretórios. Cada diretório compartilhado está sujeito a várias opções e restrições de acesso, como:

  • clientes permitidos
  • se são permitidos acessos como superusuário (root)
  • se modificações são síncronas ou assíncronas
  • protocolo de transporte usado (TCP ou UDP)
  • tamanho de bloco para leitura ou escrita
  • ... e outras
Para ter suporte ao serviço NFS, deve-se instalar o pacote nfs-kernel-server:
apt-get install -y nfs-kernel-server

Um computador pode ser tanto servidor como cliente. Para o papel de servidor, uma tabela lista os diretórios a serem compartilhados e suas opções de compartilhamento. De forma geral, nos sistemas Unix essa tabela fica no arquivo /etc/exports, como neste exemplo:

# Compartilha /home para os computadores da rede 192.168.3.0/24, em modo leitura-escrita, com acessos 
# como superusuário. Modificações em modo assíncrono.
/home 192.168.3.0/24(rw,root_squash,async)

# Compartilha /data para os computadores da rede 192.168.3.0/24, em modo leitura-escrita, porém sem acessos 
# como superusuário. Modificações em modo assíncrono. Porém para 192.168.3.101 se permitem  acessos
# como  superusuário.
/data 192.168.3.101(rw,no_root_squash) 192.168.2.0/24(rw,root_squash,async)
Após editar esse arquivo, deve-se atualizar o serviço NFS com o comando exportfs:
exportfs -r
Podem-se ver os diretórios exportados com o comando showmount:
showmount -e

Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto: apt-get install nfs-common

Os sistemas de arquivos de rede a serem acessados são montados de forma semelhante a sistemas de arquivos locais (portanto, usando o comando mount e podendo ser incluídos em /etc/fstab):

# Monta o sistema de arquivos NFS IP_do_servidor:/home no ponto de montagem  /home. Quer dizer,
# esse sistema  de arquivos vai aparecer em /home. Usa blocos de 4kB para leitura e escrita.
$ mount IP_do_servidor:/home /dir_de_montagem
$ mount IP_do_servidor:/data /dir_de_montagem2

Para que esse sistema de arquivos possa ser sempre montado quando o computador reiniciar, ele deve ser incluído em /etc/fstab:

IP_do_servidor:/home   /home   nfs   rsize=4096,wsize=4096,async   0  0
Atividade
  1. Compartilhe para a rede interna algum diretório de seu servidor e permita acessos como superusuário. Use uma máquina virtual em rede com o seu servidor para ser o cliente NFS, montando lá esse diretório.
  2. Faça testes diversos.
  3. Compartilhe com o servidor dos colegas uma pasta, porém sem permitir acessos como superusuário.
  4. Teste com os colegas dos outros grupos.

Aula 32 - 03/03/16: Aula utilizada pelo professor Rubem

Aula 33 - 08/03/16: Radius

Radius

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 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).

O RADIUS tem uma porta para autenticação (UDP 1645 ou UDP 1812) e outra para contabilidade (UDP 1646 ou UDP 1813).


Numa rede que usa RADIUS, há funções distintas para os equipamentos:

Cliente: é o host que deseja usufruir de um recurso da rede, como por exemplo, uma estação que deseja se associar a um Access Point.


NAS (Network Autentication Server): é o host que recebe uma solicitação do cliente (o Access Point por exemplo) e autentica esse pedido no servidor RADIUS.


Servidor RADIUS: é o host que validará o pedido do NAS. A resposta do pedido de autenticação pode ser positiva (Access-Accept) acompanhada da tabela de parâmetros de resposta ou negativa (Access-Reject) sem nenhum parâmetro.


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) usa 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.

Procedimento no AP (Access Point) Edimax:

  1. Acesse o AP via browser, após o reset,o IP padrão do AP é 192.168.2.1, usuário admin, senha 1234.
  2. Na aba Security configure:

Encryption: WPA RADIUS Radius IP Server: 192.168.2.X RADIUS Server Password: 1234 </syntaxhighlight>

  1. Configure seu AP para um novo IP padrão, caso necessário.
  2. Configure como default gateway do AP o 192.168.2.X (servidor da equipe).
  3. Habilite o DHCP Server (System Utility) com os seguintes parâmetros:

Default Gateway IP: 192.168.2.X Domain Name Server IP: 200.135.37.65 Start IP: definir IP End IP: definir IP </syntaxhighlight>

  1. Configure o SSID do AP com o nome da equipe, Basic Setting - ESSID: equipe1 ou equipe2 ou equipe3.
  2. Clique em Apply - Apply, para salvar e reiniciar o AP.
  3. O acesso direto ao AP será perdito caso tenha sido alterado o seu IP!
  4. Conecte o AP no mesmo switch do servidor.

Procedimento deve ser realizado (pela equipe) no servidor caso ainda não esteja 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 eth0 -j MASQUERADE </syntaxhighlight>

  1. Instale o pacote:

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

  1. Crie no servidor um IP alias compatível com o IP do AP, por exemplo, 192.168.2.X.
  2. Após isso é necessário a configuração de dois arquivos o /etc/freeradius/clients.conf, arquivo onde é cadastrado os equipamentos que irão se conectar a rede (cada switch e AP terão seus dados cadastrados neste formato). Acrescente ao final do arquivo (XX é o IP do AP):

client 192.168.2.X {

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

} </syntaxhighlight>

  1. e /etc/freeradius/users, arquivo onde é cadastrado os usuários que podem se conectar a rede, é necessário determinar dentro do users o login e senha que será utilizado 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 cabeada ou sem fio.
  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.

Aula 34 - 10/03/16: SNMP e Cacti

SNMP

SNMP

Ver capítulo 39 da apostila.

Mais detalhes podem obtidos em SNMP.

  1. Para monitorar-se uma máquina ubuntu por meio de consultas SNMP (Simple Network Management Protocol) devemos instalar o snmpd na máquina a ser monitorada:
    apt-get install snmp snmpd snmp-mibs-downloader
    
  2. Para liberar a consulta remota ao SNMP deve-se reconfigurar o arquivo /etc/snmp/snmpd.conf, comentando a primeira linha abaixo (original) e descomentando a segunda:
  3. agentAddress udp:127.0.0.1:161

agentAddress udp:161,udp6:[::1]:161 </syntaxhighlight>

  1. e:
  2. rocommunity public default -V systemonly

rocommunity public 0.0.0.0/0 </syntaxhighlight>

  1. Reincia-se o serviço snmp:

service snmpd restart </syntaxhighlight>

  1. Busca-se por possíveis erros de configuração:

tail /var/log/syslog </syntaxhighlight>

  1. Pode-se testar o serviço com uma consulta a partir de uma máquina remota, por exemplo o terminal da máquina gráfica ou do próprio servidor. Este comando retornará todos os parâmetros SNMP da máquina consultada:

snmpwalk -v1 -c public 192.168.2.1X | more</syntaxhighlight>

Cacti

Ver capítulo 41 da apostila.

No Ubuntu a instalação se mostra muito simplificada, pois o sistema de pacotes já configura todos os detalhes do Cacti após a instalação.

  1. Instale o Cacti:
    apt-get install cacti
    
  2. Serão apresentadas telas com questões sobre a configuração do Cacti:
    1. Selecione Sim para Configurar a base de dados para cacti com dbconfig-common?
    2. Forneça uma senha do administrador do MySQL (aluno), ou mantenha a mesma já utilizada no ZoneMinder.
    3. Forneça uma senha (aluno) que será usada pelo usuário do Cacti no banco de dados. Essa será a senha do Cacti.
    4. Selecione o uso do Apache.
  3. Com um navegador acesse a URL http://192.168.2.1X/cacti. Ali você deve dar continuidade ao processo de instalação:
    1. Selecione "New Install"
    2. Verifique na próxima tela se todas as opções mostradas estão corretas (se aparece OK em verde ao lado).
    3. Clique em Finish, e na tela a seguir forneça o usuário admin e senha admin.
  4. Crie gráficos para monitorar a CPU, memória, discos, processos e usuários do servidor onde reside o Cacti.
  5. Visualize os gráficos criados.
  6. Crie novos gráficos, porém coletando os dados da máquina do professor (192.168.2.101) também via SNMP.
    1. Crie um novo dispositivo (Create devices for network) do tipo ucd/net SNMP Host.
    2. Crie os gráficos (New Graphs) para o device.
    3. Associe o host a árvore (Graph Trees).
Util

Tunelamento via Servidor SSH

Ssh-si.png


Permite obter acesso remoto a portas de máquinas da rede local através de um acesso SSH que esteja liberado em algum servidor. Através deste servidor é possível alcançar as portas das demais máquinas da rede local.

ssh usuario@IP-do-servidor-SSH -L porta:IP-de-rede-interna:porta</syntaxhighlight>

Aula 35 - 15/03/16: Recuperação