Gerência de Redes de Computadores (técnico) (diário 2010-1)

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Projeto da Disciplina

A disciplina está orientada à resolução de um "grande" problema: projeto e implementação de duas redes de computadores interligadas via Internet - atendendo matriz e filial de uma mesma empresa. Estas duas redes deverão prover serviços internos a cada uma das unidades, bem como serviços de uso externo (outra unidade e/ou funcionários em trânsito).

A ideia é permitir que os funcionários possam trabalhar de qualquer ponto da Internet com o mínimo de perda de acesso aos dados. Ou seja, o acesso virtual à rede (serviços, ferramentas e dados) deverá ser equivalente ao acesso físico - dentro da matriz ou da filial.

Para fins didáticos, serão usados apenas 4 computadores para criar o ambiente interno da empresa: <graphviz> graph Empresa {

Internet [shape=diamond]
subgraph clusterMatriz {
 label=Matriz
 cliente_Matriz [label=Cliente]
 servidor_Matriz [label=Servidor, shape=Mrecord]
 servidor_Matriz -- cliente_Matriz
}
subgraph clusterFilial {
 label=Filial
 cliente_Filial [label=Cliente]
 servidor_Filial [label=Servidor, shape=Mrecord]
 servidor_Filial -- cliente_Filial
}
Internet -- servidor_Matriz
Internet -- servidor_Filial

} </graphviz>

Serviços

Cada unidade deverá ter serviços que provejam o ambiente de trabalho aos seus usuários:

  • Transparentes ao usuário final:
    • Facilitadores: serviços de automatização dos processos de configuração dos componentes da rede, bem como localização de serviços voltados aos usuários.
    • Diretórios e Bancos de Dados: organização de dados para acesso fácil, rápido e controlado.
    • Acesso remoto: o controle central das duas redes, em particular dos servidores, será realizado pelo administrador de redes da matriz.
    • Gerência: garantia de qualidade dos serviços prestados.
  • De uso direto do usuário final:
    • Compartilhamento: troca de arquivos entre os usuários.
    • Serviços específicos: se possível, encapsulados em ferramentas mais genéricas para veiculação através da rede. Exemplo: aplicativos para ERP, CRM e BI via ambiente Web ou através de túneis seguros.
    • Comunicação: texto, voz e vídeo - de forma síncrona ou não.

Observações

  • Tráfego não controlado (via Internet) deverá, sempre que possível, ser protegido de terceiros utilizando criptografia.
  • Informação útil a toda a empresa deverá estar armazenada no servidor da matriz. Ao servidor da filial, somente deverão residir informações desta unidade.
  • O acesso aos dados deverá ser o mais transparente possível ao usuário final. Cabe apenas ao administrador de rede e/ou de sistemas conhecer todos as vias de tráfego da informação.

Visão Geral de Administração de Sistemas e de Rede

09/02: História dos S.O.s e Linguagens de Programação

10/02: Instalação de S.O.s Linux

  • Sistemas instalados: Ubuntu Linux 9.10 como servidor.
    • Instalação mínima.
    • Recomendações de particionamento para servidores - em particular o uso de LVM.

12/02: Intepretador de Comandos

  • Tópicos: interpretador de comandos bash, criação de um script shell:
#!/bin/bash
...

Atividade 1

O problema: contar quantos usuários do sistema possuem a expressão adm em seu nome de login?

Proposta de solução

Há várias formas de resolver o problema. Uma delas consiste em:

  1. Listar todos os usuários do sistema. Para fins didáticos, serão considerados apenas os usuários do arquivo /etc/passwd.
  2. Filtrar, deste arquivo, apenas os nomes de login.
  3. Filtrar apenas os usuários com a expressão adm.
  4. Contar as ocorrências.

Como o processo é sequencial, esse problema pode ser resolvido via script shell, aqui denominado usuariosAdm:

vi usuariosAdm

cujo conteúdo é:

#!/bin/bash
echo "Há:"
cat /etc/passwd | cut -d : -f 1 | grep adm | wc -l
echo "usuários com a expressão adm em seu nome de login."

