Como configurar um servidor OpenVPN no Ubuntu 20.04

Como configurar um servidor OpenVPN no Ubuntu 20.04

Ubuntu 20.04 Fossa focal é o último suporte a longo prazo de uma das distribuições Linux mais usadas. Neste tutorial, veremos como usar este sistema operacional para criar um servidor OpenVPN e como criar um .Ovpn Arquivo que usaremos para conectar a ele da nossa máquina cliente.

Neste tutorial, você aprenderá:

  • Como gerar uma autoridade de certificado
  • Como gerar o certificado de cliente e o certificado de cliente e a chave
  • Como assinar um certificado com a autoridade de certificado
  • Como criar parâmetros Diffie-Hellman
  • Como gerar uma chave TLS-Auth
  • Como configurar o servidor OpenVPN
  • Como gerar um .arquivo OVPN para conectar -se à VPN
Como configurar um servidor OpenVPN no Ubuntu 20.04

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Ubuntu 20.04 Fossa focal
Programas OpenVPN, UFW, Easy-RSA
Outro Permissões de raiz para executar tarefas administrativas
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Configuração do cenário

Antes de prosseguir com a configuração real da VPN, vamos falar sobre as convenções e a configuração que adotaremos neste tutorial.

Usaremos duas máquinas, ambas alimentadas por Ubuntu 20.04 Fossa focal. O primeiro, Camachine será usado para hospedar nosso Autoridade de certificado; o segundo, OpenVpnMachine será o que iremos configurar como o real VPN servidor. É possível usar a mesma máquina para ambos os propósitos, mas seria menos segura, já que uma pessoa que viola o servidor, poderia "personificar" a autoridade de certificação e usá -la para assinar certificados indesejados (o problema é particularmente relevante apenas se você Planeje ter mais de um servidor ou se você planeja usar o mesmo CA para outros fins). Para mover arquivos entre uma máquina e a outra, usaremos o SCP (cópia segura) comando. As 10 etapas principais que faremos são as seguintes:

  1. Geração da autoridade de certificado;
  2. Geração da chave do servidor e solicitação de certificado;
  3. Assinatura da solicitação de certificado de servidor com a CA;
  4. Geração dos parâmetros Diffie-Hellman no servidor;
  5. Geração da chave TLS-Auth no servidor;
  6. Configuração do OpenVPN;
  7. Configuração de rede e firewall (UFW) no servidor;
  8. Geração de chave de cliente e solicitação de certificado;
  9. Assinatura do certificado de cliente com a CA;
  10. Criação do cliente .arquivo OVPN usado para se conectar à VPN.

Etapa 1 - Geração da Autoridade de Certificação (CA)

O primeiro passo em nossa jornada consiste na criação do Autoridade de certificado na máquina dedicada. Trabalharemos como um usuário sem privilégios para gerar os arquivos necessários. Antes de começarmos, precisamos instalar o Easy-RSA pacote:

$ sudo apt-get update && sudo apt-get -y install easy-rsa 

Com o pacote instalado, podemos usar o FAPLIR comando para gerar um diretório que contém as ferramentas e arquivos de configuração necessários, neste caso, vamos chamá -lo certificado_authority. Uma vez criado, vamos nos mover dentro dele:

$ make-cadir certificado_authority && CD Certificate_authority 


Dentro do diretório, encontraremos um arquivo chamado vars. No arquivo, podemos definir algumas variáveis ​​que serão usadas para a geração de certificados. Um conjunto comentado dessas variáveis ​​pode ser encontrado na linha 91 para 96. Basta remover o comentário e atribuir os valores apropriados:

set_var easyrsa_req_country "nos" set_var easyrsa_req_province "California" set_var easyrsa_req_city "San Francisco" set_var easyrsa_req_org "cupleft certate co" set_var easyrsa_req_email.net "set_var easyrsa_req_ou" minha unidade organizacional " 

