ARC60808-2018-2

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Interfaces de rede, rotas estáticas, análise de tráfego e NAT

Capítulo 12.

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:

Nat-exemplo.png

Para ser possível compartilhar um endereço IP, NAT faz mapeamentos (IP origem, port origem, protocolo transporte) -> (IP do NAT, port do NAT, , protocolo transporte), sendo protocolo de transporte TCP ou UDP. Assim, para cada par (IP origem, port origem TCP ou UDP) o NAT deve associar um par (IP do NAT, port do NAT TCP ou UDP) (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte.

NAT no Linux

Ver capítulo 35, seção 4, da apostila.

O NAT no Linux se configura com iptables. As regras devem ser postas na tabela nat, e aplicadas a chain POSTROUTING, como no seguinte exemplo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ;Habilita o NAT
iptables -t nat -L ;Lista as atuais regras da tabela NAT

A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth0 deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo MASQUERADE foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar.

Atividade

A) Configurar interface de rede

  1. 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.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.1.1. Tente pingar outras máquinas da rede.
    2. Tente também pingar o IP 191.36.8.2.
    3. Veja a tabela de rotas, usando netstat -rn.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 191.36.8.2.
  2. Configure sua máquina virtual para que a informação de rede, configurada manualmente acima, fique permanente. Quer dizer, no próximo boot essa configuração deve ser ativada automaticamente.
  3. Adicione um IP alias a sua interface eth0. 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

  1. Faça um ou mais pings para algum(ns) sítios e, com o uso de parâmetros apropriados, faça com que o tcpdump, 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.
Configurando NAT nas Máquinas virtuais
  1. Faça testes. Se houver problemas usar tcpdump para monitorar individualmente as interfaces e verificar onde está o problema. Lembre-se que os pacotes devem ter rota de ida e volta, portanto o problema pode ser no seu roteador ou de seu vizinho. Uma boa sequência de testes é:
    1. Pingar entre cliente e roteador.
    2. Do cliente pingar a interface externa do roteador.
    3. Do cliente pingar a máquina do professor. Se funcionar até aqui seu roteador estará corretamente configurado.
    4. Do roteador pingar a interface externa de outro roteador.
    5. Do roteador pingar outro cliente.
    6. Do seu cliente pingar outro cliente.

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

  1. 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
    
  2. 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
    
  3. ifconfig eth5:3 10.0.80.1/24
  4. 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

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

  1. 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
    
  2. 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
    
  3. ....

Domain Name System (DNS)

  1. Instale o servidor DNS -- pacote BIND, na máquina servidora, com o comando:
     apt-get install bind9 dnsutils
    
  2. O arquivo de configuração do BIND se encontra no seguinte caminho: "/etc/bind/named.conf", subdividido em três arquivos de configuração:
    1. "/etc/bind/named.conf.options": onde fica a configuração global. Para um teste simples não precisa reconfiguração.
    2. "/etc/bind/named.conf.local": onde fica a configuração das zonas. Para um teste simples não precisa reconfiguração.
    3. "/etc/bind/named.conf.default-zones": onde fica a configuração das zonas padrão.
  3. 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";
    };
    
  4. 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
    
  5. Reinicie o serviço DNS:
     /etc/init.d/bind9 restart
    
  6. 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.
  7. Faça um teste com consulta ao seu servidor com o comando, por exemplo:
     dig @localhost www.redesY.edu.br
    
  8. 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
    
  9. 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:

  1. 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.
  2. 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.
  3. MTA (Mail Transport Agent): o servidor responsável por transmitir mensagens até seu destino, e receber mensagens da rede para seus usuários. Comumente faz também o papel de MDA. Exemplos de softwares são Postfix, Sendmail, Qmail e Microsoft Exchange.

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

Email-intro.png

Os protocolos envolvidos são:

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

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:

Postfix architecture.gif

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:
    1. 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)
    2. main.cf: configurações usadas pelos subsistemas
  1. Tenha certeza que seu serviço DNS esteja funcionando corretamente e com o RR (Resource Record) MX devidamente registrado.
  2. 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).
  3. 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
    
  4. Reinicie o serviço:
     /etc/init.d/postfix restart
    
  5. 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.
  6. 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.
  7. Instale um cliente de Email:
     apt-get install mailutils
    
  8. 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>
    
  9. 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)
    
  10. Para ler email, logado com o usuário desejado, execute o comando mail e digite o número da mensagem desejada.
  11. Também é possível verificar a caixa postal dos usuários, elas permanecem no diretório /var/mail, por exemplo
     cat /var/mail/aluno
    
    mostrará todas as mensagens presentes na caixa postal do usuário aluno.
  12. 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.
  13. 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

  1. 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).
  2. Instale o servidor Apache:
    apt-get install apache2 apache2-utils
    
  3. Re/inicie o servidor:
    /etc/init.d/apache2 restart
    
  4. Verifique o funcionamento. Abra o navegador de sua máquina real e acesse 192.168.1.X.
  5. 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.
  1. Primeiramente vamos carregar o respectivo módulo do Apache:
    a2enmod userdir
    
  2. Reinicie o servidor Apache:
    /etc/init.d/apache2 restart
    
  3. Como usuário aluno, crie a pasta do publica do referido usuário:
    mkdir /home/aluno/public_html
    
  4. 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>
    
  5. 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.
  1. Logue como aluno.
  2. 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
    
  3. 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)
  1. Para ter suporte ao serviço NFS, deve-se instalar o pacote nfs-kernel-server:
    apt-get install -y nfs-kernel-server
    
  2. Crie o diretório /data para ser compartilhado e insira alguns arquivos:
    mkdir /data
    cp /etc/a* /data
    
  3. 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)
  1. Após editar esse arquivo, deve-se atualizar o serviço NFS com o comando exportfs:
    exportfs -r
    
  2. Podem-se ver os diretórios exportados com o comando showmount:
    showmount -e
    
  3. Se houver problemas com o comando acima, reinicie a máquina.

