Como configurar um servidor OpenVPN no Ubuntu 20.04

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.