Depois que as alterações são salvas, podemos prosseguir e gerar o PKI (Public Key Infrastructure), com o seguinte comando que criará um diretório chamado PKI:

$ ./easyrsa init-pki 

Com a infraestrutura em vigor, podemos gerar nossa chave CA e certificado. Depois de lançar o comando abaixo, seremos solicitados a entrar em um senha para o Chave CA. Precisamos fornecer a mesma senha cada vez que interagiremos com a autoridade. A Nome comum para o certificado também deve ser fornecido. Este pode ser um valor arbitrário; Se apenas pressionarmos Enter no prompt, o padrão será usado, neste caso Easy-RSA CA:

$ ./Easyrsa Build-Ca 

Aqui está a saída do comando:

Nota: Usando a configuração Easy-RSA em: ./vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 de setembro de 2019 Digite a nova senha da chave da CA: re-entra uma nova e-senha da chave da CA: gerando chave privada RSA, módulo de 2048 bits longo (2 primos)… +++++… +++++ e é 65537 (0x010001) pode `` ``.RND em RNG 140296362980608: Erro: 2406F079: Gerador de número aleatório: rand_load_file: Não é possível abrir o arquivo:…/criptografia/rand/randfile.c: 98: nome do arquivo =/home/egdoc/certificado_authority/pki/.Você está prestes a ser solicitado a inserir informações que serão incorporadas à sua solicitação de certificado. O que você está prestes a entrar é o que é chamado de nome distinto ou DN. Existem alguns campos, mas você pode deixar alguns em branco para alguns campos, haverá um valor padrão, se você entrar '.', o campo ficará em branco. ----- Nome comum (por exemplo: seu usuário, host ou nome do servidor) [Easy-RSA CA]: a criação de CA completa e agora você pode importar e assinar solicitações de certificação. Seu novo arquivo de certificado CA para publicação está em:/home/egdoc/certificado_authority/pki/ca.Crt 

O Build-Ca O comando gerou dois arquivos; O caminho deles, em relação ao nosso diretório de trabalho é:

  • PKI/CA.Crt
  • PKI/Privado/CA.chave

O primeiro é o certificado público, o segundo é a chave que será usada para assinar os certificados de servidor e clientes; portanto, deve ser mantido o mais seguro possível.

Uma pequena nota, antes de avançarmos: na saída do comando, você deve ter notado uma mensagem de erro. Embora o erro não esteja armado, uma solução alternativa para evitá -lo é comentar a terceira linha do OpenSSL-easyrsa.CNF arquivo que está dentro do diretório de trabalho gerado. A questão é discutida no repositório OpenSSL Github. Após a modificação, o arquivo deve ficar assim:

# Para uso com easy-rsa 3.1 e OpenSSL ou Libressl Randfile = $ Env :: easyrsa_pki/.rnd 

Dito isto, vamos mover -se na máquina que usaremos como servidor OpenVPN e gerará a chave do servidor e o certificado.

Etapa 2 - Geração da chave do servidor e solicitação de certificado

Nesta etapa, geraremos a chave do servidor e a solicitação de certificado que será assinada pela autoridade de certificação. Na máquina que usaremos como servidor OpenVPN, devemos instalar o OpenVPN, Easy-RSA e ufw Pacotes:

$ sudo apt-get update && sudo apt-get -y install openvpn easy-rsa ufw 

Para gerar a chave do servidor e a solicitação de certificado, executamos o mesmo procedimento que usamos na máquina que hospeda a autoridade de certificação:

  1. Nós geramos um diretório de trabalho com o FAPLIR comando e mova -se dentro dele.
  2. Configurar as variáveis ​​contidas no vars arquivo que será usado para o certificado.
  3. Gerar a infraestrutura chave pública com o ./easyrsa init-pki comando.

Após essas etapas preliminares, podemos emitir o comando para gerar o certificado do servidor e o arquivo -chave:

$ ./Easyrsa Gen-Req Server NopoSs 

