O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo...

25
1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode ser utilizado em redes IP corporativas ou residenciais. Este módulo discute também como os mecanismos de proxy e NAT são utilizados para permitir que computadores com endereços IP privado tenham acesso a recursos na Internet.

Transcript of O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo...

Page 1: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

1

O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este

pode ser utilizado em redes IP corporativas ou residenciais. Este módulo discute também

como os mecanismos de proxy e NAT são utilizados para permitir que computadores com

endereços IP privado tenham acesso a recursos na Internet.

Page 2: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

2

Originalmente, o endereçamento IP na Internet utilizava apenas o conceito de endereçamento

IP público. Neste modo de endereçamento, cada "host" conectado a Internet precisa ter um

endereço IP único em toda a rede.

No modelo original, não havia uma distinção clara entre computadores "clientes" e

"servidores". Na prática, todo computador conectado a Internet era potencialmente um

servidor, no sentido em que ele poderia ser endereçado por qualquer outro computador da

rede.

Como mostra a curva ilustrada na figura, a quantidade de hosts conectadas a Internet passou

a ter um crescimento exponencial a partir da década de 1990. Esse crescimento colocou em

cheque a arquitetura de endereçamento inicialmente concebida para a Internet, de forma que

no início dos anos 90, o IETF propôs duas soluções emergenciais para suportar a crescente

expansão do uso da Internet:

A primeira, foi o CIDR (Classless Inter Domain Routing), que permitiu a definição de sub-

redes com blocos de endereços menores, reduzindo o desperdício no processo de atribuição

de endereços IPv4.

A segunda, foi a introdução do conceito de endereçamento privado, que permitia utilizar

endereços não únicos na Internet. Esse conceito também passou a diferenciar computadores

com a função de cliente e servidor.

Page 3: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

3

O controle global da atribuição de endereços IP é feito pelo IANA (Internet Assigned

Numbers Authority). A IANA é responsável por designar quantos blocos de endereço estão

disponíveis para cada região do planeta, evitando duplicação ou má distribuição dos

endereços. A IANA utiliza 5 autoridades de abrangência regional para agilizar o processo de

atribuição dos endereços em todo o mundo.

Essas autoridades são:

AfriNIC: responsável pela região da África

APNIC: responsável pela região Ásia e Pacífico

ARIN: responsável pela região da América do Norte

LACNIC: responsável pela região da América Latina e algumas ilhas do Caribe

RIPE NCC: responsável pela Europa, Oriente Médio e Ásia Central

A IANA também foi a responsável por definir os prefixos de rede que foram designados para

uso como endereçamento IP privado. O endereçamento privado foi definido originalmente

pela RFC 1918 datada de fevereiro de 1996.

Page 4: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

4

Os prefixos de rede que foram definidos como endereçamento privado estão mostrados pela

tabela acima. Esses prefixos foram escolhidos entre os blocos de endereços disponíveis na

época em que a RFC 1918 foi elaborada.

Atualmente, a quantidade de endereços atribuídas para endereçamento privada pode ser

considerada exagerada. Somente o prefixo de classe A representa um total de 16 milhões de

endereços. Então, por que foram reservados também endereços nas classes B e C?

A justificativa para isso é que na época em que o conceito de endereçamento privado foi

introduzido, o CIDR não estava muito difundido. Isso significa que uma grande quantidade

de equipamentos não era capaz de trabalhar com máscaras de sub-rede de tamanho variável,

de forma que a rede 10 não podia ser livremente dividida. Dessa forma, uma faixa de IPs

privados foi escolhido em cada uma das classes.

De acordo com a RFC 1918, qualquer endereço IP da faixa privada pode ser utilizado

livremente, sem necessidade de solicitar registro a IANA ou a uma autoridade regional de

distribuição de endereços.

Contudo, a RFC 1918 define também que os roteadores da Internet não devem possuir rotas

para endereços privados. Isto é, pacotes que tenham endereços de destino privado não são

encaminhados pelos roteadores da Internet, sendo roteados apenas por roteadores privados,

que conectam sub-redes de uma mesma corporação.

Page 5: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

5

Conforme dito anteriormente, a concepção inicial de endereçamento da Internet presumia

que qualquer host na Internet poderia ser acessado diretamente por qualquer outro host. Pelo

termo "acessado" entenda-se um host capaz de receber conexões, isto é, um host capaz de se

comportar como "servidor". Um host cliente, por outro lado, é capaz de iniciar conexões com

outros hosts, mas não é capaz de recebê-las.