Testes no cliente (Ubuntu Gráfico)

  1. Use máquina virtual com ambiente gráfico como cliente.
  2. Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto:
    sudo apt-get install nfs-common
    
  3. 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).
  4. 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
    
  5. 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
    
  6. Verifique se os diretórios remotos estão acessíveis:
    df
    
  7. No diretório /home/aluno/home_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê?
  8. No diretório /home/aluno/data_remoto tente criar e apagar arquivos nas mais variadas pastas. Conseguiu? Por quê?
  9. 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:

  • Servidor de arquivos, impressoras, e de autenticação (serviços SMB/CIFS): programa smbd
  • Servidor de nomes WINS (Windows Name Service): programa nmbd

Configurações no Servidor

  1. 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
    
  2. Crie o diretório /dados/software e copie alguns arquivos dentro dele.

mkdir -p /dados/software cp -rf /etc/* /dados/software </syntaxhighlight>

  1. 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
      
  2. Crie contas de usuários samba, usando esse comando smbpasswd para todos os usuários desejados. Para o usuário aluno:
    smbpasswd -a aluno
    
  3. Ative o Samba:
    service smbd restart
    service nmbd restart
    

Teste no cliente

  1. Teste o acesso a seus compartilhamentos de sua máquina virtual gráfica. Instale os pacotes:
    apt-get install cifs-utils smbclient
    
  2. 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
    
  3. 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
    
  4. 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.

  1. Instale o SSH em sua máquina.
  2. Habilite e desabilite o login do root.
    vi /etc/ssh/sshd_config
    
    configurando a diretiva:
    PermitRootLogin yes
    
  3. Reinicie o serviço
    service ssh restart
    
  4. De sua máquina real conecte e faça testes.
    ssh aluno@192.168.1.X
    
  5. Conecte na máquina de seu colega e faça alguns testes.
  6. Habilite o acesso somente para um conjunto de usuários (desafio).
  7. Teste.
  8. Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários (desafio).
  9. Teste.
  10. Instale o SSH em sua máquina virtual com ambiente gráfico, IP 192.168.1.2X.
  11. Habilite o X11Forwarding.
  12. Da máquina real teste esta funcionalidade:
    ssh -X aluno@192.168.1.2X 
    firefox
    
    1. Em qual máquina está rodando o Firefox?
    2. Em qual máquina será baixado um arquivo, caso você faça download utilizando esse Firefox?
  13. Teste a funcionalidade do scp, copiando arquivos locais para o servidor e vice-versa.
  14. Configure seu par de máquinas, cliente e servidor, para conexão direta, sem pedido de senha (desafio).
  15. Teste a conexão direta.
  16. Teste a execução de comandos no seu servidor, sem "sair" do cliente.
  17. Faça uns testes fornecendo usuário e/ou senha errados e verifique o log:
    tail /var/log/auth.log
    
  18. 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.

  1. Instalar o serviço:
    apt-get update
    apt-get install -y isc-dhcp-server
    
  2. 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;
    }
    
  3. Editar a interface que vai atender ao DHPD:
    vi /etc/default/isc-dhcp-server
         INTERFACES="eth0"
    
  4. Iniciar o servidor DHCP:
    /etc/init.d/isc-dhcp-server restart
    
  5. 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
    
  6. Agora force a reconfiguração da inteface de rede de sua máquina cleinte (Ubuntu gráfica), com o comando:
    dhclient -v eth0
    
  7. 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
    
  8. 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.
  1. No ubuntu server (servidor) crie uma nova interface de rede através do ipaliases:
     ifconfig eth0:0 10.0.X.1/24
    
  2. 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
    
  3. 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
    
  4. Teste a conexão de rede de seu cliente.
     ping www.ifsc.edu.br
    
  5. Verifique, no servidor, se os pacotes estão atravessando-o.
     tcpdump -n -i any
    
  6. Configure uma regra que impeça seu cliente de acessar qualquer porta da máquina www.ifsc.edu.br.
  7. Teste a partir de seu cliente.
  8. Repita a regra, mas agora mandando um aviso ao cliente.
  9. Teste a partir de seu cliente.
  10. Proíba o seu cliente de fazer ping para qualquer máquina, liberando todos os demais serviços.
  11. Teste a partir de seu cliente.
  12. Limpe as regras anteriores.
  13. Permita que seu cliente acesse qualquer máquina na porta 80, mas somente nesta porta.
  14. Teste a partir de seu cliente.
  15. Limpe todas as regras.
  16. Mude a política para DROP e permita que o seu cliente acesse somente www.ifsc.edu.br.
  17. Teste a partir de seu cliente.
  18. 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.

  1. Instalar o Squid no Servidor:
    apt-get update
    apt-get install -y squid
    
  2. Edite o arquivo /etc/squid3/squid.conf e descomente (apague o caractere #) a linha:
      cache_dir ufs /var/spool/squid3 100 16 256
    
  3. Reiniciar o serviço:
    service squid3 restart
    
  4. Verificar os logs do mesmo:
    tail /var/log/squid3/cache.log
    tail /var/log/squid3/access.log
    
  5. 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
    
  6. Vamos fazer uma configuração mínima no Squid para liberar a navegação em nosso cliente.
    1. Em primeiro lugar edite o /etc/squid3/squid.conf e inclua as regras abaixo.
    2. 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
        
  7. Reinicie o serviço Squid.
  8. De seu cliente faça uns testes de acesso a qualquer site e verifique se está tudo funcionando corretamente.
  9. 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.
    1. Medir o tempo.
    2. 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.
  10. 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
    
  11. 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.
    1. Crie a acl;
    2. Use o http_access na correta posição do arquivo para poder bloquear;
    3. Reinicie o Servidor.
  12. Teste no cliente.
  13. No servidor bloqueie o acesso a sítios que contenham a palavra tele.
  14. No cliente teste acessando tele.sj.ifsc.edu.br.

Rede Virtual Privada - VPN

Ver capítulo 27 de Administração de Redes com Linux.

  1. 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
    
  2. No servidor:
    1. crie o a chave estática que será utilizado na criptografias dos dados trafegados:
      openvpn --genkey --secret /etc/openvpn/chave
      
    2. 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
      
    3. Inicie o serviço explicitando o arquivo de configuração:
      /usr/sbin/openvpn --config /etc/openvpn/matriz.conf &
      
    4. 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
      
  3. Configure sua máquina cliente para ser a filial.
    1. 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
      
    2. 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
      
    3. Inicie o serviço explicitando o arquivo de configuração:

/usr/sbin/openvpn --config /etc/openvpn/filial.conf & </syntaxhighlight>

    1. 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
      
  1. No cliente, dê ping na interface 192.168.10.1. Deixe o ping rodando.
  2. No servidor, capture os pacotes na interface tun0 e eth0:
    tcpdumo -i tun0
    tcpdump -i eth0
    
    1. Qual a diferença nas duas capturas?
    2. Qual é a relação comum nas duas capturas?
    3. 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.

  1. Para monitorar-se uma máquina ubuntu por meio de consultas SNMP (Simple Network Management Protocol) devemos instalar o snmpd na máquina a ser monitorada:
    apt-get install snmp snmpd
    
  2. Para liberar a consulta remota ao SNMP deve-se reconfigurar o arquivo /etc/snmp/snmpd.conf, comentando a primeira linha abaixo (original) e descomentando a segunda:
    #agentAddress  udp:127.0.0.1:161
    agentAddress udp:161,udp6:[::1]:161
    
  3. Reincia-se o serviço snmp:
    /etc/init.d/snmpd restart
    
  4. Verifique se não houve erros com:
    tail /var/log/syslog
    
    • Caso aponte erros nas linhs 143 e 145 comente-as e reinicie novamente.
  5. Busca-se por possíveis erros de configuração:
    tail -n 30 /var/log/syslog
    
  6. 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.

  1. No servidor (Ubuntu Server) Instale o Cacti:
    apt-get install cacti
    
    1. Ao pedir a senha, forneça: aluno
    2. Repita a senha.
    3. OK
    4. Servidor web: Apache2
    5. Configura base de dados: SIM
    6. Senha para a base de dados: aluno
    7. Repita a senha.
  2. Com um navegador acesse a URL http://192.168.1.1X/cacti. Ali você deve dar continuidade ao processo de instalação:
    1. <Next>
    2. Selecione "New Install"
    3. Verifique na próxima tela se todas as opções mostradas estão corretas (se aparece OK em verde ao lado).
    4. Clique em Finish, e na tela a seguir forneça o usuário admin e senha admin.
    5. Mude a senha para aluno.
  3. Crie gráficos para monitorar a CPU, memória, discos, processos e usuários do servidor onde reside o Cacti.
  4. Visualize os gráficos criados.
  5. Crie novos gráficos, porém coletando os dados da máquina do professor (192.168.1.101) também via SNMP.
    1. Crie um novo dispositivo (Create devices for network) do tipo ucd/net SNMP Host.
    2. Crie os gráficos (New Graphs) para o device.
    3. Associe o host a árvore (Graph Trees).
    4. Visualize os gráficos.