sexta-feira, 29 de outubro de 2010

Criando uma VPN com OpenVPN.

Já a algum tempo eu escrevi um post falando dos benefícios de usar uma VPN como um nível extra de proteção para serviços de rede. Vou ensinar uma forma rápida de criar uma VPN ponto-a-rede.

A VPN ponto-a-rede, é aquela que utilizamos para conectar um único computador (ponto) a uma rede. Uma situação comum para isso, é quando a empresa possui uma rede interna protegida por um firewall e que acessar essa rede a partir de um notebook.

Assumimos a seguinte estrutura de TI, uma rede corporativa com IPs no padrão 192.168.0.X, com um firewall linux IP interno 192.168.0.1 e externo 208.67.222.222

Em nosso servidor linux devemos instalar o OpenVPN:
# aptitude install openvpn
Depois de instalado copiamos os script de exemplo criados pela instalação em /etc/openvpn
#cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn
Começamos a instalação. Dentro do diretório /etc/openvpn
# . ./vars
# ./clean-all
# ./build-ca
Observe que é . [espaço] ./vars, a primeira vez que eu vi isso achei que fosse um erro de digitação, mas é assim mesmo.
Quando executamos o script build-ca ele deve fazer uma seqüencia de perguntas onde a mais importante é common name que deve ser respondida como server para funcionar corretamente na aplicação. As demais você pode preencher ou aceitar as opções padrão.


Agora vamos criar os arquivos do servidor.

# ./build-key-server server
Depois de respondermos cada pergunta, ele deve mostrar um resumo de nossas respostas e perguntar se queremos realmente assinar o certificado. Devemos responder que sim digitando y.
E por último o script pergunta se temos certeza que queremos incluir este servidor em nosso banco de dados. Devemos responder novamente que sim com y.
Criamos agora os arquivos de cada usuário, com sua respectiva senha.
# ./build-key-pass usuario
# ./build-key-pass lucas
Onde usuario e lucas são os dois usuários criados.
A primeira pergunta deste script é o PEM passphrase que será a senha deste usuário.
No mais podemos deixar as opções padrão, o commom name de cada usuário será seu próprio nome e devemos responder as duas últimas perguntas com y como na etapa anterior.
Depois geramos os parâmetros diffie-hellman (isso pode demorar um pouco)
# ./build-dh
O arquivo de configuração do servidor deve ficar assim
  # IP e porta do servidor
  local 208.67.222.222
  port 1194
  proto udp
  dev tun

  # Certificados gerados
  ca ca.crt
  cert server.crt
  key server.key
  dh dh1024.pem

  # Criar no diretorio cdd/cliente a configuracao
  # dele - ou uma invalida para trava-lo :)
  client-config-dir ccd

  # Rede que os clientes irão "pegar"
  server 10.8.0.0 255.255.255.0
  push "route 192.168.0.0 255.255.252.0"
  push "dhcp-option DNS 192.168.0.1"

  # Neste arquivo serão guardados os IPs dos clientes
  # para conectarem com o mesmo IP da proxima vez
  ifconfig-pool-persist ipp.txt
  client-to-client

  # Ative para permitir dois clientes com o mesmo
  # certificado - não recomendável
  ;duplicate-cn
  keepalive 10 120

  # Compressão, privilégios do cliente
  comp-lzo
  max-clients 15
  user nobody
  group nobody

  # Logs e etc
  persist-key
  persist-tun
  status      /var/log/openvpn-status.log
  log         /var/log/openvpn.log
  log-append  /var/log/openvpn.log
  verb 6
Este arquivo deve ser salvo como /etc/openvpn/openvpn.conf
Para finalizarmos devemos copiar os arquivos ca.crt, dh1024.pem, server.crt e server.key de /etc/openvpn/keys para /etc/openvpn.
Pronto, o servidor está pronto e pode ser iniciado com
# /etc/init.d/openvpn/start
Agora vamos ao cliente Windows. Primeiramente baixe o pacote contido no link.
http://www.megaupload.com/?d=8669PV98
Faça a instalação completa.
Na pasta c:\arquivos de programas\openvpn\config copie os seguintes arquivos:

  • ca.crt
  • usuario.key
  • usuario.crt
  • server.ovpn
O arquivo server.ovpn deve estar configurado desta forma para o cenário proposto.
client
dev tun
proto udp

remote 208.67.222.222 1194
resolv-retry infinite
nobind

persist-key
persist-tun

ca ca.crt
cert usuario.crt
key usuario.key

ns-cert-type server
comp-lzo
verb 3

Espero ter ajudado.

Nenhum comentário:

Postar um comentário