Mudanças entre as edições de "GAR12503-2014-2"
Linha 1 526: | Linha 1 526: | ||
{{Collapse bottom}} | {{Collapse bottom}} | ||
+ | |||
+ | === Aula 09 (18/09) - E-mail === | ||
+ | |||
+ | Ver capítulo 27 da [[Media:Gerencia_de_redes.pdf|apostila]]. | ||
+ | |||
+ | {{Collapse top | Email}} | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | 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= | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | [[Imagem: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). | ||
+ | |||
+ | ''' 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: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | > 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. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ... e o domínio ''gmail.com'': | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | > 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. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ''' MTA Postfix ''' | ||
+ | |||
+ | O primeiro software MTA usado em larga escala na Internet foi o [http://www.sendmail.org 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 [http://www.qmail.org qmail] e [http://www.postfix.org 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: | ||
+ | |||
+ | [[Imagem:Postfix_architecture.gif|400px]] | ||
+ | |||
+ | * [http://www.postfix.org/OVERVIEW.html Visão geral do processamento de mensagens no postfix] | ||
+ | |||
+ | ''' Configuração ''' | ||
+ | |||
+ | * [http://help.ubuntu.com/community/Postfix Guia de instalação no Ubuntu] | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | sudo apt-get install -y postfix | ||
+ | |||
+ | # O comando abaixo deve ser usado se o postfix já foi instalado, mas deseja-se recriar sua configuração | ||
+ | sudo dpkg-reconfigure postfix | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | > 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 | ||
+ | > | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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'' : | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | > 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] | ||
+ | > | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | A mensagem de teste foi entregue em ''/var/mail/root'': | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | > 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 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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:<code> | ||
+ | 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 | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top | 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. | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | *Atividades: | ||
+ | |||
+ | {{Collapse top | Roteiro}} | ||
+ | # Instale o postfix em sua máquina virtual. Configure-o para que se comunicar na Internet, criando o domínio de email ''redeX.edu.br'', sendo X o número do seu computador. | ||
+ | # Teste o funcionamento do postfix, enviando um email para ''postmaster@redeX.edu.br''. | ||
+ | # Teste o envio de mensagens para os domínios de seus colegas. Acompanhe o processamento das mensagens olhando o log do ''postfix''. | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | <!-- | ||
+ | == 8/8: Webmail == | ||
+ | |||
+ | {{Collapse top | Webmail}} | ||
+ | O objetivo é instalar o Webmail [http://roundcube.net/ RoundCube]. | ||
+ | Pré-requisitos: DNS, Postfix e Apache2 rodando | ||
+ | #Ir para o diretório www: '''cd /var/www''' | ||
+ | #Baixar o pacote: '''wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.0/roundcubemail-1.0.0.tar.gz''' | ||
+ | #Desempacotar: '''tar -zxvf roundcubemail-1.0.0.tar.gz''' | ||
+ | #Renomear para webmail: '''mv roundcubemail-1.0.0 webmail''' | ||
+ | #Instalar o Dovecot. [https://help.ubuntu.com/community/Dovecot Dovecot] é um MDA de fácil instalação que suporta acessos com IMAP e POP3. As caixas de entrada podem ser armazenadas nos formatos [http://www.linuxmail.info/mbox-maildir-mail-storage-formats/ mailbox ou Maildir].: '''apt-get install -y dovecot-imapd dovecot-pop3d''' | ||
+ | #Configurar o Dovecot: '''vi /etc/dovecot/dovecot.conf''' e ajustar/criar os seguintes parâmetros:<syntaxhighlight lang=text> | ||
+ | protocols = pop3 pop3s imap imaps | ||
+ | pop3_uidl_format = %08Xu%08Xv | ||
+ | mail_location = maildir:~/Maildir</syntaxhighlight> | ||
+ | #Verificar se não há erros de sintaxe no arquivo de configuração: '''dovecote -F''' | ||
+ | #Reconfigurar a conta do '''aluno''' com os comandos (isto deve ser feito a todos os usuários do sistema):<syntaxhighlight lang=text> | ||
+ | maildirmake.dovecot /home/aluno/Maildir | ||
+ | maildirmake.dovecot /home/aluno/Maildir/.Drafts | ||
+ | maildirmake.dovecot /home/aluno/Maildir/.Sent | ||
+ | maildirmake.dovecot /home/aluno/Maildir/.Trash | ||
+ | maildirmake.dovecot /home/aluno/Maildir/.Templates | ||
+ | chown -R aluno /home/aluno/Maildir/ | ||
+ | chmod -R go-rwx /home/aluno/Maildir</syntaxhighlight> | ||
+ | #Reconfigurar o Postfix: '''vi /etc/postfix/main.cf''' acrescentando a diretiva:<syntaxhighlight lang=text> | ||
+ | home_mailbox = Maildir/ </syntaxhighlight> | ||
+ | #Reiniciar os serviços: '''service dovecot restart''' e '''service postfix restart''' | ||
+ | #Atualize a base apt: '''apt-get update''' | ||
+ | #Instalar os pacotes e dependências necessárias: '''apt-get install -y php5 sqlite php5-sqlite php-net-smtp php-mail-mime php-mdb2''' | ||
+ | #Dentro de /var/www/webmail mudar as permissões: '''chmod 777 temp/ logs/''' | ||
+ | #Mude as permissões: '''chmod 755 /var/www/webmail''' e '''chmod 777 /var/www/webmail/SQL/''' | ||
+ | #Reinicie o Apache2: '''service apache2 restart''' | ||
+ | #Acesso com um navegador a página: http://ip_do_seu_server/webmail/installer/ | ||
+ | #Verifique se há alguma pendência NÃO opcional ('''essencial'''), se houver resolva! | ||
+ | #Clique em '''Next'''. No quadro '''Database setup''' ajuste somente '''SQLite database type''' e '''/var/www/webmail/SQL/sqlite.db DataBase Name''', os demais campos deixe em branco e clique em '''CREATE CONFIG'''. | ||
+ | #Copie ou baixe os arquivos com os nomes indicado para /var/www/webmail/config/. Clique em '''CONTINUE'''. | ||
+ | #Tenha CERTEZA que tudo esteja correto e, para poder continuar é imprescindível remover o diretório de instalação. Isto é quesito de segurança do RoundCube: '''rm -rf /var/www/webmail/installer''' | ||
+ | #Acesse a página http://ip_do_seu_server/webmail/ e forneça o login e senha do aluno. | ||
+ | #Faça testes enviando mensagens aos colegas. É possível enviar também para contas externas desde que não haja bloqueio por domínio inválido. | ||
+ | |||
+ | {{Collapse bottom | Webmail}} | ||
+ | --> |
Edição das 15h01min de 18 de setembro de 2014
Informações da disciplina
- Professor: Tomas Grimm
- Turma: 1250331
- Encontros: terças e quintas das 18:30 às 20:20 e quartas das 18:30 às 22:30
- Atendimento paralelo:
- terças das 13:30 às 15:20
Plano de aula
Cronograma | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Material auxiliar
- Apostila de Gerência de Redes do Prof. Odilson Tadeu Valle
- Guia rápido de comandos básicos
- Guia rápido de manipulação de diretórios
- Comandos essenciais do VI
- Lista completa de comandos do VI
Aulas
Aula 01 (06/08) - Introdução, SO Linux, Shell e comandos básicos
Conteúdo:
- Apresentação da disciplina
- Introdução a Gerência de Redes de Computadores (slides)
- Sistema Operacional Linux e Redes (slides)
- Shell
- Comandos básicos de Linux
- Editor VI
Comandos básicos Linux |
---|
# Comandos de navegação e interação com arquivos:
ls # listar arquivos
cd # mudar diretório
rm # remover arquivos
cp # copiar arquivos
mv # mover arquivos ou renomeá-los
cat # mostra o conteúdo de um arquivo ou concatena com outro arquivo
more # exibe o conteúdo de um artigo de forma paginada
pwd # mostra o caminho para o diretório atual
rmdir # deleção de diretório
mkdir # criação de diretório
clear # limpa a tela
# Comandos relacionados aos usuários:
who # mostra as sessões abertas na máquina
whoami # mostra o nome do usuário atual
finger # mostra informações de usuário
# Comandos relacionados ao status da memória e do disco:
df # informações de espaço em disco
du # utilização do disco
free # informações de memória
top # mostra processos
|
Atividades:
Aula 02 (07/08) - Instalação de aplicativos e Sistemas de arquivos
Conteúdo:
- Gerenciador de pacotes apt
- Sistemas de arquivos
Instalação de aplicativos |
---|
A instalação de software pode ser feita de diversas formas, dentre as quais serão destacadas três:
Exemplo de uso do apt-get:
lynx http://www.ifsc.edu.br/
Exemplo de uso:
wget ftp://ftp.cn.debian.org/ubuntu-old-releases/ubuntu/pool/main/l/lynx-cur/lynx_2.8.7pre6-1_all.deb wget ftp://mirror.linux.org.au/ubuntu/pool/main/l/lynx-cur/lynx-cur_2.8.7pre6-1_i386.deb
lynx ...
|
Atividades:
Exercícios de instalação de pacotes |
---|
|
Exercícios sobre sistemas de arquivos |
---|
|
Aula 03 (12/08) - Gerenciamento de usuários e grupos e Cotas de disco
Conteúdo:
- Gerenciamento de usuários e grupos.
- Permissionamento.
- Cotas de usuário.
Roteiro |
---|
Criação de contas de usuários e de grupos, e seu uso para conferir permissões de acesso a arquivos, diretórios e recursos do sistema operacional. Apostila, páginas 61 a 65. Um usuário no Linux (e no Unix em geral) é definido pelo seguinte conjunto de informações:
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:
O arquivo /etc/shadow armazena exclusivamente as informações relativas a senha e validade da conta. Nele cada conta possui as seguintes informações:
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:
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:
Esses utilitários usam os arquivos /etc/login.defs e /etc/default/useradd para obter seus parâmetros padrão. O /etc/adduser.conf tem o mesmo intuito mas é seta exclusivamente os parâmetros do comando adduser. O arquivo /etc/login.defs contém uma série de diretivas e padrões que serão utilizados na criação das próximas contas de usuários. Seu principal conteúdo é: MAIL_DIR dir # Diretório de e-mail PASS_MAX_DAYS 99999 #Número de dias até que a senha expire PASS_MIN_DAYS 0 #Número mínimo de dias entre duas trocas senha PASS_MIN_LEN 5 #Número mínimo de caracteres para composição da senha PASS_WARN_AGE 7 #Número de dias para notificação da expiração da senha UID_MIN 500 #Número mínimo para UID UID_MAX 60000 #Número máximo para UID GID_MIN 500 #Número mínimo para GID GID_MAX 60000 #Número máximo para GID CREATE_HOME yes #Criar ou não o diretório home Como o login.defs o arquivo /etc/default/useradd contém padrões para criação de contas. Seu principal conteúdo é: GROUP=100 #GID primário para os usuários criados HOME=/home #Diretório a partir do qual serão criados os “homes” INACTIVE=-1 #Quantos dias após a expiração da senha a conta é desativada EXPIRE=AAAA/MM/DD #Dia da expiração da conta SHEL=/bin/bash #Shell atribuído ao usuário. SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários. GROUPS=video,dialout CREATE_MAIL_SPOOL=no O /etc/adduser.conf também possui uma série de padrões que funcionam especificamente para o comando adduser: DSHELL=/bin/bash #Shell atribuído ao usuário. DHOME=/home #Diretório a partir do qual serão criados os “homes” SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários. FIRST_UID=1000 #Número mínimo para UID LAST_UID=29999 #Número máximo para UID FIRST_GID=1000 #Número mínimo para GID LAST_GID=29999 #Número máximo para GID QUOTAUSER="" #Se o sistema de cotas estiver funcional, pode atribuir quota ao usuário criado. Permissões Há uma maneira de restringir o acesso aos arquivos e diretórios para que somente determinados usuários possam acessá-los. A cada arquivo e diretório é associado um conjunto de permissões. Essas permissões determinam quais usuários podem ler, e escrever (alterar) um arquivo e, no caso de ser um arquivo executável, quais usuários podem executá-lo. Se um usuário tem permissão de execução para um diretório, significa que ele pode realizar buscas dentro daquele diretório, e não executá-lo como se fosse um programa. Quando um usuário cria um arquivo ou um diretório, o LINUX determina que ele é o proprietário (owner) daquele arquivo ou diretório. O esquema de permissões do LINUX permite que o proprietário determine quem tem acesso e em que modalidade eles poderão acessar os arquivos e diretórios que ele criou. O super-usuário (root), entretanto, tem acesso a qualquer arquivo ou diretório do sistema de arquivos. O conjunto de permissões é dividido em três classes: proprietário, grupo e usuários. Um grupo pode conter pessoas do mesmo departamento ou quem está trabalhando junto em um projeto. Os usuários que pertencem ao mesmo grupo recebem o mesmo número do grupo (também chamado de Group Id ou GID). Este número é armazenado no arquivo /etc/passwd junto com outras informações de identificação sobre cada usuário. O arquivo /etc/group contém informações de controle sobre todos os grupos do sistema. Assim, pode -se dar permissões de acesso diferentes para cada uma destas três classes. Quando se executa ls -l em um diretório qualquer, os arquivos são exibidos de maneira semelhante a seguinte: > ls -l total 403196 drwxr-xr-x 4 odilson admin 4096 Abr 2 14:48 BrOffice_2.1_Intalacao_Windows/ -rw-r--r-- 1 luizp admin 113811828 Out 31 21:28 broffice.org.2.0.4.rpm.tar.bz2 -rw-r--r-- 1 root root 117324614 Dez 27 14:47 broffice.org.2.1.0.rpm.tar.bz2 -rw-r--r-- 1 luizp admin 90390186 Out 31 22:04 BrOo_2.0.4_Win32Intel_install_pt-BR.exe -rw-r--r-- 1 root root 91327615 Jan 5 21:27 BrOo_2.1.0_070105_Win32Intel_install_pt-BR.exe > As colunas que aparecem na listagem são:
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:
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:
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:
|
Atividades:
Roteiro |
---|
Permissionamento de arquivos e grupos de usuários
|
Questionário conceitual de gerência
Aula 04 (20/08) - Processo de Boot e RAID
Conteúdo:
- Processo de Boot
- upstart
Roteiro |
---|
Boot: O processo de inicialização do sistema operacional, chamado de boot. Tradicionalmente no Unix System V isto se faz com a definição de níveis de execução (runlevels) e uma tabela que descreve que processos ou serviços devem existir em cada nível. Os níveis de execução são:
As distribuições Linux em geral adotam a inicialização no estilo Unix System V. No entanto, o Ubuntu usa um outro processo chamado de upstart. Esse serviço de inicialização confere maior flexibilidade e mesmo simplicidade à definição de que serviços devem ser executados. O upstart não usa o conceito de níveis de execução, mas devido à sua flexibilidade ele pode emular esse estilo de inicialização. Para o upstart, um serviço deve ser iniciado ou parado dependendo de uma combinação de eventos, sendo que um evento indica a ocorrência de uma etapa da inicialização. O upstart é implementado pelo processo init (programa /sbin/init), que é o primeiro processo criado pelo sistema operacional. Quer dizer, logo após terminar a carga e inicialização do kernel, este cria um processo que executa o programa /sbin/init. O upstart lista o subdiretório /etc/init e procura arquivos com extensão .conf. Cada arquivo desses descreve um serviço a ser controlado pelo upstart. Por exemplo, o serviço tty2 é escrito no arquivo tty2.conf: # tty2 - getty
#
# This service maintains a getty on tty2 from the point the system is
# started until it is shut down again.
start on runlevel [23]
stop on runlevel [!23]
respawn
exec /sbin/getty -8 38400 tty2
Abaixo segue o significado de cada linha:
Em linhas gerais, a descrição do serviço informa quando ele deve ser ativado (start), quando deve ser parado (stop), o tipo de execução (respawn para reinício automático, ou task para uma única execução), e que ação deve ser executada para ativar o serviço (exec para executar um programa, ou script .. end script para executar uma sequência de comandos de shell). Maiores detalhes podem ser lidos na página de manual do init. |
- RAID:
Roteiro |
---|
RAID (Redundant Array of Independent Disks) se destina a combinar discos de forma a incrementar o desempenho de entrada e saída e, principalmente, segurança dos dados contra defeitos em discos. RAID pode ser provido via software ou hardware (melhor este último). O Linux possui implementação por software em seu kernel, e neste HOWTO há uma descrição resumida. Há vários níveis RAID, que correspondem a diferentes combinações de discos e partições. São eles:
Criação de um volume RAID no Linux:
Para ativar um volume já criado, basta executar mdadm --assemble caminho_do_volume. Ex: mdadm --assemble /dev/md0, mdadm --assemble /dev/md1. |
Atividades:
Roteiro upstart |
---|
Um exemplo de criação de serviço no upstart
|
Roteiro RAID |
---|
|
Aula 05 (21/08) - Cron
Conteúdo:
- Agendamento de tarefas
- cron
Agendamento de tarefas administrativas com crontab. Apostila de Gerência de Redes, capítulo 19.
Roteiro | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
O cron é um programa de agendamento de tarefas. Com ele pode-se fazer a programação para execução de qualquer programa numa certa periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso comum do cron é o agendamento de tarefas administrativas de manutenção do seu sistema, como por exemplo, análise de segurança w backup. Estas tarefas são programadas para, todo dia, toda semana ou todo mês, serem automaticamente executadas através da crontab e um script shell comum. A configuração do cron geralmente é chamada de crontab. Os sistemas Linux possuem o cron na instalação padrão. A configuração tem duas partes: uma global, e uma por usuário. Na global, controlada pelo root, o crontab pode ser configurado para executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte por usuário, cada usuário tem seu próprio crontab, sendo restringido apenas ao que o usuário pode fazer (e não tudo, como é o caso do root). Uso do crontab Para configurar um crontab por usuário, utiliza-se o comando crontab, junto com um parâmetro, dependendo do que se deseja fazer. Abaixo uma relação:
Se você quiser verificar os arquivos crontab dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos usuários no diretório /var/spool/cron/crontabs . Por exemplo, a crontab do usuário aluno estará no arquivo /var/spool/cron/crontabs/aluno. Existe também uma crontab global, que fica no arquivo /etc/crontab, e só pode ser modificado pelo root. Vamos estudar o formato da linha do crontab, que é quem vai dizer o que executar e quando. Vamos ver um exemplo: 30 12,22 * * * /home/aluno/scripts/backup.sh >/dev/null 2>&1
A linha é dividida em campos separados por tabs ou espaço:
Todos estes campos, sem contar com o 6o., são especificados por números. Veja a tabela abaixo para os valores destes campos:
Além destes temos também alguns parâmetros ativos: @reboot = run at boot and reboot only @yearly = run at midnight Jan 1 each year (equiv to 0 0 1 1 *) @annually = run at midnight Jan 1 each year (equiv to 0 0 1 1 *) @monthly = run at midnight on the first day of each month (equiv to 0 0 1 * *) @weekly = run at midnight each Sunday (equiv to 0 0 * * 0) @daily = run at midnight each day (equiv to 0 0 * * *) @ midnight = run at midnight each day (equiv to 0 0 * * *) @ hourly = run on the first second of every hour (equiv to 0 * * * *)
Vamos analisar mais alguns exemplos: 1,21,41 * * * * echo "Meu crontab rodou mesmo!" Aqui está dizendo: "Executar o comando do sexto campo toda hora, todo dia, nos minutos 1, 21 e 41". 30 4 * * 1 rm -rf /tmp/* Aqui está dizendo: "Apagar todo conteúdo do diretório /tmp toda segunda-feira, as 4:30 da manhã." 45 19 1,15 * * /usr/local/bin/backup Aqui está dizendo: "Executar o comando 'backup' todo dia 1 e 15 às 19:45.". E assim pode-se ir montando inúmeros jeitos de agendamento possível. No arquivo do crontab global, o sexto campo pode ser substituído pelo nome do usuário, e um sétimo campo adicionado com o programa para a execução, como mostrado no exemplo a seguir: */5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg Aqui está dizendo: "Executar o mrtg como usuário root, de 5 em 5 minutos sempre." 0 19-23/2 * * * /root/script Aqui está dizendo: “Executar o 'script' entre as 19 e 23 de 2 em duas horas.” |
Atividades:
Roteiro cron |
---|
|
Aula 06 (03/09) - Configuração de interface de rede, rotas estáticas e NAT
Conteúdo:
- Visão geral das redes de computadores
- Configuração de interfaces de redes
- Rotas estáticas
- NAT
Roteiro |
---|
Ver capítulo 22 da apostila. Visão geral de serviços e funções de rede típicos: Configuração de interfaces de rede. Noções de roteamento. Visão geral de serviços de rede
Interfaces de rede Qualquer dispositivo (físico ou lógico) capaz de transmitir e receber datagramas IP. Interfaces de rede ethernet são o exemplo mais comum, mas há também interfaces PPP (seriais), interfaces tipo túnel e interfaces loopback. De forma geral, essas interfaces podem ser configuradas com um endereço IP e uma máscara de rede, e serem ativadas ou desabilitadas. Em sistemas operacionais Unix a configuração de interfaces de rede se faz com o programa ifconfig: Para mostrar todas as interfaces: root@gerencia:~> ifconfig -a
dsl0 Link encap:Point-to-Point Protocol
inet addr:189.30.70.200 P-t-P:200.138.242.254 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:34260226 errors:0 dropped:0 overruns:0 frame:0
TX packets:37195398 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:19484812547 (18582.1 Mb) TX bytes:10848608575 (10346.0 Mb)
eth1 Link encap:Ethernet HWaddr 00:19:D1:7D:C9:A9
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37283974 errors:0 dropped:0 overruns:0 frame:0
TX packets:42055625 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20939614658 (19969.5 Mb) TX bytes:18284980569 (17437.9 Mb)
Interrupt:16 Base address:0xc000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:273050 errors:0 dropped:0 overruns:0 frame:0
TX packets:273050 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:21564572 (20.5 Mb) TX bytes:21564572 (20.5 Mb)
root@gerencia:~>
Para configurar uma interface de rede (que fica automaticamente ativada): root@gerencia:~> ifconfig eth1 192.168.1.100 netmask 255.255.255.0
Para desativar uma interface: root@gerencia:~> ifconfig eth1 down
Para ativar uma interface: root@gerencia:~> ifconfig eth1 up
Ao se configurar uma interface de rede, cria-se uma rota automática para a subrede diretamente acessível via aquela interface. Isto se chama roteamento mínimo. root@gerencia:~> ifconfig eth1 192.168.10.0 netmask 255.255.0.0
root@gerencia:~> netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
root@gerencia:~>
Pode-se associar mais de um endreço a uma mesma interface de rede. Isto se chama IP alias: root@gerencia:~> ifconfig eth1:0 192.168.1.110 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1:1 192.168.2.100 netmask 255.255.255.0
root@gerencia:~> ifconfig -a
eth1 Link encap:Ethernet HWaddr 00:19:D1:7D:C9:A9
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37295731 errors:0 dropped:0 overruns:0 frame:0
TX packets:42068558 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20942258027 (19972.0 Mb) TX bytes:18294794452 (17447.2 Mb)
Interrupt:16 Base address:0xc000
eth1:0 Link encap:Ethernet HWaddr 00:19:D1:7D:C9:A9
inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0xc000
eth1:1 Link encap:Ethernet HWaddr 00:19:D1:7D:C9:A9
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0xc000
root@gerencia:~>
Configuração no boot Todo sistema operacional possui alguma forma de configurar suas interfaces de rede, para que sejam automaticamente ativadas no boot com seus endereços IP. Por exemplo, em sistemas Linux Ubuntu (descrito em maiores detalhes em seu manual online). A configuração de rede se concentra no arquivo /etc/network/interfaces: # This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo eth1
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
# a interface ethernet eth1
iface eth1 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.254
# apelido para eth1
iface eth1:0 inet static
address 192.168.5.100
netmask 255.255.255.0
No Ubuntu deve-se em primeiro lugar desabilitar um serviço automático de atualização do /etc/resolv.conf, através do comando dpkg-reconfigure resolvconf, escolhendo a primeira opção como yes e as demais opções deixando o padrão. Em seguida edita-se o arquivo /etc/resolv.conf: nameserver 200.135.37.65
nameserver 8.8.8.8
Esses arquivo é lido pelos scripts ifup e ifdown. Esses scripts servem para ativar ou parar interfaces específicas, fazendo todas as operações necessárias para isto: # Ativa a interface eth1
ifup eth1
# Desativa a interface eth1
ifdown eth1
Para ativar, desativar ou recarregar as configurações de todas as interfaces de rede: # desativa todas as interfaces de rede
sudo /etc/init.d/networking stop
# ativa todas as interfaces de rede
sudo /etc/init.d/networking start
# recarrega as configurações de todas as interfaces de rede
sudo /etc/init.d/networking restart
Rotas estáticas Ver capítulo 23 da apostila. Rotas estáticas podem ser adicionadas a uma tabela de roteamento. Nos sistemas operacionais Unix, usa-se o programa route: # adiciona uma rota para a rede 10.0.0.0/24 via o gateway 192.168.1.254
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254
# adiciona uma rota para a rede 172.18.0.0/16 via a interface PPP pp0
route add -net 172.18.0.0 netmask 255.255.0.0 dev ppp0
# adiciona a rota default via o gateway 192.168.1.254
route add default gw 192.168.1.254
# adiciona uma rota para o host 192.168.1.101 via o gateway 192.168.1.253
route add -host 192.168.1.101 gw 192.168.1.253
A tabela de rotas pode ser consultada com o programa netstat: root@gerencia:~> netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 192.168.1.254 255.255.255.0 U 0 0 0 eth1
192.168.1.101 192.168.1.253 255.255.255.0 UH 0 0 0 eth1
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.254 0.0.0.0 U 0 0 0 eth1
Rotas podem ser removidas também com route: # remove a rota para 10.0.0.0/24
route delete -net 10.0.0.0 netmask 255.255.255.0
# remove a rota para o host 192.168.1.101
route delete -host 192.168.1.101
Coleta e análise de tráfego Uma ferramenta básica de análise de tráfego de rede faz a coleta das PDUs por interfaces de rede, revelando as informações nelas contidas. Dois programas bastante populares para essa finalidade são:
Outros programas úteis (ou ao menos interessantes):
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: Para ser possível compartilhar um endereço IP, NAT faz mapeamentos (IP origem, port origem, protocolo transporte) -> (IP do NAT, port do NAT, , protocolo transporte), sendo protocolo de transporte TCP ou UDP. Assim, para cada par (IP origem, port origem TCP ou UDP) o NAT deve associar um par (IP do NAT, port do NAT TCP ou UDP) (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte. NAT no Linux Ver capítulo 35, seção 4, da apostila. O NAT no Linux se configura com iptables. As regras devem ser postas na tabela nat, e aplicadas a chain POSTROUTING, como no seguinte exemplo: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth0 deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo MASQUERADE foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar. Para uso mais geral, com links permanentes, deve-se usar o alvo SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 200.135.37.66
Uma outra possibilidade é mapear para um endereço da rede interna um tráfego originado externamente. Por exemplo, pode haver um servidor na rede interna que precisa ser acessado externamente, porém ele não possui um endereço IP roteável. O NAT no Linux possui a função DNAT que pode fazer essa tarefa: iptables -t nat -A PREROUTING -p tcp -d 200.135.37.66 --dport 8080 -i eth0 -j DNAT --to-destination 192.168.1.10:80
Nesse exemplo, datagramas com IP destino 200.135.37.66 e contendo um segmento TCP com port 8080 são desviados para o port 80 no IP 192.168.1.10. Quer dizer, o IP de destino desses datagramas é de fato substituído por 192.168.1.10, e o port de destino é mudado para 80. Note que DNAT é aplicado a chain PREROUTING. Com estas configurações o cliente acessa qualquer site na internet mas não pode ser acessado. Por isto alguns textos colocam NAT na categoria de técniccas de segurança. Apesar de NAT prover o isolamento entre rede externa e interna, a não ser para os tráfegos mapeados, não se pode usá-lo sozinho como proteção de uma rede. Quer dizer, não se pode prescindir de um bom firewall e políticas de segurança adequadas. Verificando as tabelas A ferramenta conntrack permite o monitoramento da tabela ativa, ou seja, é possível visualizar quais as conexões abertas que estão fazendo uso do NAT. Exemplo: conntrack -L --src-nat |
Atividades:
Roteiro |
---|
A) Configurar interface de rede
B) Coleta de tráfego
C) Tabelas estáticas de roteamento
D) NAT
|
Aula 07 (10/09) - DNS
Conteúdo:
- Serviço de tradução de nomes
DNS | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ver capítulo 25 da apostila. DNS (Domain Name System) é uma base de dados distribuída e hierárquica. Nela se armazenam informações para mapear nomes de máquinas da Internet para endereços IP e vice-versa, informação para roteamento de email, e outros dados utilizados por aplicações da Internet. A informação armazenada no DNS é identificada por nomes de domínio que são organizados em uma árvore, de acordo com as divisões administrativas ou organizacionais. Cada nodo dessa árvore, chamado de domínio, possui um rótulo. O nome de domínio de um nodo é a concatenação de todos os rótulos no caminho do nodo até a raiz. Isto é representado como uma string de rótulos listados da direita pra esquerda e separados por pontos (ex: ifsc.edu.br, sj.ifsc.edu.br). Um rótulo precisa ser único somente dentro do domínio pai a que pertence. Por exemplo, um nome de domínio de uma máquina no IFSC pode ser mail.ifsc.edu.br., em que o "." (último) significa o root level domain .br é o domínio do topo da hierarquia (no Brasil feito em [1])ao qual mail.sj.ifsc.edu.br pertence. .ifsc.edu é um subdomínio de .br., e mail o nome da máquina em questão. Por razões administrativas, o espaço de nomes é dividido em áreas chamadas de zonas, cada uma iniciando em um nodo e se estendendo para baixo para os nodos folhas ou nodos onde outras zonas iniciam. Os dados de cada zona são guardados em um servidor de nomes, que responde a consultas sobre uma zona usando o protocolo DNS. Clientes buscam informação no DNS usando uma biblioteca de resolução (resolver library), que envia as consultas para um ou mais servidores de nomes e interpreta as respostas. (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:
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:
Uma zona assim é composta de um conjunto de registros com todas as informações dos domínios nela contidos. O conteúdo de uma zona, contendo o domínio example.com, pode ser visualizado abaixo: example.com 86400 IN SOA ns1.example.com. hostmaster.example.com. (
2002022401 ; serial
10800 ; refresh
15 ; retry
604800 ; expire
10800 ; minimum
)
IN NS ns1.example.com.
IN NS ns2.smokeyjoe.com.
IN MX 10 mail.another.com.
IN TXT "v=spf1 mx -all"
ns1 IN A 192.168.0.1
www IN A 192.168.0.2
ftp IN CNAME www.example.com.
bill IN A 192.168.0.3
fred IN A 192.168.0.4
|
Atividades:
Roteiro |
---|
O objetivo é montar a seguinte estrutura: Vamos configurar e testar um servidor DNS. Para tanto montaremos a estrutura indicada no diagrama, onde cada máquina será um servidor DNS, com um domínio próprio e, ao mesmo tempo, será cliente do servidor DNS da máquina 192.168.3.101. Esta, por sua vez, será servidor: um servidor master do domínio redes.edu.br e servidor escravo, recebendo automaticamente uma cópia das zonas dos servidores masters, de todos os demais domínios criados. Esta, será também a única máquina com servidor DNS com zona reversa. Sendo assim todos os domínios, diretos e reversos, serão visíveis por meio deste servidor.
|
Aula 08 (16/09) - Servidor web Apache
Ver capítulo 26 da apostila.
Apache |
---|
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
Uma configuração básica O servidor Apache precisa de algumas informações básicas para poder ativar um site:
No exemplo abaixo, define-se um servidor WWW chamado www.ger.edu.br, que atende requisições nos ports 8080. Crie um arquivo /etc/apache2/sites-avaliable/ger, com o seguinte conteúdo: # O nome de servidor
ServerName www.ger.edu.br
# As portas onde se atendem requisições HTTP
Listen 8080
# Onde estão os documentos desse site
DocumentRoot /var/www/ger
# As restrições de acesso aos documentos
<Directory /var/www/ger>
Options Indexes
DirectoryIndex index.html index.php
order allow,deny
allow from all
</Directory>
Crie um link simbólico para o arquivo ger: ln -s /etc/apache2/sites-available/ger /etc/apache2/sites-enable/ger Edite o arquivo /etc/hosts e acrescente: 192.168.3.1X www.ger.edu.brCrie o diretório /var/www/ger e crie um arquivo de nome index.html com o seguinte conteúdo: <html><body><h1>GER!</h1>
<p>Esta e minha pagina.</p>
</body></html>
Restarte o Apache: service apache2 restart Acesse 192.168.3.1X:8080 Além dessas configurações, diversas outras se referem a opções do Apache, tais como modos de operação, identificação de tipos de documentos, extensões (funcionalidades) suportadas, e outras. Usualmente essas configurações já estão definidas de forma conveniente no arquivo de configuração do Apache. |
Atividades:
Roteiro Apache | ||
---|---|---|
|
Aula 09 (18/09) - E-mail
Ver capítulo 27 da apostila.
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:
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:
A figura abaixo ilustra uma infraestrutura de email típica. Os protocolos envolvidos são:
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: Configuração A configuração do postfix é armazenada em arquivos, que normalmente residem no diretório /etc/postfix. Os dois principais são:
No Ubuntu deve-se iniciar o uso do Postfix com esses comandos: sudo apt-get install -y postfix
# O comando abaixo deve ser usado se o postfix já foi instalado, mas deseja-se recriar sua configuração
sudo 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:
|
Dicas |
---|
Atenção para vários problemas comuns na implantação do correio eletrônico:
|
- Atividades:
Roteiro |
---|
|