Interligação de redes com OpenVPN

De Eriberto Wiki
Ir para: navegação, pesquisa
Esta página está em construção e deverá estar pronta em poucos dias. Por favor, volte depois ou consulte-a agora com cautela e paciência.


Exclamacao36.png Nota em 08 fev. 2008: o tutorial relativo à ligação de um cliente isolado (GNU/Linux ou MS Windows) a uma rede está completo (sem revisão ortográfica e gramatical). Falta a segunda parte do tutorial, que versa sobre a ligação entre gateways, permitindo que uma rede inteira tenha total acesso a outra.
Twitter.png

by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>

Artigo criado em: 27 de junho de 2007.

Última atualização: veja o rodapé desta página.

Tiny URL ou bit.ly: {{{2}}}



Sobre este artigo

Este artigo pretende descrever a configuração do OpenVPN, como cliente e servidor, no Debian GNU/Linux.

Vantagens do uso do OpenVPN

O OpenVPN possui diversas vantagens em relação ao IPSec na montagem de VPNs. Algumas delas:

  • Grande facilidade de instalação e configuração.
  • Excelente desenvoltura perante NATs em filtros de pacotes que estejam no caminho, evitando a necessidade de adaptações e de modificações no sistema de firewall.
  • Permite o uso de UDP, evitando o efeito "TCP over TCP".
  • Utilização de chaves assimétricas para a autenticação.
  • Disponível para GNU/Linux e MS Windows.
  • Grande estabilidade.


A criação das chaves

Algumas chaves assimétricas serão necessárias para que o OpenVPN seja instalado. Essas chaves poderão ser criadas com o OpenSSL e deverão ser assinadas por uma CA (autoridade certificadora) oficial ou por uma CA própria.

Para maiores detalhes sobre a criação das chaves, consulte o artigo Autoridade Certificadora (CA) com o OpenSSL.

Situação 1: um servidor (gateway) e vários clientes

A situação 1 encontra-se ilustrada na figura a seguir:

Openvpn rede1.jpg

O gateway VPN, que geralmente é o filtro de pacotes mais externo do sistema de firewall, irá receber as conexões dos clientes externos. Poderá haver diversos clientes VPN.

Configuração do gateway OpenVPN (para a situação 1)

Instalação do OpenVPN (Debian Etch)

Para instalar o OpenVPN no Debian Etch, execute o comando:

# apt-get install openvpn

Criação dos certificados e das chaves

Com base no artigo Autoridade Certificadora (CA) com o OpenSSL, crie um par de chaves para ser utilizado no gateway. A chave pública deverá ser assinada pela CA, o que irá gerar um certificado.

Exclamacao36.png No commonName coloque o nome completo (FQDN) da máquina que atuará como gateway. Exemplo: gangorra.rede.com.br. No emailAddress, coloque o endereço de e-mail do administrador da rede.

Depois de gerar as chaves, torne a chave privada insegura, para que a mesma possa ser utilizada no gateway sem que haja um pedido de senha a cada conexão. Apenas para fins didáticos, utilize o nome insegura.key para a chave privada insegura.

O próximo passo será renomear as chaves para melhorar a identificação das mesmas. Considerando que o nome do seu gateway seja gangorra, execute os comandos:

# mv newcert.pem gangorra.crt
# mv insegura.key gangorra.key

Também será necessário obter uma cópia do certificado raiz da CA que assinou a sua chave pública. Geralmente, o nome original desse certificado raiz é cacert.pem. Seria interessante renomeá-lo também (renomeie uma cópia dele, preservando o original). Um exemplo, considerando o domínio rede.com.br:

# mv cacert.pem rede.crt

Será necessária uma terceira chave. Essa chave só existirá do lado do gateway e será utilizada para troca inicial de informações, quando ainda estará sendo fechado o canal criptográfico. Para gerar a chave, com 1024 bits de tamanho, utilize o seguinte comando:

# openssl dhparam -out nome.dh 1024
Exclamacao36.png Substitua nome pelo nome ou sigla do nome da pessoa que irá receber a chave. Lembre-se de que os espaços deverão ser substituídos por underlines "_", pois trata-se de nome de arquivo. No caso do exemplo com o qual estamos trabalhando, gangorra.dh.

