Tutorial

Como configurar um servidor OpenVPN no Ubuntu 18.04

UbuntuSecurityVPNUbuntu 18.04

Uma versão anterior deste tutorial foi escrita por Justin Ellingwood.

Introdução

Quer acessar a Internet com segurança do seu smartphone ou notebook, enquanto estiver conectado a uma rede não confiável como o Wi-Fi de um hotel ou café? Uma Virtual Private Network (VPN) permite que você atravesse redes não confiáveis com privacidade e segurança como se estivesse em uma rede privada. O tráfego emerge do servidor VPN e continua sua jornada para o destino.

Quando combinado com conexões HTTPS, esta configuração permite que você proteja seus logins e transações sem fio. Você pode contornar restrições geográficas e de censura, e proteger seu local e qualquer tráfego HTTP não criptografado da rede não confiável.

O OpenVPN é uma solução VPN de código aberto Secure Socket Layer (SSL) completa que acomoda uma ampla gama de configurações. Neste tutorial, você irá configurar um servidor OpenVPN em um servidor Ubuntu 18.04 e, em seguida, irá configurar o acesso a ele do Windows, macOS, iOS e/ou Android. Este tutorial irá manter os passos de instalação e configuração o mais simples possível para cada uma dessas configurações.

Nota: Se você planeja configurar um servidor OpenVPN em um Droplet DigitalOcean, fique ciente de que nós, como muitos provedores de hospedagem, cobramos por excesso de largura de banda. Por este motivo, tenha cuidado acerca de com quanto tráfego seu servidor está lidando.

Veja esta página para maiores informações.

Pré-requisitos

Para completar este tutorial, você precisará de acesso a um servidor Ubuntu 18.04 para hospedar seu serviço OpenVPN. Você precisará configurar um usuário não root com privilégios sudo antes de iniciar este guia. Você pode seguir nosso guia de configuração inicial do servidor Ubuntu 18.04 para configurar um usuário com permissões apropriadas. O tutorial em questão também irá configurar um firewall, que assumimos que esteja em funcionamento durante todo este guia.

Além disso, você precisará de uma máquina separada para servir como sua autoridade de certificação (CA). Embora seja tecnicamente possível usar seu servidor OpenVPN ou sua máquina local como sua CA, isso não é recomendado pois abre seu VPN para algumas vulnerabilidades de segurança. Baseando-se na documentação oficial do OpenVPN, você deve colocar sua CA em uma máquina autônoma que seja dedicada a importar e assinar pedidos de certificado. Por isso, este guia supõe que seu CA esteja em um servidor Ubuntu 18.04 separado que também tenha um usuário não root com privilégios sudo e um firewall básico.

Note que se você desativar a autenticação por senha enquanto configurar esses servidores, poderá ter dificuldades ao transferir arquivos entre eles mais tarde neste guia. Para resolver este problema, você pode reativar a autenticação por senha em cada servidor. Como alternativa, você poderia gerar um par de chaves SSH para cada servidor, então adicionar a chave SSH pública do servidor OpenVPN no arquivo CA authorized_keys da máquina e vice-versa. Veja Como configurar as chaves SSH no Ubuntu 18.04 para instruções sobre como utilizar qualquer uma dessas soluções.

Quando tiver esses pré-requisitos funcionando, siga para o Passo 1 deste tutorial.

Passo 1 — Instalando o OpenVPN e o EasyRSA

Para começar, atualize o índice de pacotes do seu servidor VPN e instale o OpenVPN. O OpenVPN está disponível nos repositórios padrão do Ubuntu, então você pode usar o apt para a instalação:

  • sudo apt update
  • sudo apt install openvpn

O OpenVPN é um VPN TLS/SSL. Isso significa que o OpenVPN utiliza os certificados para criptografar o tráfego entre o servidor e os clientes. Para emitir certificados confiáveis, você irá configurar sua própria autoridade de certificação (CA) simplificada. Para fazer isso, vamos baixar a última versão do EasyRSA, que vamos usar para construir nossa infraestrutura de chaves públicas (PKI) CA, do repositório oficial do projeto no GitHub.

Como mencionado nos pré-requisitos, vamos construir a CA em um servidor autônomo. A razão para esta abordagem é que, se um agressor fosse capaz de se infiltrar no seu servidor, eles seriam capazes de acessar sua chave privada CA e usá-la para assinar novos certificados, dando-lhes acesso ao seu VPN. Dessa forma, gerenciar a CA a partir de uma máquina autônoma ajuda a evitar que usuários não autorizados acessem seu VPN. Note também que é recomendado que você mantenha o servidor CA desligado quando não estiver sendo usado para assinar chaves como uma medida de precaução adicional.

Para começar a construir a infraestrutura CA e PKI, utilize o wget para baixar a última versão do EasyRSA tanto na máquinas CA quanto no seu servidor OpenVPN. Para obter a última versão, vá até a página Releases no projeto oficial do EasyRSA no GitHub, copie o link de download para o arquivo que termina em .tgz e então cole-o no seguinte comando:

  • wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

Então, extraia o tarball:

  • cd ~
  • tar xvf EasyRSA-3.0.4.tgz

Você instalou todos os softwares necessários com sucesso no seu servidor e máquina CA. Continue para configurar as variáveis usadas pelo EasyRSA e configurar um diretório CA, do qual você irá gerar as chaves e certificados necessários para que seu servidor e clientes acessem o VPN.

