Montando uma VPN com o OpenVPN

Veja neste artigo como montar uma VPN (Virtual Private Netwrok) utilizando o software OpenVPN, que auxilia a facilita a manutenção da rede e está disponível para vários sistemas operacionais.

Historicamente as empresas faziam sua ligação entre matriz e filial através de linhas de frame-relay. Esta conexão é feita por um link dedicado que oferece 64 Kbits entre os pontos, sendo que esta ligação tem um custo mensal, e dependendo da quantidade de links utilizado, este valor será alterado. Há outros meios de fazer estas ligações que são oferecidos por operadoras, mas em muitos casos o custo X benefício fica fora do orçamento de empresas de pequeno porte. Para resolver esta questão de custo e de velocidade de link, surgiu a Virtual Private Network.

VPN (Virtual Private Network) é uma rede privada virtual, na qual as informações de uma rede local são passadas por um túnel, em uma rede publica qualquer. Entretanto, os dados estarão protegidos neste tunelamento, que está usando recursos de criptografia de dados, que no caso do OpenVPN, são extraídos da biblioteca do OpenSSL, a qual utiliza protocolos criptográficos como: SSL e TLS, protocolos das camadas 2 e 3 do modelo OSI. Os dados trafegados neste túnel virtual serão gerenciados por alguns protocolos, que podem ser: o IPSec (Internet Protocol Security), L2TP (Layer 2 Tunneling Protocol), PPTP (Point-to-Point Tunneling Protocol) e o L2F (Layer 2 Forwarding), um desses protocolos irá trabalhar no gerenciamento e na segurança da rede.


Figura 1: Esquema de comunicação entre redes

A ligação de duas redes distintas utilizando VPN oferece alguns benefícios. Essa conexão pode ser via ADSL ou cabo. Dependendo do fluxo de dados da rede, há uma necessidade de ter outra conexão para a VPN, estes fatos devem ser analisados antes de implementar a VPN no local.

No nosso artigo utilizaremos o software livre OpenVPN para fazer os testes da VPN. O OpenVPN foi desenvolvido por James Yonan e é publicado pela GNU (General Public Licence). É um software destinado a VPN, o qual tem muitos recursos para administração da VPN. O OpenVPN está disponível para vários sistemas operacionais, entre eles: Mac OS X, Windows Server/XP/7, Linux, Solaris e entre outros. O OpenVPN não é compatível com o protocolo IPsec, para a autenticação entre os pontos existe varias formas. O OpenVPN trabalha com chaves secretas compartilhadas, autenticação de usuários com senha e autenticação com certificados. Existe uma vantagem na utilização desse software que é a forma de transmissão dos pacotes, que pode utilizar o protocolo UDP ou TCP, sendo que o UDP é o mais adequado, porque este protocolo transmite os pacotes diretamente, sem repetição, o que é melhor para o desempenho da rede.

Para maior segurança será instalado junto ao OpenVPN, o OpenSSL que é um software que trabalha com os protocolos SSL e TLS, e têm a função de criptografar. Estes protocolos promovem a integridade e privacidade dos dados entre a comunicação das redes, permitindo assim autenticação das duas partes envolvidas.

Instalação e configuração

Para montar a VPN utilizaremos o OpenVPN. Neste exemplo prático, será utilizada uma máquina para a ‘empresa matriz’ com o sistema operacional Linux Debian Squezze, outra para o ‘cliente’ que terá o sistema operacional Windows 7, e uma conexão de internet. Após tais procedimentos começaremos a configuração da VPN.

Instalação da Matriz

Com o Linux Instalado, vamos proceder a instalação dos pacotes necessários para montar nossa VPN.

Listagem 1: Fazendo a instalação do OpenVPN e do OpenSSL

# apt-get install openvpn openssl

Após a instalação, criaremos um diretório que receberá os arquivos de configuração que estão em uma diretório padrão:

Listagem 2: Criando um diretório para os arquivos de configuração

# mkdir /etc/openvpn/easy-rsa

Depois de instalado, é necessário efetuar cópia dos arquivos do diretório padrão para o diretório que foi criado anteriormente, da seguinte forma:

Listagem 3: Copiando arquivos

# cp -rp /usr/share/doc/openvpn/examples/easy-rsa/2.0/. /etc/openvpn/easy-rsa/