A RFC 1918 introduz uma diferenciação de tipos de hosts, indicando que nem todos os hosts

precisam ter a habilidade de receber conexões. De acordo com essa RFC, os hosts foram

divididos em três categorias:

Hosts categoria 1: Hosts que se comunicam APENAS INTERNAMENTE em uma rede

corporativa. Isto é, hosts que não possuem nenhum tipo de conectividade com a rede Internet

pública. Essa categoria de host deve utilizar apenas endereços IP privados.

Hosts categoria 2: Hosts que se comunicam INDIRETAMENTE com a Internet pública. O

termo indiretamente significa que este host precisa sempre de um tradutor de endereços que

intermedie sua comunicação com a Internet. Os dois tipos de tradutores de endereços mais

comuns são o NAT (Network Address Translation) e o Proxy. Nessa categoria, hosts se

comportam basicamente como "clientes", e devem utilizar endereços privados.

Hosts categoria 3: Hosts que se comunicam DIRETAMENTE com o mundo externo. Isto é,

eles podem receber conexões de outros hosts da Internet. Essa categoria de host se tem a

habilidade de se comportar como "servidor".

Page 6: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

6

A figura ilustra como hosts com endereçamento IP privado e público são tratados de forma

diferenciada em uma rede IP. A figura mostra uma rede corporativa dividida em duas sub-

redes: uma com endereços privados e outra com endereços públicos. A rede com endereços

privados é basicamente constituída por computadores clientes, enquanto que a rede com

endereços públicos é constituída por computadores que atuam como servidores (por

exemplo, servidores www, email, DNS, etc.)

O roteador 1 que conecta a rede pública com a rede privada está configurado para rotear

endereços privados. Isto é, ele possui rotas para encaminhar pacotes destinados a rede

privada. Já o roteador 2, não deve possuir rotas que permitam que computadores com

endereços IP privado se comuniquem com a Internet.

Dessa forma, hosts externos (vindos da Internet) podem abrir conexões com os servidores

através do roteador 2. Mas eles não podem abrir conexões com os clientes através do

roteador 1. De fato, os pacotes endereçados para os hosts privados nem sequer chegariam ao

roteador 2, pois nenhum roteador da Internet saberia para onde encaminhar esses pacotes.

Muitos administradores de redes costuma chamar endereços IP privados de não roteáveis.

Contudo, essa definição não é muito precisa. Endereços IP não são roteáveis na Internet, mas

são roteáveis por roteadores que conectam duas redes internas.

Nesse cenário, os hosts com IP privado são categoria I e os com IP público são categoria

III. Note que, sem o auxílio de um conversor de endereços, os hosts com IP privado não tem

nenhum acesso a Internet (nem como clientes), simplesmente porque são incapazes de

receber respostas vindas da Internet.

Page 7: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

7

A figura ilustra como os endereços IP e as tabelas de roteamento podem ser configuradas

para o exemplo anterior.

A sub-rede pública recebeu a o prefixo 200.0.0.0/24 e a sub-rede privada recebeu o prefixo

192.168.0.0/24. Observe que o roteador 1 possui um endereço IP público e outro privado. O

roteador 2 possui apenas endereços públicos.

O roteador 1 possui apenas duas rotas, permitindo a conexão entre as redes pública e privada.

Contudo, ele não possui rota default, não podendo encaminhar pacotes para Internet.

Já o roteador 2 possui uma rota para Internet e outra para sub-rede com endereços IP

públicos. Dessa forma, o roteador 2 não pode enviar pacotes para sub-rede com endereços

privados.

Observe que esta é a configuração recomendada pela RFC 1918, contudo, o que aconteceria

se uma rota default fosse incluída no roteador 1? Nesse caso, os hosts com IP privados

poderiam enviar pacotes para Internet, mas eles não poderiam receber a resposta. Esse tipo

de configuração não é bem vista, pois hosts com IP privado poderiam fazer ataques do tipo

DOS (Deny Of Service), dificultando a identificação dos hosts atacantes.

Observe também que incluir uma rota para rede privada no roteador 1 não irá fazer

diferença, pois os roteadores da Internet não tem rotas para redes privadas, de forma que os

pacotes de resposta jamais chegariam ao roteador 1.

Page 8: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

8

Como vimos, os roteadores da Internet são incapazes de encaminhar pacotes cujo endereços

de destino seja um IP privado. A fim de permitir que hosts com IP privados tenham acesso a

Internet, é necessário utilizar um tradutor de endereços.