Passo 2 — Configurando as variáveis do EasyRSA e construindo a CA

O EasyRSA vem instalado com um arquivo de configuração que você pode editar para definir uma série de variáveis para sua CA.

Na sua máquina CA, navegue até o diretório do EasyRSA:

  • cd ~/EasyRSA-3.0.4/

Dentro deste diretório há um arquivo chamado vars.example. Faça uma cópia deste arquivo, e dê à cópia o nome de vars sem uma extensão de arquivo:

  • cp vars.example vars

Abra este novo arquivo com seu editor de texto preferido:

  • nano vars

Encontre as configurações que definam padrões de campo para novos certificados. Eles se parecerão com isso:

~/EasyRSA-3.0.4/vars
. . .

#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

Descomente essas linhas e atualize os valores destacados para os que preferir, mas não os deixe em branco:

~/EasyRSA-3.0.4/vars
. . .

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"

. . .

Quando você terminar, salve e feche o arquivo.

Dentro do diretório do EasyRSA está um script chamado easyrsa que é chamado para realizar uma variedade de tarefas envolvidas com a construção e gerenciamento da CA. Execute este script com a opção init-pki para iniciar a infraestrutura de chaves pública no servidor CA:

  • ./easyrsa init-pki
Output
. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki

Depois disso, chame o script easyrsa novamente, seguindo-o com a opção build-ca. Isso irá construir a CA e criar dois arquivos importantes — ca.crt e ca.key — que constituem os lados público e privado de um certificado SSL.

  • O ca.crt é o arquivo de certificado público CA que, no contexto do OpenVPN, é usado pelo servidor e pelo cliente para informar um ao outro que fazem parte da mesma rede de confiança e não são alguém executando um ataque man-in-the-middle. Por essa razão, seu servidor e todos os seus clientes precisarão de uma cópia do arquivo ca.crt.
  • A ca.key é a chave privada que a máquina CA usa para assinar chaves e certificados para servidores e clientes. Se um agressor ganha acesso à sua CA e, por sua vez, seu arquivo ca.key, ele poderá assinar pedidos de certificado e obter acesso ao seu VPN, impedindo sua segurança. Esse é o motivo pelo qual seu arquivo ca.key deve estar apenas na sua máquina CA e que, idealmente, sua máquina CA deve ser mantida off-line quando não estiver assinando pedidos de certificado como uma medida de segurança extra.

Se você não quiser ser solicitado a colocar uma senha sempre que interagir com sua CA, é possível executar o comando build-ca com a opção nopass, desta maneira:

  • ./easyrsa build-ca nopass

No resultado, será solicitado que você confirme o nome comum para sua CA:

Output
. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

O nome comum é o nome usado para se referir a esta máquina no contexto da autoridade de certificados. Você pode digitar qualquer string de caracteres para o nome comum da CA mas, para simplificarmos as coisas, pressione ENTER para aceitar o nome padrão.

Com isso, sua CA está funcionando e está pronta para iniciar a assinatura de pedidos de certificados.

Passo 3 — Criando o certificado de servidor, chaves e arquivos de criptografia

Agora que tem uma CA pronta para uso, você pode gerar uma chave privada e um pedido de certificado do seu servidor e então transferir o pedido para sua CA ser assinada, criando o certificado necessário. Você também é livre para criar alguns arquivos adicionais usados durante o processo de criptografia.

Inicie navegando até o diretório do EasyRSA no seu servidor OpenVPN:

  • cd EasyRSA-3.0.4/

De lá, execute o script easyrsa com a opção init-pki. Embora você já tenha executado este comando na máquina CA, é necessário executá-lo aqui, pois seu servidor e CA terão diretórios PKI separados:

  • ./easyrsa init-pki

Então, chame o script easyrsa novamente, desta vez com a opção gen-req seguida de um nome comum para a máquina. Novamente, pode ser o nome que você quiser, mas escolher um nome mais descritivo pode ser útil. Ao longo deste tutorial, o nome comum do OpenVPN será simplesmente “server”. Certifique-se de incluir também a opção nopass. Se não fizer isso, o arquivo de pedido será protegido por senha, o que pode levar a problemas de permissão mais tarde:

Nota: Se escolher um nome que não seja “server”, você terá que ajustar algumas das instruções abaixo. Por exemplo, quando copiar os arquivos gerados para o diretório /etc/openvpn, terá que substituir os nomes corretos. Você também terá que modificar o arquivo /etc/openvpn/server.conf mais tarde para que aponte aos arquivos .crt e .key corretos.

  • ./easyrsa gen-req server nopass

Isso criará uma chave privada para o servidor e um arquivo de pedido de certificado chamado server.req. Copie a chave do servidor para o diretório /etc/openvpn/:

  • sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/

Usando um método seguro (como o SCP, no nosso exemplo abaixo), transfira o arquivo server.req para sua máquina CA:

  • scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp

Em seguida, na sua máquina CA, navegue até o diretório do EasyRSA:

  • cd EasyRSA-3.0.4/

Utilizando o script easyrsa mais uma vez, importe o arquivo server.req seguindo o caminho do arquivo com seu nome comum:

  • ./easyrsa import-req /tmp/server.req server