Desta vez, já que usamos o NoPass opção, não seremos solicitados a inserir uma senha durante a geração do chave do servidor. Ainda seremos solicitados a entrar em um Nome comum para o Certificado de servidor. Nesse caso, o valor padrão usado é servidor. É isso que usaremos neste tutorial:

Nota: Usando a configuração Easy-RSA em: ./vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 de setembro de 2019 gerando uma chave privada RSA… +++++… +++++ escrevendo nova chave privada para '/home/egdoc/openvpnserver/pki/private/servidor.chave.9RU3WFZMBW '----- Você está prestes a ser solicitado a inserir informações que serão incorporadas à sua solicitação de certificado. O que você está prestes a entrar é o que é chamado de nome distinto ou DN. Existem alguns campos, mas você pode deixar alguns em branco para alguns campos, haverá um valor padrão, se você entrar '.', o campo ficará em branco. ----- Nome comum (por exemplo: seu usuário, host ou nome do servidor) [servidor]: Teclado e solicitação de certificado concluídos concluídos. Seus arquivos são: req:/home/egdoc/openvpnserver/pki/reqs/servidor.key req:/home/egdoc/openvpnserver/pki/privado/servidor.chave 

A Solicitação de sinal de certificado e a chave privada será gerado:

  • /home/egdoc/OpenVPNServer/pki/reqs/servidor.Req
  • /home/egdoc/openvpnServer/pki/privado/servidor.chave.

O arquivo chave deve ser movido para dentro do /etc/openvpn diretório:

$ sudo mv pki/privado/servidor.chave /etc /openvpn 

A solicitação de certificado, em vez disso, deve ser enviada à máquina da autoridade de certificação, a ser assinada. Podemos usar SCP comando para transferir o arquivo:

$ scp pki/reqs/servidor.req egdoc@camachine:/home/egdoc/ 

Vamos voltar para Camachine e autorizar o certificado.

Etapa 3 - assinando o certificado do servidor com a CA

Na máquina de autoridade de certificado, devemos encontrar o arquivo que copiamos na etapa anterior no $ Home Diretório do nosso usuário:

$ ls ~ certificado_authority Server.Req 

A primeira coisa que fazemos é importar a solicitação de certificado. Para realizar a tarefa, usamos o Import-Req ação do Easyrsa roteiro. Sua sintaxe é o seguinte:

Import-Req   

No nosso caso, isso se traduz em:

$ ./easyrsa importar-req ~/servidor.servidor req 


O comando gerará a seguinte saída:

Nota: Usando a configuração Easy-RSA em: ./vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 de setembro de 2019 A solicitação foi importada com sucesso com um pequeno nome de: servidor Você pode agora usar esse nome para executar operações de assinatura nesta solicitação. 

Para assinar o pedido, usamos o Sing-Req ação, que leva o tipo de solicitação como primeiro argumento (servidor, neste caso), e o short_basename Usamos no comando anterior (servidor). Nós corremos:

$ ./Easyrsa Sign-Req Server 

Seremos solicitados a confirmar que queremos assinar o certificado e fornecer a senha que usamos para a chave da autoridade de certificação. Se tudo correr como esperado, o certificado será criado:

Nota: Usando a configuração Easy-RSA em: ./vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 de setembro de 2019 você está prestes a assinar o seguinte certificado. Por favor, verifique os detalhes mostrados abaixo para obter precisão. Observe que este pedido não foi verificado criptograficamente. Certifique -se de que veio de uma fonte confiável ou que você verificou a soma de solicitação com o remetente. Solicite Assunto, a ser assinado como um certificado de servidor por 1080 dias: sujeito = CommonName = Digite a palavra 'Sim' para continuar ou qualquer outra entrada para abortar. Confirmar detalhes da solicitação: Sim, usando a configuração de/home/egdoc/certificado_authority/pki/safessl-easyrsa.CNF Entre a frase de passagem para/home/egdoc/certificado_authority/pki/private/ca.Chave: Verifique se a solicitação corresponde à assinatura da assinatura OK O nome distinto do sujeito é o seguinte CommonName: ASN.1 12: Certificado de 'servidor' deve ser certificado até 20 de março 02:12:08 2023 GMT (1080 dias) Escreva um banco de dados com 1 Certificado atualizado da Base de dados de novas entradas criado em:/home/egdoc/certificado_authority/pki/emitido/ servidor.Crt 