Os tradutores podem ser implementados de duas formas: ao nível de rede ou ao nível de

transporte.

Os tradutores ao nível de rede são embutidos nas funções de roteamento do sistema

operacional, sendo mais comumente implementados como módulos de software adicionais

em roteadores. Essa implementação é transparente aos clientes, pois a tradução é feita

diretamente pelo roteador que está no caminho entre o cliente e a Internet. Esse tradutores

são denominados de NAT (Network Address Translation) ou NAPT (Network Address and

Port Translation).

Os tradutores ao nível de transporte são implementados como servidores. Isto é, as

aplicações clientes precisam se conectar diretamente a esses servidores a fim de ter acesso a

Internet. Essa implementação não é transparente para os clientes, pois esses precisam enviar

seus pacotes para um servidor específico, para que este, posteriormente, reenvie o pacote

para Internet. Esse tipo de tradutor é denominado Proxy, havendo duas variantes: Proxy de

Aplicação e Proxy Socks.

Na figura, o roteador 2 está desempenhando a função de tradução de endereços (NAT).

Observe nesse caso, que o roteador possui uma regra indicando que o endereço dos pacotes

enviados pelos clientes deverá ser substituído por um endereço público antes de encaminhá-

los para Internet.

Page 9: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

9

O NAT é um mecanismo que permite traduzir endereços privados em endereços públicos

registrados. Seu funcionamento foi originalmente definido pela RFC 1631. As funções de

NAT estão bastante relacionadas as funções de roteamento, e por isso são implementadas

pelas camadas de rede dos sistemas operacionais de roteadores ou mesmo de desktops, como

o Linux ou o Windows. Por estar relacionada ao roteamento, a função de NAT é

normalmente implementada em roteadores ou firewalls. A função de NAT também é bastante

comum em roteadores ADSL e WiFi.

Apesar do termo NAT ser usado universalmente, existe de fato duas variantes de tradução de

endereços: NAT e NAPT.

Como seu próprio nome diz, o NAT (Network Address Translation) converte apenas

endereços IP, e permite efetuar apenas mapeamentos de um-para-um, conforme ilustrado na

figura. Nesse modo de mapeamento, cada endereço IP privado é mapeado em um endereço

IP público distinto. O NAPT (Network Address and Port Translation) utiliza informações

das porta de transporte (TCP ou UDP), o que permite efetuar mapeamentos de um-para-

muitos. Nesse modo de mapeamento, múltiplos endereços privados podem ser mapeados em

um único endereço IP público, pois as informações de porta são utilizadas como extensões

do endereço IP.

O mapeamento feito pelo NAT pode ser também estático ou dinâmico. No mapeamento

estático, as regras de mapeamento são configuradas previamente, de maneira que um dado

endereço IP privado está sempre mapeado em um mesmo IP público (e também a uma

mesma porta, no caso do NAPT). No mapeamento dinâmico, as regras de mapeamento são

configuradas dinamicamente, criando mapeamentos temporários que são automaticamente

desfeitos quando o IP privado deixa de ser utilizado por muito tempo.

Page 10: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

10

Em suas implantações mais comuns, como no Linux, o NAT suporta duas funcionalidades:

Source NAT (SNAT) e Destination NAT (DNAT). Essas funcionalidades são definidas da

seguinte forma:

Source NAT: altera o endereço de origem do pacote, e é implementado após a ação de

roteamento (pós-roteamento).

- Masquerading é uma forma especializada de SNAT.

Destination NAT: altera o endereço de destino do pacote, e é implementado antes do

roteamento (pré-roteamento).

- Redirecionamento de Portas, Balanceamento de Carga e Proxies transparentes são

exemplos de DNAT.

O SNAT é a funcionalidade mais comum, uma vez que ela permite que clientes com

endereços IP privados tenham acesso a Internet. Quando um cliente com IP privado envia um

pacote para Internet, o software de roteamento leva em conta apenas o endereço IP de

destino (que é público) para decidir para onde enviar o pacote. Após essa decisão ter sido

tomada, mas antes do pacote ser enviado para interface de saída, o endereço IP de origem do

cliente é substituído pelo endereço IP do roteador (ou dispositivo que implementa o NAT).

O DNAT é usado em situações mais especiais, quando é necessário, por exemplo, criar um

servidor com endereço IP privado. Nesse caso, é necessário redirecionar pacotes enviados

para o roteador para um computador interno da rede, para que este possa receber conexões

oriundas da Internet. Como nesse caso o computador com IP privado é o destinatário do