Então, assine o pedido executando o script easyrsa com a opção sign-req, seguida do tipo de pedido e do nome comum. O tipo de pedido pode ser client ou server, então para o pedido de certificado do servidor OpenVPN, certifique-se de usar o tipo de pedido do server:

  • ./easyrsa sign-req server server

No resultado, você será solicitado a verificar se o pedido vem de uma fonte confiável. Digite yes, então pressione ENTER para confirmar:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Caso tenha criptografado sua chave CA, você será solicitado a colocar sua senha neste ponto.

Em seguida, transfira o certificado assinado de volta para seu servidor VPN usando um método seguro:

  • scp pki/issued/server.crt sammy@your_server_ip:/tmp

Antes de sair da sua máquina CA, transfira também o arquivo ca.crt para seu servidor:

  • scp pki/ca.crt sammy@your_server_ip:/tmp

Em seguida, logue novamente no seu servidor OpenVPN e copie os arquivos server.crt e ca.crt para o seu diretório /etc/openvpn/:

  • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Então, navegue até seu diretório do EasyRSA:

  • cd EasyRSA-3.0.4/

Dali, crie uma chave Diffie-Hellman forte para usar durante a troca de chaves, digitando:

  • ./easyrsa gen-dh

Isso pode levar alguns minutos para completar. Assim que terminar, gere uma assinatura HMAC para reforçar as capacidades de verificação da integridade TLS do servidor:

  • openvpn --genkey --secret ta.key

Quando o comando terminar, copie os dois novos arquivos para seu diretório /etc/openvpn/:

  • sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
  • sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

Com isso, foram gerados todos os arquivos de certificado e de chave necessários pelo seu servidor. Você está pronto para criar os certificados e chaves correspondentes que sua máquina de cliente usará para acessar seu servidor OpenVPN.

Passo 4 — Gerando um certificado de cliente e um par de chaves

Embora você possa gerar uma chave privada e um pedido de certificado na sua máquina de cliente e então enviá-la para a CA para ser assinada, este guia define um processo para gerar o pedido de certificado no servidor. O benefício disso é que podemos criar um script que irá gerar automaticamente arquivos de configuração do cliente que contêm todas as chaves e certificados necessários. Isso permite que você evite ter que transferir chaves, certificados e arquivos de configuração para clientes e simplifica o processo de conexão ao VPN.

Vamos gerar um único par, chave de cliente e certificado, para este guia. Se tiver mais de um cliente, você pode repetir este processo para cada um deles. Note, porém, que você precisará passar um valor de nome único ao script para cada cliente. Ao longo deste tutorial, o primeiro par de certificado/chave é chamado de client1.

Inicie criando uma estrutura de diretório dentro do seu diretório home para armazenar os arquivos de certificado de cliente e de chave:

  • mkdir -p ~/client-configs/keys

Como irá armazenar os pares de certificado/chave e arquivos de configuração dos seus clientes neste diretório, você deve bloquear suas permissões agora, como uma medida de segurança:

  • chmod -R 700 ~/client-configs

Em seguida, navegue até o diretório do EasyRSA e execute o script easyrsa com as opções gen-req e nopass, junto com o nome comum para o cliente:

  • cd ~/EasyRSA-3.0.4/
  • ./easyrsa gen-req client1 nopass

Pressione ENTER para confirmar o nome comum. Então, copie o arquivo client1.key para o diretório /client-configs/keys/ que você criou mais cedo:

  • cp pki/private/client1.key ~/client-configs/keys/

Em seguida, transfira o arquivo client1.req para sua máquina CA usando um método seguro:

  • scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

Faça login na sua máquina CA, navegue até o diretório do EasyRSA, e importe o pedido de certificado:

  • ssh sammy@your_CA_ip
  • cd EasyRSA-3.0.4/
  • ./easyrsa import-req /tmp/client1.req client1

Então, assine o pedido como fez para o servidor no passo anterior. Desta vez, certifique-se de especificar o tipo de pedido do client:

  • ./easyrsa sign-req client client1

No prompt, digite yes para confirmar que você pretende assinar o pedido de certificado e que ele veio de uma fonte confiável:

Output
Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

Novamente, caso tenha criptografado sua chave CA, você será solicitado a colocar sua senha aqui.

Isso criará um arquivo de certificado de cliente chamado client1.crt. Transfira este arquivo de volta para o servidor:

  • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Use o SSH de volta no seu servidor OpenVPN e copie o certificado de cliente para o diretório /client-configs/keys:

  • cp /tmp/client1.crt ~/client-configs/keys/

Em seguida, copie também os arquivos ca.crt e ta.key para o diretório /client-configs/keys/:

  • cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
  • sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Com isso, todos os certificados e chaves do seu servidor e do seu cliente foram gerados e estão armazenados nos diretórios apropriados do seu servidor. Ainda existem algumas ações que precisam ser feitas com esses arquivos, mas elas aparecerão em um passo mais adiante. Por enquanto, você pode seguir em frente para configurar o OpenVPN no seu servidor.

Passo 5 — Configurando o serviço OpenVPN

Agora que tanto os certificados quanto as chaves do seu cliente e do seu servidor foram gerados, você pode começar a configurar o serviço OpenVPN para usar essas credenciais.

Inicie copiando uma amostra de um arquivo de configuração do OpenVPN para o diretório de configuração e então extraia-o para usá-lo como uma base para sua configuração:

  • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
  • sudo gzip -d /etc/openvpn/server.conf.gz