Para executar o script, é preciso liberar a execução para, em seguida, rodar o script como um programa regular:

chmod 755 usuariosAdm
./usuariosAdm

19/02: Intepretador de Comandos

Atividade 1

Montar um shell script que apresenta, sequencialmente, os estados do processador, memória e espaço em disco em todas as partições montadas. Variante: criar um menu para que o usuário possa escolher entre apenas um destes itens.

Proposta de solução

  • Original:
#!/bin/bash

echo "Estado do processador:"
top -n 1 -b | head -n 3

echo ""
echo "Estado da memória:"
free

echo ""
echo "Espaço em disco:"
df -h
  • Variante:
#!/bin/bash

Atividade 2

Montar um shell script para apresentar a quantidade de bytes enviados e recebidos em todas as interfaces de rede Ethernet. O interessante é que sejam coletados estes dados de 10 em 10s cinco vezes antes de encerrar o programa. Variante: apresentar, a cada 10s, apenas os bytes enviados e recebidos neste período de tempo - ao invés do acumulado apresentado originalmente pelo sistema.

Proposta de solução

  • Original:
#!/bin/bash

date
echo "Situação da interface de rede eth0:"
ifconfig eth0 | head -n 8 | tail -n 1

sleep 10

echo ""
date
echo "Situação da interface de rede eth0:"
ifconfig eth0 | head -n 8 | tail -n 1

sleep 10

echo ""
date
echo "Situação da interface de rede eth0:"
ifconfig eth0 | head -n 8 | tail -n 1

sleep 10

echo ""
date
echo "Situação da interface de rede eth0:"
ifconfig eth0 | head -n 8 | tail -n 1

sleep 10

echo ""
date
echo "Situação da interface de rede eth0:"
ifconfig eth0 | head -n 8 | tail -n 1
  • Variante:
#!/bin/bash

Atividade 3

Criar um script que salvaguarda (backup) os dados pessoais de um usuário, compactando-os e deixando apenas acessíveis ao administrador root, e o remove do sistema. Variante: remover os grupos vazios - que originalmente eram "povoados" apenas pelo usuário removido.

Proposta de solução

  • Original:
#!/bin/bash

# Descobrir qual o usuário a ser removido.
echo -n "Por favor, digite o nome do usuário: "
read USUARIO

# Descobrir qual é o dir. pessoal deste usuário.
DIR=`cat /etc/passwd | grep $USUARIO | cut -d : -f 6`

# Dirigir-se até o diretório pessoal do usuário.
echo "Avançando até o diretório $DIR..."
sleep 2
cd $DIR

# Escolher um diretório para "backups" de usuários.
echo "Criando um diretório de backups..."
sleep 2
mkdir /var/backups/usuariosAntigos
chmod 700 /var/backups/usuariosAntigos
chown root /var/backups/usuariosAntigos

# Fazer um "backup" deste diretório em um único arquivo.
# Compactar o "backup".
echo "Criando o backup e compactando-o..."
sleep 2
tar czf /var/backups/usuariosAntigos/$USUARIO.tar.gz .

# Proteger o acesso ao "backup".
echo "Protegendo o backup..."
sleep 2
chmod 400 /var/backups/usuariosAntigos/$USUARIO.tar.gz

# Apagar o diretório original.
cd ..
echo "Prestes a apagar o diretório $DIR em 5 segundos..."
echo "Problemas? Ctrl+C para cancelar a operação..."
sleep 5
rm -rf $DIR

# Apagar o usuário original.
echo "Apagando o usuário $USUARIO..."
sleep 2
userdel $USUARIO
echo "Usuário apagado com sucesso."
  • Variante:
#!/bin/bash

24/02: Início do Sistema e Scripts

Descrição do início do sistema para o sistema instalado: Ubuntu Linux versão 9.10.

<graphviz>