Agora podemos excluir o arquivo de solicitação que transferimos anteriormente do OpenVpnMachine. E copie o certificado gerado de volta para o nosso OpenVPN Servidor, juntamente com o Certificado Público da CA:

$ rm ~/servidor.REQ $ SCP PKI/CA.CRT, emitido/servidor.CRT EGDOC@OpenVpnMachine:/Home/Egdoc 

De volta ao OpenVpnMachine Devemos encontrar os arquivos em nosso diretório doméstico. Agora podemos movê -los para /etc/openvpn:

$ sudo mv ~/ca.CRT, servidor.CRT /etc /OpenVPN 

Etapa 4 - Geração Diffie -Hellman Parâmetros

O próximo passo consiste na geração de um Diffie-Hellman parâmetros. O Diffie-Hellman A troca de chaves é o método usado para transferir teclas de criptografia sobre um canal público e inseguro. O comando para gerar a chave é o seguinte (pode demorar um pouco para terminar):

$ ./Easyrsa Gen-DH 

A chave será gerada dentro do PKI diretório como dh.PEM. Vamos movê -lo para /etc/openvpn como DH2048.PEM:

$ sudo mv pki/dh.PEM/etc/openvpn/dh2048.PEM 

Etapa 5 - Geração da chave TLS -Auth (TA.chave)

Para melhorar a segurança, OpenVPN implementos TLS-Auth. Citando a documentação oficial:

A diretiva TLS-Auth adiciona uma assinatura HMAC adicional a todos os pacotes de handshake SSL/TLS para verificação de integridade. Qualquer pacote UDP não com a assinatura HMAC correto pode ser descartado sem processamento adicional. A assinatura TLS-Auth HMAC fornece um nível adicional de segurança acima e além do fornecido pelo SSL/TLS. Pode proteger contra:
- Ataques do DOS ou inundações de portas na porta OpenVPN UDP.
- Digitalização da porta para determinar quais portas UDP do servidor estão em um estado de escuta.
- Vulnerabilidades de transbordamento de buffer na implementação SSL/TLS.
- Iniciações de aperto de mão SSL/TLS de máquinas não autorizadas (enquanto esses apertos de mão não conseguiriam autenticar, o TLS-Auth pode cortá-los em um ponto muito anterior).

Para gerar a chave TLS_Auth, podemos executar o seguinte comando:

$ OpenVPN - -Genkey -Secret TA.chave 

Uma vez gerado, movemos o ta.chave arquivo para /etc/openvpn:

$ sudo mv ta.chave /etc /openvpn 

A configuração das chaves do servidor está agora completa. Podemos prosseguir com a configuração do servidor real.

Etapa 6 - Configuração do OpenVPN

O arquivo de configuração do OpenVPN não existe por padrão /etc/openvpn. Para gerá -lo, usamos um modelo que é enviado com o OpenVPN pacote. Vamos executar este comando:

$ zcat \/usr/share/doc/Openvpn/exemplos/amostra-config-files/servidor.conf.gz \ | sudo tee/etc/openvpn/servidor.conf> /dev /null 

Agora podemos editar o /etc/openvpn/servidor.conf arquivo. As partes relevantes são mostradas abaixo. A primeira coisa que queremos fazer é verificar se o nome das chaves e certificados referenciados corresponde aos que geramos. Se você seguiu este tutorial, definitivamente deve ser o caso (linhas 78-80 e 85):

CA CA.Servidor CRT CERT.CRT Key Server.Chave # Este arquivo deve ser mantido secreto dh dh2048.PEM 