Abra a configuração do servidor no seu editor de texto preferido:

  • sudo nano /etc/openvpn/server.conf

Encontre a seção HMAC procurando a diretriz tls-auth. Esta linha já deve estar descomentada, mas se não estiver, remova o “;” para descomentá-la:

/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret

Em seguida, encontre a seção sobre cifras criptográficas, procurando as linhas comentadas cipher. A cifra AES-256-CBC oferece um bom nível de criptografia e é bastante suportada. Novamente, esta linha já deve estar descomentada, mas se não estiver remova o “;” anterior a ela:

/etc/openvpn/server.conf
cipher AES-256-CBC

Abaixo disso, adicione uma diretriz auth para selecionar o algoritmo message digest HMAC. Para fazer isso, o SHA256 é uma boa escolha:

/etc/openvpn/server.conf
auth SHA256

Em seguida, encontre a linha que contém uma diretriz dh que define os parâmetros Diffie-Hellman. Devido a algumas alterações recentes feitas no EasyRSA, o nome do arquivo para a chave Diffie-Hellman pode ser diferente do que está listado no arquivo de configuração do servidor exemplo. Se necessário, altere o nome do arquivo listado aqui removendo o 2048 para que ele se alinhe com a chave que você gerou no passo anterior:

/etc/openvpn/server.conf
dh dh.pem

Por fim, encontre as configurações user e group e remova os “;” no começo de cada para descomentar essas linhas:

/etc/openvpn/server.conf
user nobody
group nogroup

As alterações que você fez no arquivo exemplo server.conf até este ponto são necessárias para que o OpenVPN funcione. As alterações descritas abaixo são opcionais, embora também sejam necessárias para muitos casos de uso comum.

(Opcional) Forçar alterações no DNS para redirecionar todo o tráfego através do VPN

As configurações acima criarão a conexão VPN entre as duas máquinas, mas não forçarão nenhuma conexão a usar o túnel. Se quiser usar o VPN para rotear todo o seu tráfego, você provavelmente irá querer forçar as configurações DNS para os computadores do cliente.

Há algumas diretrizes no arquivo server.conf que você deve alterar para habilitar esta funcionalidade. Encontre a seção redirect-gateway e remova o ponto e vírgula “;” do começo da linha redirect-gateway para descomentá-la:

/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"

Logo abaixo, encontre a seção dhcp-option. Novamente, remova o “;” da frente de ambas as linhas para descomentá-las:

/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Isso ajudará os clientes a reconfigurar suas configurações DNS para usar o túnel VPN como gateway padrão.

(Opcional) Ajustar a porta e o protocolo

Por padrão, o servidor OpenVPN usa a porta 1194 e o protocolo UDP para aceitar conexões de clientes. Se precisar usar uma porta diferente, devido a ambientes de rede restritivos em que seus clientes possam estar, você pode alterar a opção port. Se não estiver hospedando conteúdo Web no seu servidor OpenVPN, a porta 443 é uma escolha popular, uma vez que ela é geralmente permitida em de regras de firewall.

/etc/openvpn/server.conf
# Optional!
port 443

Geralmente, o protocolo também é restrito a essa porta. Se for, mude o proto de UDP para TCP:

/etc/openvpn/server.conf
# Optional!
proto tcp

Se você de fato mudar o protocolo para o TCP, precisará alterar o valor explicit-exit-notify da diretriz de 1 para 0, já que essa diretriz é usada apenas pelo UDP. Não fazer isso ao usar o TCP irá causar erros quando você iniciar o serviço OpenVPN:

/etc/openvpn/server.conf
# Optional!
explicit-exit-notify 0

Se não tiver necessidade de usar uma porta e protocolos diferentes, é melhor deixar essas duas opções no seu padrão.

(Opcional) Apontar para credenciais não padrão

Se você selecionou um nome diferente durante o comando ./build-key-server mais cedo, modifique as linhas cert e key que você vê para apontar para os arquivos .crt e .key apropriados. Se você usou o nome padrão, “server”, isso já está configurado corretamente:

/etc/openvpn/server.conf
cert server.crt
key server.key

Quando você terminar, salve e feche o arquivo.

Após passar e fazer as alterações na configuração OpenVPN do seu servidor que são necessárias para seu caso de uso específico, você pode começar a fazer algumas alterações na rede do seu servidor.

Passo 6 — Ajustando a configuração da rede do servidor

Existem alguns aspectos da configuração de rede do servidor que precisam ser ajustados para que o OpenVPN possa rotear corretamente o tráfego pelo VPN. O primeiro desses é o encaminhamento de IP, um método para determinar onde o tráfego de IP deve ser roteado. Isso é essencial para a funcionalidade VPN que seu servidor irá fornecer.

Ajuste a configuração padrão de encaminhamento de IP do seu servidor, modificando o arquivo /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Dentro, procure a linha comentada que define o net.ipv4.ip_forward. Remova o caractere “#” do começo da linha para descomentar esta configuração:

/etc/sysctl.conf
net.ipv4.ip_forward=1

Salve e feche o arquivo quando você terminar.

Para ler o arquivo e ajustar os valores para a sessão atual, digite:

  • sudo sysctl -p
Output
net.ipv4.ip_forward = 1