Ainda, crie uma chave para ser utilizada como segurança adicional no TLS. Essa chave existirá tanto no cliente quanto no gateway. Utilize o comando:

# openvpn --genkey --secret gangorra.tlskey
Exclamacao36.png Note que o comando anterior foi openvpn e não openssl.

Instalação dos certificados e das chaves

Uma vez criados os certificados, os mesmos deverão ser colocados nos diretórios corretos dentro da máquina que será o gateway. Assim, coloque os seguintes arquivos nos seguintes diretórios:

rede.crt (cópia de cacert.crt) ---> /etc/ssl/certs/
gangorra.crt (antigo newcert.pem) ---> /etc/ssl/certs/
gangorra.key (antiga insegura.key) ---> /etc/ssl/private/
gangorra.dh (chave Diffie-Hellman) ---> /etc/ssl/private/
gangorra.tlskey (segurança TLS) ---> /etc/ssl/private/

A seguir, altere as permissões dos arquivos gerados para ter mais segurança:

# chmod 644 /etc/ssl/certs/rede.crt
# chmod 644 /etc/ssl/certs/gangorra.crt
# chmod 400 /etc/ssl/private/gangorra*

Arquivo de configuração do gateway (um exemplo)

No Debian, após instalar o pacote OpenVPN, será criado o diretório /usr/share/doc/openvpn/, que conterá diversas informações relevantes. Ao seguir os procedimentos existentes neste artigo, tudo deverá funcionar corretamente. No entanto, para um melhor entendimento e aprofundamento, seria interessante consultar o conteúdo do citado diretório.

O arquivo /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz é um exemplo, comentado, de arquivo de configuração do OpenVPN. É com base nele que deverá ser gerado o arquivo de configuração da vpn no gateway (em /etc/openvpn/).

Exclamacao36.png O arquivo de configuração do gateway, a ser criado em /etc/openvpn/, poderá ter qualquer nome, desde que a extensão de tal arquivo seja .conf.

A seguir, um exemplo de arquivo de configuração do gateway:

local 200.200.200.200
port 35000
proto udp
dev tun
ca /etc/ssl/certs/rede.crt
cert /etc/ssl/certs/gangorra.crt
key /etc/ssl/private/gangorra.key
dh /etc/ssl/private/gangorra.dh
server 192.168.231.0 255.255.255.0
push "route 10.0.0.0 255.0.0.0"
push "dhcp-option DOMAIN rede.com.br"
push "dhcp-option DNS 10.0.0.6"
keepalive 10 120
tls-auth /etc/ssl/private/gangorra.tlskey 0
cipher BF-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 3

Alguns comentários sobre algumas das linhas de configuração:

  • local: contém o IP real do gateway na Internet.
  • port: uma porta, escolhida aleatoriamente, para servir a conexão.
  • proto: permite escolher o protocolo de transporte a ser utilizado. O protocolo UDP é o mais indicado, por ser simples e rápido.
  • server: estabelece a rede de comunicação a ser utilizada pelos envolvidos para se comunicarem. Escolha uma rede que não exista em ambos os lados.
  • push: utilizado pelo gateway para passar dados para os cliente, como um servidor DHCP. A linha route, por exemplo, estabelece a rota a ser utilizada para alcançar a rede 10.0.0.0/255.0.0.0 que, no caso, representa a rede interna a ser acessada via vpn.
  • tls-auth: adiciona um grau de segurança. Deverá ter o parâmetro 0 no gateway e 1 nos clientes.

A figura a seguir ilustrará alguns detalhes da configuração realizada:


Openvpn rede2.jpg


Exclamacao36.png Para mais detalhes sobre os parâmetros do arquivo de configuração, leia o conteúdo do arquivo /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz e o howto existente em http://openvpn.net/howto.html.

A configuração, como foi apresentada, permite que o cliente navegue na rede a qual ele está diretamente ligado, além da rede remota servida pela VPN. Caso você deseje que o cliente permaneça isolado, fazendo com que ele só tenha acesso à rede oposta (via VPN), acresça a seguinte linha:

push "redirect-gateway"

Inicialização do serviço

Para inicializar o serviço, utilize o comando a seguir:

# /etc/init.d/openvpn start

Verifique se o OpenVPN no gateway inicializou corretamente. Utilize o comando:

# ps ax | grep openvpn

Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log /var/log/openvpn.log.

Configuração dos clientes OpenVPN em máquinas GNU/Linux (para a situação 1)

Cada máquina cliente terá que ser configurada, individualmente, de acordo com as instruções a seguir.

Instalação do OpenVPN

Assim como foi feito no servidor, instale o OpenVPN com o comando a seguir:

# apt-get install openvpn

Criação dos certificados e das chaves para o cliente

Inicialmente, crie um par de chaves para o cliente. A CA deverá assinar a chave pública. A chave privada poderá ou não ser tornada insegura. Vide o artigo Autoridade Certificadora (CA) com o OpenSSL.

Exclamacao36.png Caso a chave privada do cliente não seja tornada insegura, será pedida a senha para acessar a VPN. Isso poderá ser uma boa idéia, caso a máquina em questão seja pública.

Renomeie as chaves para melhorar a identificação das mesmas. Utilize o nome da máquina cliente ou outra identificação qualquer.

Você também irá precisar de uma cópia do certificado raiz da CA que assinou a sua chave pública e da chave TLS do gateway (no caso, gangorra.tlskey).

Instalação dos certificados e das chaves no cliente

Uma vez criados os certificados, os mesmos deverão ser colocados nos diretórios corretos dentro da máquina cliente. Assim, coloque os seguintes arquivos nos seguintes diretórios:

rede.crt (certificado raiz da CA) ---> /etc/ssl/certs/
canopus.crt (certificado do cliente) ---> /etc/ssl/certs/
canopus.key (chave privada do cliente) ---> /etc/ssl/private/
gangorra.tlskey (segurança TLS) ---> /etc/ssl/private/

A seguir, altere as permissões dos arquivos gerados para ter mais segurança:

# chmod 644 /etc/ssl/certs/rede.crt
# chmod 644 /etc/ssl/certs/canopus.crt
# chmod 400 /etc/ssl/private/canopus.key
# chmod 400 /etc/ssl/private/gangorra.tlskey

Arquivo de configuração do cliente (um exemplo)

O arquivo /usr/share/doc/openvpn/examples/sample-config-files/client.conf é um exemplo, comentado, de arquivo de configuração do OpenVPN. É com base nele que deverá ser gerado o arquivo de configuração da vpn no cliente (em /etc/openvpn/).

Exclamacao36.png O arquivo de configuração do cliente, a ser criado em /etc/openvpn/, poderá ter qualquer nome, desde que a extensão de tal arquivo seja .conf. Seria interessante utilizar o mesmo nome da máquina cliente.

A seguir, um exemplo de arquivo de configuração do cliente:

client
dev tun
proto udp
remote 200.200.200.200 35000
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/ssl/certs/rede.crt
cert /etc/ssl/certs/canopus.crt
key /etc/ssl/private/canopus.key
tls-auth /etc/ssl/private/gangorra.tlskey 1
cipher BF-CBC
comp-lzo
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 3

Inicialização do cliente

Para inicializar o cliente, utilize o comando a seguir:

# /etc/init.d/openvpn start

Verifique se o OpenVPN no cliente inicializou corretamente. Utilize o comando:

# ps ax | grep openvpn

Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log /var/log/openvpn.log.

Teste da conexão

Para testar a conexão, "pingue" um endereço IP que pertença à rede a ser acessada.

A resolução de nomes

Caso você esteja sem resolução de nomes no cliente, há várias saídas. Algumas delas:

  • Editar o arquivo /etc/resolv.conf e inserir o IP do servidor DNS da rede de destino.
  • Criar um servidor DNS local que faça forward de zona para o servidor DNS da rede de destino.
  • Editar o arquivo /etc/hosts e inserir o nome e o IP das máquinas desejadas.


Configuração dos clientes OpenVPN em máquinas MS Windows XP (para a situação 1)

Cada máquina cliente terá que ser configurada, individualmente, de acordo com as instruções a seguir.