pacote, a função de DNAT precisa ser feita antes do roteamento.

Page 11: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

11

O NAT efetua apenas mapeamentos de endereços IP, não utilizando informações de porta. Esse método não é muito utilizado para permitir o acesso de clientes com IP privado a Internet, pois ele realiza apenas mapeamentos de um-para-um (isto é, o número de endereços públicos necessários é igual ao número de clientes simultâneos acessando a Internet). O NAT pode ser utilizado em situações residenciais (para mapear, por exemplo, o endereço público do roteador ADSL ao endereço de um único computador). Ele também é usado para permitir que duas redes com endereços IP superpostos se comuniquem sem haver conflito. Imagine, por exemplo, que duas sub-redes, A e B, utilizam o prefixo privado 192.168.0.0/24. O administrador de rede pode utilizar o NAT em um roteador entre as redes A e B para traduzir os endereços dos pacotes enviados pela rede A para outro prefixo (digamos 192.168.1.0/24), a fim de permitir que as duas redes se comuniquem. Além da troca dos IPs, o checksum do cabeçalho IP é recalculado, uma vez que um dos endereços IP do pacote originalmente enviado para o roteador NAT será alterado. Essa operação pode diminuir (muito pouco) a velocidade do roteador.

No NAT dinâmico, pode-se utilizar um “range” de endereços IP públicos em uma quantidade menor que a quantidade de clientes com IP privado. Nesse caso, as entradas da tabela de mapeamento tem um tempo de vida pré-determinado. Se uma dada entrada ficar sem ser utilizada por um dado tempo, ela é liberada, e o endereço IP público pode ser usado por outro cliente. Contudo, o número de conexões simultâneas de clientes é igual ao número de endereços IP públicos disponíveis. No Linux, as funcionalidades do NAT são configuradas através do iptables, conforme os exemplos a seguir:

# Altera qualquer endereço de origem para 210.0.0.1

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 210.0.0.1

# Altera o endereço de origem usando IPs do range 210.0.0.1 até 210.0.0.10

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 210.0.0.1 até 210.0.0.10

O Masquerading é uma forma especializada de Source NAT, usado principalmente para endereços atribuídos dinamicamente. Esse comando simplificado efetua o mapeamento ao IP atribuído a interface definida por -o, sem que o endereço seja mencionado explicitamente.

# aplicando a ação de MASQUERADE (-j MASQUERADE).

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Page 12: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

12

Page 13: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

13

O NAPT utiliza informações de porta para permitir que um único endereço IP público seja compartilhado por uma grande quantidade computadores com IP privados. Nesse mecanismo, cada cliente é associado a uma porta de origem TCP ou UDP única.

A figura ilustra esse conceito. Imagine que o cliente 192.168.0.2 envia um pacote para Internet utilizando a porta de origem 1024. Quando esse pacote chega ao roteador, o NAPT verifica se já existe um mapeamento ativo para esse cliente. Se não existir, ele cria um mapeamento associando o IP e Porta do origem do cliente ao seu próprio IP público e uma outra porta de origem. A porta de origem escolhida para mapeamento pelo roteador dependerá das portas já utilizadas.

Em geral, o algoritmo de mapeamento tentará manter a porta utilizada pelo cliente inalterada, substituindo-a apenas caso haja um outro mapeamento ativo usando a mesma porta. No caso do cliente 192.168.0.2, a porta 1024 poderá ser mantida. Observe que cada conexão feita pelo cliente gera um mapeamento distinto. Por exemplo, se o cliente 192.168.0.2 enviar um pacote por uma outra porta de origem (1026), um novo mapeamento será criado.

Quando o cliente 192.168.0.3 envia um pacote, usando a porta 1024, o roteador NAT efetua uma substituição para a porta 1025, já que a porta 1024 já está sendo usada. Similarmente, quando o cliente 192.168.0.4 envia um pacote usando a porta de origem 1025, o mapeamento é feito para porta 1027. O objetivo do NAPT é que cada mapeamento seja feito para uma porta distinta.

Usando essa estratégia é possível gerar até 65535 mapeamentos simultâneos para um único endereço IP (se bem que é recomendável não usar as portas reservadas abaixo de 1024 para esse mapeamentos). Na prática, devido ao consumo de memória e processamento causado pelo NAPT, esse número raramente pode ser alcançado em roteadores convencionais. No Linux, o mapeamento por NAPT é configurado através do IP tables, conforme o exemplo a seguir.