Se seguiu o guia de configuração inicial do servidor Ubuntu 18.04 listado nos pré-requisitos, você deve ter um firewall UFW em funcionamento. Independentemente de você usar o firewall para bloquear tráfego indesejado (o que quase sempre se deve fazer), para este guia você precisa de um firewall para manipular uma parte do tráfego que vem para o servidor. Algumas das regras do firewall devem ser modificadas para habilitar o mascaramento, que é um conceito iptables que fornece tradução de endereço de rede (NAT) dinâmica e instantânea para rotear conexões com clientes de maneira correta.

Antes de abrir o arquivo de configuração do firewall para adicionar as regras de mascaramento, você deve primeiro encontrar a interface de rede pública da sua máquina. Para fazer isso, digite:

  • ip route | grep default

Sua interface pública é a string encontrada dentro do resultado desse comando que vem após a palavra “dev”. Por exemplo, este resultado mostra a interface chamada wlp11s0, que está destacada abaixo:

Output
default via 203.0.113.1 dev wlp11s0 proto static

Quando tiver a interface associada à sua rota padrão, abra o arquivo /etc/ufw/before.rules para adicionar as configurações relevantes:

  • sudo nano /etc/ufw/before.rules

As regras do UFW são normalmente adicionadas usando o comando ufw. As regras listadas no arquivo before.rules, em contrapartida, são lidas e colocadas em funcionamento antes das regras convencionais do UFW serem carregadas. Em direção ao topo do arquivo, adicione as linhas destacadas abaixo. Isso irá definir a política padrão para a cadeia POSTROUTING na tabela nat e mascarar todo o tráfego vindo do VPN. Lembre-se de substituir o wlp11s0 na linha -A POSTROUTING abaixo pela interface que você encontrou no comando acima:

/etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Salve e feche o arquivo quando você terminar.

Em seguida, você também precisa dizer ao UFW para permitir os pacotes redirecionados por padrão. Para fazer isso, abra o arquivo /etc/default/ufw:

  • sudo nano /etc/default/ufw

Dentro, encontre a diretriz DEFAULT_FORWARD_POLICY e altere o valor de DROP para ACCEPT:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Salve e feche o arquivo quando você terminar.

Em seguida, ajuste o firewall em si para permitir o tráfego para o OpenVPN. Caso não tenha alterado a porta e o protocolo no arquivo /etc/openvpn/server.conf, você precisará abrir o tráfego UDP para a porta 1194. Se você modificou a porta e/ou o protocolo, substitua os valores que selecionou aqui.

Caso tenha esquecido de adicionar a porta SSH ao seguir o tutorial pré-requisito, adicione-a também aqui:

  • sudo ufw allow 1194/udp
  • sudo ufw allow OpenSSH

Após adicionar essas regras, desative e reative o UFW para reiniciá-lo e carregar as alterações de todos os arquivos que você modificou:

  • sudo ufw disable
  • sudo ufw enable

Seu servidor agora está configurado para lidar corretamente com o tráfego OpenVPN.

Passo 7 — Inicializando e ativando o serviço OpenVPN

Você finalmente está pronto para inicializar o serviço OpenVPN no seu servidor. Isso é feito usando o utilitário systemctl do systemd.

Inicie o servidor OpenVPN especificando o nome do seu arquivo de configuração como uma variável de instância após o nome do arquivo de unidade systemd. O arquivo de configuração para o seu servidor chama-se /etc/openvpn/server.conf, então adicione @server ao final do seu arquivo de unidade ao chamá-lo:

  • sudo systemctl start openvpn@server

Verifique novamente se o serviço foi iniciado com sucesso digitando:

  • sudo systemctl status openvpn@server

Se tudo correu bem, seu resultado se parecerá com este:

Output
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

Você também pode verificar se a interface OpenVPN tun0 está disponível digitando:

  • ip addr show tun0

Isso dará como resultado uma interface configurada:

Output
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

Após inicializar o serviço, habilite-o para que ele seja iniciado automaticamente no boot:

  • sudo systemctl enable openvpn@server

Seu serviço OpenVPN agora está funcionando. Entretanto, antes de começar a usá-lo, você deve primeiro criar um arquivo de configuração para a máquina do cliente. Este tutorial já mostrou como criar pares de certificado/key para clientes, e no próximo passo vamos demonstrar como criar uma infraestrutura que irá gerar arquivos de configuração do cliente facilmente.

Passo 8 — Criando a infraestrutura de configuração de clientes

Criar arquivos de configuração para os clientes OpenVPN pode ser um desafio, já que cada cliente deve ter sua própria configuração e cada um deve se alinhar com as configurações descritas no arquivo de configuração do servidor. Ao invés de escrever um único arquivo de configuração que só pode ser usado para um cliente, este passo define um processo para a construção de uma infraestrutura de configuração de clientes que você pode usar para gerar arquivos de configuração imediatamente. Você criará primeiro um arquivo de configuração “base” e então construirá um script que permitirá que você gere arquivos únicos de configuração de clientes, certificados e chaves conforme necessário.

Comece criando um novo diretório onde você irá armazenar arquivos de configuração de clientes no diretório client-configs que você criou mais cedo:

  • mkdir -p ~/client-configs/files

Em seguida, copie um arquivo de configuração de cliente exemplo para o diretório client-configs para usá-lo como sua configuração base:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Abra este novo arquivo no seu editor de texto:

  • nano ~/client-configs/base.conf

