Introdução
Gostaria de acessar a Internet de forma segura a partir do seu smartphone ou laptop quando se conecta a uma rede não confiável (por exemplo, Wi-Fi em um hotel ou cafeteria)? Felizmente, existe uma maneira de realizar o seu desejo. Você pode se conectar de forma segura a uma rede não confiável como se estivesse em uma rede privada usando uma Rede Privada Virtual (VPN).
O que é uma VPN?
VPN significa Rede Privada Virtual (Virtual Private Network). Ela oferece a possibilidade de abrir um túnel seguro para um servidor confiável. Todas as solicitações são então enviadas e recebidas por meio deste servidor. A vantagem é proteger o seu acesso e transações ao usar redes públicas, como Wi-Fi gratuito em um hotel.
Através da VPN, todos os dados são criptografados e processados pelo servidor. Dispositivos intermediários, como roteadores de terceiros e afins, não têm como redirecionar o tráfego para destinos indesejados. Além disso, uma vez estabelecida a conexão com sucesso, você passa a fazer parte da rede do servidor. Outros servidores, computadores ou dispositivos, como impressoras, que normalmente só estariam acessíveis na rede local do servidor, agora também podem ser alcançados através do túnel VPN. No entanto, como nem todos os dados precisam ser enviados por um túnel criptografado, é possível configurar o cliente VPN para que apenas uma parte definida das solicitações seja enviada pelo túnel VPN. O restante do tráfego é processado normalmente pela Internet.
Neste tutorial, vamos guiar você pelos passos de configuração de um servidor OpenVPN no Ubuntu 18.04.
Requisitos
Você precisa ter acesso a um servidor Ubuntu 18.04 para hospedar o seu OpenVPN serviço para concluir este tutorial. Antes de iniciar este guia, você também precisa configurar um usuário não-root com permissões sudo. Você pode instalar facilmente o seu servidor seguindo o nosso tutorial sobre como configurar um servidor Ubuntu.
Além disso, você precisará de um computador separado para funcionar como uma autoridade de certificação (CA). Tecnicamente, você pode usar o seu servidor OpenVPN ou o seu computador local como uma autoridade de certificação. No entanto, não recomendamos isso, pois exporá sua VPN a falhas de segurança. De acordo com a documentação oficial do OpenVPN, você deve colocar a autoridade de certificação em um computador separado dedicado a importar e assinar solicitações de certificado. Portanto, assumimos que sua autoridade de certificação está em um servidor Ubuntu 18.04 separado que também possui um usuário não-root com permissões sudo e um firewall básico. Ao longo deste guia, todas as etapas de instalação e configuração serão as mais simples possíveis para cada uma das instalações. Você também pode dar uma olhada no nosso tutorial sobre como configurar um servidor Open VPN no Docker.
Passo 1 – Instalar o OpenVPN e o EasyRSA
Primeiro, atualize o índice de pacotes do seu servidor VPN e instale o OpenVPN. Você pode instalar o OpenVPN usando o apt porque ele está disponível nos repositórios padrão do Ubuntu:
|
1 2 |
sudo apt update sudo apt install openvpn |
Passo 2: Criar uma autoridade de certificação
Crie uma autoridade de certificação (CA) simples para emitir certificados confiáveis para o servidor OpenVPN. Para fazer isso, baixe a versão mais recente do EasyRSA tanto na sua máquina CA quanto no servidor OpenVPN usando o wget. Para obter a versão mais recente, acesse a página de Releases do projeto oficial do EasyRSA no GitHub, copie o link de download para o arquivo que termina em .tgz e cole-o no seguinte comando:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Em seguida, extraia o arquivo tarball:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

Neste ponto, todo o software necessário foi instalado com sucesso no seu computador CA e no servidor.
Passo 3 – Configurar as variáveis do EasyRSA e criar a CA
O EasyRSA vem com um arquivo de configuração que você pode editar para definir uma série de variáveis para a sua CA usando este comando:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Há um arquivo no diretório com o nome vars.example. Faça uma cópia deste arquivo e nomeie a cópia como vars sem extensão de arquivo:
|
1 |
cp vars.example vars |
Use o seu editor de texto preferido para abrir este novo arquivo:
|
1 |
nano vars |
Em seguida, encontre as configurações que definem os padrões de campo para novos certificados. Será semelhante a isto:
|
1 2 3 4 5 6 |
#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" |
Atualize essas variáveis para o que desejar, conforme mostrado abaixo:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Salve e feche o arquivo assim que estiver pronto. O próximo passo é chamar o script easyrsa e executá-lo com a opção init-pki para iniciar a infraestrutura de chaves públicas no servidor CA:
|
1 |
./easyrsa init-pki |

Em seguida, execute o comando build-ca com a opção nopass para que você não precise digitar uma senha toda vez que interagir com sua CA:
|
1 |
./easyrsa build-ca nopass |
Na saída, você será solicitado a confirmar o nome comum para sua CA:

Com isso, sua CA está configurada e pronta para começar a assinar solicitações de certificado.
Passo 4 – Gerar certificado do servidor, chave e arquivos de criptografia
Depois que a CA estiver pronta, você poderá gerar a chave privada e a solicitação de certificado a partir do servidor e, em seguida, enviá-la para a CA para assinatura, criando o certificado necessário. Primeiro, navegue até o diretório EasyRSA no servidor OpenVPN:
|
1 |
cd EasyRSA-3.0.4 |
A partir daí, execute o script easyrsa com a opção init-pki. Embora você já tenha executado este comando no computador da CA, este comando também deve ser executado aqui. Isso ocorre porque os diretórios PKI do servidor e da CA são diferentes:
|
1 |
./easyrsa init-pki |
Em seguida, chame o script easyrsa novamente, desta vez com a opção gen-req, seguida pelo nome genérico do computador:
|
1 |
./easyrsa gen-req server nopass |
Isso criará uma chave privada para o servidor e um arquivo de solicitação de certificado chamado server.req. Copie a chave do servidor para o diretório /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Transfira o arquivo server.req para o seu computador CA usando um método seguro (como SCP no exemplo a seguir):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Em seguida, navegue até o diretório EasyRSA no seu computador CA:
|
1 |
cd EasyRSA-3.0.4/ |
Use o script easyrsa novamente para importar o arquivo server.req e adicione seu nome comum após o caminho do arquivo:
|
1 |
./easyrsa import-req /tmp/server.req server |
Em seguida, assine a solicitação executando o script easyrsa com a opção sign-req seguida pelo tipo de solicitação e nome comum. Para a solicitação de certificado do servidor OpenVPN, certifique-se de usar o tipo de solicitação server:
|
1 |
./easyrsa sign-req server server |
A saída solicita que você verifique se a solicitação é de uma fonte confiável. Digite yes e pressione Enter para confirmar. Verifique os detalhes mostrados abaixo para garantir a precisão. Observe que esta solicitação ainda não foi verificada por senha.
Solicite o assunto e assine-o como um certificado de servidor por 3650 dias:

Se você criptografou a chave CA, a senha será solicitada neste momento. Em seguida, use um método seguro para transferir o certificado assinado de volta para o seu servidor VPN:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Transfira o arquivo ca.rt para o servidor antes de fazer logout do computador CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Em seguida, faça login no seu servidor OpenVPN novamente e copie os arquivos server.crt and ca.crt para o seu diretório /etc/openvpn/:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Em seguida, navegue até o seu diretório EasyRSA:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Insira o seguinte código para criar uma chave Diffie-Hellman forte que você possa usar durante a troca de chaves:
|
1 |
./easyrsa gen-dh |
Quando terminar, gere uma assinatura HMAC para melhorar a funcionalidade de verificação de integridade TLS do servidor:
|
1 |
openvpn --genkey --secret ta.key |
Quando o comando for concluído, copie os dois novos arquivos para o diretório / etc / openvpn /:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
Dessa forma, todos os certificados e arquivos de chave exigidos pelo servidor são gerados. Agora, você pode criar o certificado e a chave apropriados que o computador cliente usará para acessar o servidor OpenVPN.
Passo 4 – Gerar certificado do cliente e par de chaves
Em seguida, criaremos uma chave de cliente e vários certificados. Se você tiver vários clientes, poderá repetir esse processo para cada cliente. Observe, no entanto, que você deve passar um valor de nome exclusivo para o script para cada cliente. Neste tutorial, nomearemos o primeiro par de certificado/chave como client1. Primeiro, crie uma estrutura de diretórios em seu diretório home para armazenar os certificados do cliente e os arquivos de chave:
|
1 |
mkdir -p ~/client-configs/keys |
Como você salva o par de certificado/chave e o arquivo de configuração do cliente neste diretório por motivos de segurança, você deve agora revogar as permissões:
|
1 |
chmod -R 700 ~/client-configs |
Em seguida, navegue de volta para o diretório EasyRSA e execute o script easyrsa com as opções gen-req e nopass, bem como o nome genérico do cliente:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Pressione Enter para confirmar o nome comum. Depois disso, copie o arquivo client1.key para o diretório / client-configs / keys / criado anteriormente:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Em seguida, use um método seguro para transferir o arquivo client1.req para o seu computador CA:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Faça login no seu computador CA, navegue até o diretório EasyRSA e importe a solicitação de certificado:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Em seguida, como na etapa anterior, assine a solicitação no servidor. Mas desta vez você precisa especificar o tipo de solicitação do cliente:
|
1 |
./easyrsa sign-req client client1 |
No prompt, digite yes para confirmar que deseja assinar a solicitação de certificado e que a solicitação de certificado é de uma fonte confiável. Digite a palavra “yes” para continuar ou digite qualquer outra coisa para ser descartada:
|
1 |
Confirmar Solicitação Detalhes: Sim |