Após copiar os arquivos, devemos acessar a diretório /etc/openvpn/easy-rsa/ e editar o documento “vars”, serão feito algumas modificações no final do arquivo. Neste exemplo utilizaremos o editor de texto vim, mas é possível utilizar qualquer editor de sua preferência, entre eles o nano, emacs entre outros. Dando prosseguimento com a configuração, faça as alterações como no exemplo abaixo:

Listagem 4: Conteúdo alterado do arquivo vars

# vim /etc/openvpn/easy-rsa/vars export KEY_COUNTRY=”BR” export KEY_PROVINCE=”SE” export KEY_CITY=”Aracaju” export KEY_ORG=”Organização” export KEY_EMAIL=seumail@dominio.com

Temos: KEY_COUNTRY = País, Key_PROVINCE=Estado, KEY_CITY=cidade, CEY_ORG=nome da empresa e KEY_EMAIL=email do administrador.

Após esta etapa, salve o arquivo, agora vamos acessar o diretório easy-rsa para dar andamento em nossa configuração.

Listagem 5: Acessando o diretório easy-rsa

# cd /etc/openvpn/easy-rsa

Depois de acessar o diretório, devemos executar o comando ‘source vars’ para ativar as mudanças que foram feitas anteriormente e, em seguida, o comando ‘./clean-all’ para ativar e criar o diretório ‘/etc/openvpn/easy-rsa/keys’, onde serão guardadas as chaves e os certificados para nosso servidor de VPN:

Listagem 6: Ativando modificações

/etc/openvpn/easy-rsa# source vars /etc/openvpn/easy-rsa# ./clean-all

Depois de executar os comandos, vamos criar o conjunto de certificados e chaves necessários ao funcionamento da nossa VPN. Primeiramente vamos criar o certificado raiz que ficará neste servidor, para isto devemos executar o script “build-ca”, que está no diretório /easy-rsa. Ao executar este script observe que haverá algumas perguntas correspondentes ao arquivo configurado anteriormente ‘vars’.

Listagem 7: Criando o certificado

# ./build-ca

Após a execução do build-ca, vamos criar agora a chave do servidor utilizando o comando build-key-server seguido do nome do servidor:

Listagem 8: Criando a chave

# ./build-key-server nome do servidor

As perguntas serão as mesmas, mas pedirá uma senha, que por motivos de segurança deve ser informada. Agora, vamos criar as chaves de acesso para os usuários:

Listagem 9: Criando chaves de acesso para usuários

# ./build-key nome do usuário da vpn

Responda às opções e aceite a configuração no final com um “y”. Após esta configuração, executar o último script que pode demorar um pouco a terminar no processo:

Listagem 10: Último comando

# ./build-dh

Após criar as chaves, entraremos no diretório “keys”, no qual criaremos a chave:

Listagem 11: Acessando diretório das chaves

# cd /etc/openvpn/easy-rsa/Keys

Dentro do diretório, primeiramente vamos verificar o conteúdo com o comando ‘ls’ e vamos verificar se tem os certificados gerados anteriormente. Se não tiver estes certificados, verificar o passo a passo novamente. Depois de analisar se tudo está correto até aqui, passaremos para a criação da chave.

Listagem 12: Criação da chave

# openvpn --genkey --secret chave.key

Agora vamos criar o diretório “keys” dentro do diretório openvpn, para copiar os certificados para este diretório, pois no arquivo de configuração estará o caminho dos certificados.

Listagem 13: Criando o diretório keys

# mkdir /etc/openvpn/Keys

Este diretório deve conter cinco chaves de acesso, são elas: chave.key, dh1024.pem, ca.crt, servervpn.crt e servervpn.key. Para isso é só copiar estas chaves que estão no diretório /etc/openvpn/easy-rsa/keys para o diretório que foi criado antes.

Listagem 14: Copiando as chaves para o diretório Keys

# cp -a /etc/openvpn/easy-rsa/keys/chave.key dh1024.pem ca.crt servervpn.crt server.key /etc/openvpn/Keys/

Depois de criar todos os certificados e a chave, vamos digitar o arquivo principal para detalhar a configuração da VPN, este arquivo deve ficar dentro do diretório /etc/openvpn, com o nome desejado pelo usuário. Neste exemplo vamos utilizar como server.conf, as configurações seguem abaixo:

Observação: o que tiver ‘#’ são comentários, ou seja, explicações sobre os parâmetros descritos, portanto não há a necessidade de escrevê-los no arquivo de configuração.

Listagem 15: Arquivo de configuração da VPN

# vim /etc/openvpn/server.conf # Arquivo de configuração do OpenVPN. proto udp # protocolo usando na conexão, pode ser udp ou tcp. port 1194 # porta do serviço, pode ser outra porta que estiver aberta para este tipo de comunicação. dev tun # driver da interface de rede virtual, são utilizadas duas interfaces virtuais a ‘tun’ e a ‘tap’, a interface virtual tap é mais utilizada para o cliente Windows. server 10.0.0.0 255.255.255.0 # rede de ip que será distribuindo para os clientes vpns. push "route 192.168.0.0 255.255.255.0" # faz com que haja roteamento do ip local para o IP do túnel. push "dhcp-option DNS 192.168.0.1" # IP da sua rede #push "dhcp-option WINS 192.168.0.1" # IP da sua rede, para redes que contenham servidores Windows. route 10.0.0.0 255.255.255.0 # roteamento do cliente comp-lzo # é necessário um software que faça a compactação dos dados que são passados na rede. keepalive 10 120 # o número 10 é o intervalo de ping, 120 é o tempo em que a vpn é reiniciada, faz o monitoramento da conexão entre servidor e cliente. float # serve para IP dinâmico, para que o túnel continue aberto mesmo que o IP mude. ifconfig-pool-persist /etc/openvpn/ipp.txt # é onde fica armazenado a lista de IP´s, e a mesma maquina sempre vai ter o mesmo IP. max-clients 10 # máximo de clientes acessando no mesmo momento. persist-key # mantém as chaves disponíveis, mesmo que o serviço da VPN seja reiniciado. persist-tun # mantém a interface TUN aberta, mesmo quando a VPN é reiniciada. log-append /var/log/openvpn.log # local onde está armazenado o log da VPN. verb 6 # permite gerar logs da operação, ajuda o administrador a visualizar eventuais erros ou problemas da VPN, então possui níveis de informação, que vão do 0 ao 11. tls-server # protocolo TLS para criptografia. dh /etc/openvpn/keys/dh1024.pem # caminho da chave que foi criada anteriormente. ca /etc/openvpn/keys/ca.crt # caminho da chave que foi criada anteriormente. cert /etc/openvpn/keys/servervpn.crt # caminho da chave que foi criada anteriormente. key /etc/openvpn/keys/servervpn.key # caminho da chave que foi criada anteriormente. tls-auth /etc/openvpn/keys/chave.key # caminho da chave que foi criada anteriormente. status /var/log/openvpn.stats # caminho onde o log de status da VPN se encontra.

Após digitar estas linhas, salvar e sair deste arquivo, reiniciar o serviço da OpenVPN:

Listagem 16: Reiniciando o serviço do OpenVPN

# /etc/init.d/openvpn restart

Depois que reiniciar, observe se inicia perfeitamente. Se ocorrer erro, deve verificar os passos anteriores, feito isso, utilize o comando ‘ifconfig’ para verificar se está ativa a interface virtual tun0.

Para que as informações passem pelo tunelamento de forma compactada, para facilitar a entrega dos pacotes e ser ágil o fluxo de dados pelo túnel virtual, deve-se instalar o pacote lzop.

Listagem 17: Instalando o Izop

# apt-get install lzop

Após estes passos, para que a segurança seja melhor e mais eficaz, devemos executar alguns comandos no firewall. Temos uma explicação abaixo do que é firewall e de como vamos utilizar este recurso de segurança na nossa conexão da VPN.

Regras de Firewall pelo Iptables

O firewall é um tipo de dispositivo de gerenciamento de segurança, com o objetivo de filtrar os pacotes que trafegam na rede. Utilizaremos a tabela do iptables, que é um filtro de pacotes que tem uma arquitetura netfilter, que define regras de manipulação de pacotes que passam pela rede.

Há uma necessidade de ativar as regras de firewall para rotear os pacotes dos clientes da VPN para a rede local, na qual haverá uma comunicação e também para auxiliar na segurança. Então utilizaremos as regras a seguir:

Listagem 18: Roteamento de pacotes

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

O comando anterior faz roteamento de pacotes no Kernel.