# Altera o endereço de origem para 210.0.0.1, usando as portas 1024-65535

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1024-65535

Page 14: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

14

Page 15: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

15

A funcionalidade DNAT (destination NAT) permite redirecionar pacotes recebidos pelo roteador para

servidores específicos. Ele é utilizado para permitir que hosts com endereços privados recebam conexões de

clientes da Internet. Essa funcionalidade também é conhecida como redirecionamento.

Essa funcionalidade pode ser implementada tanto para o NAT quanto para o NAPT. A figura ilustra esse

conceito para o caso mais genérico do DNAPT. Observe, nesse caso, que clientes externos devem endereçar os

servidores internos utilizando o IP do roteador NAT. De fato, o nome de domínio dos servidores deve ser

registrado usando o endereço público do roteador. Nesse caso, o mapeamento é feito de forma estática. O

administrador de rede configura previamente o mapeamento, redirecionando pacotes enviados para portas

específicas do roteador para outros endereços privados com ou sem tradução de porta. Por exemplo, pacotes

recebidos pelo roteador na porta 80 ou 25, são redirecionados para o servidor 192.168.0.2 nas mesmas portas.

Pacotes recebidos na porta 8080 do roteador, são redirecionados para porta 80 do servidor 192.168.0.3. E assim

por diante.

No linux, o DNAT é configurado utilizando-se o iptables. Os comandos a seguir fornecem alguns exemplos de

configuração.

# Redireciona pacotes recebidos na porta 8080 para o IP 192.168.0.3 e porta 80.

iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth0 -j DNAT --to 192.168.0.2:80

O redirect é um tipo especial de DNAT. Essa ação especial implica em alterar o endereço de destino para o

próprio endereço da interface que recebeu o pacote. Ele é util quando o proxy está sendo executado na mesma

máquina em que o roteador.

# Envia pacotes web (port-80) para a porta do squid (proxy transparente)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

O DNAT pode ser usando também para prover balanceamento de carga entre múltiplos servidores, efetuado

mapeamentos distintos para cada conexão recebida. Esse conceito é ilustrado pelo comando a seguir:

# Altera os endereços de destino para 192.168.0.2 até 192.168.0.5, através de um processo de balanceamento de

carga.

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.0.2-192.168.0.5

Page 16: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

16

Page 17: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

17

De modo geral, o NAT não funcionará em situações onde o IP apareça em um campo do protocolo de

aplicação. Esse é tipicamente o caso de protocolos de aplicação que utilizam o conceito de call-back.

Por exemplo, um servidor FTP utiliza geralmente duas portas de operação: 21 para controle da

conexão e 20 para transferência de dados. O cliente sempre inicia sua conexão na porta 21 do servidor

FTP. A conexão para transferência de dados, contudo, pode ser feita de duas formas: PORT (Ativo) e

PASV (Passivo).

No modo PORT (Ativo), o cliente efetua uma conexão na porta 21 do servidor FTP, utilizando uma

porta de cliente aleatória N (>1023) e abre uma porta para receber conexões de dados na porta N+1. O

cliente informa ao servidor que deverá receber uma conexão de dados na porta N+1 através do

comando PORT inserido no campo de payload do pacote IP. Nesse caso, o servidor FTP deverá

efetuar uma conexão na porta N+1 do cliente utilizando sua porta 20. Esse processo, traz inúmeros

problemas quando feito através do NAT.

Primeiro, não existe mapeamento para o cliente através da porta N+1, apenas para porta N. Segundo,

quando o NAT efetua a tradução do endereço IP de origem do cliente pelo seu próprio IP, ele não

traduz as informações contidas no payload do pacote IP. Dessa forma, o servidor FTP tenta efetuar a

conexão no endereço IP privado do cliente, e não no endereço público, causando falha de conexão.

Esse modo de operação causa problemas se o cliente estiver atrás de um SNAT.

No modo PASV (Passivo) a porta 20 não é utilizada. Nesse caso, o cliente envia um comando PASV

indicado que deseja efetuar a conexão de dados com os servidor FTP ao invés de recebê-la. Nesse

caso, o servidor abre uma porta aleatória para receber a conexão de dados, e informa essa porta para o

cliente através da conexão de comando. O cliente então efetua a conexão. Esse modo de operação irá

apresentar problemas ser o servidor FTP estiver atrás de um DNAT.

Page 18: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

18

Os proxies permitem que computadores com endereços IP privados tenham acesso a Internet,

de forma semelhante aos NAPTs. Contudo, um proxy opera de forma não-transparente para