Queremos fazer o daemon do OpenVPN executar com baixos privilégios, o ninguém usuário e não grupo. A parte relevante do arquivo de configuração está em linhas 274 e 275. Só precisamos remover a liderança ;:

Usuário ninguém Grupo Nogroup 

Outra linha da qual queremos remover o comentário é 192. Isso fará com que todos os clientes redirecionem seu gateway padrão através da VPN:

Empurre "Redirect-gateway def1 bypass-dhcp" 

Linhas 200 e 201 Também pode ser usado para permitir que o servidor empurre servidores DNS específicos para os clientes. Os do arquivo de configuração são os fornecidos por opendns.com:

Push "DHCP-OPTION DNS 208.67.222.222 "push" dhcp-option dns 208.67.220.220 " 

Neste ponto /etc/openvpn O diretório deve conter estes arquivos que geramos:

/etc/openvpn ├── CA.CRT ├── DH2048.PEM ├── servidor.conf ├── servidor.CRT ├── servidor.chave └── TA.chave 

Vamos garantir que todos sejam de propriedade da raiz:

$ sudo chown -r root: root /etc /openvpn 

Podemos prosseguir para a próxima etapa: Configurando as opções de rede.

Etapa 7 - Configuração de rede e UFW

Para que nossa VPN funcione, precisamos ativar Encaminhamento IP em nosso servidor. Para fazer isso, apenas a linha de descomamento 28 de /etc/sysctl.conf arquivo:

# Uncomment a próxima linha para ativar o encaminhamento de pacotes para IPv4 net.IPv4.ip_forward = 1 

Para recarregar as configurações:

$ sudo sysctl -p 


Também precisamos permitir o encaminhamento de pacotes no firewall da UFW modificando o /etc/default/ufw arquivo e alterando o Default_forward_policy de DERRUBAR para ACEITAR (linha 19):

# Defina a política avançada padrão para aceitar, soltar ou rejeitar. Observe que # se você alterar isso, provavelmente desejará ajustar suas regras default_forward_policy = "aceitar" 

Agora precisamos adicionar as seguintes regras ao início do /etc/ufw/antes.regras arquivo. Aqui estamos assumindo que a interface usada para a conexão é eth0:

*NAT: Postrouting aceita [0: 0] -A Postrouting -s 10.8.0.Comitê de máscaras de 0/8 -o eth0 -j 

Finalmente, devemos permitir o tráfego de entrada para o OpenVPN Serviço no UFW Firewall Manager:

$ sudo ufw permitir o OpenVPN 

Neste ponto, podemos reiniciar a UFW para que as mudanças sejam aplicadas. Se o seu firewall não foi ativado neste momento, verifique se o ssh o serviço sempre é permitido, caso contrário você pode ser cortado se estiver trabalhando remotamente.

$ sudo ufw desabilitar && sudo ufw atable 

Agora podemos começar e ativar o OpenVPN.serviço na inicialização:

$ sudo systemctl reinicie openvpn && sudo systemctl atabillevpn 

Etapa 8 - Geração de uma chave de cliente e solicitação de certificado

Nossa configuração de servidor agora está terminada. A próxima etapa consiste na geração da chave do cliente e solicitação de certificado. O procedimento é o mesmo que usamos para o servidor: apenas usamos o "cliente" como o nome em vez de "sever", gerar a chave e a solicitação de certificado e depois passar a última para a máquina CA a ser assinada.

$ ./Easyrsa Gen-Req Client NoPass 

Assim como antes, seremos solicitados a entrar em um nome comum. Os seguintes arquivos serão gerados:

  • /home/egdoc/openvpnserver/pki/reqs/cliente.Req
  • /home/egdoc/openvpnServer/pki/privado/cliente.chave

Vamos copiar o cliente.Req para a máquina CA:

$ scp pki/reqs/cliente.req egdoc@camachine:/home/egdoc 

Depois que o arquivo é copiado, em Camachine, Nós importamos o pedido:

$ ./easyrsa importar-req ~/cliente.cliente req 