# iptables -t nat -A POSTROUTING -d 192.168.0.0/24 -s 10.0.0.0/24 -j ACCEPT

Neste comando o roteamento é orientado a encaminhar os pacotes enviados da interface local para o IP do cliente.

# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

No comando anterior o roteamento é orientado a encaminhar os pacotes recebidos do IP do cliente para a interface local.

Lembrando que quando o sistema operacional for reiniciado, perderá todas as configurações feitas no firewall. Para que isso não ocorra, adicione estes comandos em um dos scripts de inicialização do sistema “/etc/rc.local”, toda vez que o sistema iniciar, os comandos serão ativados junto a inicialização.

Configuração do Microsoft Windows 7

Quando todas as configurações do OpenVPN estiverem prontas, com os passos corretos, podemos prosseguir para a configuração do cliente, que será no sistema operacional Windows 7. Então copiaremos os certificados que já foram criados na máquina do servidor, para que a comunicação entre eles seja possível, então seguiremos estas etapas:

Observação: o que tiver ‘#’ são comentários, ou seja, explicações sobre os parâmetros descritos, portanto não há a necessidade de escrevê-los no arquivo de configuração.

Este arquivo deve conter as seguintes linhas:

Listagem 19: Arquivo de configuração cliente

dev tun # driver utilizado para a comunicação da interface virtual do cliente. proto udp # protocolo utilizado para o trafego de pacotes, no qual pode ser udp ou tcp. remote 200.200.200.2000 # IP fixo da sua rede, sendo compatível com a da configuração da matriz. port 1194 # porta por onde haverá a comunicação dos dados. pull # Significa puxar as configurações do servidor, ou seja, obter os dados para conciliar na conexão. comp-lzo # software que será utilizado para criptografar os dados, deve ser igual a configuração do servidor. keepalive 10 120 # 10 Intervalo de pings de comunicação da rede, 120 tempo de resposta da VPN, caso ela seja reiniciada, assim não perderá a comunicação. float # Para IP´s dinâmico, caso o IP seja mudado o túnel ficará aberto. tls-client # protocolo TLS que criptografará os dados do cliente até o servidor, para isso foi instalado o software livre OpenSSL que contém este protocolo de criptografia. persist-tun # Força a interface TUN para que fique aberta, mesmo quando o VPN é reiniciado. persist-key # Faz com que as chaves fiquem disponíveis, mesmo quando o VPN é reiniciado, facilita na reconexão do VPN. remote-cert-tls server # Certificado de acesso remoto do cliente ao servidor, utilizando o protocolo TLS, para permitir o acesso do cliente com segurança. dh keys/dh1024.pem # Chave de segurança que deve está na diretório ‘keys’ na maquina do cliente. ca keys/ca.crt # Chave de segurança que deve está na diretório ‘keys’ na maquina do cliente. cert keys/seuusuario.crt # Chave de segurança que deve está na diretório ‘keys’ na maquina do cliente. key keys/seuusuario.key # Chave de segurança que deve está na diretório ‘keys’ na maquina do cliente. tls-auth keys/chave.key # Chave de segurança que deve está na diretório ‘keys’ na maquina do cliente. route-method exe route-delay 2

Após escrever a configuração, salvar o arquivo na extensão “.ovpn”. Depois de salvar nessa extensão, o arquivo ficará com o logotipo da OpenVPN. Se o arquivo não for salvo com este tipo de extensão, não funcionará.

Depois de instalado o programa, ficará um ícone na área de trabalho, execute o OpenVPN.GUI. Observe que aparecerá um ícone de computadores de tela de cor vermelha na barra de ferramentas. Clicando com o botão direito, confirme “Conectar”, irá abrir uma página de conexão. Se o arquivo de configuração estiver certo, o ícone ficará verde ou continuará vermelho, então deve verificar a configuração.

Após todas estas configurações e explicações sobre a definição de uma VPN e de como configurá-la, a sua VPN estará totalmente configurada e funcionando. E com a configuração correta e os certificados protegidos, a VPN pode ser usada com segurança e suas informações entre as redes distantes serão passadas com proteção do tunelamento da VPN, também com o custo melhor, velocidade boa, entre outros fatores, existem inúmeras vantagens na utilização da VPN.

Referências:


Conheça os cursos de Infraestrutura da Devmedia.

Artigos relacionados