digraph Inicio {

Kernel -> "/" Kernel -> "/sbin/init" "/" -> "/sbin/init" "/sbin/init" -> "/etc/init/*" "/etc/init/*" -> "/etc/init.d/rcS" -> "/etc/rcS.d/S*" -> "/etc/init.d/rc <runlevel>" "/etc/init/*" -> "/etc/init.d/rc <runlevel>" -> "/etc/rc<runlevel>.d/S*" }

</graphviz>

Revisão dos Conceitos de Redes de Computadores

26/03: Redes Locais

  • Tópicos: Arquiteturas de rede, protocolo IP, cálculo de máscara de rede.

03/03: Segmentação de Redes usando Máscara de Rede

A máscara de rede, na prática, define os limites da sub-rede a ela aplicada; ou seja, a faixa de IPs associados à sub-rede. Um cenário interessante para o estudo está descrito abaixo, onde a sub-rede 10.0.0.0/24 foi segmentada para comportar todas as sub-redes expostas no exemplo.

  • Na sub-rede em vermelho, como há 14 computadores, a máscara de rede /28 (255.255.255.240) é suficiente para comportar todos os IPs, que podem ser os primeiros da sub-rede original: 10.0.0.0/28.
  • As demais sub-redes têm seus endereços definidos na própria figura. Como há apenas dois computadores por sub-rede, a máscara /30 (255.255.255.252) garante dois, e apenas dois, IPs válidos.
<graphviz>

graph rede10 { rankdir="LR"

C01 -- S01 [color="blue",label="10.0.0.16/30"] S02 -- C02 [color="blue", label="10.0.0.20/30"] S03 -- C03 [color="blue", label="10.0.0.24/30"] S04 -- C04 [color="blue", label="10.0.0.28/30"] S05 -- C05 [color="blue", label="10.0.0.32/30"] S06 -- C06 [color="blue", label="10.0.0.36/30"] S07 -- C07 [color="blue", label="10.0.0.40/30"] S08 -- C08 [color="blue", label="10.0.0.44/30"] S09 -- C09 [color="blue", label="10.0.0.48/30"] S10 -- C10 [color="blue", label="10.0.0.52/30"] S11 -- C11 [color="blue", label="10.0.0.56/30"] S12 -- C12 [color="blue", label="10.0.0.60/30"] S13 -- C13 [color="blue", label="10.0.0.64/30"] S14 -- C14 [color="blue", label="10.0.0.68/30"]

S01 -- S02 [color="red"] S01 -- S03 [color="red"] S01 -- S04 [color="red"] S01 -- S05 [color="red"] S01 -- S06 [color="red"] S01 -- S07 [color="red"] S01 -- S08 [color="red"] S01 -- S09 [color="red"] S01 -- S10 [color="red"] S01 -- S11 [color="red"] S01 -- S12 [color="red"] S01 -- S13 [color="red"] S01 -- S14 [color="red"] }

</graphviz>
  • Legenda:
    • S: servidor
    • C: cliente

Todos os servidores, no caso, podem atuar como roteadores entre as sub-redes. No Linux, o seguinte comando ativa a função de repasse de pacotes IP:

sysctl -w net.ipv4.ip_forward=1

informação que pode ser gravada no arquivo /etc/sysctl.conf.

05/03: Configuração de Rede

  • Tópicos: configuração via linha de comando e por arquivo de configuração. Endereços de rede para redes locais e acesso a redes remotas.
  • Endereços de rede:
    • Para redes locais:
      • IP
      • Máscara de rede
      • Broadcast (difusão)
    • Redes Remotas
      • Uma ou mais rotas de saída, onde uma delas pode ser a rota padrão do sistema.
      • Para o acesso pleno à Internet, é interessante (mas não obrigatório) um ou mais servidores DNS.
  • Configuração via linha de comando: veja a lista de comandos para rede.
  • Arquivos de configuração (assumindo o sistema escolhido para a disciplina):
    • /etc/network/interfaces: IP, máscara de rede, broadcast para cada uma das interfaces, e rotas para o sistema.
    • /etc/resolv.conf: servidor(es) DNS para o sistema.
    • /etc/sysctl.conf: funcionalidades adicionais do sistema, como roteamento ou ponte.

