Manager, Developer Education
Uma versão anterior deste tutorial foi escrita por Justin Ellingwood.
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.
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.
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.
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:
. . .
#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:
. . .
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.
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
.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.
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.
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:
OutputType 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.
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:
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:
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:
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:
dh dh.pem
Por fim, encontre as configurações user
e group
e remova os “;” no começo de cada para descomentar essas linhas:
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.
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:
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:
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.
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.
# Optional!
port 443
Geralmente, o protocolo também é restrito a essa porta. Se for, mude o proto
de UDP para TCP:
# 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:
# 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.
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:
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.
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:
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
Outputnet.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:
Outputdefault 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:
#
# 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
:
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.
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:
Output4: 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.
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:
. . .
# 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:
proto udp
Em seguida, descomente as diretrizes user
e group
removendo o “;” no começo de cada linha:
# 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:
# 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:
# 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
:
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:
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.
# 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:
#!/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.
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
Outputclient1.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:
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.
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.
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.
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
Verifique se sua distribuição inclui um script /etc/openvpn/update-resolv-conf
:
- ls /etc/openvpn
Outputupdate-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:
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:
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.
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.
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.
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.
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.
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.
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.
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.
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
:
OutputPlease 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:
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:
./easyrsa revoke client_name
crl.pem
para seu servidor OpenVPN e copie-o para o diretório /etc/openvpn
para sobrepor a lista antiga.Você pode usar este processo para revogar quaisquer certificados que você tenha emitido anteriormente para seu servidor.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Hello, great article! I’m trying to setup a droplet with this configuration. Is it possible to access a database in the same VPN through the VPN connection? I tried this, but it seems that the OpenVPN server is not forwarding traffic.
I hope you are well. I set up openvpn on VPS for 5 clients (but I only use 3). I noticed that openvpn automatically reboots every day at 4am. So far so good; The problem is that of the 3 client devices, only two reconnect to openvpn and the other (Raspberry Pi4) does not reconnect to openvpn until I reboot raspberry pi itself.
I want help from you to make my openvpn server not automatically restart every day except when I do it manually.
Note: The settings for raspberry pi are well done because when I reboot raspberry it reconnects to openvpn automatically, but when openvpn server reboots, raspberry pi doesn’t reconnect to openvpn .