os clientes, uma vez que ele que quebra o modelo cliente-servidor. Esse conceito é ilustrado

pela figura.

Observe que apesar de efetuar uma tradução de endereços, um NAT não gera uma nova

conexão TCP entre o cliente e o servidor. De fato, apenas uma conexão é gerada, pois a ação

do NAT é transparente tanto para o cliente quanto para o servidor. O NAT não é endereçado

explicitamente pelo cliente, mas indiretamente, pois ele aparece como um roteador no

caminho entre o cliente e a Internet.

O proxy, por outro lado, aparece para o cliente como um servidor. Isto significa que o cliente

precisa estabelecer uma conexão com o proxy, para que este atue como um “procurador” em

nome do cliente perante os servidores na Internet. Como duas conexões de transporte são

estabelecidas (uma do cliente até o proxy e outra do proxy até o servidor), dizemos que o

proxy “quebra” o modelo cliente servidor. Isso tem várias conseqüências, entre elas

desempenho. A função proxy consome muito mais recursos para operar do que o NAT, uma

vez que é necessário arcar com os custos das inúmeras conexões estabelecidas pelos clientes

com o proxy e do proxy com os servidores de destino.

Existem basicamente 2 tipos de proxy: os de aplicação e os SOCKS. Apesar de

semelhantes, esses tipos de proxy possuem diferenças importantes. Como veremos, o

primeiro tipo precisa “conhecer” as aplicações usadas pelos clientes a fim de operar, pois

utiliza informações dos protocolos da camada de aplicação. Já o SOCKs atua apenas no nível

de transporte, e pode suportar virtualmente qualquer tipo de aplicação, de forma semelhante

ao NAT.

Page 19: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

19

A figura ilustra o funcionamento de um proxy. No exemplo da figura, o cliente deseja

estabelecer uma conexão com o servidor HTTP espec.ppgia.pucpr.br (IP 60.1.2.3) na porta

80. Para utilizar um proxy, a aplicação cliente precisa abrir uma conexão TCP na porta de

serviço do proxy (no exemplo, 3128). Para encaminhar os pacotes do cliente, o servidor

proxy estabelece uma outra conexão TCP com o servidor de destino, utilizado uma porta

dinâmica (> 1023, no exemplo 1025), como se ele próprio fosse o cliente.

Conforme ilustrado pela figura, os pacotes são enviados para o endereço IP do proxy e para a

porta de serviço do proxy, e não para servidor HTTP destinatário. Os pacotes recebidos do

cliente são reenviados, utilizando o endereço IP público do proxy e a porta aleatória

escolhida para a conexão com o servidor de destino.

Observando a figura, uma questão importante deve ser respondida. Como o proxy determina

o endereço do destinatário? A resposta depende do tipo de proxy. No caso do proxy de

aplicação, o endereço e a porta do destinatário são descobertos analisando as informações

contidas no cabeçalho HTTP. Isso significa que é o próprio servidor proxy quem consulta o

servidor DNS, a fim de traduzir o nome do servidor HTTP de destino em um endereço IP.

Nesse modo de operação, o proxy precisa ser capaz de interpretar o protocolo de aplicação

para operar.

No caso do proxy SOCKS, como veremos mais adiante, informações adicionais são

incluídas pelo cliente, de forma a facilitar a localização do servidor de destino. Analisando

essas informações adicionais, o proxy não precisa interpretar o protocolo de aplicação.

Page 20: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

20

O proxy de aplicação extrai as informações do servidor de destino analisando o protocolo de

aplicação. Infelizmente, cada protocolo de aplicação formata seu cabeçalho de maneira

diferente. O protocolo HTTP, por exemplo, identifica o servidor de destino através de um

campo do tipo string, denominado “Host”. Já o protocolo SMPT utiliza a mensagem “RCPT

TO”, e assim por diante.

Um proxy de aplicação é capaz de operar apenas com um conjunto limitado de protocolos

que ele conhece. Os mais comuns são “HTTP”, “FTP”, “SSL” e, por razões históricas,

“Gopher”. Dessa forma, numa rede conectada através de Proxy, os serviços disponibilizados

pelos usuários são limitados aos serviços que o Proxy é capaz de compreender. Muitos

aplicativos utilizam túneis HTTP a fim de superar essa limitação. Túneis HTTP nada mais

são do que um artifício de encapsular outros protocolos de aplicação em mensagens HTTP.

Outra limitação desse tipo de proxy, é que o software do cliente precisa estar preparado a fim