10/03: Redes Remotas

  • Releitura do projeto da disciplina.
  • A pedido dos alunos, foi refeita a instalação do sistema operacional do servidor.
  • Reconfiguração das duas interfaces de rede.

Foram configuradas as duas interfaces virtuais do sistema, eth0 e eth1 no arquivo /etc/network/interfaces. O exemplo abaixo se aplicou à máquina M1 do laboratório (do professor):

# Interface de 'loopback'
auto lo
iface lo inet loopback

# Interface "interna", ponto a ponto entre servidor e cliente (2 computadores)
auto eth0
iface eth0 inet static
   address 10.0.0.17
   netmask 255.255.255.252

# Interface "externa", da rede dos servidores (14 computadores)
auto eth1
iface eth1 inet static
   address 10.0.0.1
   netmask 255.255.255.240

Após a configuração do arquivo, pode-se aplicar os valores utilizando o comando (o símbolo # inicial simboliza um comando digitado pelo superusuário root):

# /etc/init.d/networking restart
  • Ativação do roteamento no kernel.

O arquivo /etc/sysctl.conf possui diversas configuração relacionadas ao kernel Linux. Entre elas, o roteamento:

...
net.ipv4.ip_forward=1
...

o qual foi aplicado através do comando:

# sysctl -p /etc/sysctl.conf
  • Criação de um script shell para NAT.

Como na instalação padrão do Ubuntu não há um arquivo específico para configurar NAT, foi adotada a abordagem de criar um script próprio - para fins didáticos. Esse processo foi executado com a seguinte série de passos:

    1. Criação do script modelo, arquivo /etc/init.d/nat:
#!/bin/bash

# "Limpeza" das regras antigas
iptables -t nat -F

# Criação de uma regra genérica para NAT, considerando a interface eth1 como "externa"
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    1. Mudança das permissões, uma vez que se trata de um arquivo executável:
# chmod 700 /etc/init.d/nat
    1. Referência do script modelo para um nível de execução. Por predefinição (arquivos do diretório /etc/init), o nível comum é 2. Portanto, é recomendável uma ligação simbólica à cópia do arquivo original - para facilitar a manutenção do arquivo:
# cd /etc/rc2.d
# ln -s ../init.d/nat S01nat

O arquivo será executado junto com o sistema (S), sendo o primeiro script deste nível 2 (01).

Serviços em Rede: Facilitadores

12/03: Relógio e Agendamento de Tarefas

17/03: Registros do Sistema e Prova Prática

19/03: DHCP e Zeroconf

Serviços em Rede: Diretórios

24/03: DNS e LDAP

Serviços em Rede: Compartilhamento

26/03: NFS e SMB

31/03: SMB

07/04: Prova Prática

09/04: HTTP

14/04: HTTP

  • Tópicos: Autenticação, HTTPS.

16/04: HTTP

  • Aplicações Web.

23/04: HTTP

  • Tópicos: DAV, controle de versão.

Serviços em Rede: Comunicação

28/04: Correio Eletrônico

30/04: Comunicação Instantânea

  • Tópicos: XMPP, protocolos proprietários, redes sociais.

05/05: VoIP

07/05: VoIP

Serviços em Rede: Acesso Remoto

12/05: SSH, VNC, RDP

  • O futuro: computação em nuvem, virtualização, mobilidade.

14/05: Prova Prática

Gerência de Rede

19/05: Conceitos

  • Tópicos: SNMP.

21/05: Scritps

26/05: Monitoramento

28/05: Contabilização

02/06: Contabilização

04/06: Segurança

  • Tópicos: backup.
  • Ferramentas: rsync, amanda, bacula, etckeeper + (git | bazaar | mercurial).

09/06: Segurança

11/06: Prova Prática

Projeto Integrador

16/06 até 09/07: Projeto Integrador



Voltar para página principal da disciplina