Então, assinamos o certificado:

$ ./Easyrsa Sign-Req Client 

Depois de entrar na senha da CA, o certificado será criado como PKI/emitido/cliente.Crt. Vamos remover o arquivo de solicitação e copiar o certificado assinado de volta ao servidor VPN:

$ rm ~/cliente.req $ scp pki/emitido/cliente.CRT EGDOC@OpenVpnMachine:/Home/Egdoc 

Por conveniência, vamos criar um diretório para manter todas as coisas relacionadas ao cliente e mover a chave do cliente e o certificado dentro dele:

$ mkdir ~/cliente $ mv ~/cliente.CRT PKI/Privado/Cliente.chave ~/cliente 

Bom, quase lá. Agora, temos que copiar o modelo de configuração do cliente, /usr/share/doc/openvpn/exemplos/sample-config-files/cliente.conf dentro de ~/cliente diretório e modifique -o para suitar nossas necessidades:

$ cp/usr/share/doc/openvpn/exemplos/sample-config-files/cliente.conf ~/cliente 

Aqui estão as linhas que precisamos mudar no arquivo. Na linha 42 Coloque o IP do servidor real ou o nome do host no lugar de My-Server-1:

My-Server-1 1194 remoto 

Nas linhas 61 e 62 Remova a liderança ; Caráter para rebaixar privilégios após a inicialização:

Usuário ninguém Grupo Nogroup 

Nas linhas 88 para 90 e 108 Podemos ver que o certificado da CA, o certificado do cliente, a chave do cliente e a chave TLS-Auth são referenciados. Queremos comentar essas linhas, já que colocaremos o conteúdo real dos arquivos entre um par de "tags" dedicados:

  • para o certificado CA
  • para o certificado de cliente
  • para a chave do cliente
  • Para a chave TLS-Auth

Depois que as linhas são comentadas, anexamos o seguinte conteúdo na parte inferior do arquivo:

 # Aqui vai o conteúdo da CA.Arquivo CRT # aqui vai o conteúdo do cliente.Arquivo CRT # aqui vai o conteúdo do cliente.Chave-FILHO-Direcção de chave 1 # aqui vai o conteúdo do TA.Arquivo -chave  


Depois de terminar de editar o arquivo, renomeamos com o .Ovpn sufixo:

$ mv ~/cliente/cliente.conf ~/cliente/cliente.Ovpn 

Tudo o que resta a fazer é importar o arquivo em nosso aplicativo cliente para fazê -lo conectar -se à nossa VPN. Se estivermos usando o ambiente da área de trabalho do Gnome, por exemplo, podemos importar o arquivo de Rede seção do painel de controle. Na seção VPN, basta clicar no + Botão, em seguida, em “Importar do arquivo” para selecionar e importar o “.arquivo ovpn ”que você transferiu anteriormente para sua máquina cliente.



Interface GNOME para importar .arquivo ovpn

Conclusões

Neste tutorial, vimos como criar uma configuração OpenVPN funcionando. Geramos uma autoridade de certificado e usamos para assinar certificados de servidor e cliente que geramos junto com as chaves correspondentes. Vimos como configurar o servidor e como configurar a rede, permitindo encaminhamento de pacotes e executando as modificações necessárias na configuração do Firewall do UFW. Finalmente, vimos como gerar um cliente .Ovpn arquivo que pode ser importado de um aplicativo cliente para se conectar facilmente à nossa VPN. Aproveitar!

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Ubuntu básico 22.04 Configuração do OpenVPN Client/Server Connection
  • Ubuntu 20.04 Guia
  • Coisas para saber sobre o Ubuntu 20.04 Fossa focal
  • Ubuntu 20.04 Hadoop
  • Lista de clientes FTP e instalação no Ubuntu 20.04 Linux…
  • Os 8 melhores ambientes de desktop do Ubuntu (20.04 Fossa focal…
  • Testando clientes HTTPS usando o OpenSSL para simular um servidor