Se você criptografou a chave CA, também será solicitado que insira a senha aqui. Isso criará um arquivo de certificado de cliente chamado client1.crt. Transfira este arquivo de volta para o servidor:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Faça SSH de volta para o seu servidor OpenVPN e copie o certificado do cliente para o diretório / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Em seguida, copie os arquivos ca.crt e ta.key para o diretório / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Ao mesmo tempo, todos os certificados e chaves do servidor e do cliente foram gerados e salvos nos diretórios correspondentes no servidor. Agora você pode continuar a configurar o OpenVPN no servidor.
Passo 5 – Configurando o serviço OpenVPN
Após gerar os certificados do cliente e do servidor, você pode configurar o serviço OpenVPN para usar essas credenciais. Primeiro, copie o arquivo de configuração de exemplo do OpenVPN para o seu diretório de configuração e, em seguida, extraia-o para usá-lo como base de configuração:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
Abra o arquivo de configuração do servidor no seu editor de texto preferido:
|
1 |
sudo nano /etc/openvpn/server.conf |
Em seguida, encontre a parte HMAC procurando pelo comando tls-auth:
|
1 |
tls-auth ta.key 0 # Este arquivo é secreto |
Encontre a parte da senha procurando pela linha de senha comentada. A criptografia AES-256-CBC oferece um bom nível de criptografia e é bem suportada. A linha não deve estar comentada, mas se estiver, exclua o “;” antes:
|
1 |
cipher AES-256-CBC |
Abaixo disso, adicione um comando Auth para selecionar o algoritmo de resumo de mensagem HMAC. O SHA256 é uma boa escolha para isso:
|
1 |
auth SHA256 |
Em seguida, encontre a linha com a instrução dh que define os parâmetros Diffie-Hellman. Devido a algumas alterações recentes no EasyRSA, o nome do arquivo da chave Diffie-Hellman pode ser diferente do nome do arquivo listado no arquivo de configuração de exemplo do servidor. Se necessário, altere o nome do arquivo listado aqui excluindo 2048 para alinhá-lo com a chave do passo anterior:
|
1 |
dh dh.pem |
Finalmente, encontre as configurações de usuário e grupo e exclua o “;” no início de cada linha:
|
1 2 |
user nobody group nogroup |
Até agora, as alterações que você fez no arquivo server.conf de exemplo devem permitir que o OpenVPN funcione.
Passo 6 – Configuração de rede do servidor
Configure o encaminhamento de IP para rotear corretamente o tráfego através da VPN. Isso é essencial para a funcionalidade de VPN que seu servidor fornece:
|
1 |
sudo nano /etc/sysctl.conf |
Procure pela linha comentada que define net.ipv4.ip_forward. Remova o caractere “#” do início da linha para descomentar essa configuração:
|
1 |
net.ipv4.ip_forward=1 |
Salve o arquivo e feche-o quando terminar. Para ler o arquivo e ajustar os valores para a sessão atual, digite:
|
1 |
sudo sysctl -p |

Em seguida, adicione a interface de rede pública da sua máquina:
|
1 |
ip route | grep default |
Sua interface pública é a string na saída deste comando que segue a palavra “dev”. Por exemplo, este resultado mostra a interface chamada ens3.

Abra o arquivo /etc/ufw/before.rules para adicionar a configuração relevante:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Perto do topo do arquivo, adicione as linhas destacadas abaixo para definir a política padrão para a cadeia POSTROUTING na tabela nat e mascarar qualquer tráfego vindo da VPN. Altere ens3 na linha -A POSTROUTING abaixo pela interface que você encontrou no comando acima:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Regras que devem ser executadas antes das regras adicionadas pela linha de comando do ufw. Personalizadas # regras devem ser adicionadas a uma destas chains: # ufw-before-input # ufw-before-output # ufw-before-forward # INÍCIO DAS REGRAS DO OPENVPN # Regras da tabela NAT *nat :POSTROUTING ACCEPT [0:0] # Permitir tráfego do cliente OpenVPN para wlp11s0 (altere para a interface que você descobriu!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # FIM DAS REGRAS DO OPENVPN # Não exclua estas linhas obrigatórias, caso contrário haverá erros . . . |
Salve o arquivo e feche-o quando terminar. Em seguida, você precisa dizer ao UFW para permitir pacotes encaminhados por padrão também. Para fazer isso, abra o arquivo /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
Dentro dele, encontre a diretiva DEFAULT_FORWARD_POLICY e altere o valor de DROP para ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
Salve e feche o arquivo quando terminar. Em seguida, ajuste o firewall para habilitar o tráfego para o OpenVPN. Se você não alterou a porta e o protocolo no arquivo /etc/openvpn/server.conf, precisará liberar o tráfego UDP para a porta 1194. Se você modificou a porta e/ou o protocolo, substitua pelos valores que selecionou aqui. Caso tenha esquecido de adicionar a porta SSH ao seguir o tutorial de pré-requisitos, adicione-a aqui também:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Depois de adicionar essas regras, desative e reative o UFW para reiniciá-lo e carregar as alterações de todos os arquivos que você modificou:
|
1 2 |
sudo ufw disable sudo ufw enable |

Parabéns, seu servidor agora está configurado para lidar corretamente com o tráfego do OpenVPN!
Conclusão
Se você seguiu este tutorial até o fim, agora poderá navegar pela Internet com segurança. Você poderá manter sua identidade, localização e tráfego longe de olhares curiosos.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.