Monte sua VPN

Uma rede virtual privada (ou VPN) pode ser útil em muitas situações: ligar os computadores de uma empresa com várias filiais sem a construção de uma rede física, acessar seu computador dentro de outra rede, acessar outros computadores dentro de outra rede, utilizar a internet de modo seguro mesmo conectando-se inicialmente a uma rede não confiável, etc. E tudo isso de uma forma segura, sem comprometer a segurança da rede que está usando.

Adaptado de Bender em Futurama (S01E02)
Adaptado de Bender em Futurama (S01E02)

Uma VPN (Virtual Private Network) é uma rede particular virtual que conecta dois ou mais computadores utilizando uma rede pública (geralmente a internet) sem que outras pessoas tenham acesso a essa informação. Depois de criptografados, os dados são então encapsulados e transmitidos pela Internet, utilizando o protocolo de tunelamento, até encontrar seu destino, onde são recebidos, desencapsulados, descriptografados e armazenados. O tunelamento consiste em criar um túnel (conceito semelhante aos túneis rodoviários, onde quem está fora não vê o que está dentro) para que os dados possam ser enviados sem que outros usuários tenham acesso.

Para trabalhar com a VPN, considere o servidor do serviço de rede e o cliente, que acessa a rede (ambos precisam ter o programa próprio instalado). Para mantê-la funcionando, é preciso montar o servidor de VPN e deixá-lo rodando e conectado o tempo todo. Visando minimizar esse custo, utilize um computador de baixo consumo, como uma Raspberry Pi – veja como gravar o sistema operacional Raspbian no cartão para ser usado na raspberry no link.

O exemplo para configuração de servidor VPN a seguir foi retirado do site Digital Ocean e utiliza o programa OpenVPN com a ferramenta easy-rsa (para gerar um certificado de autoridade privado), uma Raspberry e Raspbian Jessie. Alguns passos são opcionais, mas permitem aumentar a segurança e melhorar o desempenho.

Instalar e configurar OpenVPN

Para instalar o OpenVPN com easy-rsa, use o comando “apt-get install openvpn easy-rsa”.

Extraia o arquivo base de configuração para o lugar “padrão” usando o seguinte comando:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Edite esse arquivo em quatro pontos:

  1. Aumente a segurança usando encriptação de 2048bit alterando a linha “dh dh1024.pem” para “dh dh2048.pem”
  2. Redirecione o tráfego descomentando a linha “;push “redirect-gateway def1 bypass-dhcp”” (basta tirar o ponto e vírgula)
  3. Defina a resolução de DNS descomentando as linhas “dhcp-option DNS 208.67.222.222” e “dhcp-option DNS 208.67.220.220” (OpenDNS)
  4. Descomente as linhas “user nobody” e “group nogroup” para restringir privilégios do programa

Para rodar o OpenVPN, execute os passos a seguir para só então iniciar o serviço do programa (depois de gerar chave e certificado para o servidor).

Habilitar encaminhamento de pacotes

Para encaminhar o tráfego dos serviços do cliente para a internet (e não ficar só no servidor), edite o arquivo “/etc/sysctl.conf” e descomente a linha que contém “net.ipv4.ip_forward=1”.

Instalar e configurar UFW (edição de firewall)

O UFW é um front-end para o IPTables (etapa opcional, você pode editá-lo diretamente). Instale-o programa através do comando “apt-get install ufw” e configure-o usando os seguintes comandos para permitir a conexão ssh e o tráfego UDP pela porta 1194 (o UDP remove toda a parte de verificação de erros do TCP, permitindo uma conexão mais rápida):

ufw allow ssh
ufw allow 1194/udp

Edite o arquivo “/etc/default/ufw” para substituir o valor da variável “DEFAULT_FORWARD_POLICY” de DROP para ACCEPT. Edite também o arquivo “/etc/ufw/before.rules” para incluir as seguintes linhas logo após as linhas de cabeçalho:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Finalmente, habilite o UFW através do comando “ufw enable”. Para verificar as regras de firewall, use o comando “ufw status”.

Configurar e construir a Autoridade Certificadora

Além da segurança de só conectar usando login e senha, o OpenVPN usa certificados para criptografar o tráfego de modo bidirecional (servidor autentica cliente e vice-versa). Para configurar a “Certificate Authority” (CA), serão usados os scripts do Easy RSA.

Copie os scripts e crie um diretório para hospedar as chaves através dos seguintes comandos:

cp -r /usr/share/easy-rsa/ /etc/openvpn
mkdir /etc/openvpn/easy-rsa/keys

Para definir os parâmetros do certificado, personalize as linhas do arquivo “/etc/openvpn/easy-rsa/vars” referentes a país, estado, cidade, organização e e-mail e também altere o conteúdo da variável KEY_NAME para o nome desejado do servidor (“vpn-empresa”, por exemplo).

A troca de chaves de Diffie-Hellman é um método de criptografia específico para troca de chaves desenvolvido por Whitfield Diffie e Martin Hellman e publicado em 1976. Ele permite que duas partes que não possuem conhecimento a priori de cada uma, compartilhem uma chave secreta sob um canal de comunicação inseguro.

O Transport Layer Security (TLS), assim como o seu antecessor Secure Sockets Layer (SSL), é um protocolo de segurança que protege as telecomunicações via internet para serviços com transferência de dados. O OpenSSL é uma implementação de código aberto dos protocolos SSL e TLS.

