RevistaDoLinux ·  LinuxZone ·  LinuxMatrix · 

Bem vindo a UnderLinux.com.br - O Portal do Administrador de Sistemas
Buscar
UnderLinux
Home
Recomendar
Contato
Top 10

Seções
adm. em geral
apache
bancos de dados
bind/named
doc/howto/man
ftpd
gerenc. listas
programação
proxy/nat
redes/protocolos
segurança
sendmail/qmail
samba/smb
sshd/telnet

Seções de Apoio
Fórum
Downloads
Links

Notícias & Usuários
Lista de Membros
Sua Conta
Enviar Notícias
Tópicos - Notícias

Colunistas
pac
sinistrow

Usuários Online
Existe(m) atualmente, 12 convidado(s) e 0 membro(s) online.

Você é um usuário anônimo. Você pode se registrar gratuitamente clicando aqui.

 
VPN quase fácil [Virtual Private Network]
(1416 palavras neste texto)
(lido: 200 vezes)    Página de Impressão



VPN quase fácil, por Marelo Gondim (gondim@databras.com.br):
============================================================

Um dos assuntos mais atuais é a tão falada VPN (Virtual Private Network) que permite utilizar a INTERNET como meio físico para interligar redes INTRANET de clientes de forma segura e econômica. Digo econômica porque investir em Links dedicados para interligar empresas pode sair bem mais caro e confuso do que apenas ter um link com a INTERNET. Vamos lembrar que não existe rede maior no mundo que a própria INTERNET, então por que não aproveitar a sua capilaridade de forma segura para troca de informações entre empresas?
Sabemos que a INTERNET também é um meio inseguro para transporte de informações sigilosas mas não precisa ser assim o tempo todo, podemos através dos recursos atuais de criptografia, dar segurança as informações.
O objetivo principal da INTERNET é estreitar nossos continentes e levar a informação nos lugares mais inacessíveis.
Por isso as grandes empresas estão vendo que a VPN pode propiciar as ligações entre empresas de maneira segura.
O IPSec é o protocolo IP seguro projetado para o IPv6, que ainda está em fase de testes, lembrando que a versão IP que usamos atualmente é o IPv4. O IPSec foi portado para o IPv4 e implementado nas VPNs de muitos fabricantes de tecnologias de rede, como roteadores Cisco e o tão famoso Firewall-1, por ser um padrão. No Linux o IPSec precisa ser incorporado ao Kernel e o seu desenvolvimento é conhecido pelo nome FreeSwan, que hoje se encontra na versão 1.9.
A VPN que estou propondo nesse texto é com o IPSec e estaremos configurando passo a passo 2 tipos de conexões: Fixo-Fixo e Móvel-Fixo. Maiores esclarecimentos no site do FreeSwan em: http://www.freeswan.org.
Existem outros tipos de VPN que não serão comentados nesse texto.

Bem, vamos começar pelas distros que suportam o FreeSwan, isso porque nem todas as distros de Linux vem com ele implementado ao Kernel e nesse caso todos teriam que instalar um novo Kernel e compilar com os drivers do FreeSwan e isso está fora de cogitação para principiantes e esse texto visa ser simples e explicativo. Então aconselho a usar umas das seguintes distros que tenho conhecimento de que usam o FreeSwan no Kernel:

    - Conectiva Linux 6.0
    - Mandrake 8.0

Obs.: Para implementação do FreeSwan em kernel 2.4 existe algumas considerações antes de se tentar instalar:
Obs2: O Mandrake 8.0 já vem com a versão 1.9 do FreeSwan e o Conectiva Linux vem com uma mais antiga, mas existe uma atualização no site deles em: ftp://atualizacoes.conectiva.com.br/6.0/RPMS

    - O FreeSwan 1.9 estável não instala em kernels 2.4.4 e superiores porque houveram mudanças no kernel como novos parâmetros de funções acrescentados que o FreeSwan não prevê e outros. Mas o snapshot do FreeSwan já foi corrigido para esse problema, então aconselho aos Linuxers que tem prática e preferem compilar o seu próprio Kernel, a usarem o snapshot que pode ser encontrado no site, mas testá-lo bem. Eu utilizei o RedHat 7.1 com Kernel 2.4.5-pre3 e FreeSwan-snapshot em um cliente e funciona perfeitamente bem. Lembrando que o RedHat não vem com o FreeSwan incluso no Kernel.
Uma vez estando com uma das distros acima devemos instalar os binários do FreeSwan que acompanham os CDs bastando montar o CD da distro e executar o seguinte comando: rpm -Uvh freeswan....... Após a instalação serão criados também 2 arquivos importantes no seu sistema: ipsec.conf e ipsec.secrets, onde o primeiro possui as configurações das redes que serão utilizadas e o comportamento do FreeSwan e o segundo é onde ficam armazenadas as chaves de criptografia utilizadas nas conexões VPN.


