Contruindo VPNs Virtual Private Networks Introdução à VPN Conceituação VPN - Virtual Private Network O conceito de VPN surgiu a partir da necessidade de se utilizar redes de comunicação não confiáveis (por exemplo, a Internet) para trafegar informações de forma segura. VPN - Virtual Private Network Uma VPN proporciona conexões, nas quais o acesso e a troca de informações, somente são permitidas a usuários, que estão em redes distintas que façam parte de uma mesma comunidade de interesse (uma empresa). VPN - Virtual Private Network Uma VPN pode interligar duas ou mais redes via Internet ou através de um link privado, o que possibilita estabelecer um túnel que passa através dessa VPN. VPN - Virtual Private Network Uma rede VPN utiliza um padrão de criptografia mundial, criado pelo IETF (Internet Engineering Task Force), o que torna todo o tráfego de informação nesse túnel, seguro. Tunelamento VPN se baseia na tecnologia de tunelamento. Consiste em encapsular um protocolo dentro de outro. O protocolo de tunelamento encapsula o protocolo que será transportado, e o cabeçalho do protocolo que encapsulou vai fornecer o destino do pacote do protocolo transportado. Tunelamento Um quadro Ethernet, contendo um IP na sua carga útil, saído de um host 1 na rede Ethernet é recebido por um roteador multiprotocolo, extremidade numa rede WAN. O roteador remove esse pacote IP, encapsula dentro de um pacote camada de rede da WAN, enviando-o até o roteador multiprotocolo na outra extremidade da rede WAN. O roteador remove o pacote IP recebido e envia a um host 2 na rede Ethernet remota. VPN - Virtual Private Network No caso de VPN, é acrescentado a criptografia, antes do tunelamento. Tunelamento VPN = [ pacote xxx ] + [ Criptografia do pacote xxx] + [ Encapsulamento do pacote criptografado sobre IP] VPN - Virtual Private Network Exemplo: Se uma empresa usa redes Novell com o protocolo IPX, e quer que as outras filiais utilizem o mesmo servidor Novell, os pacotes IPX devem ser criptografados e encapsulados dentro do protocolo IP. VPN - Virtual Private Network Rede Novell Tunelamento VPN = [ pacote IPX ] + [ Criptografia ] + [ Encapsulamento sobre IP] VPN - Virtual Private Network Túnel é a denominação do caminho lógico percorrido pelos pacotes encapsulados. A rede VPN poder ser construída sobre uma rede pública (Internet) ou privada. Aplicações para VPN Três aplicações ditas mais importantes para as VPNs: Acesso remoto via Internet. Conexão de LANs via Internet. Conexão de computadores numa Intranet. Acesso remoto via Internet Fonte: RNP Acesso remoto via Internet O acesso remoto a redes corporativas através da Internet pode ser viabilizado com a VPN através da ligação local a algum provedor de acesso (Internet Service Provider - ISP). Acesso remoto via Internet A estação remota disca para o provedor de acesso, conectando-se à Internet e o software de VPN cria uma rede virtual privada entre o usuário remoto e o servidor de VPN corporativo através da Internet. Conexão de LANs via Internet Fonte: RNP Conexão de LANs via Internet Fonte: RNP Uma solução que substitui as conexões entre LANs através de circuitos dedicados de longa distância é a utilização de circuitos dedicados locais interligando-as à Internet. O software de VPN assegura esta interconexão formando a WAN corporativa. Conexão de Computadores numa Intranet Fonte: RNP Conexão de Computadores numa Intranet Em algumas organizações, existem dados confidenciais cujo acesso é restrito a um pequeno grupo de usuários. Nestas situações, redes locais departamentais são implementadas fisicamente separadas da LAN corporativa. Conexão de Computadores numa Intranet Esta solução, apesar de garantir a "confidencialidade" das informações, cria dificuldades de acesso a dados da rede corporativa por parte dos departamentos isolados. Conexão de Computadores numa Intranet As VPNs possibilitam a conexão física entre redes locais, restringindo acessos indesejados através da inserção de um servidor VPN entre elas. Observe que o servidor VPN não irá atuar como um roteador entre a rede departamental e o resto da rede corporativa uma vez que o roteador possibilitaria a conexão entre as duas redes permitindo o acesso de qualquer usuário à rede departamental sensitiva. Conexão de Computadores numa Intranet Com o uso da VPN o administrador da rede pode definir quais usuários estarão credenciados a atravessar o servidor VPN e acessar os recursos da rede departamental restrita. Conexão de Computadores numa Intranet Adicionalmente, toda comunicação ao longo da VPN pode ser criptografada assegurando a "confidencialidade" das informações. Os demais usuários não credenciados sequer enxergarão a rede departamental. Requisitos básicos Autenticação de usuários. Gerenciamento de endereço. Criptografia de dados. Gerenciamento de chaves. Suporte a múltiplos protocolos. Autenticação de Usuários Verificação da identidade do usuário, restringindo o acesso às pessoas autorizadas. Deve dispor de mecanismos de auditoria, provendo informações referentes aos acessos efetuados - quem acessou, o quê e quando foi acessado. Gerenciamento de Endereço O endereço do cliente na sua rede privada não deve ser divulgado, devendo-se adotar endereços fictícios para o tráfego externo. Criptografia de Dados Os dados devem trafegar na rede pública ou privada num formato cifrado e, caso sejam interceptados por usuários não autorizados, não deverão ser decodificados, garantindo a privacidade da informação. O reconhecimento do conteúdo das mensagens deve ser exclusivo dos usuários autorizados. Gerenciamento de Chaves O uso de chaves que garantem a segurança das mensagens criptografadas deve funcionar como um segredo compartilhado exclusivamente entre as partes envolvidas. O gerenciamento de chaves deve garantir a troca periódica das mesmas, visando manter a comunicação de forma segura. Suporte a Múltiplos Protocolos Com a diversidade de protocolos existentes, torna-se bastante desejável que uma VPN suporte protocolos usadas nas redes públicas, tais como IP (Internet Protocol), IPX (Internetwork Packet Exchange), . Tunelamento Tunelamento em Nível 2 – Enlace - (PPP sobre IP) O objetivo é transportar protocolos de nível 3, tais como o IP e IPX na Internet. Os protocolos utilizam quadros como unidade de troca, encapsulando os pacotes da camada 3 (como IP/IPX) em quadros PPP (Point-to-Point Protocol). Como exemplos podemos citar: PPTP (Point-to-Point Tunneling Protocol) da Microsoft permite que o tráfego IP, IPX e NetBEUI sejam criptografados e encapsulados para serem enviados através de redes IP privadas ou públicas como a Internet. Como exemplos podemos citar: L2TP (Layer 2 Tunneling Protocol) da IETF (Internet Engineering Task Force). Permite que o tráfego IP, IPX e NetBEUI sejam criptografados e enviados através de canais de comunicação de datagrama ponto a ponto tais como IP, X25, Frame Relay ou ATM. L2F (Layer 2 Forwarding) da Cisco é utilizada para VPNs discadas. Tunelamento em Nível 3 - Rede - (IP sobre IP) Encapsulam pacotes IP com um cabeçalho adicional deste mesmo protocolo antes de enviá-los através da rede. O IP Security Tunnel Mode (IPSec) da IETF permite que pacotes IP sejam criptografados e encapsulados com cabeçalho adicional deste mesmo protocolo para serem transportados numa rede IP pública ou privada. Tunelamento em Nível 3 - Rede - (IP sobre IP) O IPSec é um protocolo desenvolvido para IPv6, devendo, no futuro, se constituir como padrão para todas as formas de VPN caso o IPv6 venha de fato substituir o IPv4. O IPSec sofreu adaptações possibilitando, também, a sua utilização com o IPv4. Tipos de túneis Os túneis podem ser criados de duas diferentes formas - voluntárias e compulsórias: Túnel Voluntário Túnel Compulsório Túnel Voluntário Neste caso, o computador do usuário funciona como uma das extremidades do túnel e, também, como cliente do túnel e emite uma solicitação VPN para configurar e criar um túnel voluntário entre duas máquinas, uma em cada rede privada, e que são conectadas via Internet. VPN entre duas máquinas Túnel Compulsório Neste caso, o computador do usuário não funciona como extremidade do túnel. Um servidor de acesso remoto, localizado entre o computador do usuário e o servidor do túnel, funciona como uma das extremidades e atua como o cliente do túnel. Um servidor de acesso discado VPN configura e cria um túnel compulsório. Tunelamento compulsório Tunelamento compulsório O computador ou dispositivo de rede que provê o túnel para o computador cliente é conhecido de diversas formas: FEP (Front End Processor) no PPTP, LAC (L2TP Access Concentrator) no L2TP IP Security Gateway no caso do IPSec. Tunelamento compulsório Doravante, adotaremos o termo FEP para denominar esta funcionalidade - ser capaz de estabelecer o túnel quando o cliente remoto se conecta. Tunelamento compulsório No caso da Internet, o cliente faz uma conexão discada para um túnel habilitado pelo servidor de acesso no provedor (ISP). Tunelamento compulsório Por exemplo, uma companhia pode ter um contrato com uma ou mais provedores para disponibilizar um conjunto de FEPs em âmbito nacional. Tunelamento compulsório Estas FEPs podem estabelecer túneis sobre a Internet para um servidor de túnel conectado à rede corporativa privada, possibilitando a usuários remotos o acesso à rede corporativa através de uma simples ligação local. Tunelamento compulsório Esta configuração é conhecida como tunelamento compulsório porque o cliente é compelido a usar um túnel criado pelo FEP. Uma vez que a conexão é estabelecida, todo o tráfego "de/para" o cliente é automaticamente enviado através do túnel. Tunelamento compulsório No tunelamento compulsório, o cliente faz uma conexão PPP. Um FEP pode ser configurado para direcionar todas as conexões discadas para um mesmo servidor de túnel ou, alternativamente, fazer o tunelamento individual baseado na identificação do usuário ou no destino da conexão. Tunelamento compulsório Diferente dos túneis individualizados criados no tunelamento voluntário, um túnel entre o FEP e o servidor de túnel pode ser compartilhado por múltiplos clientes discados. Tunelamento compulsório Quando um cliente disca para o servidor de acesso (FEP) e já existe um túnel para o destino desejado, não se faz necessária a criação de um novo túnel redundante. O próprio túnel existente pode transportar, também, os dados deste novo cliente. Tunelamento compulsório No tunelamento compulsório com múltiplos clientes, o túnel só é finalizado no momento em que o último usuário do túnel se desconecta. IPSEC – Internet Protocol Security O IPSec é um protocolo padrão de camada 3 projetado pelo IETF que oferece transferência segura de informações fim a fim através de rede IP pública ou privada. IPSEC – Internet Protocol Security Essencialmente, ele pega pacotes IP privados, realiza funções de segurança de dados como criptografia, autenticação e integridade, e então encapsula esses pacotes protegidos em outros pacotes IP para serem transmitidos. IPSEC – Internet Protocol Security As funções de gerenciamento de chaves também fazem parte das funções do IPSec. IPSEC – Internet Protocol Security Tal como os protocolos de nível 2, o IPSec trabalha como uma solução para interligação de redes e conexões via linha discada. Ele foi projetado para suportar múltiplos protocolos de criptografia possibilitando que cada usuário escolha o nível de segurança desejado. IPSEC – Internet Protocol Security Requisitos de segurança Autenticidade Integridade Confidencialidade IPSEC – Internet Protocol Security Para implementar estas características, o IPSec é composto de 3 mecanismos adicionais: AH - Autentication Header. ESP - Encapsulation Security Payload. ISAKMP - Internet Security Association and Key Management Protocol. IPSec em servidores Linx O Ipsec segue normas em projetos de VPN e é muito ultizado para vc fazer VPN entre servidores Linux e roteadores que prove serviços de VPN. Protocolos de Segurança para VPN IPSec (IP Security) SSL (Secure Sockets Layer) TLS (Transport Layer Secure) Segurança de Rede na camada de transporte com SSL/TLS SMTP HTTP TCP / UDP SSL / TLS IP FTP NNTP, ... Segurança de Rede na camada de rede com IPSec SMTP HTTP TCP / UDP IP / IPSec FTP NNTP, ... Construindo VPN com OpenVPN OpenVPN OpenVPN é uma ferramenta que implementa uma rede VPN segura, usando a camada de enlace ou a camada de rede, usando o padrão da indústria SSL/TLS. OpenVPN OpenVPN suporta métodos de autenticação para o cliente baseados sobre: certificados digitais, smart cards, username/password credentials. OpenVPN Permite acesso para um usuário ou permite uma política de controle de acesso específica de grupo, usando regras de firewall aplicadas à interface virtual VPN. OenVPN 2.0 OpenVPN 2.0 expande as capacidades de OpenVPN 1.x. Oferecendo um modo cliente/servidor escalável, permitindo múltiplos clientes para conectar a um único servidor OpenVPN sobre uma única porta TCP ou UDP. Pode-se construir ... Uma simples VPN como um gateway que pode manipular um único cliente. Estabelecer um gateway cliente/servidor VPN, escalável, usando uma X509 PKI (infra-estrutura de chaves públicas usando certificados e chaves privadas). Produtos SSL/IPSec SSL é o protocolo mais amplamente distribuído quando se trata de comércio eletrônico. Netscape e Internet Explorer suportam SSL. Windows 2000 / XP usam IPSec para contruir VPN. RSA : BSAFE Cripto-C/J (IPSec) e SSL-C/J Distribuições Linux : SSL para HTTP, FTP, SMTP, NNTP. Virtual Private Network em ADSL Objetivo O objetivo é mostrar de forma rápida e simples a configuração de uma VPN baseada em Linux utilizando o OpenVPN como ferramenta. Sendo que este é um software estável, simples de configurar, além de ser um projeto que está sempre em desenvolvimento. Exemplo de VPN Vamos considerar o caso de interligar as redes internas de uma empresa (matriz e filial), sendo que ambas se localizam em lugares diferentes e bem distantes. Que cada empresa possui uma conexão ADSL rodando Linux como servidor e suas respectivas redes internas conforme o exemplo hipotético abaixo: Redes na empresa Matriz ADSL com IP 200.217.222.222 LAN com a classe 192.168.1.0/24 Filial ADSL com ip 200.141.64.33 LAN com a classe 192.168.2.0/24 Matriz e Filial Objetivo Nesta VPN, teremos como principal objetivo fazer com que qualquer máquina da rede interna da Matriz se conecte diretamente com qualquer máquina da rede interna da Filial (ou vice versa), deixando a impressão de que ambas as redes estão no mesmo meio físico. Instalando OpenVPN Antes de começar, devemos checar primeiramente se o driver TUN/TAP se encontra no kernel. Caso o mesmo não se encontre, precisaremos ativar esse driver dentro da opção "Network Device Support", conforme exemplo que segue: [*] Network device support ARCnet devices ---> < > Dummy net driver support < > Bonding driver support < > EQL (serial line load balancing) support <*> Universal TUN/TAP device driver support < > Ethertap network tap (OBSOLETE) < > General Instruments Surfboard 1000 Ethernet (10 or 100Mbit) ---> Ethernet (1000 Mbit) ---> [ ] FDDI driver support [ ] HIPPI driver support (EXPERIMENTAL) <*> PPP (point-to-point protocol) support < > SLIP (serial line) support Wireless LAN (non-hamradio) ---> Token Ring devices ---> [ ] Fibre Channel driver support < > Red Creek Hardware VPN (EXPERIMENTAL) < > Traffic Shaper (EXPERIMENTAL) Wan interfaces ---> Notas Não é abordado aqui, exemplos de compilação de kernel, bem como a configuração de conexão ADSL no Linux. Nas distros RedHat 9.0, Slackware 9.1, 10.0 e 10.1 não foi preciso mexer no kernel. Já na Slackware 9.0 tem-se que recompilar o kernel com suporte ao driver TUN/TAP. Pacote lzo-1.08 Baixe os pacotes lzo-1.08.tar.gz (biblioteca de compressão de dados) e o pacote openvpn-1.5.0.tar.gz. 1º Passo $ tar -xzvf lzo-1.08.tar.gz $ cd lzo-1.08 $ ./configure $ make $ su # make install Instalando OpenVPN 1.5.0 2º Passo $ tar -xzvf openvpn-1.5.0.tar.gz $ cd openvpn-1.5.0 $ ./configure $ make $ su # make install Pronto. O OpenVPN já está instalado em nosso sistema com suporte à biblioteca de compressão de dados. Agora só resta a configuração. Configurando a VPN na Matriz: O OpenVPN pode operar com 3 tipos de criptografia: Nenhuma criptografia (apenas o túnel), Criptografia com chaves estáticas (este caso). No modo TLS, em que as chaves são trocadas periodicamente. Configurando a VPN na Matriz: 1 - Execute os seguintes comandos: # mkdir /etc/openvpn Criamos o diretório onde estarão todos os arquivos de configuração. Configurando a VPN na Matriz: # openvpn --genkey -secret /etc/openvpn/chave Foi gerada uma chave de criptografia com o nome de chave (pode ser qualquer nome de arquivo) dentro do diretório /etc/openvpn. # cat /etc/openvpn/chave Só para visualizarmos o conteúdo da chave que geramos. # touch /etc/openvpn/matriz.conf Crie esse arquivo com o seguinte conteúdo: Configurando a VPN na Matriz: Arquivo criado ... # Usar como interface o driver TUN dev tun # 10.0.0.1 ip que será assumido na matriz # 10.0.0.2 ip remoto, ou seja, esse será o ip da filial ifconfig 10.0.0.1 10.0.0.2 # Entra no diretório onde se encontram os arquivos de configuração cd /etc/openvpn # Indica que esse túnel possui uma chave de criptografia secret chave Configurando a VPN na Matriz: Arquivo criado ... # OpenVPN usa a porta 5000/UDP por padrão. # Cada túnel do OpenVPN deve usar # uma porta diferente. # O padrão é a porta 5000 port 5000 Configurando a VPN na Matriz: Arquivo criado ... # Usuário que rodará o daemon do OpenVPN user nobody # Grupo que rodará o daemon do OpenVPN group nobody Configurando a VPN na Matriz: Arquivo criado ... #Usa a biblioteca lzo comp-lzo # Envia um ping via UDP para a parte # remota a cada 15 segundos para manter # a conexão de pé em firewall statefull # Muito recomendado, mesmo se você não usa # um firewall baseado em statefull. ping 15 # Nível de log verb 3 Configurando a VPN na Filial: A parte da instalação na filial é exatamente igual a da Matriz, é só seguir os passos descritos no tópico instalação. Já na parte de configuração, não muda muita coisa também, pois o maior trabalho é simplesmente copiar a chave que geramos na Matriz por um canal seguro até a filial. Configurando a VPN na Filial: # mkdir /etc/openvpn Execute os seguintes comandos. Criaremos o mesmo diretório de configuração na filial: # mkdir /etc/openvpn Copie a chave gerada na matriz para a filial com seguinte comando: # scp /etc/openvpn/chave ip_filial:/etc/openvpn Em seguida crie o arquivo de configuração chamado filial.conf: # touch /etc/openvpn/filial.conf Arquivo de configuração Crie esse arquivo com o seguinte conteúdo: # Usar como interface o driver TUN: dev tun # 10.0.0.1 ip que será assumido na matriz # 10.0.0.2 ip remoto, ou seja, esse será o ip da filial: ifconfig 10.0.0.2 10.0.0.1 # Indica onde está o ip da Matriz (essa é a única linha que acrescentamos # no arquivo de configuração da filial), o resto é tudo igual. remote 200.217.222.222 # Entra no diretório onde se encontram os arquivos de configuração cd /etc/openvpn # Indica que esse túnel possui uma chave de criptografia: secret chave # OpenVPN usa a porta 5000/UDP por padrão. # Cada túnel do OpenVPN deve usar # uma porta diferente. # O padrão é a porta 5000 port 5000 # Usuário que rodará o daemon do OpenVPN user nobody # Grupo que rodará o daemon do OpenVPN group nobody Usa a biblioteca lzo comp-lzo # Nível de log verb 3 # Envia um ping via UDP para a parte # remota a cada 15 segundos para manter # a conexão de pé em firewall statefull # Muito recomendado, mesmo se você não usa um firewall baseado em statefull. ping 15 # Nível de log verb 3 Inicie a conexão na filial com o seguinte comando: # openvpn --config /etc/openvpn/filial.conf -daemon # ifconfig tun0 tun0 Link encap:Point-to-Point Protocol inet addr:10.0.0.2 P-t-P:10.0.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1255 Metric:1 RX packets:1383257 errors:0 dropped:0 overruns:0 frame:0 TX packets:1144968 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:82865921 (79.0 Mb) TX bytes:383951667 (366.1 Mb) Ok! Se aparecer algo assim, sua VPN, está configurada. Teste pingando de uma ponta a outra: # ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=11.9 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=6.09 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=63 time=5.93 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=63 time=8.15 ms 64 bytes from 10.0.0.1: icmp_seq=5 ttl=63 time=6.19 ms Se aparecer algo assim, sua VPN já esta funcionando. Agora só falta adicionarmos as rotas para as redes internas se enxergarem. Adicionando rotas Antes de adicionarmos as rotas, é necessário ativar o roteamento no kernel em ambas as pontas (Matriz e Filial). Execute os seguintes comandos na matriz e filial: # echo 1 > /proc/sys/net/ipv4/ip_forward Para adicionar a rota com destino a rede da Filial, execute de dentro do servidor da Matriz o seguinte comando: # route add -net 192.168.2.0/24 gw 10.0.0.2 Para adicionar a rota com destino a rede da Matriz, execute de dentro do servidor da Filial o seguinte comando: # route add -net 192.168.1.0/24 gw 10.0.0.1 Agora é só testar. Tente pingar de dentro de uma máquina da LAN da Matriz com destino a LAN da Filial. Lembrar também que temos que colocar toda a seqüência de comandos acima no rc.local de sua distro, para que a mesma carregue as configurações ao iniciar o sistema operacional.