 |
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)
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 ]
|
|
|