Como funciona?

SERV1 INTERNET SERV2
estação ------- VPN Server --- ROUTER <====================> ROUTER ------- VPN Server --- estação
192.168.0.2 200.xxx.5.1 200.xxx.5.2 201.xxx.9.2 201.xxx.9.1 192.168.1.2
192.168.0.1 192.168.1.1

Quando a VPN é iniciada e a conexão for estabelecida, é então criado um túnel virtual entre os servidores da VPN
que permite que as redes 192.168.0.0 e 192.168.1.0 possam trocar dados que estão sendo encriptados e transportados
pelo tunelamento criado entre os servidores. Quaisquer pacotes com destino diferente das redes mencionadas serão
encaminhados para a INTERNET. Isso permite que se tenha também um acesso a INTERNET junto com a VPN. Prático não?
Os dados privados estão encriptados e encapsulados no IPSec e assim se mantém seguros até o seu destino.

- Vamos utilizar o modelo RSA para criarmos as chaves de criptografia onde teremos a chave pública e a secreta ou privada.Para criarmos uma chave de 1024 bits faremos o seguinte comando em cada servidor VPN que irá fazer a conexão:

ipsec rsasigkey 1024 > /etc/ipsec.secrets ===> Se estiver usando Conectiva Linux
ipsec rsasigkey 1024 > /etc/freeswan/ipsec.secrets ===> Se estiver usando Mandrake

O Arquivo gerado será algo assim:

# RSA 1024 bits shadow Sun May 20 15:32:04 2001
# for signatures only, UNSAFE FOR ENCRYPTION
#pubkey=0sAQOFf9BfEvP+ocnyi1uDjnneH95bz/JfsIqua2BYSSKpCJ6NqFk+cLiCR4OQ43FPcVryVrl2vIfWdRrXhi7JjhGZENi0OgeL3FTj/FY4qXiftSma7KLElF9RkEn9rt+aHDSai3m8p3vpZy98Qkhy9hZivdrG1dgmylQVduHF42sezQ==
#IN KEY 0x4200 4 1 AQOFf9BfEvP+ocnyi1uDjnneH95bz/JfsIqua2BYSSKpCJ6NqFk+cLiCR4OQ43FPcVryVrl2vIfWdRrXhi7JjhGZENi0OgeL3FTj/FY4qXiftSma7KLElF9RkEn9rt+aHDSai3m8p3vpZy98Qkhy9hZivdrG1dgmylQVduHF42sezQ==
# (0x4200 = auth-only host-level, 4 = IPSec, 1 = RSA)
Modulus: 0x857fd05f12f3fea1c9f28b5b838e79de1fde5bcff25fb08aae6b60584922a9089e8da8593e70b882478390e3714f715af256b976bc87d6751ad7862ec98e119910d8b43a078bdc54e3fc5638a9789fb5299aeca2c4945f519049fdaedf9a1c349a8b79bca77be9672f7c424872f61662bddac6d5d826ca541576e1c5e36b1ecd
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x163ff80fd87dffc5a1a86c8f4097befa5aa50f4d530ff2c1c7bc900eb6db1c2c1a6cf1643512c96b0beb42d092e292e47db91ee91f6bf91384794107cc425843ef556c1f1dab0e00d5ad5efb04747d8fcbea8f618603ecca59cec1d6673a85b10c4a26f3c5da0fe6fa4c93e4c70aa7fb9da8c20d29203aff6b88a498bf0145e5
Prime1: 0xd273ae8025eae8f2d2e7e7f2609a0ffa85c40fa20caddd1f8818f81c7fc1371e0de4cddf3cc9ad57ac1c82994a56d191acee7caab582281a79f76c15d448e663
Prime2: 0xa2647cff2f9e9f5d0f0434642e239e5bdc5780b793cef573ed587a8bf479c2f042e9c226c795dca5a59448527e5f54eb5ef7bddc2be3403d164b9a1b951a950f
Exponent1: 0x8c4d1f00194745f73745454c4066b551ae82b516b31e936a5abb5012ffd624beb3edde94d3311e3a72bdac66318f36611df4531c79017011a6a4f2b938309997
Exponent2: 0x6c42fdff75146a3e0a02cd981ec2699292e5007a6289f8f7f39051b2a2fbd74ad746816f2fb93dc3c3b83036feea389ce9fa7e92c7ecd57e0edd1167b8bc635f
Coefficient: 0x3c478fc5897c57d97a24fd9d317a538b0d9ae30d42a8eacc2a82b1b2f9cf5c2680d3fdde5bb720a5c3589151a0e393ffd3686f2e88b139029b069ed22c609949