de poder utilizar o proxy. O código para conectar ao proxy de aplicação está embutido nos

navegadores Web, software de atualização de anti-virus, e aplicativos P2P, por exemplo.

Além dos aplicativos precisarem estar preparados, é necessário configurar cada um dos

aplicativos individualmente, informando para cada um deles o endereço do proxy e sua porta

correspondente. Essa tarefa pode, contudo, ser simplificada utilizando-se scripts de

configuração abaixo, como o exemplo abaixo:

function FindProxyForURL(url,host) {

if(isInNet(host, "127.0.0.0", "255.0.0.0") ||

isInNet(host, "192.168.0.0", "255.255.0.0") ||

url.substring(0, 4) == "ftp:") { return "DIRECT"; }

else{ return "PROXY 200.192.112.146:3128"; }

}

Page 21: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

21

O mapeamento de conexões efetuadas pelo proxy é bastante semelhante ao NAPT. Para cada

conexão de cliente recebida, o proxy abre uma nova conexão com o servidor de destino

utilizando uma porta ainda não utilizada. Dessa foram, um proxy pode, teoricamente, atender

a aproximadamente 63K clientes (se descontarmos a faixa de portas abaixo de 1024) com um

único endereço IP.

A conexões criadas pelo proxy são dinâmicas. Geralmente, os proxies de aplicação oferecem

serviços apenas para aplicações implementadas sobre o protocolo de transporte TCP. Nesse

caso, o servidor proxy encerra a conexão com o servidor no momento que o cliente encerrar

a conexão correspondente com o proxy. Caso o cliente não encerre a conexão explicitamente,

e fique sem utilizar o mapeamento por um tempo excessivo (por exemplo, superior a 5

minutos), a conexão pode ser encerrada de por iniciativa do proxy para poupar recursos do

servidor.

O protocolo de aplicação HTTP é de longe o mais utilizado com os proxies de aplicação. No

caso mais genérico, esse protocolo não mantém conexões ativas. O protocolo HTTP encerra

a conexão com o servidor assim que as informações de uma página Web são recebidas por

completo. Dessa forma, a quantidade de recursos consumidos do proxy é reduzida.

Page 22: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

22

Apesar das limitações impostas pelos proxies de aplicação ao usuários, seu uso é muito

difundido em ambientes corporativos. A razão para isso, é que esses proxies oferecem um

grande controle para os administradores de rede sobre os acessos dos usuários a Internet.

Por serem servidores capazes de interpretar o protocolo de aplicação, esse tipo de proxy pode

prestar inúmeros serviços tais como:

1. Cache de objetos HTTP: Os objetos coletados de servidores externos são armazenados

em cache pelo proxy. Caso um cliente solicite um objeto que esteja armazenado na cache, o

servidor consulta o servidor de destino para ver se seu objeto está atualizado. Se estiver, ele

responde ao cliente com o objeto da sua cache. Esse mecanismo é vantajoso para empresa,

pois permite reduzir a banda utilizada do link com a Internet.

2. Autenticação: o proxy permite controlar o acesso a Internet através de um pedido de

autenticação para usuário.

3. Filtragem de endereços URL: como o proxy consegue interpretar o cabeçalho HTTP, ele

pode proibir o acesso a certos endereços na Internet.

4. Filtragem de conteúdo: o proxy pode detectar a presença de certas palavras em páginas

HTML ou de objetos com certos tipos MIME (video, audio, executáveis, etc.) e proibir sua

transferência.

5. Bloqueio e remoção de virus e malware: antes de entregar o objeto solicitado para o

usuário, o servidor proxy pode executar aplicativos para verificação de potenciais riscos no

objeto, proibindo sua entrega caso encontre virus ou algum tipo de malware.

Page 23: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

23

O protocolo SOCKS foi originalmente desenvolvido por David Koblas, e subsequentemente

modificado e entendido pelo IETF. Atualmente, existem duas versões do protocolo SOCKS:

versão 4 (v4) e versão 5 (v5). A versão 4 suporta apenas o transporte de protocolos baseados

em TCP. A versão 5 suporta ambos os protocolos de transporte: TCP e UDP.

O proxy SOCKS v4 funciona como um redirecionador de conexões TCP, permitindo que

usuários identificados tenham acesso a qualquer serviço implementado sobre TCP através de

firewalls. Quando o cliente cria uma conexão TCP com o proxy, o protocolo SOCKS permite

que o cliente se identifique e que informe os dados do servidor que deseja acessar. Dessa