Dentro, localize a diretriz remote. Isso aponta o cliente para seu endereço de servidor OpenVPN — o endereço IP público do seu servidor OpenVPN. Caso tenha decidido alterar a porta em que o servidor OpenVPN está escutando, também será preciso alterar a 1194 para a porta que você selecionou:

~/client-configs/base.conf
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

Certifique-se de que o protocolo corresponda ao valor que você está usando na configuração do servidor:

~/client-configs/base.conf
proto udp

Em seguida, descomente as diretrizes user e group removendo o “;” no começo de cada linha:

~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Encontre as diretrizes que definem ca, cert e key. Comente essas diretrizes, já que você adicionará os certificados e chaves dentro do arquivo em si em breve:

~/client-configs/base.conf
# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Do mesmo modo, comente a diretriz tls-auth, já que você adicionará a ta.key diretamente no arquivo de configuração do cliente:

~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Espelhe as configurações cipher e auth que você definiu no arquivo /etc/openvpn/server.conf:

~/client-configs/base.conf
cipher AES-256-CBC
auth SHA256

Em seguida, adicione a diretriz key-direction em algum lugar no arquivo. Você deve definir isso em “1” para que o VPN funcione corretamente na máquina do cliente:

~/client-configs/base.conf
key-direction 1

Por fim, adicione algumas linhas comentadas. Embora possa incluir essas diretrizes em todos os arquivos de configuração de clientes, você precisa habilitá-las para clientes Linux que acompanham um arquivo /etc/openvpn/update-resolv-conf. Este script usa o utilitário resolvconf para atualizar as informações DNS para clientes Linux.

~/client-configs/base.conf
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Se seu cliente estiver usando o Linux e tiver um arquivo /etc/openvpn/update-resolv-conf, descomente essas linhas do arquivo de configuração do cliente após terem sido geradas.

Salve e feche o arquivo quando você terminar.

Em seguida, crie um script simples que irá compilar sua configuração base com os arquivos de certificado, chave, e criptografia relevantes e então colocar a configuração gerada no diretório ~/client-configs/files. Abra um novo arquivo chamado make_config.sh dentro do diretório ~/client-configs:

  • nano ~/client-configs/make_config.sh

Dentro, adicione o seguinte conteúdo:

~/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Salve e feche o arquivo quando você terminar.

Antes de seguir em frente, certifique-se de marcar este arquivo como executável digitando:

  • chmod 700 ~/client-configs/make_config.sh

Este script fará uma cópia do arquivo base.conf que você fez, coletará todos os arquivos de certificado e chave que você criou para seu cliente, extrairá os conteúdos deles, adicionará esse conteúdo à cópia do arquivo de configuração base e exportará tudo isso para um novo arquivo de configuração de clientes. Isso significa que, ao invés de ter que gerenciar os arquivos de configuração do cliente, certificado e chave separadamente, todas as informações necessárias são armazenadas em um só lugar. O benefício disso é que, caso tenha necessidade de adicionar um cliente no futuro, você pode executar este script para criar rapidamente o arquivo de configuração e garantir que todas as informações importantes são armazenadas em uma única localização de fácil acesso.

Note que, sempre que adicionar um novo cliente, você precisará gerar novas chaves e certificados para ele antes de executar este script e gerar seu arquivo de configuração. Você poderá praticar um pouco a utilização deste script no próximo passo.

Passo 9 — Gerando as configurações de clientes

Se seguiu com o guia, você criou um certificado e chave de cliente nomeados client1.crt e client1.key, respectivamente, no passo 4. É possível gerar um arquivo de configuração para essas credenciais entrando no seu diretório ~/client-configs e executando o script que você fez no final do passo anterior:

  • cd ~/client-configs
  • sudo ./make_config.sh client1

Isso criará um arquivo chamado client1.ovpn no seu diretório ~/client-configs/files:

  • ls ~/client-configs/files
Output
client1.ovpn

Você precisa transferir esse arquivo para o dispositivo que planeja usar como cliente. Por exemplo, este poderia ser seu computador local ou um dispositivo móvel.

Embora os aplicativos exatos usados para realizar essa transferência dependerão do sistema operacional do seu dispositivo e de suas preferências pessoais, um método confiável e seguro é usar o SFTP (protocolo SSH de transferência de arquivos) ou SCP (cópia segura) no backend. Isso transportará os arquivos de autenticação do VPN do seu cliente através de uma conexão criptografada.

Aqui está um comando SFTP exemplo usando o exemplo client1.ovpn que você pode executar do seu computador local (macOS ou Linux). Ele coloca o arquivo .ovpn no seu diretório home:

  • sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

Aqui estão diversas ferramentas e tutoriais para transferir arquivos com segurança do servidor para um computador local:

Passo 10 — Instalando a configuração do cliente

Esta seção aborda como instalar um perfil VPN de um cliente no Windows, macOS, Linux, iOS e Android. Nenhuma dessas instruções de cliente dependem uma da outra, então sinta-se a vontade para pular para alguma que seja aplicável ao seu dispositivo.

A conexão OpenVPN terá o mesmo nome que você chamou o arquivo .ovpn. No que diz respeito a este tutorial, isso significa que a conexão se chama client1.ovpn, de acordo com o primeiro arquivo de cliente que você gerou.

