Caros amigos,
Alguns colegas sempre perguntam sobre formas baratas e seguras para fazer conexões remotas, e nunca encontramos um tutorial pela net que fosse bem explicativo e passo a passo. Este tuto que segue abaixo, cria um passo a passo bem interessante, apesar de não ter testado exatamente dessa maneira como foi citado pelo autor (a referência de onde tirei o tuto esta no final da página).
Esse próximo feriado, vou aproveitar e estudar para as provas da faculdade, e terei que fazer um servidor e configurar essa ferramenta, e ai crio um post bem mais preciso e direcionado, dizendo também os problemas que enfrentei.
Grande abraço e segue o Tuto.
Uma VPN (Virtual Private Network, ou rede virtual privada) é, como o nome sugere, uma redevirtual, criada para interligar duas redes distantes, através da Internet. Usar uma VPN permite que você compartilhe arquivos e use aplicativos de produtividade e de gerenciamento, como se todos os micros estivessem conectados à mesma rede local. Você pode até mesmo imprimir em impressoras da rede remota, da mesma forma que faria com uma impressora local.
Antigamente, a única forma de interligar redes em dois locais diferentes era usar linhas de frame-relay. Para quem não é dessa época, uma linha de frame-relay oferece um link dedicado de 64 kbits entre dois pontos (a matriz e a filial de uma empresa, por exemplo), com um custo mensal fixo. Você pode combinar várias linhas frame-relay em uma única conexão, de acordo com a necessidade, o problema nesse caso é o preço. Atualmente, existem outras opções de conexões dedicadas e de conexões de alta disponibilidade, oferecidas pelas operadoras, mas elas ficam fora do orçamento da maioria das pequenas e médias empresas.
Usando uma VPN, você pode obter todos os benefícios de ter uma conexão dedicada entre dois pontos usando conexões via ADSL ou cabo, que são muito mais baratas. Dependendo do volume de uso da rede, você pode tanto utilizar a conexão que já tem quanto utilizar uma segunda conexão apenas para a VPN, evitando assim que o tráfego prejudique a navegação dos usuários. Além de interligar duas ou mais redes, a VPN pode (dependendo da configuração) ser acessada também por funcionários trabalhando remotamente.
Todos dados que trafegam através da VPN são encriptados, o que elimina o risco inerente à transmissão via Internet. Naturalmente, nenhuma VPN pode ser considerada "100% segura", já que sempre existe um pequeno risco de alguém conseguir obter acesso aos servidores, de forma a roubar as chaves de encriptação (por exemplo), mas, em uma VPN bem configurada, o risco é realmente muito pequeno. É muito mais provável que um funcionário descontente sabote a rede interna, ou envie informações sigilosas para fora, do que algum invasor consiga efetivamente obter acesso à rede via Internet.
Nesse tópico, estudaremos como criar VPNs usando o OpenVPN. Além de ser mais simples de configurar que a maioria das outras soluções de VPN e ser bastante seguro e flexível, ele possui versões Linux e Windows, o que permite criar túneis interligando máquinas rodando os dois sistemas sem grandes dificuldades.
Outras vantagens são que ele pode ser usado por clientes conectando através de uma conexão compartilhada via NAT (apenas o servidor precisa de portas abertas) e a boa tolerância contra conexões ruins, ou ao uso de conexões com IP dinâmico. A VPN pode ser configurada para ser restabelecida de forma automática em caso de interrupção na conexão, o que torna o link bastante confiável.
Com relação à segurança, o OpenVPN pode ser configurado para utilizar chaves estáticas, que oferecem um nível mediano de segurança, em troca de uma configuração mais simples, ou para utilizar certificados X509, onde a configuração é um pouco mais complexa, mas, em compensação, a segurança é muito maior (bem superior à da maioria das soluções comerciais). Isso permite que você escolha a melhor relação entre praticidade e segurança de acordo com a situação.
O primeiro passo é instalar o OpenVPN, tanto no cliente quanto no servidor. Nas distribuições derivadas do Debian você pode instalá-lo rapidamente via apt-get:
No final da instalação, ele exibirá uma mensagem, perguntando se o OpenVPN deve ser desativado antes de ser atualizado ("Would you like to stop openvpn before it gets upgraded?"). Responda que sim.
No OpenSuSE, abra o Yast e, dentro da seção de gerenciamento de pacotes, faça uma busca pelo pacote "openvpn". A busca resulta em dois resultados: "openvpn", que é o pacote em que estamos interessados e "openvpn-devel", que contém o código fonte. Basta selecionar o pacote e concluir a instalação.
No Fedora, a instalação pode ser feita usando o yum. Ele se encarregará de instalar também os pacotes "openssl" e "lzo", que contém as bibliotecas usadas pelo OpenVPN para encriptar e compactar o tráfego da rede:
No CentOS, é necessário adicionar o repositório do RPMForge já que (até o CentOS 5.1), o pacote OpenVPN não faz parte dos repositórios oficiais. Você pode adicionar o repositório seguindo as instruções disponíveis aqui: http://wiki.centos.org/Repositories/RPMForge.
O primeiro passo é instalar a chave GPG do repositório:
Com a chave instalada, baixe o pacote RPM do repositório. Este pacote instala o arquivo com a configuração do repositório dentro da pasta "/etc/yum/repos.d". Verifique o link do pacote para a versão do CentOS que está utilizando na página com as instruções. No caso do CentOS 5.1, versão 32 bits, por exemplo, o pacote é o "rpmforge-release-0.3.6-1.el5.rf.i386.rpm". Se você está fazendo a configuração via linha de comando, pode baixar o pacote usando o wget, como em:
Em seguida, instale o pacote usando o comando "yum localinstall", como em:
A partir daí, você pode instalar o pacote do OpenVPN usando o yum, assim como no Fedora:
No Mandriva, basta instalar o pacote "openvpn" usando urpmi. Assim como no Fedora, ele também se encarrega de instalar as dependências:
Se você estiver utilizando uma distribuição que não inclua o pacote nos repositórios, ou se a versão disponível for muito antiga, você pode também instalar a partir do pacote com o código fonte, disponível no: http://openvpn.net/index.php/downloads.html
Depois de instalar o pacote, o próximo passo é carregar o módulo "tun" do Kernel, que é utilizado pelo OpenVPN para criar interfaces virtuais. Cada VPN criada se comporta como se fosse uma nova interface de rede, conectada à rede de destino. Imagine que a VPN se comporta como se existisse um cabo de rede gigante ligando esta interface virtual à rede do outro lado do túnel.
Adicione a linha "tun" no final do arquivo "/etc/modules" para que o módulo passe a ser carregado automaticamente durante o boot:
Estes três passos, ou seja, a instalação do OpenVPN, o carregamento do módulo e a adição da linha no final do arquivo devem ser executados tanto no servidor quanto nos clientes.
Depois de concluída a instalação, você pode criar um túnel simples, não encriptado, usando os comandos abaixo. Este túnel não pode ser considerado uma "VPN" já que não é seguro, mas serve como um "hello word" dentro da configuração do OpenVPN.
Presumindo que as duas máquinas estejam ligadas em rede e que não exista nenhum firewall no caminho, use o comando abaixo no cliente, especificando o endereço do servidor:
Faça o mesmo no servidor, especificando agora o endereço do cliente:
Rode o comando "ifconfig" no cliente e você verá que foi criada uma interface de rede virtual, a "tun0", com o endereço "10.0.0.1":
No exemplo, o servidor recebe o endereço "10.0.0.2". Você pode testar a conectividade usando o ping ou qualquer outra ferramenta:
Como comentei, o OpenVPN possui também uma versão Windows, que está disponível no http://openvpn.se.
Esta versão inclui um instalador gráfico e funciona em todas as versões do Windows a partir do Windows 2000. Ela inclui também o driver tun/tap, que é instalado automaticamente, você precisa apenas prestar atenção nas mensagens de instalação. Em um certo ponto, será exibida uma mensagem avisando que o driver TAP/Win32 não passou pelo processo de certificação de compatibilidade com o Windows. Responda "Continuar assim mesmo" para efetuar a instalação, do contrário o OpenVPN não funcionará.
O processo de certificação dos drivers para o Windows é um processo caro e demorado, onde os fabricantes de componentes submetem os drivers de dispositivo à Microsoft para que eles sejam certificados. Este é um processo que não está ao alcance de projetos independentes, como o OpenVPN, daí a exibição da mensagem. De qualquer forma, isso não significa que o software seja instável ou inseguro, muito pelo contrário. Se a certificação da Microsoft fosse um indicador de qualidade, softwares como o IIS e o IE não teriam tantas falhas e brechas de segurança.
A forma mais simples de configurar o OpenVPN é utilizar chaves estáticas, onde um arquivo contendo um algoritmo de encriptação é usado pelas duas partes para encriptar os dados transmitidos através da VPN.
Nesse modo, você gera uma arquivo de texto no servidor, contendo a chave de encriptação e precisa apenas copiá-la para o cliente e fazer uma configuração rápida para criar a VPN. Se você quer apenas criar uma VPN doméstica, ou criar uma VPN temporária entre duas redes, esta é a configuração recomendada.
O grande problema em utilizar uma chave estática é que, como o nome sugere, a mesma chave é utilizada sessão após sessão, sem nunca mudar. Com isso, existe uma pequena possibilidade de um atacante obstinado conseguir quebrar a VPN usando um ataque de força bruta. Como a chave é um arquivo de texto, que é armazenado tanto no cliente quanto no servidor, existe também a possibilidade de alguém conseguir copiá-lo, caso tenha acesso físico a uma das máquinas. Outra limitação é que usando uma chave estática o servidor suportará a conexão de um único cliente por VPN.
Para VPNs com vários clientes, ou em redes empresariais, onde a segurança é prioridade, é recomendável utilizar uma estrutura baseada em certificados X509, como veremos no tópico seguinte.
Vamos então à configuração de nossa primeira VPN. Para este exercício inicial, recomendo que utilize duas máquinas da rede local, que não tenham firewall ativo. Depois de entender melhor como o sistema funciona, passaremos para uma configuração mais elaborada.
O primeiro passo é gerar o arquivo com a chave, no servidor. O arquivo deve ser gerado dentro do diretório "/etc/openvpn" (o diretório padrão de configuração), de forma que acessamos o diretório antes de executar o comando que gera a chave:
Isso gerará o arquivo "static.key", que contém a chave de encriptação que será usada para criar a conexão. Ele é um arquivo de texto simples, que contém uma chave de 2048 bits, como em:
Este arquivo deve ser copiado para a pasta "/etc/openvpn" do cliente, usando (por exemplo) o SFTP. Você pode usar também um pendrive, ou outra mídia de uso local, mas não é recomendável enviá-lo por meios não seguros (e-mail por exemplo), já que qualquer um que tenha acesso ao arquivo poderá se conectar à sua VPN ou desencriptar todo o tráfego transmitido através dela.
Para acessar o servidor (a partir do cliente) via SFTP, use o comando "sftp ip" para se conectar e, em seguida, use os comandos "cd /etc/openvpn" e "get static.key" para fazer a cópia, como em:
Password:
Com o arquivo contendo a chave presente nas duas máquinas, falta criar os arquivos de configuração que serão usados pelo OpenVPN. Neste exemplo, criarei o arquivo "/etc/openvpn/server.conf" no servidor e o arquivo "/etc/openvpn/client.conf" no cliente. Os nomes podem ser diferentes, mas os arquivos devem ser criados dentro da pasta "/etc/openvpn" e devem terminar com a extensão ".conf"
O arquivo "/etc/openvpn/server.conf", no servidor, fica com o seguinte conteúdo:
A linha "ifconfig 10.0.0.1 10.0.0.2" inclui os endereços que serão usados pelas interfaces virtuais da VPN, no servidor e no cliente. No exemplo, o servidor utilizará o endereço "10.0.0.1" e o cliente o endereço "10.0.0.2". Você pode utilizar outros endereços se preferir. O importante é que os endereços utilizados na VPN devem ser sempre diferentes dos endereços usados na rede local.
A linha "secret static.key" especifica o arquivo com a chave de encriptação, que criamos no passo anterior. Não esqueça de alterar a linha caso o nome do arquivo seja diferente.
Em seguida, vem o arquivo "/etc/openvpn/client.conf", que deve ser criado no cliente:
A primeira linha especifica o endereço IP do servidor. No exemplo, estou utilizando um endereço de rede local, já que estamos apenas testando a VPN, mas, em um exemplo real de uso, você utilizaria o endereço IP de Internet do servidor ou (ao utilizar uma conexão com IP dinâmico) um domínio virtual utilizado por ele. Se você ainda não tem um, acesse o no-ip.com ou o dyndns.org e faça o registro.
Com os arquivos de configuração criados, inicializar a VPN é incrivelmente simples. Você precisa apenas reiniciar o serviço "openvpn" tanto no cliente quanto no servidor, usando o comando:
Ao ser iniciado, o serviço procura por arquivos ".conf" dentro do diretório "/etc/openvpn" e inicia as VPNs configuradas automaticamente (desde que o serviço esteja configurado para subir durante o boot, o que é feito por padrão na maioria das distribuições). Isso não apenas simplifica a configuração, mas faz com que a VPN passe a ser automaticamente restabelecida a cada boot. Para desativá-la, basta parar o serviço:
Você pode, também, ativar o OpenVPN manualmente, usando (como root) o comando:
(onde o "client.conf" é o arquivo de configuração que será usado)
Este comando manual permite acompanhar as mensagens de inicialização e de conexão, o que ajuda a descobrir o que está errado em casos em que a VPN não funciona, embora a configuração pareça estar correta.
Se a VPN é usada pelos clientes apenas esporadicamente, você pode criar um ícone no desktop, ou um pequeno script contendo o comando, para que o usuário possa se conectar à VPN apenas quando precisar. Outra opção é instalar o kvpnc (http://home.gna.org/kvpnc/), um cliente gráfico que pode ser usado para se conectar a VPNs baseadas em diversos protocolos, incluindo o OpenVPN:
Depois de estabelecida a VPN, o cliente passará a ter uma nova interface de rede, a "tun0", com o endereço IP "10.0.0.2", que funciona como um link ponto-a-ponto com a interface "tun0" do servidor, que recebe o endereço "10.0.0.1":
Teste a conexão usando o ping, ou acessando algum serviço disponível no servidor, como em:
Depois do teste inicial, você pode fazer um teste realizando a conexão via Internet (você pode usar uma conexão discada ou outra conexão temporária no cliente para fazer o teste). Para isso, você vai precisar apenas alterar a configuração no cliente, adicionando o endereço de internet do servidor, como em:
Não se esqueça de reiniciar o OpenVPN para que a alteração entre em vigor:
Ref: http://www.guiadohardware.net/tutoriais/openvpn/
Alguns colegas sempre perguntam sobre formas baratas e seguras para fazer conexões remotas, e nunca encontramos um tutorial pela net que fosse bem explicativo e passo a passo. Este tuto que segue abaixo, cria um passo a passo bem interessante, apesar de não ter testado exatamente dessa maneira como foi citado pelo autor (a referência de onde tirei o tuto esta no final da página).
Esse próximo feriado, vou aproveitar e estudar para as provas da faculdade, e terei que fazer um servidor e configurar essa ferramenta, e ai crio um post bem mais preciso e direcionado, dizendo também os problemas que enfrentei.
Grande abraço e segue o Tuto.
**********************************************************
Uma VPN (Virtual Private Network, ou rede virtual privada) é, como o nome sugere, uma redevirtual, criada para interligar duas redes distantes, através da Internet. Usar uma VPN permite que você compartilhe arquivos e use aplicativos de produtividade e de gerenciamento, como se todos os micros estivessem conectados à mesma rede local. Você pode até mesmo imprimir em impressoras da rede remota, da mesma forma que faria com uma impressora local.
Antigamente, a única forma de interligar redes em dois locais diferentes era usar linhas de frame-relay. Para quem não é dessa época, uma linha de frame-relay oferece um link dedicado de 64 kbits entre dois pontos (a matriz e a filial de uma empresa, por exemplo), com um custo mensal fixo. Você pode combinar várias linhas frame-relay em uma única conexão, de acordo com a necessidade, o problema nesse caso é o preço. Atualmente, existem outras opções de conexões dedicadas e de conexões de alta disponibilidade, oferecidas pelas operadoras, mas elas ficam fora do orçamento da maioria das pequenas e médias empresas.
Usando uma VPN, você pode obter todos os benefícios de ter uma conexão dedicada entre dois pontos usando conexões via ADSL ou cabo, que são muito mais baratas. Dependendo do volume de uso da rede, você pode tanto utilizar a conexão que já tem quanto utilizar uma segunda conexão apenas para a VPN, evitando assim que o tráfego prejudique a navegação dos usuários. Além de interligar duas ou mais redes, a VPN pode (dependendo da configuração) ser acessada também por funcionários trabalhando remotamente.
Todos dados que trafegam através da VPN são encriptados, o que elimina o risco inerente à transmissão via Internet. Naturalmente, nenhuma VPN pode ser considerada "100% segura", já que sempre existe um pequeno risco de alguém conseguir obter acesso aos servidores, de forma a roubar as chaves de encriptação (por exemplo), mas, em uma VPN bem configurada, o risco é realmente muito pequeno. É muito mais provável que um funcionário descontente sabote a rede interna, ou envie informações sigilosas para fora, do que algum invasor consiga efetivamente obter acesso à rede via Internet.
Nesse tópico, estudaremos como criar VPNs usando o OpenVPN. Além de ser mais simples de configurar que a maioria das outras soluções de VPN e ser bastante seguro e flexível, ele possui versões Linux e Windows, o que permite criar túneis interligando máquinas rodando os dois sistemas sem grandes dificuldades.
Outras vantagens são que ele pode ser usado por clientes conectando através de uma conexão compartilhada via NAT (apenas o servidor precisa de portas abertas) e a boa tolerância contra conexões ruins, ou ao uso de conexões com IP dinâmico. A VPN pode ser configurada para ser restabelecida de forma automática em caso de interrupção na conexão, o que torna o link bastante confiável.
Com relação à segurança, o OpenVPN pode ser configurado para utilizar chaves estáticas, que oferecem um nível mediano de segurança, em troca de uma configuração mais simples, ou para utilizar certificados X509, onde a configuração é um pouco mais complexa, mas, em compensação, a segurança é muito maior (bem superior à da maioria das soluções comerciais). Isso permite que você escolha a melhor relação entre praticidade e segurança de acordo com a situação.
O primeiro passo é instalar o OpenVPN, tanto no cliente quanto no servidor. Nas distribuições derivadas do Debian você pode instalá-lo rapidamente via apt-get:
# apt-get install openvpn
No final da instalação, ele exibirá uma mensagem, perguntando se o OpenVPN deve ser desativado antes de ser atualizado ("Would you like to stop openvpn before it gets upgraded?"). Responda que sim.
No OpenSuSE, abra o Yast e, dentro da seção de gerenciamento de pacotes, faça uma busca pelo pacote "openvpn". A busca resulta em dois resultados: "openvpn", que é o pacote em que estamos interessados e "openvpn-devel", que contém o código fonte. Basta selecionar o pacote e concluir a instalação.
No Fedora, a instalação pode ser feita usando o yum. Ele se encarregará de instalar também os pacotes "openssl" e "lzo", que contém as bibliotecas usadas pelo OpenVPN para encriptar e compactar o tráfego da rede:
# yum install openvpn
No CentOS, é necessário adicionar o repositório do RPMForge já que (até o CentOS 5.1), o pacote OpenVPN não faz parte dos repositórios oficiais. Você pode adicionar o repositório seguindo as instruções disponíveis aqui: http://wiki.centos.org/Repositories/RPMForge.
O primeiro passo é instalar a chave GPG do repositório:
# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
Com a chave instalada, baixe o pacote RPM do repositório. Este pacote instala o arquivo com a configuração do repositório dentro da pasta "/etc/yum/repos.d". Verifique o link do pacote para a versão do CentOS que está utilizando na página com as instruções. No caso do CentOS 5.1, versão 32 bits, por exemplo, o pacote é o "rpmforge-release-0.3.6-1.el5.rf.i386.rpm". Se você está fazendo a configuração via linha de comando, pode baixar o pacote usando o wget, como em:
# wget -c
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Em seguida, instale o pacote usando o comando "yum localinstall", como em:
# yum localinstall rpmforge-release-0.3.6-1.el5.rf.i386.rpm
A partir daí, você pode instalar o pacote do OpenVPN usando o yum, assim como no Fedora:
# yum install openvpn
No Mandriva, basta instalar o pacote "openvpn" usando urpmi. Assim como no Fedora, ele também se encarrega de instalar as dependências:
# urpmi openvpn
Se você estiver utilizando uma distribuição que não inclua o pacote nos repositórios, ou se a versão disponível for muito antiga, você pode também instalar a partir do pacote com o código fonte, disponível no: http://openvpn.net/index.php/downloads.html
Depois de instalar o pacote, o próximo passo é carregar o módulo "tun" do Kernel, que é utilizado pelo OpenVPN para criar interfaces virtuais. Cada VPN criada se comporta como se fosse uma nova interface de rede, conectada à rede de destino. Imagine que a VPN se comporta como se existisse um cabo de rede gigante ligando esta interface virtual à rede do outro lado do túnel.
# modprobe tun
Adicione a linha "tun" no final do arquivo "/etc/modules" para que o módulo passe a ser carregado automaticamente durante o boot:
# echo tun >> /etc/modules
Estes três passos, ou seja, a instalação do OpenVPN, o carregamento do módulo e a adição da linha no final do arquivo devem ser executados tanto no servidor quanto nos clientes.
Depois de concluída a instalação, você pode criar um túnel simples, não encriptado, usando os comandos abaixo. Este túnel não pode ser considerado uma "VPN" já que não é seguro, mas serve como um "hello word" dentro da configuração do OpenVPN.
Presumindo que as duas máquinas estejam ligadas em rede e que não exista nenhum firewall no caminho, use o comando abaixo no cliente, especificando o endereço do servidor:
# openvpn --remote 192.168.1.1 --dev tun0 --ifconfig 10.0.0.1 10.0.0.2
Faça o mesmo no servidor, especificando agora o endereço do cliente:
# openvpn --remote 192.168.1.202 --dev tun0 --ifconfig 10.0.0.2 10.0.0.1
Rode o comando "ifconfig" no cliente e você verá que foi criada uma interface de rede virtual, a "tun0", com o endereço "10.0.0.1":
No exemplo, o servidor recebe o endereço "10.0.0.2". Você pode testar a conectividade usando o ping ou qualquer outra ferramenta:
Como comentei, o OpenVPN possui também uma versão Windows, que está disponível no http://openvpn.se.
Esta versão inclui um instalador gráfico e funciona em todas as versões do Windows a partir do Windows 2000. Ela inclui também o driver tun/tap, que é instalado automaticamente, você precisa apenas prestar atenção nas mensagens de instalação. Em um certo ponto, será exibida uma mensagem avisando que o driver TAP/Win32 não passou pelo processo de certificação de compatibilidade com o Windows. Responda "Continuar assim mesmo" para efetuar a instalação, do contrário o OpenVPN não funcionará.
O processo de certificação dos drivers para o Windows é um processo caro e demorado, onde os fabricantes de componentes submetem os drivers de dispositivo à Microsoft para que eles sejam certificados. Este é um processo que não está ao alcance de projetos independentes, como o OpenVPN, daí a exibição da mensagem. De qualquer forma, isso não significa que o software seja instável ou inseguro, muito pelo contrário. Se a certificação da Microsoft fosse um indicador de qualidade, softwares como o IIS e o IE não teriam tantas falhas e brechas de segurança.
A forma mais simples de configurar o OpenVPN é utilizar chaves estáticas, onde um arquivo contendo um algoritmo de encriptação é usado pelas duas partes para encriptar os dados transmitidos através da VPN.
Nesse modo, você gera uma arquivo de texto no servidor, contendo a chave de encriptação e precisa apenas copiá-la para o cliente e fazer uma configuração rápida para criar a VPN. Se você quer apenas criar uma VPN doméstica, ou criar uma VPN temporária entre duas redes, esta é a configuração recomendada.
O grande problema em utilizar uma chave estática é que, como o nome sugere, a mesma chave é utilizada sessão após sessão, sem nunca mudar. Com isso, existe uma pequena possibilidade de um atacante obstinado conseguir quebrar a VPN usando um ataque de força bruta. Como a chave é um arquivo de texto, que é armazenado tanto no cliente quanto no servidor, existe também a possibilidade de alguém conseguir copiá-lo, caso tenha acesso físico a uma das máquinas. Outra limitação é que usando uma chave estática o servidor suportará a conexão de um único cliente por VPN.
Para VPNs com vários clientes, ou em redes empresariais, onde a segurança é prioridade, é recomendável utilizar uma estrutura baseada em certificados X509, como veremos no tópico seguinte.
Vamos então à configuração de nossa primeira VPN. Para este exercício inicial, recomendo que utilize duas máquinas da rede local, que não tenham firewall ativo. Depois de entender melhor como o sistema funciona, passaremos para uma configuração mais elaborada.
O primeiro passo é gerar o arquivo com a chave, no servidor. O arquivo deve ser gerado dentro do diretório "/etc/openvpn" (o diretório padrão de configuração), de forma que acessamos o diretório antes de executar o comando que gera a chave:
# cd /etc/openvpn
# openvpn --genkey --secret static.key
# openvpn --genkey --secret static.key
Isso gerará o arquivo "static.key", que contém a chave de encriptação que será usada para criar a conexão. Ele é um arquivo de texto simples, que contém uma chave de 2048 bits, como em:
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
0600d007988a59c6f7895884d336d445
2679fd3d2c0b9e0b777b4da92ab97043
... (mais 13 linhas)
e871ed9077185a2a6904e67cd0869e15
-----END OpenVPN Static key V1-----
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
0600d007988a59c6f7895884d336d445
2679fd3d2c0b9e0b777b4da92ab97043
... (mais 13 linhas)
e871ed9077185a2a6904e67cd0869e15
-----END OpenVPN Static key V1-----
Este arquivo deve ser copiado para a pasta "/etc/openvpn" do cliente, usando (por exemplo) o SFTP. Você pode usar também um pendrive, ou outra mídia de uso local, mas não é recomendável enviá-lo por meios não seguros (e-mail por exemplo), já que qualquer um que tenha acesso ao arquivo poderá se conectar à sua VPN ou desencriptar todo o tráfego transmitido através dela.
Para acessar o servidor (a partir do cliente) via SFTP, use o comando "sftp ip" para se conectar e, em seguida, use os comandos "cd /etc/openvpn" e "get static.key" para fazer a cópia, como em:
# cd /etc/openvpn
# sftp root@192.168.1.101
# sftp root@192.168.1.101
Password:
sftp> cd /etc/openvpn
sftp> get static.key
Fetching /etc/openvpn/static.key to static.key
sftp> quit
sftp> get static.key
Fetching /etc/openvpn/static.key to static.key
sftp> quit
Com o arquivo contendo a chave presente nas duas máquinas, falta criar os arquivos de configuração que serão usados pelo OpenVPN. Neste exemplo, criarei o arquivo "/etc/openvpn/server.conf" no servidor e o arquivo "/etc/openvpn/client.conf" no cliente. Os nomes podem ser diferentes, mas os arquivos devem ser criados dentro da pasta "/etc/openvpn" e devem terminar com a extensão ".conf"
O arquivo "/etc/openvpn/server.conf", no servidor, fica com o seguinte conteúdo:
dev tun
ifconfig 10.0.0.1 10.0.0.2
secret static.key
ifconfig 10.0.0.1 10.0.0.2
secret static.key
A linha "ifconfig 10.0.0.1 10.0.0.2" inclui os endereços que serão usados pelas interfaces virtuais da VPN, no servidor e no cliente. No exemplo, o servidor utilizará o endereço "10.0.0.1" e o cliente o endereço "10.0.0.2". Você pode utilizar outros endereços se preferir. O importante é que os endereços utilizados na VPN devem ser sempre diferentes dos endereços usados na rede local.
A linha "secret static.key" especifica o arquivo com a chave de encriptação, que criamos no passo anterior. Não esqueça de alterar a linha caso o nome do arquivo seja diferente.
Em seguida, vem o arquivo "/etc/openvpn/client.conf", que deve ser criado no cliente:
remote 192.168.1.101
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
A primeira linha especifica o endereço IP do servidor. No exemplo, estou utilizando um endereço de rede local, já que estamos apenas testando a VPN, mas, em um exemplo real de uso, você utilizaria o endereço IP de Internet do servidor ou (ao utilizar uma conexão com IP dinâmico) um domínio virtual utilizado por ele. Se você ainda não tem um, acesse o no-ip.com ou o dyndns.org e faça o registro.
Com os arquivos de configuração criados, inicializar a VPN é incrivelmente simples. Você precisa apenas reiniciar o serviço "openvpn" tanto no cliente quanto no servidor, usando o comando:
# /etc/init.d/openvpn restart
Ao ser iniciado, o serviço procura por arquivos ".conf" dentro do diretório "/etc/openvpn" e inicia as VPNs configuradas automaticamente (desde que o serviço esteja configurado para subir durante o boot, o que é feito por padrão na maioria das distribuições). Isso não apenas simplifica a configuração, mas faz com que a VPN passe a ser automaticamente restabelecida a cada boot. Para desativá-la, basta parar o serviço:
# /etc/init.d/openvpn stop
Você pode, também, ativar o OpenVPN manualmente, usando (como root) o comando:
# openvpn --config /etc/openvpn/client.conf
(onde o "client.conf" é o arquivo de configuração que será usado)
Este comando manual permite acompanhar as mensagens de inicialização e de conexão, o que ajuda a descobrir o que está errado em casos em que a VPN não funciona, embora a configuração pareça estar correta.
Se a VPN é usada pelos clientes apenas esporadicamente, você pode criar um ícone no desktop, ou um pequeno script contendo o comando, para que o usuário possa se conectar à VPN apenas quando precisar. Outra opção é instalar o kvpnc (http://home.gna.org/kvpnc/), um cliente gráfico que pode ser usado para se conectar a VPNs baseadas em diversos protocolos, incluindo o OpenVPN:
Depois de estabelecida a VPN, o cliente passará a ter uma nova interface de rede, a "tun0", com o endereço IP "10.0.0.2", que funciona como um link ponto-a-ponto com a interface "tun0" do servidor, que recebe o endereço "10.0.0.1":
Teste a conexão usando o ping, ou acessando algum serviço disponível no servidor, como em:
# ssh 10.0.0.1
Depois do teste inicial, você pode fazer um teste realizando a conexão via Internet (você pode usar uma conexão discada ou outra conexão temporária no cliente para fazer o teste). Para isso, você vai precisar apenas alterar a configuração no cliente, adicionando o endereço de internet do servidor, como em:
remote guiadohardware.no-ip.org
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
dev tun
ifconfig 10.0.0.2 10.0.0.1
secret static.key
Não se esqueça de reiniciar o OpenVPN para que a alteração entre em vigor:
# /etc/init.d/openvpn restart
Ref: http://www.guiadohardware.net/tutoriais/openvpn/