Guia definitivo para configurar um servidor OpenVPN seguro no Ubuntu 20.04
Uma rede privada virtual (VPN) permite que você se conecte de forma segura e privada a uma rede privada remota, por exemplo, a rede do seu escritório ou a Internet, como se você estivesse conectado diretamente a uma rede privada.
VPN funciona em uma arquitetura cliente-servidor. Um servidor VPN é implantado em uma máquina e pode ser acessado publicamente pela Internet. O servidor VPN pode ser configurado para permitir a conexão com uma LAN privada, como uma rede de escritório, ou permitir conexões com a Internet. O usuário se conecta ao servidor VPN usando um cliente VPN em sua máquina local. A comunicação entre o servidor VPN e o cliente ocorre por meio de um protocolo de túnel seguro. Para a Internet, parece que o destino do tráfego é o servidor VPN; entretanto, o tráfego passa para o cliente por meio do servidor.
A VPN tem muitos usos na vida diária, como conectar-se com segurança a uma rede Wifi pública, que muitas vezes está comprometida, ou contornar as restrições geográficas em certos sites, conectando-se a uma VPN baseada em um país permitido pelo site.
OpenVPN é uma implementação VPN amplamente usada que permite uma ampla gama de configurações e opções. Ele usa o protocolo Secure Sockets Layer (SSL) para a criptografia dos dados e chaves pré-compartilhadas, nome de usuário / senha ou certificados para autenticação do cliente VPN. Neste artigo, veremos como configurar um servidor VPN e um cliente VPN no Ubuntu 20.04.
Instalação
OpenVPN está disponível nos repositórios oficiais do Ubuntu no pacote openvpn
. Este pacote instala o servidor OpenVPN e também o cliente.
sudo apt install openvpn
Conforme mencionado anteriormente, o OpenVPN usa certificados SSL para criptografar dados entre o servidor e o cliente. Precisamos configurar nossa própria autoridade de certificação (CA) para emitir certificados para a VPN. Observe que isso deve ser configurado em uma máquina diferente daquela em que o OpenVPN está configurado; a razão é que, se estiver no mesmo servidor e for comprometido, um invasor pode acessar a chave privada e, assim, atacar a conexão VPN.
Usaremos uma ferramenta chamada ‘Easy-RSA’ para configurar a autoridade de certificação. Para instalá-lo, execute o seguinte na máquina CA, na máquina servidor OpenVPN e na máquina cliente, pois a configuração é necessária em todos os três para configurar o CA.
sudo apt install easy-rsa
Agora vamos primeiro configurar a autoridade de certificação na máquina CA e executar algumas etapas de configuração necessárias para o mesmo na máquina do servidor VPN aberto.
Configuração da autoridade de certificação
Configuração inicial na máquina CA
Agora, este pacote instala um comando chamado make-cadir
que é usado para criar uma pasta para configuração da autoridade de certificação. Vamos criar uma pasta usando isso e entrar na pasta.
make-cadir cert_authority && cd cert_authority
Abra o arquivo chamado vars
criado neste diretório. Este arquivo contém algumas variáveis de configuração que precisamos modificar. Os valores que precisam ser modificados estão nas linhas 91-96, após o comentário sobre Campos Organizacionais que descreve esses campos. Remova o comentário das linhas e preencha os valores apropriados no lugar dos valores de amostra.
Salve e saia do arquivo. Se você estiver usando o editor vim, pressione Esc
, modelo : wq
e pressione Entrar
para salvar e sair.
Em seguida, executamos o easyrsa
programa no diretório para configurar a infraestrutura de chave pública (PKI), que será usada para gerar a chave pública e os certificados.
./easyrsa init-pki
A próxima etapa irá gerar a chave CA e o certificado. Quando o comando solicitar uma senha, insira uma senha para a chave CA. Além disso, insira um nome comum quando solicitado. Se você deixar em branco, o nome padrão Easy-RSA CA será usado.
./easyrsa build-ca
Como podemos ver na saída, o certificado e a chave foram gerados. Esta chave será usada para assinar os certificados do cliente e do servidor, portanto, nunca deve ser tocada / modificada.
Agora, temos a configuração da PKI. O próximo passo é criar uma chave de servidor e um certificado na máquina que usaremos como um servidor OpenVPN. Este certificado será posteriormente assinado pela máquina CA.
Gerando chave e certificado do servidor na máquina do servidor
Já instalamos o Easy RSA na máquina do servidor. Agora execute as três etapas na máquina do servidor, que executamos anteriormente na máquina da CA, viz. criando um diretório CA usando make-cadir
e entrar nele, modificando as variáveis no vars
arquivo e geração de PKI usando ./easyrsa init-pki
comando.
Em seguida, precisamos executar o comando para gerar uma solicitação e uma chave de certificado do servidor.
./easyrsa gen-req server nopass
Observe que passamos a opção nopass
para que o comando não solicite a inserção de uma senha para a chave do servidor. Ele ainda solicitará um nome comum para o servidor, que você pode inserir qualquer coisa, ou deixá-lo vazio para o nome padrão (servidor) ser usado.
Mova o arquivo de chave gerado dentro do / etc / openvpn
diretório.
sudo mv pki / private / server.key / etc / openvpn
Envie o pedido de certificado para a máquina CA. Vamos usar o comando scp
para este propósito.
scp pki / reqs / server.req user @ CA_MACHINE_HOSTNAME: / diretório
Na captura de tela acima, o host 45.79.125.41 é a máquina CA. Copiamos o certificado no diretório / root.
Agora, o certificado do servidor foi copiado para a máquina CA. A próxima etapa é voltar para a máquina CA e assinar este certificado.
Assinando o certificado do servidor na CA
Primeiro, vamos verificar se o arquivo de solicitação de certificado do servidor foi copiado na máquina CA. Vá para o diretório onde copiamos o arquivo (/ root no meu exemplo) e execute ls
.
: ~ # cd / root && ls cert_authority server.req
Como podemos ver, o arquivo server.req
é presente. Em seguida, vá para o diretório CA e importe esta solicitação.
cd cert_authority ./easyrsa import-req /root/server.req server
Para assinar esta solicitação, execute o seguinte comando.
./easyrsa servidor de servidor de solicitação de assinatura
Aqui, o primeiro argumento é o tipo de solicitação, ou seja, servidor, e o segundo argumento é o nome comum da máquina servidora, para a qual usamos anteriormente o valor padrão, ou seja, servidor.
Digite a frase sim, e a senha para a chave CA quando solicitada.
Agora podemos remover o arquivo de solicitação de certificado e copiar o certificado gerado para o servidor, bem como o certificado público de CA de volta para a máquina do servidor.
rm /root/server.req scp pki / emitido / server.crt [email protected]: / root scp pki / ca.crt [email protected]: / root
Em seguida, temos que realizar mais algumas etapas para garantir uma conexão segura da VPN.
Geração de Parâmetros DH
A troca de chaves DH (Diffie-Hellman) é um algoritmo para garantir uma troca segura de chaves criptográficas em um canal inseguro. Primeiro, vamos mover o certificado recebido e o certificado público de CA para / etc / openvpn
.
mv /root/ca.crt /root/server.crt / etc / openvpn
Vá para a pasta CA na máquina do servidor e execute o seguinte comando para gerar os parâmetros DH. Pode levar muito tempo para gerar.
./easyrsa gen-dh
Agora, mova o arquivo gerado para / etc / openvpn
.
mv /root/cert_authority/pki/dh.pem / etc / openvpn
Gerando chaves TA
O OpenVPN usa outra medida de segurança adicional usando a chave de autenticação TLS. Para gerar a chave de autenticação TLS, execute:
openvpn --genkey --secret tls_auth.key
E mova a chave para / etc / openvpn
.
mv tls_auth.key / etc / openvpn
A configuração da chave do servidor e a configuração da autoridade de certificação agora estão concluídas. Vamos passar para a configuração real do servidor VPN agora.
Configuração do servidor OpenVPN
O arquivo de configuração para o servidor OpenVPN não é criado automaticamente, no entanto, podemos usar um arquivo de configuração de modelo do openvpn
pacote.
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 usando o vim ou qualquer editor de sua escolha.
cd / etc / openvpn vim server.conf
Temos que inserir os nomes comuns de chaves e certificados que geramos anteriormente. Vá para a linha nº. 78. Como usamos todos os nomes padrão, nós os mantemos inalterados. Em seguida, verifique o nome do arquivo de parâmetro DH na linha 85. Usamos o nome dh.pem, então vamos alterá-lo.
A seguir, vamos modificar os privilégios do servidor OpenVPN. Vá para a linha 274 e 275 e remova o ;
para descomentar.
Da mesma forma, vá para a linha 192 e remova o ponto-e-vírgula. Esta diretiva permite que o tráfego de todos os clientes passe pela VPN.
Salve e saia do arquivo.
Mude a propriedade da pasta / etc / openvpn para root.
sudo chown -R root: root / etc / openvpn
Configuração de rede e firewall
Precisamos permitir o encaminhamento de IP no servidor para permitir que os pacotes sejam encaminhados de e para o cliente VPN. Retire a linha de comentários 28 em /etc/sysctl.conf
:
Salve e saia do arquivo.
Reiniciar systemctl
para que essas mudanças ocorram.
sudo sysctl -p
Precisamos configurar Network Address Translation (NAT) no servidor usando um firewall UFW para permitir que o cliente VPN acesse a Internet usando o endereço IP do servidor VPN. Primeiro, vamos habilitar o encaminhamento de pacotes na configuração do firewall. Aberto / etc / default / ufw
e altere a variável na linha 19 para ACEITAR.
Salve e saia do arquivo.
Agora adicione as seguintes regras ao arquivo /etc/ufw/before.rules
antes de o filtro linha no arquivo.
* nat: ACEITO DE PÓS-TRASEIRO [0: 0] -A PÓS-TRASEIRO -s 10.8.0.0/8 -o -j COMITÊ MÁSCARA
Insira sua interface de rede no lugar de . Você pode ver sua interface de rede com o comando ifconfig
.
Permita o tráfego para o serviço OpenVPN no Firewall e permita a porta 1194.
sudo ufw allow openvpn && sudo ufw allow 1194
Recarregue o serviço de firewall.
sudo ufw recarregar
Agora podemos reiniciar o daemon do servidor VPN aberto executando:
sudo service openvpn restart
Ative-o para iniciar no momento da inicialização executando:
sudo systemctl enable openvpn
O servidor OpenVPN agora foi configurado e iniciado. Vamos agora prosseguir para a solicitação de certificado do cliente e geração de chave e outras configurações.
Configuração do cliente OpenVPN
Precisamos gerar uma chave e uma solicitação de certificado para o cliente. O procedimento para fazer isso é igual ao do servidor.
Embora uma chave de cliente e um pedido de certificado possam ser criados na máquina cliente e depois transferidos para a máquina CA, é recomendado criá-los na máquina servidor. A vantagem de fazer isso no servidor é que você pode criar um script para executar todas as etapas necessárias no servidor, o que torna mais fácil para um novo cliente ingressar na VPN.
Vá para a pasta CA no servidor e execute o seguinte:
cd ~ / cert_authority ./easyrsa gen-req cliente nopass
De maneira semelhante à feita anteriormente, insira um nome comum quando solicitado ou deixe em branco para usar o nome comum padrão, ou seja, cliente.
Vamos agora copiar o pedido de certificado de cliente gerado para a máquina CA.
scp pki / reqs / client.req [email protected]: / root
Vamos importar esta solicitação na máquina CA:
./easyrsa import-req /root/client.req client
E agora vamos assinar:
./easyrsa sign-req cliente cliente
Entrarsim
quando solicitado a continuar. Digite a senha da chave CA quando solicitado.
Agora podemos remover o arquivo solicitado para o cliente e copiar a solicitação de volta para a máquina do servidor VPN.
rm /root/client.req scp pki / emitido / client.crt [email protected]: / root
Vamos criar uma pasta chamada cliente
para manter todos os arquivos relacionados ao cliente no servidor VPN. Vamos mover a chave do cliente e o certificado para esta pasta.
mkdir ~ / client sudo mv ~ / client.crt ~ / cert_authority / pki / private / client.key ~ / client
Agora, vamos criar um arquivo de configuração a partir de um modelo disponível, semelhante a como criamos o arquivo de configuração do servidor.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~ / client
Abra o arquivo client.conf
. Na linha 42, digite o nome do host ou endereço IP da máquina do servidor no lugar de meu-servidor-1
.
Remova o comentário das linhas 61 e 62 removendo o ponto-e-vírgula à esquerda para diminuir os privilégios do arquivo.
Em seguida, comente as linhas 88-90 e a linha 108. O motivo é que queremos adicionar o conteúdo dos arquivos mencionados manualmente em vez de usar os locais dos arquivos. O objetivo de fazer isso é que o arquivo de configuração do cliente seja posteriormente transferido para o cliente, onde na verdade não teremos a chave do cliente e os arquivos de certificado; portanto, copiamos o conteúdo daqueles no próprio arquivo de configuração.
Anexe o seguinte ao arquivo de configuração do cliente. Insira o conteúdo dos respectivos arquivos dentro das tags fornecidas.
# Cole o conteúdo do arquivo ca.crt aqui # Cole o conteúdo do arquivo client.crt aqui # Cole o conteúdo do arquivo client.key aqui key-direction 1 # Cole o conteúdo do arquivo tls_auth.key aqui
Salve e saia do arquivo. Renomear este arquivo de client.conf
para client.ovpn
, já que o último é a extensão necessária para arquivos de configuração que podem ser importados como configurações de rede.
Agora, transfira o arquivo client.ovpn
para o cliente, ou seja, máquina local.
Corre scp
em sua máquina cliente para transferir arquivos da máquina servidora para sua máquina local.
scp user @ server_ip: / path_to_file local_destination_path
Finalmente, precisamos usar este arquivo de configuração para nos conectar ao servidor VPN. Isso pode ser feito tanto pela linha de comando quanto pela GUI.
Para iniciar o cliente VPN a partir da linha de comando, execute:
sudo openvpn --config client.ovpn
E esse é o único comando que você precisa executar para iniciar o Cliente VPN.
Para iniciar o cliente VPN via GUI, execute as seguintes etapas.
Vá para Configurações »Rede em sua máquina cliente.
Clique no + botão na seção VPN e escolha ‘Importar do arquivo…’ nas opções.
Clique em ‘Adicionar’ para começar a usar a VPN.
Observe que em 'Gateway', é o endereço IP do servidor.
Por fim, alterne o botão "VPN do cliente" para habilitar a VPN na máquina.
Pode demorar alguns segundos para estabelecer uma conexão VPN. Um novo logotipo de progresso para VPN aparecerá no canto superior esquerdo da tela enquanto está sendo configurado e mudará para um logotipo de VPN assim que for configurado.
Para verificar se a VPN está funcionando corretamente, execute o seguinte:
curl //ipinfo.io/ip
Ele deve retornar o endereço IP de sua máquina servidora. Ou então, você também pode verificar seu endereço IP simplesmente pesquisando "Meu IP" no Google. Ele deve mostrar o endereço IP do seu servidor VPN se nossa configuração VPN estiver funcionando corretamente.
Conclusão
Neste artigo, vimos como configurar um servidor OpenVPN, uma Autoridade de Certificação e um Cliente OpenVPN. Para adicionar mais clientes à VPN, agora precisamos seguir o procedimento para gerar e assinar um certificado para o cliente e usar o mesmo arquivo de configuração criado aqui, com apenas a chave do cliente e os valores do certificado alterados.
No caso de conexões de Internet mais lentas, é possível que, se o UDP estiver sendo usado para comunicação, haja uma perda considerável de pacotes. O usuário pode mudar para TCP removendo o comentário da linha proto tcp
e comentando na linha proto udp
no arquivo de configuração do servidor.
Além disso, caso haja outros erros, você pode definir o nível de registro com o verbo
diretiva nos arquivos de configuração do servidor e do cliente. Você pode inserir valores entre 0 e 9. Quanto maior o valor desta diretiva, mais detalhado será o log.