Windows

Instalando

Faça download do aplicativo do cliente OpenVPN para o Windows da página de download do OpenVPN. Escolha a versão do instalador apropriada para a sua versão do Windows.

Nota: O OpenVPN precisa de privilégios administrativos para ser instalado.

Após instalar o OpenVPN, copie o arquivo .ovpn para:

C:\Program Files\OpenVPN\config

Quando iniciar o OpenVPN, ele verá o perfil e o disponibilizará automaticamente.

Você deve executar o OpenVPN como administrador sempre que ele é usado, mesmo por contas administrativas. Para fazer isso sem precisar clicar com o botão direito e selecionar Executar como administrador sempre que você usar o VPN, é necessário predefinir isso de uma conta administrativa. Isso significa que os usuários padrão também precisam digitar a senha do administrador para usar o OpenVPN. Por outro lado, os usuários padrão não conseguem se conectar devidamente ao servidor a não ser que o aplicativo OpenVPN no cliente tenha direitos de administrador, então são necessários privilégios elevados.

Para definir que o aplicativo OpenVPN sempre execute como administrador, clique com o botão direito no seu atalho e vá em Propriedades. No final da aba Compatibilidade, clique no botão para Mudar as configurações para todos os usuários. Na nova janela, marque Executar este programa como administrador.

Conectando

Cada vez que iniciar a OpenVPN GUI, o Windows irá perguntar se você quer permitir que o programa faça alterações no seu computador. Clique em Yes. Iniciar o aplicativo do cliente OpenVPN coloca apenas o applet na bandeja do sistema para que você possa conectar e desconectar o VPN conforme necessário; isso não cria de fato a conexão VPN.

Assim que o OpenVPN iniciar, inicie uma conexão entrando no applet da bandeja do sistema e clicando com o botão direito no ícone do applet do OpenVPN. Isso abre o menu de contexto. Selecione client1 no topo do menu (esse é seu perfil client1.ovpn) e escolha Connect.

Uma janela de status abrirá mostrando o registro de saída enquanto a conexão estiver estabelecida, e uma mensagem aparecerá assim que o cliente estiver conectado.

Desconecte-se do VPN da mesma maneira: Vá até o applet da bandeja do sistema, clique com o botão direito no ícone do applet do OpenVPN, selecione o perfil do cliente e clique em Disconnect.

macOS

Instalando

O Tunnelblick é um cliente OpenVPN gratuito e de código aberto para o macOS. Você pode baixar a imagem de disco mais recente da página de downloads do Tunnelblick. Clique duas vezes no arquivo baixado .dmg e siga os prompts para instalar.

Ao final do processo de instalação, o Tunnelblick irá perguntar se você tem algum arquivo de configuração. Responda I have configuration files e deixe o Tunnelblick terminar. Abra uma janela do Finder e clique duas vezes no client1.ovpn. O Tunnelblick instalará o perfil do cliente. São necessário privilégios administrativos.

Conectando

Inicie o Tunnelblick clicando duas vezes no ícone do Tunnelblick na pasta Applications. Assim que o Tunnelblick iniciar, haverá um ícone do Tunnelblick na barra do menu no canto superior direito da tela para controle de conexões. Clique no ícone e então no item do menu Connect client1 para iniciar a conexão VPN.

Linux

Instalando

Se estiver usando o Linux, existe uma variedade de ferramentas que você pode usar dependendo da sua distribuição. Seu ambiente do desktop ou gerenciador de janelas também pode incluir serviços de conexão.

Entretanto, o modo mais universal de se conectar é apenas usar o software OpenVPN.

No Ubuntu ou Debian, você pode instalá-lo assim como fez no servidor digitando:

  • sudo apt update
  • sudo apt install openvpn

No CentOS, você pode habilitar os repositórios EPEL e então instalá-lo digitando:

  • sudo yum install epel-release
  • sudo yum install openvpn

Configurando

Verifique se sua distribuição inclui um script /etc/openvpn/update-resolv-conf:

  • ls /etc/openvpn
Output
update-resolv-conf

Em seguida, edite o arquivo de configuração do cliente OpenVPN que você transferiu:

  • nano client1.ovpn

Se conseguir encontrar um arquivo update-resolv-conf, descomente as três linhas que você adicionou para ajustar as configurações DNS:

client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Se estiver usando o CentOS, altere a diretriz group de nogroup para nobody de forma a corresponder aos grupos disponíveis da distribuição:

client1.ovpn
group nobody

Salve e feche o arquivo.

Agora, você pode se conectar ao VPN apenas apontando o comando openvpn para o arquivo de configuração do cliente:

  • sudo openvpn --config client1.ovpn

Isso deve conectar você ao seu VPN.

iOS

Instalando

A partir da App Store do iTunes, procure e instale o OpenVPN Connect, o aplicativo oficial do cliente iOS OpenVPN. Para transferir sua configuração do cliente iOS para o dispositivo, conecte-o diretamente a um computador.

O processo de completar a transferência com o iTunes é descrito aqui. Abra o iTunes no computador e clique em iPhone > apps. Role até o final da seção File Sharing e clique no app OpenVPN. A janela em branco à direita, OpenVPN Documents, serve para compartilhar arquivos. Arraste o arquivo .ovpn para a janela OpenVPN Documents.

iTunes showing the VPN profile ready to load on the iPhone