Vamos mudá-lo no SERV1 para:
============================

@serv1.vpn.net: RSA {
# RSA 1024 bits shadow Sun May 20 15:32:04 2001
# for signatures only, UNSAFE FOR ENCRYPTION
#pubkey=0sAQOFf9BfEvP+ocnyi1uDjnneH95bz/JfsIqua2BYSSKpCJ6NqFk+cLiCR4OQ43FPcVryVrl2vIfWdRrXhi7JjhGZENi0OgeL3FTj/FY4qXiftSma7KLElF9RkEn9rt+aHDSai3m8p3vpZy98Qkhy9hZivdrG1dgmylQVduHF42sezQ==
#IN KEY 0x4200 4 1 AQOFf9BfEvP+ocnyi1uDjnneH95bz/JfsIqua2BYSSKpCJ6NqFk+cLiCR4OQ43FPcVryVrl2vIfWdRrXhi7JjhGZENi0OgeL3FTj/FY4qXiftSma7KLElF9RkEn9rt+aHDSai3m8p3vpZy98Qkhy9hZivdrG1dgmylQVduHF42sezQ==
# (0x4200 = auth-only host-level, 4 = IPSec, 1 = RSA)
Modulus: 0x857fd05f12f3fea1c9f28b5b838e79de1fde5bcff25fb08aae6b60584922a9089e8da8593e70b882478390e3714f715af256b976bc87d6751ad7862ec98e119910d8b43a078bdc54e3fc5638a9789fb5299aeca2c4945f519049fdaedf9a1c349a8b79bca77be9672f7c424872f61662bddac6d5d826ca541576e1c5e36b1ecd
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x163ff80fd87dffc5a1a86c8f4097befa5aa50f4d530ff2c1c7bc900eb6db1c2c1a6cf1643512c96b0beb42d092e292e47db91ee91f6bf91384794107cc425843ef556c1f1dab0e00d5ad5efb04747d8fcbea8f618603ecca59cec1d6673a85b10c4a26f3c5da0fe6fa4c93e4c70aa7fb9da8c20d29203aff6b88a498bf0145e5
Prime1: 0xd273ae8025eae8f2d2e7e7f2609a0ffa85c40fa20caddd1f8818f81c7fc1371e0de4cddf3cc9ad57ac1c82994a56d191acee7caab582281a79f76c15d448e663
Prime2: 0xa2647cff2f9e9f5d0f0434642e239e5bdc5780b793cef573ed587a8bf479c2f042e9c226c795dca5a59448527e5f54eb5ef7bddc2be3403d164b9a1b951a950f
Exponent1: 0x8c4d1f00194745f73745454c4066b551ae82b516b31e936a5abb5012ffd624beb3edde94d3311e3a72bdac66318f36611df4531c79017011a6a4f2b938309997
Exponent2: 0x6c42fdff75146a3e0a02cd981ec2699292e5007a6289f8f7f39051b2a2fbd74ad746816f2fb93dc3c3b83036feea389ce9fa7e92c7ecd57e0edd1167b8bc635f
Coefficient: 0x3c478fc5897c57d97a24fd9d317a538b0d9ae30d42a8eacc2a82b1b2f9cf5c2680d3fdde5bb720a5c3589151a0e393ffd3686f2e88b139029b069ed22c609949
    }

OBS.: Cuidado com os espaços, pois o FreeSwan é sensível a eles, use TAB para deixar o arquivo como acima.
Ex.: entre "}" e o início da linha use o TAB.
Só houve alteração no início e fim do arquivo.
Lembrem-se, cada servidor VPN precisa ter o seu próprio ipsec.secrets, após fazer esse procedimento no SERV1, façam
o mesmo no SERV2 e troque apenas o "@serv1.vpn.net" para "@serv2.vpn.net".


Primeiro vou mostrar a configuração Fixo-Fixo, ou seja, a interligação de redes com IP fixo de ambas as partes:
Para isso vamos usar a seguinte configuração baseada no exemplo que dei acima.
Então o ipsec.conf do servidor VPN SERV1 seria assim:

config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes

conn %default
keyingtries=0
authby=rsasig
leftrsasigkey=%dns
rightrsasigkey=%dns

conn serv1-serv2
# Configuração do SERV1
left=200.xxx.5.1
leftsubnet=192.168.0.0/24
leftnexthop=200.xxx.5.2
    leftid=@serv1.vpn.net