forma, o proxy não precisa procurar o endereço do servidor de destino no protocolo de

aplicação. Como o proxy SOCKS é independente do protocolo de aplicação, ele funciona

para qualquer tipo de serviço: http, ftp, ssh, etc.

O SOCKv4 oferece dois serviços para os clientes: connect e bind.

O serviço connect é usado quando o cliente deseja fazer uma conexão com um servidor

externo. Nesse caso, o cliente fornece seu login, o IP e a porta do servidor que deseja acessar.

Se o login for aceito, e uma conexão TCP puder ser estabelecida com o servidor de destino,

o servidor proxy irá redirecionar todos os pacotes enviados pelo cliente para o servidor e do

servidor para o cliente, enquanto durar a conexão TCP.

O serviço bind é usado para que o cliente possa receber uma conexão de um host externo.

Através do comando bind, o cliente solicita ao Proxy que ele crie uma porta para receber

conexões de um determinado host externo. O proxy SOCKS cria a porta, e responde para o

cliente informando em qual porta e endereço IP (caso ele tenha múltiplas interfaces de rede)

o host externo poderá fazer a conexão.

Page 24: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

24

A versão corrente do protocolo SOCKs é 5.0 definido nas RFCs 1928 e 1929. A versão 5.0

inclui duas importantes melhorias: o suporte a aplicações UDP e o suporte a vários métodos

de autenticação.

A fim de suportar o UDP, além do connect e bind, foi incluido o serviço UDP Associate.

Esse serviço funciona de forma semelhante ao connect. O cliente solicita ao servidor proxy

que seja criada uma associação UDP com um certo servidor de destino em um dada porta,

através de uma conexão TCP, usada também para autenticar o cliente. O transporte dos

pacotes UDP, contudo, não é feito via a conexão TCP. Ao invés disso, o cliente precisa enviar

datagramas UDP modificados, incluindo em cada datagrama, um pequeno cabeçalho que

contém o endereço IP e porta do servidor com quem deseja se conectar. O proxy SOCKs só

aceita encaminhar esses datagramas, caso uma conexão TCP com o UDP Associate para esse

destino tenha sido previamente criada.

Um cliente pode ser configurado para utilizar o proxy SOCKS de duas maneiras. A primeira

é similar ao proxy de Aplicação. Cada aplicativo deve trazer o código necessário para gerar

as mensagens SOCKS, e gerar as mensagens connect, bind e UDP Associate necessárias. De

fato, é possível encontrar a opção para utilizar o proxy SOCKS em muitos aplicativos, como

navegadores Web.

A segunda maneira consiste em instalar um cliente proxy SOCKS. Esse cliente modifica a

biblioteca de sockets do sistema operacional. Como todas as chamadas TCP e UDP passam

por essa biblioteca, é possível gerar as mensagens do protocolo SOCKS de maneira

transparente para as aplicações. A vantagem desse método é que ele permite que aplicativos

legados (sem suporte a SOCKS) possam usar o proxy. Outra vantagem, é que a configuração

para uso do proxy pode ser feita uma única vez, globalmente para todos os aplicativos do

cliente.

Page 25: O objetivo deste módulo é apresentar o conceito de ...jamhour/Pessoal/Graduacao/...1 O objetivo deste módulo é apresentar o conceito de endereçamento IP privado, e como este pode

25

Neste módulo vimos o conceito de endereçamento privado. Essa forma de endereçamento foi

criada a fim de contornar os problemas de exaustão do espaço de endereçamento IPv4,

devido a rápida expansão da Internet, que começou no início dos anos 90.

Originalmente considerado uma solução paliativa e temporária (até que a versão IPv6 fosse

implantada), o endereçamento privado tornou-se um grande sucesso, sendo amplamente

utilizado atualmente. Muito desse sucesso se deve ao fato que essa forma de endereçamento

traz poucas limitações para computadores que atuam apenas como clientes. Apenas

aplicativos servidores (que necessitam receber conexões externas) sofrem limitações com

essa abordagem.

Um efeito secundário do uso do endereçamento privado é a segurança. Computadores com

endereços privados são anônimos do ponto de vista da Internet, isto é, eles não podem ser

endereçados. Isso faz com que o endereçamento privado seja uma opção importante para

obter-se uma conectividade seletiva com a Internet.

A criação de métodos eficientes de mapeamento de endereços públicos e privados, os Proxies

e os NAPTs, também contribui bastante para que essa abordagem pudesse ser amplamente

adotada em prática.