Agora, inicie o app OpenVPN no iPhone. Você receberá uma notificação de que um novo perfil está pronto para ser importado. Clique no sinal mais em verde para importá-lo.

The OpenVPN iOS app showing new profile ready to import

Conectando

O OpenVPN agora está pronto para ser usado com o novo perfil. Inicie a conexão deslizando o botão Connect para a posição On. Desconecte deslizando o mesmo botão para Off.

Nota: O switch VPN em Settings não pode ser usado para se conectar ao VPN. Se tentar fazer isso, receberá uma notificação para se conectar apenas usando o app OpenVPN.

The OpenVPN iOS app connected to the VPN

Android

Instalando

Abra a Google Play Store. Procure e instale o Android OpenVPN Connect, o aplicativo oficial do cliente Android OpenVPN.

Você pode transferir o perfil .ovpn conectando o dispositivo Android ao seu computador por USB e copiando o arquivo. Como alternativa, caso tenha um leitor de cartões SD, você pode remover o cartão SD do dispositivo, copiar o perfil nele e então inserir o cartão de volta no dispositivo Android.

Inicie o app OpenVPN e clique no menu para importar o perfil.

The OpenVPN Android app profile import menu selection

Então navegue até a localização do perfil salvo (a captura de tela usa /sdcard/Download/) e selecione o arquivo. O app criará uma nota de que o perfil foi importado.

The OpenVPN Android app selecting VPN profile to import

Conectando

Para se conectar, basta apertar o botão Connect. Você será questionado se confia no aplicativo OpenVPN. Escolha OK para iniciar a conexão. Para se desconectar do VPN, volte para o app OpenVPN e escolha Disconnect.

The OpenVPN Android app ready to connect to the VPN

Passo 11 — Testando sua conexão VPN (opcional)

Nota: Este método utilizado no teste da sua conexão VPN funcionará apenas se você optou por rotear todo o seu tráfego através do VPN no Passo 5.

Assim que tudo estiver instalado, um simples visto confirma que tudo está funcionando corretamente. Sem ter uma conexão VPN habilitada, abra um navegador e vá para DNSLeakTest.

O site irá retornar o endereço IP atribuído pelo seu provedor de serviço de Internet e como você se mostra para o resto do mundo. Para verificar suas configurações DNS através do mesmo site, clique em Extended Test e ele dirá a você quais servidores DNS você está usando.

Agora, conecte o cliente OpenVPN ao seu VPN do Droplet e atualize o navegador. Um endereço IP completamente diferente (daquele do seu servidor VPN) deve aparecer agora e é assim que você aparece para o mundo. Novamente, o Extended Test do DNSLeakTest irá verificar suas configurações DNS e confirmar que você agora está usando os resolvers DNS definidos pelo seu VPN.

Passo 12 — Revogando certificados de clientes

De vez em quando, você pode precisar revogar um certificado de cliente para impedir o acesso adicional ao servidor OpenVPN.

Para fazer isso, navegue até o diretório EasyRSA na sua máquina CA:

  • cd EasyRSA-3.0.4/

Em seguida, execute o script easyrsa com a opção revoke, seguida do nome do cliente que você deseja revogar:

  • ./easyrsa revoke client2

Isso irá pedir que você confirme a revogação digitando yes:

Output
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client2 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes

Após confirmar a ação, a CA irá revogar completamente o certificado do cliente. Entretanto, seu servidor OpenVPN ainda não tem como verificar se os certificados de clientes foram revogados e se o cliente ainda terá acesso ao VPN. Para corrigir isso, crie uma lista de revogação de certificados (CRL) na sua máquina CA:

  • ./easyrsa gen-crl

Isso irá gerar um arquivo chamado crl.pem. Transfira com segurança este arquivo para seu servidor OpenVPN:

  • scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

No seu servidor OpenVPN, copie este arquivo para seu diretório /etc/openvpn/:

  • sudo cp /tmp/crl.pem /etc/openvpn

Em seguida, abra o arquivo de configuração do servidor OpenVPN:

  • sudo nano /etc/openvpn/server.conf

No final do arquivo, adicione a opção crl-verify que irá instruir o servidor OpenVPN para verificar a lista de revogação de certificados que criamos sempre que uma tentativa de conexão for feita:

/etc/openvpn/server.conf
crl-verify crl.pem

Salve e feche o arquivo.

Por fim, reinicie o OpenVPN para implementar a revogação do certificado:

  • sudo systemctl restart openvpn@server

O cliente já não deve conseguir se conectar com sucesso ao servidor usando a credencial antiga.

Para revogar outros clientes, siga este processo:

  1. Revogue o certificado com o comando ./easyrsa revoke client_name
  2. Gere um novo CRL
  3. Transfira o novo arquivo crl.pem para seu servidor OpenVPN e copie-o para o diretório /etc/openvpn para sobrepor a lista antiga.
  4. Reinicie o serviço OpenVPN.

Você pode usar este processo para revogar quaisquer certificados que você tenha emitido anteriormente para seu servidor.

Conclusão

Agora, você está navegando na Internet com segurança protegendo sua identidade, local e tráfego de bisbilhoteiros e censuradores.

Para configurar mais clientes, você só precisa seguir os passos 4 e 9-11 para cada dispositivo adicional. Para revogar o acesso a clientes, siga o passo 12.

Creative Commons License