Instalação do OpenVPN

  • Baixe e instale o pacote OpenVPN para MS Windows, disponível no site OpenVPN.NET (link Windows Installer). Sugiro fazer a instalação padrão, que deverá ocorrer em C:\Arquivos de Programas\OpenVPN.
  • Baixe e instale o front-end OpenVPN GUI. Utilize a versão estável (stable) do tipo completa com instalação (installation package). Caso a instalação da interface TAP apresente problemas, clique em ignorar. Isso ocorre, uma vez que a interface virtual TAP já foi instalada pelo pacote OpenVPN e poderá já estar ativada. Sugiro fazer a instalação padrão (sem remover ou acrescer itens).

Criação dos certificados e das chaves para o cliente

Inicialmente, crie um par de chaves para o cliente. A CA deverá assinar a chave pública. A chave privada poderá ou não ser tornada insegura. Vide o artigo Autoridade Certificadora (CA) com o OpenSSL.

Exclamacao36.png Caso a chave privada do cliente não seja tornada insegura, será pedida a senha para acessar a VPN. Isso poderá ser uma boa idéia, caso a máquina em questão seja pública.

Renomeie as chaves para melhorar a identificação das mesmas. Utilize o nome da máquina cliente ou outra identificação qualquer.

Você também irá precisar de uma cópia do certificado raiz da CA que assinou a sua chave pública e da chave TLS do gateway (no caso, gangorra.tlskey).

Instalação dos certificados e das chaves no cliente

Uma vez criados os certificados, os mesmos deverão ser colocados nos diretórios corretos dentro da máquina cliente. Assim, coloque os seguintes arquivos dentro de C:\Arquivos de Programas\OpenVPN\config:

rede.crt (certificado raiz da CA)
canopus.crt (certificado do cliente)
canopus.key (chave privada do cliente)
gangorra.tlskey (segurança TLS)

Arquivo de configuração do cliente (um exemplo)

O arquivo C:\Arquivos de Probgramas\OpenVPN\sample-config\client.ovpn é um exemplo, comentado, de arquivo de configuração do OpenVPN. É com base nele que deverá ser gerado o arquivo de configuração da vpn no cliente. O arquivo final também ficará em C:\Arquivos de Programas\OpenVPN\config\ e a sua extensão tem que ser .ovpn.

Exclamacao36.png O arquivo de configuração do cliente poderá ter qualquer nome, desde que a extensão de tal arquivo seja .ovpn. Seria interessante utilizar o mesmo nome da máquina cliente e configurar o Windows Explorer para não ocultar extensões de arquivos conhecidos (menu Ferramentas > Opções de pasta... > Modo de exibição > Ocultar as extensões dos tipos de arquivos conhecidos).

A seguir, um exemplo de arquivo de configuração do cliente:

client
dev tun
proto udp
remote 200.200.200.200 35000
resolv-retry infinite
nobind
persist-key
persist-tun
ca rede.crt
cert canopus.crt
key canopus.key
tls-auth gangorra.tlskey 1
cipher BF-CBC
comp-lzo
status openvpn-status.log   # comente esta linha se for utilizar o OpenVPN GUI
log openvpn.log             # comente esta linha se for utilizar o OpenVPN GUI
log-append openvpn.log      # comente esta linha se for utilizar o OpenVPN GUI
verb 3

Inicialização do cliente

A inicialização do cliente poderá ser feita pelo OpenVPN ou pelo OpenVPN GUI. Para inicializar pelo OpenVPN, vá para C:\Arquivos de Programas\OpenVPN\config e dê um clique com o botão direito sobre o arquivo de configuração (.ovpn). A seguir, selecione Start OpenVPN on this config file. Será pedida a senha da chave privada do cliente, caso a mesma não tenha sido tornada insegura.

Exclamacao36.png Após a inicialização da VPN, serão criados os arquivos de log em C:\Arquivos de Programas\OpenVPN\config.

Para inicializar o cliente pelo OpenVPN GUI (método aconselhado), clique com o botão direito do mouse sobre o ícone do mesmo, existente no SysTray, conforme mostrado na figura a seguir, e escolha a opção Connect.

Openvpn systray.jpg



Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log openvpn.log.

Teste da conexão

Para testar a conexão, "pingue" um endereço IP que pertença à rede ou tente acessar um site da mesma.


Links externos


Comentários, sugestões e controle de acessos

Por favor, deixe os seus comentários e sugestões sobre este artigo no meu Blog Técnico. Para isto, clique aqui.




Consulte também o contador abaixo, iniciado em 27 jul. 07, além do gráfico acima.