Para gerar os parâmetros Diffie-Hellman, utilize a ferramenta “dhparam” do programa OpenSSL:

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Com o certificado gerado, deve-se gerar a chave. Primeiro, vá para o diretório “/etc/openvpn/easy-rsa” e inicialize a “Public Key Infrastructure” (PKI) (sim, com ponto, espaço e ponto), limpe eventual chaves pré-existentes e construa a autoridade certificadora (CA) usando os seguintes comandos:

. ./vars
./clean-all
./build-ca

Tecle ENTER quando pedir confirmação quanto a “Distinguished Name” para usar os valores padrão.

Gerar certificado e chave para o servidor

Ainda na pasta “/etc/openvpn/easy-rsa”, execute o seguinte comando, com o argumento dado pelo nome da VPN informado anteriormente:

./build-key-server vpn-empresa

Tecle ENTER para todas as confirmações quando não der opção (programa escolhe pelo valor padrão) e digite “y” quando perguntar sobre assinatura e requisição de certificado.

Depois de gerados, a chave e o certificado do servidor devem ser movidos para o local certo e definitivo, ou seja, execute o comando:

cp /etc/openvpn/easy-rsa/keys/{vpn-empresa.crt,vpn-empresa.key,ca.crt} /etc/openvpn

Inicie o OpenVPN através do comando “service openvpn start”. Para ver seu status, como para saber desde quando está ativa/inativa, utilize “service openvpn status”. Para reiniciar o serviço, utilize o comando “/etc/init.d/openvpn restart” e “sudo ifconfig” para verificar se está ativa a interface virtual tun0.

Gerar certificado e chave para o cliente

A autoridade certificadora construída no servidor deve gerar certificados e chaves para cada cliente – por padrão, O OpenVPN não permite conexões simultâneas com o servidor de clientes usando o mesmo certificado e chave. Assim, execute os procedimentos abaixo para cada dispositivo (client1, client2, etc) que deseja conectar à VPN.

O procedimento para gerar a chave de um cliente é o mesmo para criar a chave do servidor, mas agora o argumento é o nome do cliente:

./build-key client1

Tecle ENTER para todas as confirmações quando não der opção (programa escolhe pelo valor padrão) e digite “y” quando perguntar sobre assinatura e requisição de certificado. A chave gerada foi para o diretório definitivo (/etc/openvpn/easy-rsa/keys). Para esse mesmo destino, copie o arquivo padrão de perfil, renomeando-o para “.ovpn” (por convenção):

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Nesse arquivo, altere a linha que contém o IP externo do servidor da VPN.

Observação importante! Para o computador ficar visível na internet, assim como evitar problemas com mudança de número no caso de IP dinâmico, use um serviço de DDNS (como dyndns, no-ip ou duckDNS) para ter um endereço do tipo “empresa.duckdns.org”. Veja mais detalhes de como criar um subdomínio clicando no link.

No arquivo “client.ovpn” recém criado, altere a linha que começa com “remote” para substituir “my-server-1” pelo novo endereço (ou IP) e depois descomente as linhas contendo “user nobody” e “group no group”.

Para cada cliente, deve-se transferir os arquivos de certificado, a chave e o gabarito de perfil para uma pasta no computador local ou em outro dispositivo cliente. Os arquivos são esses:

/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key
/etc/openvpn/easy-rsa/keys/client.ovpn
/etc/openvpn/ca.crt

Os dois últimos arquivos são os mesmos para todos os clientes.

Para facilitar o envio das informações desses arquivos para o cliente, é prático compilar tudo em um só arquivo. Novamente no arquivo “client.ovpn”, comente (colocar “;”) as linhas que começam com “ca”, “cert” e “key” e então inclua o conteúdo dos três arquivos conforme o seguinte código:

echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

Agora, basta enviar o arquivo “client.ovpn” para o cliente.

Instalando e usando o OpenVPN no cliente

Caso você queria apenas acessar uma VPN já existente, primeiro execute algum dos seguintes comandos para instalar o OpenVPN (a segunda atua na interface gráfico junto com o network-manager):

sudo apt-get install openvpn
sudo apt-get install -y network-manager-openvpn network-manager-openvpn-gnome

Para conectar no modo texto, basta usar o seguinte comando, alterando o nome e localização do arquivo ou copiando antes o arquivo “.ovpn” para “/etc/openvpn” (aí nesse caso não precisa colocar o caminho completo):

openvpn --config /path/client.ovpn &

Para conectar-se automaticamente na VPN quando iniciar sistema, edite o arquivo “/etc/default/openvpn” para descomentar uma das linhas com a variável AUTOSTART e altere seu conteúdo para o nome da VPN utilizada (ou crie uma nova abaixo, sem o comentário).

Para conectar usando interface gráfica, deve-se clicar no ícone do Network Manager -> Conexões VPN -> Configurar VPN e “importar uma configuração de VPN salva”. Escolha o arquivo “.ovpn” e coloque a localização dos arquivos enviados, caso estejam em pastas diferentes. Insira o usuário e a senha utilizados no computador da matriz e clique em salvar. Para conectar-se automaticamente na VPN quando iniciar sistema, abra a janela de edição da conexão vigente e, na aba geral, marque a opção “Conectar automaticamente a VPN ao usar esta conexão”, marcando também a VPN desejada.

Após imprimir várias mensagens na tela, caso tenha sido bem sucedido, a última que aparece deve ser “Initialization Sequence Completed”. Ao executar o comando “sudo ifconfig”, deve aparecer uma rede com nome “tun0”, que é o túnel utilizado para conectar com a VPN. Mais detalhes e outras formas de acessar estão disponíveis no post Acesso Remoto.

Outras fontes

Compartilhe :)

2 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.