leftrsasigkey=0sAQOFf9BfEvP+ocnyi1uDjnneH95bz/JfsIqua2BYSSKpCJ6NqFk+cLiCR4OQ43FPcVryVrl2vIfWdRrXhi7JjhGZENi0OgeL3FTj/FY4qXiftSma7KLElF9RkEn9rt+aHDSai3m8p3vpZy98Qkhy9hZivdrG1dgmylQVduHF42sezQ==
# Configuração do SERV2
right=201.xxx.9.1
rightsubnet=192.168.1.0/24
rightnexthop=201.xxx.9.2
    rightid=@serv2.vpn.net
rightrsasigkey="AQUI É COLOCADO O pubkey GERADO NO IPSEC.SECRETS DO SERV2, COMO FOI FEITO NO leftrsasigkey ACIMA"
auto=start

OBS.: O campo leftrsasigkey é exatamente o conteúdo do campo pubkey que foi gerado no ipsec.secrets do SERV1, ou seja cada servidor tem a sua chave pública e privada independente. Se houver erro ao copiar o pubkey para o arquivo ipsec.conf a VPN não será estabelecida.

Para entender qual o papel de alguns campos no arquivo ipsec.conf, basta comparar o desenho que fiz com as informações colocadas nele. Outras fontes de consulta seriam: as documentações do FreeSwan e man ipsec.conf.
Quando os 2 servidores VPN tiverem IPs fixos, o arquivo ipsec.conf deve ser exatamente o mesmo nos 2 servidores. Escolha um para ser o servidor principal e mude o campo "auto" para add ao invés de start. O "add" diz ao FreeSwan para não iniciaras conexões imediatamente e sim esperar que outros o façam. Esses outros estão como "start".
Você vai ter que escolher quem vai ser o left e quem vai ser o right, contanto que o left no ipsec.conf no SERV1 seja o mesmo left no ipsec.conf no SERV2.

O bloco "conn serv1-serv2" trata do tunelamento entre o SERV1 e o SERV2, você pode ter outros tunelamentos bastando criar
outros blocos e definir o nome das conexões como desejar.
Lembre-se de criar uma chave privada e pública em cada servidor VPN, sei que isso é chato, mas tenho que explicitar isso.
Não devem haver espaços de linhas no meio dos blocos, somente entre os blocos. Exemplo errado:

conn serv1-serv2
# Configuração do SERV1
left=200.xxx.5.1
leftsubnet=192.168.0.0/24

leftnexthop=200.xxx.5.2
leftid=@serv1.vpn.net
.
.
.
.

Sei que não é muito fácil entender o que estou colocando porque existem outros conceitos a serem discutidos antes, mas
com um certo esforço acredito que todos conseguem.

Para o exemplo de uma conexão Fixo-Móvel existem algumas alterações no ipsec.conf e só. Uma conexão dessas só existe quando uma das pontas não é um servidor VPN e sim uma estação remota conectada a INTERNET e que não possui um IP fixo.
Vamos supor que escolhi o "right" para ser a estação móvel então o ipsec.conf do servidor fixo teria os seguintes campos
alterados:

    right=%any
#rightnexthop=
    auto=add

Como não podemos prever qual será o IP da conexão remota, dizemos ao programa o parâmetro %any e o "rightnexthop" fica comentado pois é uma conexão remota e não precisamos saber quem é o próximo router.

O ipsec.conf da estação remota fica com os seguintes parâmetros:

    right=%defaultroute
    #rightnexthop=
    auto=start

Existem implementações IPSec também para outras plataformas como o Windows e podem ser encontrados links no site do FreeSwan.
Caso possua um Firewall entre as VPNs é necessário que seja liberada a porta 500/udp entre os IPs dos VPN Servers e o
protocolo 50.
Também não podemos esquecer de habilitar o forward nas máquinas com o seguinte comando:

echo 1 > /proc/sys/net/ipv4/ip_forward

Setar também o rp_filter da seguinte maneira nas máquinas VPN:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

Para iniciar ou parar uma conexão basta executar o seguintes comandos:

/etc/rc.d/init.d/ipsec start
/etc/rc.d/init.d/ipsec stop

Procure iniciar primeiro o servidor principal da VPN, aquele cujo parâmetro "auto" você definiu como "add" e depois
inicie os outros.

Caso a conexão esteja estabelecida, você conseguirá da estação 192.168.0.2 pingar a 192.168.1.2 da outra rede e vice-versa.

Espero ter ajudado mais uma vez nesse trabalho árduo que é configurar uma VPN. Desculpem não ser mais explicativo porque
esse assunto é muito extenso e o ideal seria traduzir os manuais do FreeSwan.

[]'s

Marcelo Gondim

[ Voltar para segurança | Indice de Seções ]
Copyright © 2001 UnderLinux
www.underlinux.com.br