Mudanças entre as edições de "ARC60808-2018-2"
(→SNMP) |
|||
(74 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 250: | Linha 250: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# vi /etc/network/interfaces<syntaxhighlight lang=text> | # vi /etc/network/interfaces<syntaxhighlight lang=text> | ||
+ | auto eth5 | ||
iface eth5 inet static | iface eth5 inet static | ||
address 192.168.1.180 | address 192.168.1.180 | ||
Linha 443: | Linha 444: | ||
==Apache== | ==Apache== | ||
+ | |||
+ | ===Teoria Básica=== | ||
+ | O servidor [http://httpd.apache.org/ABOUT_APACHE.html 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 [http://en.wikipedia.org/wiki/NCSA_HTTPd 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 objetos. 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: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | GET / HTTP/1.1 Host: http://www.sj.ifsc.edu.br/~odilson/RED29004/RED29004.html | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para o servidor Web, os principais componentes de uma requisição HTTP são o método HTTP a executar e o localizador do objeto 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 objeto possui um especificador de tipo de conteúdo, chamado de [http://en.wikipedia.org/wiki/Internet_media_type ''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 objeto 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 objeto no contexto do servidor web é qualquer conteúdo que pode ser retornado como resposta a uma requisição HTTP. No caso mais simples, um objeto corresponde a um arquivo em disco, mas também podem ser gerados dinamicamente. Existem diversas tecnologias para gerar objetos, 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 objetos que compõem um site web são gerados dinamicamente, sendo PHP, JSP e ASP as tecnologias mais usadas. | ||
+ | |||
===Atividades=== | ===Atividades=== | ||
#Em sua máquina virtual server tenha certeza que a rede esteja funcional e devidamente configurada com o IP 192.168.1.X (X sendo 100 + último dígito do IP se sua máquina real). | #Em sua máquina virtual server tenha certeza que a rede esteja funcional e devidamente configurada com o IP 192.168.1.X (X sendo 100 + último dígito do IP se sua máquina real). | ||
#Instale o servidor Apache: <syntaxhighlight lang=bash> | #Instale o servidor Apache: <syntaxhighlight lang=bash> | ||
− | apt-get install apache2 </syntaxhighlight> | + | apt-get install apache2 apache2-utils </syntaxhighlight> |
#Re/inicie o servidor: <syntaxhighlight lang=bash> | #Re/inicie o servidor: <syntaxhighlight lang=bash> | ||
/etc/init.d/apache2 restart </syntaxhighlight> | /etc/init.d/apache2 restart </syntaxhighlight> | ||
#Verifique o funcionamento. Abra o navegador de sua máquina real e acesse '''192.168.1.X'''. | #Verifique o funcionamento. Abra o navegador de sua máquina real e acesse '''192.168.1.X'''. | ||
− | #Altere a página padrão para um página de sua preferência editando o arquivo /var/www/index.html | + | #Altere a página padrão para um página de sua preferência editando o arquivo '''/var/www/html/index.html''' com, por exemplo, o seguinte conteúdo: <syntaxhighlight lang=text> |
<html><body><h1>ARC60808!</h1> | <html><body><h1>ARC60808!</h1> | ||
<p>Página de teste da melhor turma do mundo.</p> | <p>Página de teste da melhor turma do mundo.</p> | ||
</body></html> </syntaxhighlight> | </body></html> </syntaxhighlight> | ||
− | === | + | ===Páginas de usuários=== |
− | + | *Vamos habilitar a opção de usuários criarem suas páginas pessoais. | |
+ | #Primeiramente vamos carregar o respectivo módulo do Apache: <syntaxhighlight lang=bash> | ||
a2enmod userdir </syntaxhighlight> | a2enmod userdir </syntaxhighlight> | ||
#Reinicie o servidor Apache: <syntaxhighlight lang=bash> | #Reinicie o servidor Apache: <syntaxhighlight lang=bash> | ||
/etc/init.d/apache2 restart </syntaxhighlight> | /etc/init.d/apache2 restart </syntaxhighlight> | ||
− | #Como usuário aluno, crie a pasta do publica do usuário | + | #Como usuário aluno, crie a pasta do publica do referido usuário: <syntaxhighlight lang=bash> |
mkdir /home/aluno/public_html</syntaxhighlight> | mkdir /home/aluno/public_html</syntaxhighlight> | ||
− | #Crie uma página HTML personalizada para o aluno, <syntaxhighlight lang=bash> vi /home/aluno/public_html/index.html </syntaxhighlight> com o seguinte conteúdo: <syntaxhighlight lang=text> | + | #Crie uma página HTML personalizada para o aluno, <syntaxhighlight lang=bash> vi /home/aluno/public_html/index.html </syntaxhighlight> com o seguinte conteúdo exemplo: <syntaxhighlight lang=text> |
<html><body><h1>ALUNO!</h1> | <html><body><h1>ALUNO!</h1> | ||
<p>Melhor aluno do mundo.</p> | <p>Melhor aluno do mundo.</p> | ||
Linha 469: | Linha 487: | ||
===Páginas com senha=== | ===Páginas com senha=== | ||
+ | *Vamos habilitar um nível mínimo de controle de acesso a objetos e/ou páginas de usuários. | ||
#Logue como aluno. | #Logue como aluno. | ||
#Crie um arquivo <syntaxhighlight lang=bash> vi /home/aluno/public_html/.htaccess </syntaxhighlight> com o seguinte conteúdo: <syntaxhighlight lang=text> | #Crie um arquivo <syntaxhighlight lang=bash> vi /home/aluno/public_html/.htaccess </syntaxhighlight> com o seguinte conteúdo: <syntaxhighlight lang=text> | ||
Linha 477: | Linha 496: | ||
Require valid-user </syntaxhighlight> | Require valid-user </syntaxhighlight> | ||
#Crie o arquivo de senhas e introduza a senha para o usuário aluno. Num terminal da máquina virtual server, logada como aluno (NÃO COMO ROOT), digite: <syntaxhighlight lang=bash> htpasswd -c /home/aluno/passwords aluno </syntaxhighlight> | #Crie o arquivo de senhas e introduza a senha para o usuário aluno. Num terminal da máquina virtual server, logada como aluno (NÃO COMO ROOT), digite: <syntaxhighlight lang=bash> htpasswd -c /home/aluno/passwords aluno </syntaxhighlight> | ||
+ | |||
+ | ==Compartilhamento de arquivos== | ||
+ | Ver capítulo 28 e 30 da [[Media:Gerencia_de_redes.pdf|apostila]]. | ||
+ | |||
+ | 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 (Server Message Block/Common Internet File System):''' mais conhecido como ''compartilhamento de arquivos e impressoras do Windows'' | ||
+ | |||
+ | ===NFS=== | ||
+ | Ver capítulo 30 da [[Media:Gerencia_de_redes.pdf|apostila]]. | ||
+ | |||
+ | [http://en.wikipedia.org/wiki/Network_File_System_%28protocol%29 NFS] é um sistema de arquivos de rede criado pela [http://www.sun.com/ Sun Microsystems] em 1989, e descrito na [http://tools.ietf.org/html/rfc1094 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 | ||
+ | |||
+ | ===== Configurações no servidor (Ubuntu Server)===== | ||
+ | #Para ter suporte ao serviço NFS, deve-se instalar o pacote ''nfs-kernel-server'': <syntaxhighlight lang=bash> | ||
+ | apt-get install -y nfs-kernel-server | ||
+ | </syntaxhighlight> | ||
+ | #Crie o diretório '''/data''' para ser compartilhado e insira alguns arquivos: <syntaxhighlight lang=text> | ||
+ | mkdir /data | ||
+ | cp /etc/a* /data </syntaxhighlight> | ||
+ | #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: '''vi /etc/exports'''<syntaxhighlight lang=text> | ||
+ | # Compartilha /home para os computadores da rede 192.168.1.0/24, em modo leitura- | ||
+ | escrita, com acessos | ||
+ | # como superusuário. Modificações em modo assíncrono. | ||
+ | /home 192.168.1.0/24(rw,root_squash,async,no_subtree_check) | ||
+ | |||
+ | # Compartilha /data para os computadores da rede 192.168.1.0/24, em modo leitura- | ||
+ | escrita, porém sem acessos | ||
+ | # como superusuário. Modificações em modo assíncrono. Porém para 192.168.1.101 se | ||
+ | permitem acessos | ||
+ | # como superusuário. | ||
+ | /data 192.168.1.101(rw,no_root_squash,no_subtree_check) 192.168.1.0/24(ro,root_squash,async,no_subtree_check) | ||
+ | </syntaxhighlight> | ||
+ | #Após editar esse arquivo, deve-se atualizar o serviço NFS com o comando [http://manpages.ubuntu.com/manpages/karmic/en/man8/exportfs.8.html ''exportfs'']: <syntaxhighlight lang=bash> | ||
+ | exportfs -r | ||
+ | </syntaxhighlight> | ||
+ | #Podem-se ver os diretórios exportados com o comando [http://manpages.ubuntu.com/manpages/jaunty/man8/showmount.8.html ''showmount'']: <syntaxhighlight lang=bash> | ||
+ | showmount -e | ||
+ | </syntaxhighlight> | ||
+ | #Se houver problemas com o comando acima, reinicie a máquina. | ||
+ | |||
+ | ==== Testes no cliente (Ubuntu Gráfico)==== | ||
+ | #Use máquina virtual com ambiente gráfico como cliente. | ||
+ | #Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto: <syntaxhighlight lang=bash>sudo apt-get install nfs-common </syntaxhighlight> | ||
+ | #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'' caso dese-se que sempre sejam montados no boot). | ||
+ | #Como usuário aluno, crie diretórios para montar os diretórios montados em seu servidor: <syntaxhighlight lang=bash> | ||
+ | mkdir /home/aluno/home_remoto | ||
+ | mkdir /home/aluno/data_remoto | ||
+ | </syntaxhighlight> | ||
+ | #Monte o diretório remoto:<syntaxhighlight lang=bash> | ||
+ | sudo mount 192.168.1.X:/home /home/aluno/home_remoto | ||
+ | sudo mount 192.168.1.X:/data /home/aluno/data_remoto</syntaxhighlight> | ||
+ | #Verifique se os diretórios remotos estão acessíveis: <syntaxhighlight lang=bash> | ||
+ | df </syntaxhighlight> | ||
+ | #No diretório /home/aluno/home_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê? | ||
+ | #No diretório /home/aluno/data_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê? | ||
+ | #Qual sua proposta para tornar o diretório home de todos os usuários de uma rede local único? Ou seja, em qualquer máquina da rede local que um usuário conecte, ele sempre verá o mesmo conteúdo de seu home e sempre atualizado. | ||
+ | |||
+ | ===Samba=== | ||
+ | |||
+ | Ver capítulo 28 da [[Media:Gerencia_de_redes.pdf|apostila]]. | ||
+ | |||
+ | [http://www.samba.org/ Samba] é originalmente uma implementação de código aberto para o serviço de compartilhamento de arquivos e impressoras do Microsoft Windows. Porém atualmente esse software evoluiu a tal ponto que pode ser usado como controlador de domínio Windows, além de possuir algumas funções e recursos não existentes no Windows (integração com Unix, flexibilidade de uso de diferentes bases administrativas, entre outros). Além de funcionar como um servidor, pode ter também papel de cliente e usar o serviço de autenticação de um servidor Windows. Seu uso se mostra razoavelmente simples, com complexidade proporcional à configuração desejada. Assim, Samba tem grande popularidade por possibilitar integrar os mundos do Windows e do Unix. | ||
+ | |||
+ | O Samba é dividido a grosso modo em duas partes principais: | ||
+ | |||
+ | * Servidor de arquivos, impressoras, e de autenticação (serviços [http://msdn.microsoft.com/en-us/library/aa365233%28VS.85%29.aspx SMB/CIFS]): programa [http://manpages.ubuntu.com/manpages/karmic/man8/smbd.8.html smbd] | ||
+ | * Servidor de nomes WINS (Windows Name Service): programa [http://manpages.ubuntu.com/manpages/karmic/man8/nmbd.8.html nmbd] | ||
+ | |||
+ | ==== Configurações no Servidor ==== | ||
+ | #Esse software pode ser instalado tanto a partir do código-fonte, obtido no [http://www.samba.org/ site oficial], quanto por pacote pre-compilado. No caso do Ubuntu, sua instalação pode ser feita assim:<syntaxhighlight lang=bash> | ||
+ | apt-get install -y samba cifs-utils smbclient | ||
+ | </syntaxhighlight> | ||
+ | #Crie o diretório '''/dados/software''' e copie alguns arquivos dentro dele. <code> | ||
+ | mkdir -p /dados/software | ||
+ | cp -rf /etc/* /dados/software </syntaxhighlight> | ||
+ | #A configuração do Samba se faz por meio de arquivos, que normalmente ficam em ''/etc/samba''. O principal deles se chama ''smb.conf'', e uma configuração muito simplificada segue abaixo. '''vi /etc/samba/smb.conf''': | ||
+ | #*<span style="color: red;">Lembre-se de adequar o parâmetro X. Como o SMB trabalha orientado a nomes é importante que cada servidor tenha um nome distinto. | ||
+ | #*deixe somente o conteúdo abaixo:<syntaxhighlight lang=text> | ||
+ | [global] | ||
+ | workgroup = ArcX | ||
+ | server string = Servidor %h (ARC - IFSC) | ||
+ | netbios name = ServidorX | ||
+ | dns proxy = no | ||
+ | log file = /var/log/samba/log.%m | ||
+ | encrypt passwords = true | ||
+ | passdb backend = tdbsam | ||
+ | obey pam restrictions = yes | ||
+ | |||
+ | [homes] | ||
+ | comment = Diretorios dos usuarios | ||
+ | browseable = no | ||
+ | read only = no | ||
+ | create mask = 0700 | ||
+ | directory mask = 0700 | ||
+ | |||
+ | [soft] | ||
+ | comment = Softwares | ||
+ | path = /dados/software | ||
+ | valid users = aluno | ||
+ | force user = aluno | ||
+ | force group = aluno | ||
+ | force create mode = 0555 | ||
+ | force directory mode = 0555 | ||
+ | writable = yes | ||
+ | </syntaxhighlight> | ||
+ | # Crie contas de usuários samba, usando esse comando '''smbpasswd''' para todos os usuários desejados. Para o usuário aluno: <syntaxhighlight lang=bash> | ||
+ | smbpasswd -a aluno </syntaxhighlight> | ||
+ | # Ative o Samba: <syntaxhighlight lang=bash> | ||
+ | service smbd restart | ||
+ | service nmbd restart | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Teste no cliente ==== | ||
+ | # Teste o acesso a seus compartilhamentos de sua máquina virtual gráfica. Instale os pacotes: <syntaxhighlight lang=text> | ||
+ | apt-get install cifs-utils smbclient </syntaxhighlight> | ||
+ | #Para listar os compartilhamentos de seu servidor você pode usar esse comando, como usuário aluno, NÃO como root: <syntaxhighlight lang=bash> | ||
+ | smbclient -L 192.168.1.X -U aluno</syntaxhighlight> | ||
+ | #Para acessar um compartilhamento, listar seu conteúdo, baixar um arquivo e desconectar, use: <syntaxhighlight lang=text> | ||
+ | smbclient //192.168.1.X/software -U aluno vai abrir um terminal SMB | ||
+ | dir Lista os arquivos do comaprtilhamento | ||
+ | get aliases | ||
+ | quit | ||
+ | </syntaxhighlight> | ||
+ | #Para acessar um compartilhamento no modo gráfico <syntaxhighlight lang=text> | ||
+ | Abra o navegador de arquivos do Linux. | ||
+ | digite: <Ctrl>+<L> Vai abrir uma linha digitável no topo da janela. | ||
+ | digite: smb://192.168.1.X/software Vai abrir o diretório compartilhado | ||
+ | digite: smb://192.168.1.X/aluno Vai abrir o diretório do aluno no servidor | ||
+ | </syntaxhighlight> | ||
+ | == SSH == | ||
+ | Ver capítulo 21 da [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | |||
+ | #Instale o SSH em sua máquina. | ||
+ | #Habilite e desabilite o login do root.<syntaxhighlight lang=bash> | ||
+ | vi /etc/ssh/sshd_config</syntaxhighlight> configurando a diretiva: <syntaxhighlight lang=text> | ||
+ | PermitRootLogin yes </syntaxhighlight> | ||
+ | #Reinicie o serviço <syntaxhighlight lang=bash> | ||
+ | service ssh restart </syntaxhighlight> | ||
+ | #De sua máquina real conecte e faça testes. <syntaxhighlight lang=bash> | ||
+ | ssh aluno@192.168.1.X </syntaxhighlight> | ||
+ | #Conecte na máquina de seu colega e faça alguns testes. | ||
+ | #Habilite o acesso somente para um conjunto de usuários <span style="color: red;">(desafio). | ||
+ | #Teste. | ||
+ | #Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários <span style="color: red;">(desafio). | ||
+ | #Teste. | ||
+ | #Instale o SSH em sua máquina virtual com ambiente gráfico, IP 192.168.1.2X. | ||
+ | #Habilite o '''X11Forwarding'''. | ||
+ | #Da máquina real teste esta funcionalidade: <syntaxhighlight lang=bash> | ||
+ | ssh -X aluno@192.168.1.2X | ||
+ | firefox </syntaxhighlight> | ||
+ | ##Em qual máquina está rodando o Firefox? | ||
+ | ##Em qual máquina será baixado um arquivo, caso você faça download utilizando esse Firefox? | ||
+ | #Teste a funcionalidade do '''scp''', copiando arquivos locais para o servidor e vice-versa. | ||
+ | #Configure seu par de máquinas, cliente e servidor, para conexão direta, sem pedido de senha <span style="color: red;">(desafio). | ||
+ | #Teste a conexão direta. | ||
+ | #Teste a execução de comandos no seu servidor, sem "sair" do cliente. | ||
+ | #Faça uns testes fornecendo usuário e/ou senha errados e verifique o ''log'': <syntaxhighlight lang=bash> | ||
+ | tail /var/log/auth.log </syntaxhighlight> | ||
+ | #Permitindo ao acesso ao serviço somente para algumas redes: <syntaxhighlight lang=text> | ||
+ | vi /etc/hosts.allow | ||
+ | sshd: 1.2.3.0/255.0.0.0 | ||
+ | sshd: 192.168.1.0/255.255.255.0 | ||
+ | vi /etc/hosts.deny | ||
+ | sshd: ALL </syntaxhighlight> | ||
+ | |||
+ | ==DHCP== | ||
+ | Para entendimento básico do servidor/protocolo DHCP (''Dynamic Host Configuration Protocol'') ver capítulo 19 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | |||
+ | Em nosso experimento será usado o [http://www.isc.org/software/dhcp servidor DHCP desenvolvido pelo ISC]. Para usá-lo devem-se seguir os passos descritos abaixo. | ||
+ | |||
+ | # Instalar o serviço: <syntaxhighlight lang=bash> | ||
+ | apt-get update | ||
+ | apt-get install -y isc-dhcp-server | ||
+ | </syntaxhighlight> | ||
+ | # Configurar em ''/etc/dhcp/dhcpd.conf''. Definir as configurações globais e as redes onde o servidor DHCP irá ofertar endereços. Apague todo o conteúdo do arquivo original: <syntaxhighlight lang=text> | ||
+ | default-lease-time 600; | ||
+ | max-lease-time 7200; | ||
+ | option subnet-mask 255.255.255.0; | ||
+ | option broadcast-address 192.168.1.255; | ||
+ | option routers 192.168.1.1; | ||
+ | option domain-name-servers 191.36.8.2; | ||
+ | option domain-name "ARC.edu.br"; | ||
+ | |||
+ | subnet 192.168.1.0 netmask 255.255.255.0 { | ||
+ | range 192.168.1.X1 192.168.1.X9; | ||
+ | }</syntaxhighlight> | ||
+ | # Editar a interface que vai atender ao DHPD: <syntaxhighlight lang=text> | ||
+ | vi /etc/default/isc-dhcp-server | ||
+ | INTERFACES="eth0" </syntaxhighlight> | ||
+ | # Iniciar o servidor DHCP: <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/isc-dhcp-server restart | ||
+ | </syntaxhighlight> | ||
+ | #Para testes vamos utilizar a máquina virtual Ubuntu Gráfica. Primeiro instalamos o cliente com o comando: <syntaxhighlight lang=bash> sudo apt-get update | ||
+ | sudo apt-get install isc-dhcp-client </syntaxhighlight> | ||
+ | #Agora force a reconfiguração da inteface de rede de sua máquina cleinte (Ubuntu gráfica), com o comando:<syntaxhighlight lang=bash> | ||
+ | dhclient -v eth0 </syntaxhighlight> | ||
+ | #Na máquina server (ubuntu Server), verifique o log e observe a troca de mensagens entre o cliente e o servidor: <syntaxhighlight lang=bash> | ||
+ | tail -n 30 /var/log/syslog </syntaxhighlight> | ||
+ | #Verifique os aluguéis no seu servidor com: <syntaxhighlight lang=bash> | ||
+ | cat /var/lib/dhcp/dhclient.leases </syntaxhighlight> | ||
+ | |||
+ | Maiores detalhes sobre esse servidor DHCP: | ||
+ | * [http://manpages.ubuntu.com/manpages/karmic/en/man8/dhcpd.8.html dhcpd - o servidor DHCP] | ||
+ | * [http://manpages.ubuntu.com/manpages/dapper/en/man5/dhcpd.conf.5.html dhcpd.conf - o arquivo de configuração do DHCP] | ||
+ | * [http://manpages.ubuntu.com/manpages/karmic/en/man5/dhcp-options.5.html Opções do protocolo DHCP] | ||
+ | * [http://manpages.ubuntu.com/manpages/dapper/en/man8/dhclient.8.html dhclient - o cliente DHCP] | ||
+ | |||
+ | ==''Firewall'' com iptables == | ||
+ | *Ver capítulo 23 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | *Vamos trabalhar com sub-redes e para isto precisamos fazer com que o nosso cliente navegue utilizando o servidor como ''gateway''. | ||
+ | |||
+ | #No ubuntu server (servidor) crie uma nova interface de rede através do ''ipaliases'': <syntaxhighlight lang=bash> ifconfig eth0:0 10.0.X.1/24 </syntaxhighlight> | ||
+ | #Configure seu servidor como roteador e para mascarar (NAT) os pacotes de seu cliente : <syntaxhighlight lang=bash> echo 1 > /proc/sys/net/ipv4/ip_forward | ||
+ | apt-get install iptables | ||
+ | iptables -t nat -F | ||
+ | iptables -F | ||
+ | iptables -t nat -A POSTROUTING -s 10.0.X.0/24 -o eth0 -j MASQUERADE </syntaxhighlight> | ||
+ | #No ubuntu gráfico (cliente) reconfigure a interface de rede, tendo seu servidor como roteador: <syntaxhighlight lang=bash> | ||
+ | ifconfig eth0 10.0.X.10/24 | ||
+ | route add -net default gw 10.0.X.1 | ||
+ | echo nameserver 191.36.8.2 > /etc/resolv.conf</syntaxhighlight> | ||
+ | #Teste a conexão de rede de seu cliente. <syntaxhighlight lang=bash> ping www.ifsc.edu.br </syntaxhighlight> | ||
+ | #Verifique, no servidor, se os pacotes estão atravessando-o. <syntaxhighlight lang=bash> tcpdump -n -i any </syntaxhighlight> | ||
+ | #Configure uma regra que impeça seu cliente de acessar qualquer porta da máquina www.ifsc.edu.br. | ||
+ | #Teste a partir de seu cliente. | ||
+ | #Repita a regra, mas agora mandando um aviso ao cliente. | ||
+ | #Teste a partir de seu cliente. | ||
+ | #Proíba o seu cliente de fazer ping para qualquer máquina, liberando todos os demais serviços. | ||
+ | #Teste a partir de seu cliente. | ||
+ | #Limpe as regras anteriores. | ||
+ | #Permita que seu cliente acesse qualquer máquina na porta 80, mas somente nesta porta. | ||
+ | #Teste a partir de seu cliente. | ||
+ | #Limpe todas as regras. | ||
+ | #Mude a política para DROP e permita que o seu cliente acesse somente www.ifsc.edu.br. | ||
+ | #Teste a partir de seu cliente. | ||
+ | #Configure uma regra em seu servidor que proíba (REJECT) respostas a pings oriundos da máquina 10.0.X.10. | ||
+ | #*Da máquina cliente faça pings para a máquina servidora e observe o resultado. | ||
+ | |||
+ | == Servidor Proxy/Cache== | ||
+ | |||
+ | Ver capítulo 22 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | #Instalar o [http://www.squid-cache.org/ Squid] no Servidor: <syntaxhighlight lang=bash> | ||
+ | apt-get update | ||
+ | apt-get install -y squid </syntaxhighlight> | ||
+ | #Edite o arquivo /etc/squid3/squid.conf e descomente (apague o caractere #) a linha: <syntaxhighlight lang=text> cache_dir ufs /var/spool/squid3 100 16 256 </syntaxhighlight> | ||
+ | #Reiniciar o serviço: <syntaxhighlight lang=text> | ||
+ | service squid3 restart </syntaxhighlight> | ||
+ | #Verificar os logs do mesmo: <syntaxhighlight lang=text> | ||
+ | tail /var/log/squid3/cache.log | ||
+ | tail /var/log/squid3/access.log </syntaxhighlight> | ||
+ | #No Ubuntu Gráfico (cliente), abra o Firefox e configure-o para acessar seu próprio servidor Proxy/Cache: <syntaxhighlight lang=text> Menu >> Preferências >> Geral >> Proxy se Rede >> Configurar Conexão >> Configuração Manual de Proxy >> | ||
+ | Proxy HTTP 192.168.1.1X >> Porta 3128 >> Sete a opção Usar este servidor para todos os protocolos </syntaxhighlight> | ||
+ | #Vamos fazer uma configuração mínima no Squid para liberar a navegação em nosso cliente. | ||
+ | ##Em primeiro lugar 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. | ||
+ | ##* acl - Access Control List: são "simples" listas de máquinas e/ou redes. | ||
+ | ##* http_access: este é o filtro propriamente dito. | ||
+ | ##*A ordem sequencial é fundamental.<syntaxhighlight lang=text> | ||
+ | ..... | ||
+ | acl CONNECT method CONNECT | ||
+ | acl redelocal src 192.168.1.0/24 | ||
+ | ..... | ||
+ | http_access allow localhost | ||
+ | http_access allow redelocal </syntaxhighlight> | ||
+ | #Reinicie o serviço Squid. | ||
+ | #De seu cliente faça uns testes de acesso a qualquer site e verifique se está tudo funcionando corretamente. | ||
+ | #Em seguida acessar um sítio qualquer baixar algum arquivo com tamanho menor que o configurado na diretiva ''maximum_object_size'', por padrão esse valor vem ajustado para 4 MB. Por exemplo: http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq2.html. | ||
+ | ##Medir o tempo. | ||
+ | ##Apagar o arquivo e baixar novamente. | ||
+ | ##*se tudo estiver correto no segundo acesso o tempo será praticamente nulo, já que o objeto foi transferido do disco do seu servidor Squid. | ||
+ | #O objeto armazenado no servidor pode ser encontrado em na pasta configurada para armazenamento de objetos baixados da Internet, por exemplo com os comandos: <syntaxhighlight lang=text> | ||
+ | du -sh /var/spool/squid3/* | ||
+ | du -sh /var/spool/squid3/00/* | ||
+ | ls -l /var/spool/squid3/00/00 </syntaxhighlight> | ||
+ | #No servidor faça testes de bloqueio para algum sítio de sua preferência, por exemplo www.ifsc.edu.br, baseado no roteiro apresentado no capítulo 22 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | ##Crie a acl; | ||
+ | ##Use o http_access na correta posição do arquivo para poder bloquear; | ||
+ | ##Reinicie o Servidor. | ||
+ | #Teste no cliente. | ||
+ | #No servidor bloqueie o acesso a sítios que contenham a palavra '''tele'''. | ||
+ | #No cliente teste acessando tele.sj.ifsc.edu.br. | ||
+ | |||
+ | == Rede Virtual Privada - VPN == | ||
+ | Ver capítulo 27 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | #Instale e pré-configure o OpenVPN em ambas as máquinas, servidora (Ubuntu Server) e cliente (Ubuntu Gráfico): <syntaxhighlight lang=bash> | ||
+ | apt-get update | ||
+ | apt-get install openvpn | ||
+ | modprobe tun </syntaxhighlight> | ||
+ | #No servidor: | ||
+ | ##crie o a chave estática que será utilizado na criptografias dos dados trafegados: <syntaxhighlight lang=bash> | ||
+ | openvpn --genkey --secret /etc/openvpn/chave </syntaxhighlight> | ||
+ | ##Crie o Arquivo '''/etc/openvpn/matriz.conf''' com o seguinte conteúdo: <syntaxhighlight lang=text> | ||
+ | dev tun | ||
+ | ifconfig 192.168.10.1 192.168.10.2 | ||
+ | cd /etc/openvpn | ||
+ | secret chave | ||
+ | user nobody | ||
+ | port 5000 | ||
+ | ping 10 | ||
+ | verb 3 </syntaxhighlight> | ||
+ | ##Inicie o serviço explicitando o arquivo de configuração: <syntaxhighlight lang=bash> | ||
+ | /usr/sbin/openvpn --config /etc/openvpn/matriz.conf & </syntaxhighlight> | ||
+ | ##Verifique o perfeito funcionamento, primeiro se foi criado a interface tun0: <syntaxhighlight lang=bash> | ||
+ | ifconfig </syntaxhighlight> e/ou busque nos log possíveis problemas <syntaxhighlight lang=bash> | ||
+ | tail -n30 /var/log/syslog </syntaxhighlight> | ||
+ | #Configure sua máquina cliente para ser a filial. | ||
+ | ##Crie o arquivo '''/etc/openvpn/filial.conf''', com o seguinte conteúdo: <syntaxhighlight lang=text> | ||
+ | dev tun | ||
+ | ifconfig 192.168.10.2 192.168.10.1 | ||
+ | remote 192.168.1.1X | ||
+ | cd /etc/openvpn | ||
+ | secret chave | ||
+ | user nobody | ||
+ | port 5000 | ||
+ | ping 10 | ||
+ | verb 3 </syntaxhighlight> | ||
+ | ##Copie a chave criada no servidor para o cliente, testando seus conhecimentos do '''scp''' (ssh) e permissionamento de arquivos. Por exemplo: <syntaxhighlight lang=bash> | ||
+ | scp 192.168.1.1X:/etc/openvpn/chave /etc/openvpn/chave </syntaxhighlight> | ||
+ | ##Inicie o serviço explicitando o arquivo de configuração: <code> | ||
+ | /usr/sbin/openvpn --config /etc/openvpn/filial.conf & </syntaxhighlight> | ||
+ | ##Verifique o perfeito funcionamento, primeiro se foi criado a interface tun0: <syntaxhighlight lang=bash> | ||
+ | ifconfig </syntaxhighlight> e/ou busque nos log possíveis problemas <syntaxhighlight lang=bash> | ||
+ | tail -n30 /var/log/syslog </syntaxhighlight> | ||
+ | #No cliente, dê '''ping''' na interface 192.168.10.1. Deixe o ping rodando. | ||
+ | #No servidor, capture os pacotes na interface tun0 e eth0: <syntaxhighlight lang=bash> | ||
+ | tcpdumo -i tun0 | ||
+ | tcpdump -i eth0 </syntaxhighlight> | ||
+ | ##Qual a diferença nas duas capturas? | ||
+ | ##Qual é a relação comum nas duas capturas? | ||
+ | ##Como é possível imaginar o túnel através dessas capturas? | ||
+ | |||
+ | == SNMP == | ||
+ | Ver capítulo 28, ''Simple Network Management Protoco''l, de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | Mais detalhes podem obtidos em [http://wiki.sj.ifsc.edu.br/index.php/GER-2010-1#21.2F06:_SNMP SNMP]. | ||
+ | #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: <syntaxhighlight lang=bash> | ||
+ | apt-get install snmp snmpd </syntaxhighlight> | ||
+ | #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: <syntaxhighlight lang=text> | ||
+ | #agentAddress udp:127.0.0.1:161 | ||
+ | agentAddress udp:161,udp6:[::1]:161 </syntaxhighlight> | ||
+ | #Reincia-se o serviço snmp: <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/snmpd restart </syntaxhighlight> | ||
+ | #Verifique se não houve erros com: <syntaxhighlight lang=bash> | ||
+ | tail /var/log/syslog </syntaxhighlight> | ||
+ | #*Caso aponte erros nas linhs 143 e 145 comente-as e reinicie novamente. | ||
+ | #Busca-se por possíveis erros de configuração: <syntaxhighlight lang=bash> | ||
+ | tail -n 30 /var/log/syslog </syntaxhighlight> | ||
+ | #Pode-se testar o serviço com uma consulta a partir de uma máquina remota, por exemplo, o terminal da máquina ubuntu gráfica. Para isso, primeiramente instala o snmp e depois faça a consulta ao seu servidor <syntaxhighlight lang=bash> | ||
+ | apt-get install snmp | ||
+ | snmpwalk -v1 -c public 192.168.1.1X | more</syntaxhighlight> | ||
+ | |||
+ | == Cacti == | ||
+ | Ver capítulo 30 de [http://docente.ifsc.edu.br/odilson/artigos/AdministracaoDeRedesComLinuxOdilsonTadeuValle.pdf Administração de Redes com Linux]. | ||
+ | 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. | ||
+ | |||
+ | # No servidor (Ubuntu Server) Instale o Cacti: <syntaxhighlight lang=bash> | ||
+ | apt-get install cacti | ||
+ | </syntaxhighlight> | ||
+ | ##Ao pedir a senha, forneça: aluno | ||
+ | ##Repita a senha. | ||
+ | ##OK | ||
+ | ##Servidor web: Apache2 | ||
+ | ##Configura base de dados: SIM | ||
+ | ##Senha para a base de dados: aluno | ||
+ | ##Repita a senha. | ||
+ | # Com um navegador acesse a URL ''http://192.168.1.1X/cacti''. Ali você deve dar continuidade ao processo de instalação: | ||
+ | ##<Next> | ||
+ | ## Selecione "New Install" | ||
+ | ## Verifique na próxima tela se todas as opções mostradas estão corretas (se aparece '''''OK''''' em verde ao lado). | ||
+ | ## Clique em ''Finish'', e na tela a seguir forneça o usuário ''admin'' e senha ''admin''. | ||
+ | ##Mude a senha para '''aluno'''. | ||
+ | # Crie gráficos para monitorar a CPU, memória, discos, processos e usuários do servidor onde reside o Cacti. | ||
+ | # Visualize os gráficos criados. | ||
+ | # Crie novos gráficos, porém coletando os dados da máquina do professor (192.168.1.101) também via SNMP. | ||
+ | ## Crie um novo dispositivo ('''Create devices for network''') do tipo '''ucd/net SNMP Host'''. | ||
+ | ## Crie os gráficos ('''New Graphs''') para o ''device''. | ||
+ | ## Associe o ''host'' a árvore ('''Graph Trees'''). | ||
+ | ## Visualize os gráficos. |
Edição atual tal como às 14h58min de 10 de outubro de 2018
Interfaces de rede, rotas estáticas, análise de tráfego e NAT
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)
Para configurar uma interface de rede (que fica dinamicamente ativada), em dois formatos com o mesmo efeito:
root@gerencia:~> ifconfig eth1 192.168.1.100 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1 192.168.1.100/24
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 automaticamente uma rota para entrega direta, baseado na mácara de rede, ou seja, todos os IPs pertencentes a mesma rede pertencerão ao conjunto onde será realizada uma entrega direta. Isto se chama roteamento mínimo. Veja o exemplo abaixo:
root@gerencia:~> ifconfig eth1 192.168.10.0/16
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 endereço a uma mesma interface de rede. Isto se chama IP alias:
root@gerencia:~> ifconfig eth1:0 192.168.2.110 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1:1 10.10.3.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.2.110 Bcast:192.168.2.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:10.10.3.100 Bcast:10.10.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0xc000
Para configurar o roteador padrão deve-se utilizar, por exemplo:
route add -net default gw 192.168.1.1
Para configurar o servidor DNS deve-se editar o arquivo /etc/resolv.conf com um conteúdo do tipo:
nameserver 191.36.8.2
nameserver 191.36.8.3
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
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
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 22:14:37.836844 IP 201.35.226.9.21688 > 74.125.47.136.80: . ack 1 win 54 22:14:38.410477 IP 201.35.226.9.21688 > 74.125.47.136.80: F 1:1(0) ack 1 win 54 22:14:38.770653 IP 74.125.47.136.80 > 201.35.226.9.21688: . ack 2 win 122 22:14:39.906734 IP 64.233.163.83.80 > 201.35.226.9.23018: P 534213879:534214123(244) ack 1779175654 win 133
- wireshark: o equivalente em modo gráfico (porém com muitas outras funcionalidades)
Outros programas úteis (ou ao menos interessantes):
- iptraf: gera estatísticas de tráfego por interfaces de rede
- iftop: mostra os fluxos em uma interface de rede
- nstreams: analisa a saída do tcpdump, e revela os fluxos em uma rede
- driftnet: analisa o tráfego em uma interface, e captura imagens, videos e audio
NAT
A tradução de endereço de rede (NAT - Network Address Translation), proposta pela RFC 1631 em 1994, é uma função de rede criada para contornar o problema da escassez de endereços IP. Com a explosão no crescimento da Internet, e o mau aproveitamento dos endereços IP (agravado pelo endereçamento hierárquico), percebeu-se que o esgotamento de endereços poderia ser logo alcançado a não ser que algumas medidas fossem tomadas. Esse problema somente seria eliminado com a reformulação do protocolo IP, de forma a aumentar o espaço de endereços, que resultou na proposta do IPv6 em 1998. Porém no início dos anos 1990 a preocupação era mais imediata, e pensou-se em uma solução provisória para possibilitar a expansão da rede porém reduzindo-se a pressão por endereços IP. O NAT surgiu assim como uma técnica com intenção de ser usada temporariamente, enquanto soluções definitivas não se consolidassem. Ainda hoje NAT é usado em larga escala, e somente deve ser deixado de lado quando IPv6 for adotado mundialmente (o que deve demorar).
NAT parte de um princípio simples: endereços IP podem ser compartilhados por nodos em uma rede. Para isto, usam-se endereços IP ditos não roteáveis (também chamados de inválidos) em uma rede, sendo que um ou mais endereços IP roteáveis (válidos) são usados na interface externa roteador que a liga a Internet. Endereços não roteáveis pertencem às subredes 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12, e correspondem a faixas de endereços que não foram alocados a nenhuma organização e, portanto, não constam das tabelas de roteamento dos roteadores na Internet. A figura abaixo mostra uma visão geral de uma rede em que usa NAT:
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
A) Configurar interface de rede
- Verifique a configuração de sua interface de rede eth0, na sua máquina virtual server (VM server). Se necessário corrija-a assim: ip 192.168.1.X, sendo X o número do PC + 100 (exemplo: para o PC 2 X=102), roteador default = 192.168.1.1. Nameserver 191.36.8.2.
- Teste a comunicação do seu computador, fazendo ping 192.168.1.1. Tente pingar outras máquinas da rede.
- Tente também pingar o IP 191.36.8.2.
- Veja a tabela de rotas, usando netstat -rn.
- Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 191.36.8.2.
- Configure sua máquina virtual para que a informação de rede, configurada manualmente acima, fique permanente. Quer dizer, no próximo boot essa configuração deve ser ativada automaticamente.
- Adicione um IP alias a sua interface eth0. Esse novo IP deve ser configurado para 10.0.Y.1/24 (exemplo: para o PC 2 Y=2 e para o PC 17 Y=17).
B) Coleta de tráfego
- 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, em momentos distintos:
- Capture todos os pacotes da rede.
- Capture somente os pacotes gerados por sua máquina.
- Capture somente pacotes destinados à sua máquina.
- Capture pacotes destinados ou originados da máquina 200.135.37.65.
- Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados.pcap“.
C) NAT
Para implementar o NAT utilizaremos como base a figura abaixo.
- A máquina virtual server terá duas interfaces de rede configuradas: eth0 e eth0:0
- 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 máquina virtual server deverá ser configurada para realizar o NAT, conforma apresentado acima.
- Por padrão, o Ubuntu gráfico roda um serviço temporário de cliente DHCP que pode reconfigurar a interface de rede. Para desabilitar (remover) esse serviço execute o comando:
apt-get remove isc-dhcp-client
- A máquina virtual gráfica deverá ter sua interface de rede configurada com IP e máscara de rede de acordo com a figura abaixo, o default gateway deverá ser a máquina virtual server e o DNS o IP 191.36.8.2.
- 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 é:
- Pingar entre cliente e roteador.
- Do cliente pingar a interface externa do roteador.
- Do cliente pingar a máquina do professor. Se funcionar até aqui seu roteador estará corretamente configurado.
- Do roteador pingar a interface externa de outro roteador.
- Do roteador pingar outro cliente.
- Do seu cliente pingar outro cliente.
Gabarito
Todos os exercícios abaixo considerarão que a interface de rede da máquina é a eth5 e que esta é a máquina M80 ==> 192.168.1.80. Adeque estes dados de acordo com a sua máquina.
A) Configurar interface de rede
- Digite os comandos no servidor:
ifconfig eth5 192.168.1.180/24 ; atribui (configura) o ip a interface de rede eth5 route add -net default gw 192.168.1.1 echo nameserver 200.135.37.65 > /etc/resolv.conf
- vi /etc/network/interfaces
auto eth5 iface eth5 inet static address 192.168.1.180 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 191.36.8.2
- ifconfig eth5:3 10.0.80.1/24
- Digite os comandos no cliente (gráfico):
ifconfig eth5 10.0.80.10/24 ; atribui (configura) o ip a interface de rede eth5 route add -net default gw 10.0.80.1 echo nameserver 191.36.8.2 > /etc/resolv.conf
B) Coleta de tráfego
- ping www.polito.it
- tcpdump -n
- tcpdump -n src 192.168.1.80
- tcpdump -n dst 192.168.1.80
- tcpdump -n host 200.135.37.65
- tcpdump -n -w pacotes_capturados.pcap
C) NAT
- Esta etapa somente no server.
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.0.80.0/24 -o eth5 -j MASQUERADE
- Esta etapa somente no cliente.
ping 192.168.1.180 ; O que ocorre? Por quê? ping 10.0.80.1 ; O que ocorre? Por quê? ping www.feup.up.pt
- ....
Domain Name System (DNS)
- Instale o servidor DNS -- pacote BIND, na máquina servidora, com o comando:
apt-get install bind9 dnsutils
- O arquivo de configuração do BIND se encontra no seguinte caminho: "/etc/bind/named.conf", subdividido em três arquivos de configuração:
- "/etc/bind/named.conf.options": onde fica a configuração global. Para um teste simples não precisa reconfiguração.
- "/etc/bind/named.conf.local": onde fica a configuração das zonas. Para um teste simples não precisa reconfiguração.
- "/etc/bind/named.conf.default-zones": onde fica a configuração das zonas padrão.
- Defina uma zona, um Second Level Domain, de nome redesY.edu.br, onde Y é um número relativo a sua máquina, por exemplo: para o PC 2 Y=2 e para o PC 17 Y=17. Abaixo um exemplo para redes88.edu.br, que deve ser acrescentado ao final do arquivo /etc/bind/named.conf.default-zones:
zone "redes88.edu.br" { type master; file "/etc/bind/db.redes88"; };
- Na zona criada atribua endereços IPv4 (A) as máquinas m88, mail e ns, como sendo o IP de sua máquina virtual servidora. Atribua também apelidos (CNAME) para as máquinas www e ftp, apontando para a máquina m88. Exemplo de arquivo de configuração /etc/bind/db.redes88:
$TTL 86401 @ IN SOA ns.redes88.edu.br. admin.redes88.edu.br. ( 2018091000; serial 3H ; refresh 60 ; retry 1W ; expire 3W ; minimum ) @ IN NS ns.redes88.edu.br. ; este é o servidor master deste domínio @ IN MX 10 mail.redes88.edu.br. ; este é o servidor de email deste domínio $ORIGIN redes88.edu.br. m88 A 192.168.1.188 ; nome de máquina mail A 192.168.1.188 www IN CNAME m88.redes88.edu.br. ; apelido de máquina ftp IN CNAME m88.redes88.edu.br. ns A 192.168.1.188
- Reinicie o serviço DNS:
/etc/init.d/bind9 restart
- Busque por possíveis erros de configuração no arquivo /var/log/syslog (tail /var/log/syslog).
- Caso observar mensagens de erro, normalmente é apresentado o nome do arquivo e a linha de erro. Utilize essas informações para as devidas correções.
- Faça um teste com consulta ao seu servidor com o comando, por exemplo:
dig @localhost www.redesY.edu.br
- Faça um teste om consulta ao servidor de seu colega com o comando, por exemplo:
dig @192.168.1.107 www.redes7.edu.br
- Se desejar, configure sua máquina virtual gráfica para acessar como servidor DNS sua máquina virtual server.
- Faça testes de funcionalidade.
Servidor de Correio Eletrônico
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:
- Cabeçalhos: contém informações de controle e atributos da mensagem
- Corpo: o conteúdo da mensagem
MIME-Version: 1.0
Received: by 10.60.30.197 with HTTP; Tue, 12 Apr 2016 10:26:30 -0700 (PDT)
Date: Tue, 12 Apr 2016 14:26:30 -0300
Delivered-To: odilsontv@gmail.com
Message-ID: <CAGywRsER-FHhMupoqab-YjAgqKsux+mFT6i1yeWVVtL02DWPPg@mail.gmail.com>
Subject: Teste
From: Odilson <odilsontv@gmail.com>
To: odilson@tele.sj.ifsc.edu.br
Content-Type: multipart/alternative; boundary=bcaec54a33e43d2f9f05304cf614
--bcaec54a33e43d2f9f05304cf614
Content-Type: text/plain; charset=UTF-8
Teste
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.
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:
> 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.
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:
Atividades
- 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
- Tenha certeza que seu serviço DNS esteja funcionando corretamente e com o RR (Resource Record) MX devidamente registrado.
- Instale o postfix em sua máquina virtual server:
apt-get install postfix
- Escolha Site Internet e nome como mail.redesx.edu.br (exatamente igual ao declarado no RR MX do DNS).
- Configure-o para que se comunicar na Internet, criando o domínio de email redeX.edu.br. Para tal, edite o arquivo /etc/postfix/main.cf e crie ou modifique 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.1.0/24, 127.0.0.0/8 mynetworks_style = subnet mydestination = $myhostname, $mydomain
- Reinicie o serviço:
/etc/init.d/postfix restart
- Verifique se o servidor "subiu" corretamente:
tail /var/log/syslog
- Caso apresente algum erro, normalmente será apresentado o mesmo e a linha de ocorrência: corrija-os.
- Verifique se não houve erros de configuração:
tail -n 30 /var/log/mail.log
- Caso apresente algum erro, normalmente será apresentado o mesmo e a linha de ocorrência: corrija-os.
- Instale um cliente de Email:
apt-get install mailutils
- Envie um email:
mail aluno@redesX.edu.br <Enter> Cc: <Enter> Subject: Teste de email <Enter> Isto é somente um teste... ... para sair, em uma linha em branco digite: <CTRL>+<d>
- Verifique se o email foi perfeitamente encaminhado procurando pela string sent no /var/log/mail.log, como no exemplo abaixo:
> tail /var/log/mail.log Sep 12 11:38:07 mail postfix/pickup[2700]: 4DB3265C21: uid=0 from=<root@mail.redes88.edu.br> Sep 12 11:38:07 mail postfix/cleanup[2717]: 4DB3265C21: message-id=<20180912143807.4DB3265C21@mail.redes88.edu.br> Sep 12 11:38:07 mail postfix/qmgr[2701]: 4DB3265C21: from=<root@mail.redes88.edu.br>, size=349, nrcpt=1 (queue active) Sep 12 11:38:09 mail postfix/smtp[2719]: 4DB3265C21: to=<odilsontv@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.186.27]:25, delay=2.5, delays=0.02/0.01/1.6/0.84, dsn=2.0.0, status=sent (250 2.0.0 OK 1536763091 x7-v6si852077qtm.254 - gsmtp)
- Para ler email, logado com o usuário desejado, execute o comando mail e digite o número da mensagem desejada.
- Também é possível verificar a caixa postal dos usuários, elas permanecem no diretório /var/mail, por exemplo mostrará todas as mensagens presentes na caixa postal do usuário aluno.
cat /var/mail/aluno
- Se desejar mandar email aos colegas e/ou para seu email externo, ex. Google, é necessário configurar devidamente o nome de máquina, para isso edite os arquivos /etc/hosts modificando a linha:
127.0.0.1 mail.redesX.edu.br </syntaxhighlight> e o arquivo /etc/hostname deixando-o somente com o conteúdo:
mail.redesX.edu.br </syntaxhighlight>
- Para que o SO releia estas configurações é necessário reiniciar o sistema.
- Teste enviando mensagens para seus colegas e/ou para seu email oficial.
- Acompanhe o processamento das mensagens olhando o log.
- Verifique na caixa postal de entrada e/ou no spam.
- Provavelmente seu email será classificado como spam por não apresentar um domínio válido.
Apache
Teoria Básica
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 objetos. 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: http://www.sj.ifsc.edu.br/~odilson/RED29004/RED29004.html
Para o servidor Web, os principais componentes de uma requisição HTTP são o método HTTP a executar e o localizador do objeto 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 objeto 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 objeto 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 objeto no contexto do servidor web é qualquer conteúdo que pode ser retornado como resposta a uma requisição HTTP. No caso mais simples, um objeto corresponde a um arquivo em disco, mas também podem ser gerados dinamicamente. Existem diversas tecnologias para gerar objetos, 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 objetos que compõem um site web são gerados dinamicamente, sendo PHP, JSP e ASP as tecnologias mais usadas.
Atividades
- Em sua máquina virtual server tenha certeza que a rede esteja funcional e devidamente configurada com o IP 192.168.1.X (X sendo 100 + último dígito do IP se sua máquina real).
- Instale o servidor Apache:
apt-get install apache2 apache2-utils
- Re/inicie o servidor:
/etc/init.d/apache2 restart
- Verifique o funcionamento. Abra o navegador de sua máquina real e acesse 192.168.1.X.
- Altere a página padrão para um página de sua preferência editando o arquivo /var/www/html/index.html com, por exemplo, o seguinte conteúdo:
<html><body><h1>ARC60808!</h1>
<p>Página de teste da melhor turma do mundo.</p>
</body></html>
Páginas de usuários
- Vamos habilitar a opção de usuários criarem suas páginas pessoais.
- Primeiramente vamos carregar o respectivo módulo do Apache:
a2enmod userdir
- Reinicie o servidor Apache:
/etc/init.d/apache2 restart
- Como usuário aluno, crie a pasta do publica do referido usuário:
mkdir /home/aluno/public_html
- Crie uma página HTML personalizada para o aluno,
vi /home/aluno/public_html/index.html
com o seguinte conteúdo exemplo: <html><body><h1>ALUNO!</h1>
<p>Melhor aluno do mundo.</p>
</body></html>
- Verifique o funcionamento. Abra o navegador de sua máquina real e acesse 192.168.1.X/~aluno.
Páginas com senha
- Vamos habilitar um nível mínimo de controle de acesso a objetos e/ou páginas de usuários.
- Logue como aluno.
- Crie um arquivo
vi /home/aluno/public_html/.htaccess
com o seguinte conteúdo: AuthType Basic
AuthName "Entre com usuário e senha para ter acesse liberado"
AuthBasicProvider file
AuthUserFile /home/aluno/passwords
Require valid-user
- Crie o arquivo de senhas e introduza a senha para o usuário aluno. Num terminal da máquina virtual server, logada como aluno (NÃO COMO ROOT), digite:
htpasswd -c /home/aluno/passwords aluno
Compartilhamento de arquivos
Ver capítulo 28 e 30 da apostila.
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 (Server Message Block/Common Internet File System): mais conhecido como compartilhamento de arquivos e impressoras do Windows
NFS
Ver capítulo 30 da apostila.
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
Configurações no servidor (Ubuntu Server)
- Para ter suporte ao serviço NFS, deve-se instalar o pacote nfs-kernel-server:
apt-get install -y nfs-kernel-server
- Crie o diretório /data para ser compartilhado e insira alguns arquivos:
mkdir /data
cp /etc/a* /data
- 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: vi /etc/exports
# Compartilha /home para os computadores da rede 192.168.1.0/24, em modo leitura-
escrita, com acessos
# como superusuário. Modificações em modo assíncrono.
/home 192.168.1.0/24(rw,root_squash,async,no_subtree_check)
# Compartilha /data para os computadores da rede 192.168.1.0/24, em modo leitura-
escrita, porém sem acessos
# como superusuário. Modificações em modo assíncrono. Porém para 192.168.1.101 se
permitem acessos
# como superusuário.
/data 192.168.1.101(rw,no_root_squash,no_subtree_check) 192.168.1.0/24(ro,root_squash,async,no_subtree_check)
Testes no cliente (Ubuntu Gráfico)
- Use máquina virtual com ambiente gráfico como cliente.
- Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto:
sudo 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 caso dese-se que sempre sejam montados no boot).
- Como usuário aluno, crie diretórios para montar os diretórios montados em seu servidor:
mkdir /home/aluno/home_remoto
mkdir /home/aluno/data_remoto
- Monte o diretório remoto:
sudo mount 192.168.1.X:/home /home/aluno/home_remoto
sudo mount 192.168.1.X:/data /home/aluno/data_remoto
- Verifique se os diretórios remotos estão acessíveis:
df
- No diretório /home/aluno/home_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê?
- No diretório /home/aluno/data_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê?
- Qual sua proposta para tornar o diretório home de todos os usuários de uma rede local único? Ou seja, em qualquer máquina da rede local que um usuário conecte, ele sempre verá o mesmo conteúdo de seu home e sempre atualizado.
Samba
Ver capítulo 28 da apostila.
Samba é originalmente uma implementação de código aberto para o serviço de compartilhamento de arquivos e impressoras do Microsoft Windows. Porém atualmente esse software evoluiu a tal ponto que pode ser usado como controlador de domínio Windows, além de possuir algumas funções e recursos não existentes no Windows (integração com Unix, flexibilidade de uso de diferentes bases administrativas, entre outros). Além de funcionar como um servidor, pode ter também papel de cliente e usar o serviço de autenticação de um servidor Windows. Seu uso se mostra razoavelmente simples, com complexidade proporcional à configuração desejada. Assim, Samba tem grande popularidade por possibilitar integrar os mundos do Windows e do Unix.
O Samba é dividido a grosso modo em duas partes principais:
Configurações no Servidor
- Esse software pode ser instalado tanto a partir do código-fonte, obtido no site oficial, quanto por pacote pre-compilado. No caso do Ubuntu, sua instalação pode ser feita assim:
apt-get install -y samba cifs-utils smbclient
- Crie o diretório /dados/software e copie alguns arquivos dentro dele.
mkdir -p /dados/software
cp -rf /etc/* /dados/software </syntaxhighlight>
- A configuração do Samba se faz por meio de arquivos, que normalmente ficam em /etc/samba. O principal deles se chama smb.conf, e uma configuração muito simplificada segue abaixo. vi /etc/samba/smb.conf:
- Lembre-se de adequar o parâmetro X. Como o SMB trabalha orientado a nomes é importante que cada servidor tenha um nome distinto.
- deixe somente o conteúdo abaixo:
[global]
workgroup = ArcX
server string = Servidor %h (ARC - IFSC)
netbios name = ServidorX
dns proxy = no
log file = /var/log/samba/log.%m
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
[homes]
comment = Diretorios dos usuarios
browseable = no
read only = no
create mask = 0700
directory mask = 0700
[soft]
comment = Softwares
path = /dados/software
valid users = aluno
force user = aluno
force group = aluno
force create mode = 0555
force directory mode = 0555
writable = yes
- Crie contas de usuários samba, usando esse comando smbpasswd para todos os usuários desejados. Para o usuário aluno:
smbpasswd -a aluno
- Ative o Samba:
service smbd restart
service nmbd restart
Teste no cliente
- Teste o acesso a seus compartilhamentos de sua máquina virtual gráfica. Instale os pacotes:
apt-get install cifs-utils smbclient
- Para listar os compartilhamentos de seu servidor você pode usar esse comando, como usuário aluno, NÃO como root:
smbclient -L 192.168.1.X -U aluno
- Para acessar um compartilhamento, listar seu conteúdo, baixar um arquivo e desconectar, use:
smbclient //192.168.1.X/software -U aluno vai abrir um terminal SMB
dir Lista os arquivos do comaprtilhamento
get aliases
quit
- Para acessar um compartilhamento no modo gráfico
Abra o navegador de arquivos do Linux.
digite: <Ctrl>+<L> Vai abrir uma linha digitável no topo da janela.
digite: smb://192.168.1.X/software Vai abrir o diretório compartilhado
digite: smb://192.168.1.X/aluno Vai abrir o diretório do aluno no servidor
SSH
Ver capítulo 21 da Administração de Redes com Linux.
- Instale o SSH em sua máquina.
- Habilite e desabilite o login do root.
vi /etc/ssh/sshd_config
configurando a diretiva: PermitRootLogin yes
- Reinicie o serviço
service ssh restart
- De sua máquina real conecte e faça testes.
ssh aluno@192.168.1.X
- Conecte na máquina de seu colega e faça alguns testes.
- Habilite o acesso somente para um conjunto de usuários (desafio).
- Teste.
- Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários (desafio).
- Teste.
- Instale o SSH em sua máquina virtual com ambiente gráfico, IP 192.168.1.2X.
- Habilite o X11Forwarding.
- Da máquina real teste esta funcionalidade:
ssh -X aluno@192.168.1.2X
firefox
- Em qual máquina está rodando o Firefox?
- Em qual máquina será baixado um arquivo, caso você faça download utilizando esse Firefox?
- Teste a funcionalidade do scp, copiando arquivos locais para o servidor e vice-versa.
- Configure seu par de máquinas, cliente e servidor, para conexão direta, sem pedido de senha (desafio).
- Teste a conexão direta.
- Teste a execução de comandos no seu servidor, sem "sair" do cliente.
- Faça uns testes fornecendo usuário e/ou senha errados e verifique o log:
tail /var/log/auth.log
- Permitindo ao acesso ao serviço somente para algumas redes:
vi /etc/hosts.allow
sshd: 1.2.3.0/255.0.0.0
sshd: 192.168.1.0/255.255.255.0
vi /etc/hosts.deny
sshd: ALL
DHCP
Para entendimento básico do servidor/protocolo DHCP (Dynamic Host Configuration Protocol) ver capítulo 19 de Administração de Redes com Linux.
Em nosso experimento será usado o servidor DHCP desenvolvido pelo ISC. Para usá-lo devem-se seguir os passos descritos abaixo.
- Instalar o serviço:
apt-get update
apt-get install -y isc-dhcp-server
- Configurar em /etc/dhcp/dhcpd.conf. Definir as configurações globais e as redes onde o servidor DHCP irá ofertar endereços. Apague todo o conteúdo do arquivo original:
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
option domain-name-servers 191.36.8.2;
option domain-name "ARC.edu.br";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.X1 192.168.1.X9;
}
- Editar a interface que vai atender ao DHPD:
vi /etc/default/isc-dhcp-server
INTERFACES="eth0"
- Iniciar o servidor DHCP:
/etc/init.d/isc-dhcp-server restart
- Para testes vamos utilizar a máquina virtual Ubuntu Gráfica. Primeiro instalamos o cliente com o comando:
sudo apt-get update
sudo apt-get install isc-dhcp-client
- Agora force a reconfiguração da inteface de rede de sua máquina cleinte (Ubuntu gráfica), com o comando:
dhclient -v eth0
- Na máquina server (ubuntu Server), verifique o log e observe a troca de mensagens entre o cliente e o servidor:
tail -n 30 /var/log/syslog
- Verifique os aluguéis no seu servidor com:
cat /var/lib/dhcp/dhclient.leases
Maiores detalhes sobre esse servidor DHCP:
Firewall com iptables
- Ver capítulo 23 de Administração de Redes com Linux.
- Vamos trabalhar com sub-redes e para isto precisamos fazer com que o nosso cliente navegue utilizando o servidor como gateway.
- No ubuntu server (servidor) crie uma nova interface de rede através do ipaliases:
ifconfig eth0:0 10.0.X.1/24
- Configure seu servidor como roteador e para mascarar (NAT) os pacotes de seu cliente :
echo 1 > /proc/sys/net/ipv4/ip_forward
apt-get install iptables
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 10.0.X.0/24 -o eth0 -j MASQUERADE
- No ubuntu gráfico (cliente) reconfigure a interface de rede, tendo seu servidor como roteador:
ifconfig eth0 10.0.X.10/24
route add -net default gw 10.0.X.1
echo nameserver 191.36.8.2 > /etc/resolv.conf
- Teste a conexão de rede de seu cliente.
ping www.ifsc.edu.br
- Verifique, no servidor, se os pacotes estão atravessando-o.
tcpdump -n -i any
- Configure uma regra que impeça seu cliente de acessar qualquer porta da máquina www.ifsc.edu.br.
- Teste a partir de seu cliente.
- Repita a regra, mas agora mandando um aviso ao cliente.
- Teste a partir de seu cliente.
- Proíba o seu cliente de fazer ping para qualquer máquina, liberando todos os demais serviços.
- Teste a partir de seu cliente.
- Limpe as regras anteriores.
- Permita que seu cliente acesse qualquer máquina na porta 80, mas somente nesta porta.
- Teste a partir de seu cliente.
- Limpe todas as regras.
- Mude a política para DROP e permita que o seu cliente acesse somente www.ifsc.edu.br.
- Teste a partir de seu cliente.
- Configure uma regra em seu servidor que proíba (REJECT) respostas a pings oriundos da máquina 10.0.X.10.
- Da máquina cliente faça pings para a máquina servidora e observe o resultado.
Servidor Proxy/Cache
Ver capítulo 22 de Administração de Redes com Linux.
- Instalar o Squid no Servidor:
apt-get update
apt-get install -y squid
- Edite o arquivo /etc/squid3/squid.conf e descomente (apague o caractere #) a linha:
cache_dir ufs /var/spool/squid3 100 16 256
- Reiniciar o serviço:
service squid3 restart
- Verificar os logs do mesmo:
tail /var/log/squid3/cache.log
tail /var/log/squid3/access.log
- No Ubuntu Gráfico (cliente), abra o Firefox e configure-o para acessar seu próprio servidor Proxy/Cache:
Menu >> Preferências >> Geral >> Proxy se Rede >> Configurar Conexão >> Configuração Manual de Proxy >>
Proxy HTTP 192.168.1.1X >> Porta 3128 >> Sete a opção Usar este servidor para todos os protocolos
- Vamos fazer uma configuração mínima no Squid para liberar a navegação em nosso cliente.
- Em primeiro lugar 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.
- acl - Access Control List: são "simples" listas de máquinas e/ou redes.
- http_access: este é o filtro propriamente dito.
- A ordem sequencial é fundamental.
.....
acl CONNECT method CONNECT
acl redelocal src 192.168.1.0/24
.....
http_access allow localhost
http_access allow redelocal
- Reinicie o serviço Squid.
- De seu cliente faça uns testes de acesso a qualquer site e verifique se está tudo funcionando corretamente.
- Em seguida acessar um sítio qualquer baixar algum arquivo com tamanho menor que o configurado na diretiva maximum_object_size, por padrão esse valor vem ajustado para 4 MB. Por exemplo: http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq2.html.
- Medir o tempo.
- Apagar o arquivo e baixar novamente.
- se tudo estiver correto no segundo acesso o tempo será praticamente nulo, já que o objeto foi transferido do disco do seu servidor Squid.
- O objeto armazenado no servidor pode ser encontrado em na pasta configurada para armazenamento de objetos baixados da Internet, por exemplo com os comandos:
du -sh /var/spool/squid3/*
du -sh /var/spool/squid3/00/*
ls -l /var/spool/squid3/00/00
- No servidor faça testes de bloqueio para algum sítio de sua preferência, por exemplo www.ifsc.edu.br, baseado no roteiro apresentado no capítulo 22 de Administração de Redes com Linux.
- Crie a acl;
- Use o http_access na correta posição do arquivo para poder bloquear;
- Reinicie o Servidor.
- Teste no cliente.
- No servidor bloqueie o acesso a sítios que contenham a palavra tele.
- No cliente teste acessando tele.sj.ifsc.edu.br.
Rede Virtual Privada - VPN
Ver capítulo 27 de Administração de Redes com Linux.
- Instale e pré-configure o OpenVPN em ambas as máquinas, servidora (Ubuntu Server) e cliente (Ubuntu Gráfico):
apt-get update
apt-get install openvpn
modprobe tun
- No servidor:
- crie o a chave estática que será utilizado na criptografias dos dados trafegados:
openvpn --genkey --secret /etc/openvpn/chave
- Crie o Arquivo /etc/openvpn/matriz.conf com o seguinte conteúdo:
dev tun
ifconfig 192.168.10.1 192.168.10.2
cd /etc/openvpn
secret chave
user nobody
port 5000
ping 10
verb 3
- Inicie o serviço explicitando o arquivo de configuração:
/usr/sbin/openvpn --config /etc/openvpn/matriz.conf &
- Verifique o perfeito funcionamento, primeiro se foi criado a interface tun0:
ifconfig
e/ou busque nos log possíveis problemas tail -n30 /var/log/syslog
- Configure sua máquina cliente para ser a filial.
- Crie o arquivo /etc/openvpn/filial.conf, com o seguinte conteúdo:
dev tun
ifconfig 192.168.10.2 192.168.10.1
remote 192.168.1.1X
cd /etc/openvpn
secret chave
user nobody
port 5000
ping 10
verb 3
- Copie a chave criada no servidor para o cliente, testando seus conhecimentos do scp (ssh) e permissionamento de arquivos. Por exemplo:
scp 192.168.1.1X:/etc/openvpn/chave /etc/openvpn/chave
- Inicie o serviço explicitando o arquivo de configuração:
/usr/sbin/openvpn --config /etc/openvpn/filial.conf & </syntaxhighlight>
- Verifique o perfeito funcionamento, primeiro se foi criado a interface tun0:
ifconfig
e/ou busque nos log possíveis problemas tail -n30 /var/log/syslog
- No cliente, dê ping na interface 192.168.10.1. Deixe o ping rodando.
- No servidor, capture os pacotes na interface tun0 e eth0:
tcpdumo -i tun0
tcpdump -i eth0
- Qual a diferença nas duas capturas?
- Qual é a relação comum nas duas capturas?
- Como é possível imaginar o túnel através dessas capturas?
SNMP
Ver capítulo 28, Simple Network Management Protocol, de Administração de Redes com Linux.
Mais detalhes podem obtidos em SNMP.
- 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
- 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:
#agentAddress udp:127.0.0.1:161
agentAddress udp:161,udp6:[::1]:161
- Reincia-se o serviço snmp:
/etc/init.d/snmpd restart
- Verifique se não houve erros com:
tail /var/log/syslog
- Caso aponte erros nas linhs 143 e 145 comente-as e reinicie novamente.
- Busca-se por possíveis erros de configuração:
tail -n 30 /var/log/syslog
- Pode-se testar o serviço com uma consulta a partir de uma máquina remota, por exemplo, o terminal da máquina ubuntu gráfica. Para isso, primeiramente instala o snmp e depois faça a consulta ao seu servidor
apt-get install snmp
snmpwalk -v1 -c public 192.168.1.1X | more
Cacti
Ver capítulo 30 de Administração de Redes com Linux.
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.
- No servidor (Ubuntu Server) Instale o Cacti:
apt-get install cacti
- Ao pedir a senha, forneça: aluno
- Repita a senha.
- OK
- Servidor web: Apache2
- Configura base de dados: SIM
- Senha para a base de dados: aluno
- Repita a senha.
- Com um navegador acesse a URL http://192.168.1.1X/cacti. Ali você deve dar continuidade ao processo de instalação:
- <Next>
- Selecione "New Install"
- Verifique na próxima tela se todas as opções mostradas estão corretas (se aparece OK em verde ao lado).
- Clique em Finish, e na tela a seguir forneça o usuário admin e senha admin.
- Mude a senha para aluno.
- Crie gráficos para monitorar a CPU, memória, discos, processos e usuários do servidor onde reside o Cacti.
- Visualize os gráficos criados.
- Crie novos gráficos, porém coletando os dados da máquina do professor (192.168.1.101) também via SNMP.
- Crie um novo dispositivo (Create devices for network) do tipo ucd/net SNMP Host.
- Crie os gráficos (New Graphs) para o device.
- Associe o host a árvore (Graph Trees).
- Visualize os gráficos.