One place for hosting & domains

      OpenVPN

      Como instalar e configurar um servidor OpenVPN no Ubuntu 20.04


      Introdução

      Uma Virtual Private Network (VPN) permite que você atravesse redes não confiáveis como se estivesse em uma rede privada. Ela dá a você a liberdade de acessar a internet com segurança no seu smartphone ou notebook ao se conectar a uma rede não confiável, como o wi-fi em um hotel ou café.

      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 de redes não confiáveis.

      O OpenVPN é uma solução VPN do tipo Transport Layer Security (TLS) repleta de recursos e de código aberto que acomoda uma ampla variedade de configurações. Neste tutorial, você instalará o OpenVPN em um servidor Ubuntu 20.04. Em seguida, irá configurá-lo para que ele fique acessível a partir de uma máquina cliente.

      Nota: se você planeja configurar um servidor OpenVPN em um Droplet da DigitalOcean, saiba que, como muitos fornecedores de hospedagem, cobramos pelo excedente de largura de banda. Por este motivo, tenha cuidado acerca de quanto tráfego seu servidor processa.

      Veja esta página para maiores informações.

      Pré-requisitos

      Para seguir este tutorial, você vai precisar do seguinte:

      Nota: embora seja tecnicamente possível usar seu Servidor OpenVPN ou sua máquina local como sua CA, isso não é recomendável, pois abre sua 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 esta razão, este guia supõe que seu CA esteja em um servidor Ubuntu 20.04 separado que também tenha um usuário não-root com privilégios sudo e um firewall básico ativado.

      Além disso, você precisará de uma máquina de cliente que usará para se conectar ao seu Servidor OpenVPN. Neste guia, chamaremos isso de Cliente OpenVPN. Para os fins deste tutorial, é recomendável que você use sua máquina local como o cliente OpenVPN.

      Com esses pré-requisitos atendidos, você está pronto para começar a instalar e configurar um Servidor OpenVPN no Ubuntu 20.04.

      Nota: note que, caso desative a autenticação por senha enquanto estiver configurando esses servidores, você pode 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 o tutorial How to Set Up SSH Keys on Ubuntu 20.04 para obter instruções sobre como realizar qualquer uma destas soluções.

      Passo 1 — Instalando o OpenVPN e o Easy-RSA

      O primeiro passo neste tutorial é instalar o OpenVPN e o Easy-RSA. O Easy-RSA é uma ferramenta de gerenciamento de infraestrutura de chaves públicas (PKI, do inglês Public Key Infrastructure) que você usará no Servidor OpenVPN para gerar uma solicitação de certificado que você irá verificar e assinar no Servidor CA.

      Para começar, atualize o índice de pacotes do OpenVPN Server e instale o OpenVPN e o Easy-RSA. Ambos os pacotes estão disponíveis nos repositórios padrão do Ubuntu. Assim, você pode usar o apt para a instalação:

      • sudo apt update
      • sudo apt install openvpn easy-rsa

      Em seguida, você precisará criar um novo diretório no Servidor OpenVPN com o usuário não raiz chamado ~/easy-rsa:

      Agora, você precisará criar um link simbólico do script easyrsa, que o pacote instalou, para o diretório ~/easy-rsa que você acabou de criar:

      • ln -s /usr/share/easy-rsa/* ~/easy-rsa/

      Nota: embora outros guias possam instruí-lo a copiar os arquivos de pacotes do easy-rsa para o seu diretório PKI, este tutorial adota uma abordagem com links simbólicos. Como resultado, todas as atualizações realizadas no pacote easy-rsa serão refletidas automaticamente nos scripts do seu PKI.

      Por fim, garanta que o proprietário do diretório seja seu usuário sudo não raiz e restrinja o acesso a esse usuário usando o chmod:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      Assim que esses programas forem instalados e tiverem sido transferidos para os locais certos em seu sistema, o próximo passo será criar uma infraestrutura de chaves públicas (PKI) no servidor OpenVPN. Dessa forma, você poderá solicitar e gerenciar certificados TLS para os clientes e outros servidores que se conectarão à sua VPN.

      Passo 2 — Criando uma PKI para o OpenVPN

      Antes de criar a chave privada e certificado do seu servidor OpenVPN, você precisa criar um diretório local da infraestrutura de chaves públicas nele. Você usará este diretório para gerenciar as solicitações de certificado do servidor e dos clientes, ao invés de criá-las diretamente em seu servidor CA.

      Para criar um diretório PKI em seu servidor OpenVPN, você precisará preencher um arquivo chamado vars com alguns valores padrão. Primeiro, você usará o cd para entrar no diretório easy-rsa. Depois disso, você criará e editará o arquivo vars com o nano ou o editor de texto de sua preferência.

      Assim que o arquivo for aberto, cole as duas linhas a seguir:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      Essas são as únicas duas linhas de que você precisa neste arquivo vars em seu servidor OpenVPN, pois ele não será usado como uma autoridade de certificação. Elas garantirão que as suas chaves privadas e solicitações de certificado estejam configuradas para usar a moderna Criptografia de Curva Elíptica (ECC), para gerar chaves e assinaturas seguras para os clientes e servidor OpenVPN.

      Configurar seus servidores OpenVPN e CA para usar o ECC significa que, quando um cliente e o servidor tentam estabelecer uma chave simétrica compartilhada, eles podem usar os algoritmos de curva elíptica para fazer a troca. Usar o ECC para uma troca de chaves é significativamente mais rápido do que usar Diffie-Hellman simples com o algoritmo RSA clássico, pois os números são muito menores e os cálculos mais rápidos.

      Contexto: quando os clientes se conectam ao OpenVPN, eles usam uma criptografia assimétrica (também conhecida como a chave pública/privada) para realizarem um aperto de mão TLS. No entanto, ao transmitir o tráfego VPN criptografado, o servidor e os clientes usam a criptografia simétrica, que também é conhecida como criptografia de chaves compartilhadas.

      Há muito menos necessidade de poder computacional com uma criptografia simétrica, em comparação com a assimétrico: os números usados são muito menores e as CPUs modernas integram instruções para realizar operações de criptografia simétricas otimizadas. Para mudar de uma criptografia assimétrica para uma uma criptografia simétrica, o servidor OpenVPN e o cliente usarão o algoritmo Curva elíptica Diffie-Hellman (ECDH, do inglês Elliptic Curve Diffie-Hellman) para concordar com uma chave secreta compartilhada o mais rápido possível.

      Assim que tiver preenchido o arquivo vars, você pode continuar para a criação do diretório da PKI. Para fazer isso, execute o script easyrsa com a opção init-pki. Embora já tenha executado este comando no servidor CA como parte dos pré-requisitos, é necessário executá-lo aqui. Isso se dá, pois seu servidor OpenVPN e servidor CA possuem diretórios da PKI separados:

      Note que, em seu servidor OpenVPN, não há necessidade de criar uma autoridade de certificação. Seu servidor CA é o único responsável por validar e assinar certificados. A PKI em seu servidor VPN é usado apenas como um lugar conveniente e centralizado para armazenar solicitações de certificado e certificados públicos.

      Após inicializar sua PKI no servidor OpenVPN, você está pronto para continuar para o próximo passo, que é a criação de uma solicitação de certificado e uma chave privada do servidor OpenVPN.

      Passo 3 — Criando uma solicitação de certificado e chave privada do Servidor OpenVPN

      Agora que seu servidor OpenVPN possui todos os pré-requisitos instalados, o próximo passo é gerar uma chave privada e uma Solicitação de assinatura de certificado (CSR, do inglês Certificate Signing Request) em seu servidor OpenVPN. Após isso, você irá transferir a solicitação para a sua CA para que seja assinada, criando o certificado necessário. Assim que tiver um certificado assinado, você irá transferi-lo de volta para o servidor OpenVPN e instalá-lo para que o servidor o use.

      Para começar, vá para o diretório ~/easy-rsa em seu Servidor OpenVPN, com o seu usuário não raiz:

      Agora, você irá chamar o easyrsa com a opção gen-req, seguido de um Nome comum (CN, do inglês Common Name) para a máquina. O CN pode ser o que você quiser, mas escolher um nome mais descritivo pode ser útil. Ao longo deste tutorial, o CN do Servidor OpenVPN será server. Certifique-se de incluir também a opção nopass. Se não fizer isso, o arquivo solicitado 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

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

      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/server:

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      Após completar esses passos, você criou uma chave privada para seu servidor OpenVPN com sucesso. Você também gerou uma solicitação de assinatura de certificado para o servidor OpenVPN. A CSR agora está pronta para assinar por sua CA. Na próxima seção deste tutorial, você aprenderá como assinar uma CSR com a chave privada do seu servidor CA.

      Passo 4 — Assinando a solicitação de certificado do Servidor OpenVPN

      No passo anterior, você criou uma solicitação de assinatura de certificado (CSR) e uma chave privada para o servidor OpenVPN. Agora, o servidor CA precisa saber sobre o certificado server e validá-lo. Assim que a CA valida e devolve o certificado para o servidor OpenVPN, os clientes que confiam em sua CA também poderão confiar no servidor OpenVPN.

      No servidor OpenVPN, com seu usuário não raiz, use o SCP ou outro método de transferência para copiar a solicitação de certificado server.req para o servidor CA, de forma a assiná-la:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Se você seguiu o tutorial de pré-requisito How To Set Up and Configure a Certificate Authority (CA) on Ubuntu 20.04, o próximo passo é fazer login no servidor CA como o usuário não-root que você criou para gerenciar sua CA. Você usará o cd para entrar no diretório ~/easy-rsa onde você criou seu PK e, em seguida, importará a solicitação de certificado usando o script easyrsa:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/server.req server

      Output

      . . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.

      Em seguida, 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 solicitação pode ser client ou server. Como estamos trabalhando com a solicitação de certificado do servidor OpenVPN, certifique-se de usar o tipo de solicitação server:

      • ./easyrsa sign-req server server

      No resultado, você será solicitado a verificar se o pedido vem de uma fonte confiável. Digite yes, e então pressione ENTER para confirmar:

      Output

      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 . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Note que, caso tenha criptografado sua chave privada CA, você será solicitado a colocar sua senha neste ponto.

      Com esses passos completos, você assinou a solicitação de certificado do servidor OpenVPN usando a chave privada do servidor CA. O arquivo server.crt resultante contém a chave pública de criptografia do servidor OpenVPN, além de uma nova assinatura do servidor CA. O motivo da assinatura é dizer a todos que confiam no servidor CA que eles também podem confiar no servidor OpenVPN quando se conectarem a ele.

      Para terminar de configurar os certificados, copie os arquivos server.crt e ca.crt do servidor CA para o servidor OpenVPN:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Agora, já de volta no seu servidor OpenVPN, copie os arquivos de /tmp para /etc/openvpn/server:

      • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

      Agora, seu servidor OpenVPN está quase pronto para aceitar as conexões. No próximo passo, você irá executar algumas etapas adicionais para aumentar a segurança do servidor.

      Passo 5 — Configurando o material criptográfico do OpenVPN

      Para criar uma camada de segurança adicional, adicionaremos uma chave secreta extra compartilhada que o servidor e todos os clientes usarão com a diretiva tls-crypt do OpenVPN. Essa opção é usada para ofuscar o certificado TLS que é usado quando um servidor e um cliente se conectam entre si inicialmente. Ele também é usado pelo servidor OpenVPN para realizar verificações rápidas nos pacotes de entrada: se um pacote for assinado usando a chave pré-compartilhada, então o servidor o processa; se não for assinado, então o servidor sabe que vem de uma fonte não confiável e pode descartá-lo sem ter que realizar trabalho de descriptografia adicional.

      Essa opção ajudará a garantir que seu servidor OpenVPN seja capaz de lidar com tráfego não autenticado, varreduras de porta e ataques de negação de serviço, que podem amarrar recursos do servidor. Ela também torna mais difícil identificar o tráfego de rede do OpenVPN.

      Para gerar a chave tls-crypt pré-compartilhada, execute o que vem a seguir no servidor OpenVPN, no diretório ~/easy-rsa:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      O resultado será um arquivo chamado ta.key. Copie-o para o diretório /etc/openvpn/server/:

      • sudo cp ta.key /etc/openvpn/server

      Com esses arquivos instalados no servidor OpenVPN, você está pronto para criar certificados de cliente e arquivos de chave para seus usuários, que você usará para se conectar à VPN.

      Passo 6 — Gerando um certificado de cliente e um par de chaves

      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 a solicitação de certificado no servidor OpenVPN. O benefício dessa abordagem é 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 ~/easy-rsa
      • ./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 seu Servidor CA usando um método seguro:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Agora, faça login no seu Servidor CA. Em seguida, vá para o diretório do EasyRSA e importe a solicitação de certificado:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/client1.req client1

      Então, assine a solicitação da mesma forma 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

      Quando solicitado, digite yes para confirmar que você pretende assinar o pedido de certificado e que ele veio de uma fonte confiável:

      Output

      Type 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

      De volta no seu servidor OpenVPN, copie o certificado do 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/, e defina as permissões apropriadas para o seu usuário sudo:

      • cp ~/easy-rsa/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
      • sudo chown sammy.sammy ~/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 OpenVPN. 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 prosseguir para a configuração do OpenVPN.

      Passo 7 — Configurando o OpenVPN

      Assim como muitas outras ferramentas que são amplamente usadas, o OpenVPN possui várias opções de configuração disponíveis para personalizar seu servidor para as suas necessidades específicas. Nesta seção, forneceremos instruções sobre como instalar uma configuração do servidor OpenVPN com base em um dos arquivos de configuração da amostra que é incluído na documentação deste software.

      Primeiro, copie o arquivo de amostra server.conf como um ponto de partida para seu próprio arquivo de configuração:

      • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
      • sudo gunzip /etc/openvpn/server/server.conf.gz

      Abra o novo arquivo para edição com o editor de texto da sua escolha. Usaremos o nano em nosso exemplo:

      • sudo nano /etc/openvpn/server/server.conf

      Vamos precisar alterar algumas linhas neste arquivo. Primeiro, encontre a seção HMAC da configuração, procurando pela diretiva tls-auth. Essa linha deve ser descomentada. Transforme-a em comentário adicionando um ; no início da linha. Então, adicione uma linha nova após ela, contendo apenas o valor tls-crypt ta.key:

      /etc/openvpn/server/server.conf

      ;tls-auth ta.key 0 # This file is secret
      tls-crypt ta.key
      

      Em seguida, encontre a seção sobre cifras criptográficas, procurando pelas linhas cipher. O valor padrão é definido como AES-256-CBC. No entanto, a criptografia AES-256-GCM oferece um melhor nível de criptografia, desempenho é compatível com os clientes do OpenVPN atualizados. Vamos transformar em comentário o valor padrão adicionando um sinal ; no início dessa linha. Em seguida, adicionaremos outra linha após ela, contendo o valor atualizado de AES-256-GCM:

      /etc/openvpn/server/server.conf

      ;cipher AES-256-CBC
      cipher AES-256-GCM
      

      Logo após essa linha, adicione uma diretiva auth para selecionar o algoritmo digest HMAC de mensagem. Para fazer isso, o SHA256 é uma boa escolha:

      /etc/openvpn/server/server.conf

      auth SHA256
      

      Em seguida, encontre a linha que contém uma diretiva dh, que define os parâmetros Diffie-Hellman. Como configuramos todos os certificados para usar a criptografia de curva elípticado, um arquivo de semente Diffie-Hellman não é necessário. Transforme em comentário a linha existente que se parece com dh dh2048.pem ou dh dh.pem. O nome do arquivo para a chave Diffie-Hellman pode ser diferente do que está listado no arquivo de configuração do servidor de exemplo. Então, adicione uma linha após ela com o conteúdo dh none:

      /etc/openvpn/server/server.conf

      ;dh dh2048.pem
      dh none
      

      Em seguida, queremos que o OpenVPN seja executado sem privilégios assim que for iniciado,assim, precisamos dizer a ele para executar com o usuário nobody e com o grupo nogroup. Para habilitar isso, encontre e descomente as linha user nobody e group nogroup, removendo o sinal ; do início de cada linha:

      /etc/openvpn/server/server.conf

      user nobody
      group nogroup
      

      (Opcional) Forçar alterações no DNS para redirecionar todo o tráfego através do VPN

      As configurações acima criarão a conexão VPN entre seu cliente e servidor, 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 de cliente pela VPN, você provavelmente irá querer forçar algumas configurações DNS extras para os computadores do cliente.

      Para começar, encontre e descomente a linha que contém push "redirect-gateway def1 bypass-dhcp". Ao fazer isso, você dirá ao seu cliente para redirecionar todo o tráfego dele através do seu Servidor OpenVPN. Esteja ciente de que habilitar esta funcionalidade pode causar problemas de conectividade com outros serviços de rede, como o SSH:

      /etc/openvpn/server/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Logo abaixo desta linha, encontre a seção dhcp-option. Novamente, remova o “;” do início de ambas as linhas para descomentá-las:

      /etc/openvpn/server/server.conf

      push "dhcp-option DNS 208.67.222.222"
      push "dhcp-option DNS 208.67.220.220"
      

      Essas linhas dirão ao seu cliente para usar os resolvedores de OpenDNS gratuitos nos endereços IP listados. Se preferir outros resolvedores de DNS, você pode substituí-los no lugar dos IPs destacados.

      Isso ajudará os clientes a reconfigurar suas configurações de DNS, para que usem o túnel VPN como gateway padrão.

      (Opcional) Ajustar a porta e o protocolo

      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.

      Para alterar o OpenVPN para escutar na porta 443, abra o arquivo server.conf e encontre a linha que se parece com esta:

      /etc/openvpn/server/server.conf

      port 1194
      

      Edite-a, de forma que a porta seja 443:

      /etc/openvpn/server/server.conf

      # Optional!
      port 443
      

      Geralmente, o protocolo também é restrito a essa porta. Se assim for, encontre a linha proto abaixo da linha port e mude o protocolo de udp para tcp:

      /etc/openvpn/server/server.conf

      # 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:

      Encontre a linha explicit-exit-notify no final do arquivo e mude o valor para 0:

      /etc/openvpn/server/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Se não tiver necessidade de usar uma porta e protocolos diferentes, é melhor deixar essas opções inalteradas.

      (Opcional) Apontar para credenciais não padrão

      Se você selecionou um nome diferente durante o comando ./easyrsa gen-req server mais cedo, modifique as linhas cert e key no arquivo de configuração server.conf para que elas apontem para os arquivos .crt e .key apropriados. Se você usou o nome padrão, server, isso tudo já está configurado corretamente:

      /etc/openvpn/server/server.conf

      cert server.crt
      key server.key
      

      Quando você terminar, salve e feche o arquivo.

      Agora, você terminou de configurar suas configurações gerais do OpenVPN. No próximo passo, vamos personalizar as opções de rede do servidor.

      Passo 8 — Ajustando a configuração da rede do Servidor OpenVPN

      Existem alguns aspectos da configuração de rede do servidor que precisam ser ajustados para que o OpenVPN possa rotear corretamente o tráfego pela 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.

      Para ajustar a configuração padrão de encaminhamento de IP do seu servidor OpenVPN, abra o arquivo /etc/sysctl.conf usando o nano ou seu editor preferido:

      • sudo nano /etc/sysctl.conf

      A seguir, adicione a seguinte linha ao final do arquivo:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Salve e feche o arquivo quando você terminar.

      Para ler o arquivo e carregar os novos valores para a sessão atual, digite:

      Output

      net.ipv4.ip_forward = 1

      Agora, seu servidor OpenVPN será capaz de encaminhar o tráfico de entrada de um dispositivo Ethernet para outro. Essa configuração garante que o servidor possa direcionar o tráfego de clientes que se conectam na interface VPN virtual através de seus outros dispositivos Ethernet físicos. Essa configuração irá rotear todo o tráfego Web do seu cliente através do endereço IP do seu servidor, e o endereço IP público do seu cliente ficará efetivamente escondido.

      No próximo passo, você precisará configurar algumas regras de firewall para garantir que o tráfego de entrada e saída do seu servidor OpenVPN flua corretamente.

      Passo 9 — Configuração do firewall

      Até agora, você instalou o OpenVPN em seu servidor, configurou-o e gerou as chaves e certificados necessários para que seu cliente acesse a VPN. No entanto, você ainda não providenciou ao OpenVPN nenhuma instrução sobre onde enviar o tráfego Web de entrada de usuários. Você pode estipular como o servidor deve lidar com o tráfego de clientes estabelecendo algumas regras de firewall e configurações de roteamento.

      Supondo que você tenha seguido os pré-requisitos no início deste tutorial, você já deve ter o ufw instalado e em funcionamento no seu servidor. Para permitir o OpenVPN através do firewall, você precisará habilitar o mascaramento, um conceito do iptables que fornece a tradução dinâmica de endereço de rede (NAT) para rotear corretamente as conexões com clientes.

      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:

      Sua interface pública é a string encontrada dentro da saída desse comando que vem após a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0, que está destacada abaixo:

      Output

      default via 159.65.160.1 dev eth0 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 eth0 na linha -A POSTROUTING abaixo pela interface que você encontrou no comando acima:

      /etc/ufw/before.rules

      #
      # 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 eth0 (change to the interface you discovered!)
      -A POSTROUTING -s 10.8.0.0/8 -o eth0 -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:

      /etc/default/ufw

      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. Com as regras do firewall instaladas, podemos inicializar o serviço OpenVPN no servidor.

      Passo 10 — Inicializando o OpenVPN

      O OpenVPN executa como um serviço systemd. Dessa forma, podemos usar o systemctl para gerenciá-lo. Vamos configurar o OpenVPN para iniciar na inicialização do sistema, para que você possa se conectar à sua VPN a qualquer momento, contanto que seu servidor esteja em execução. Para fazer isso, habilite o serviço OpenVPN, adicionando-o ao systemctl:

      • sudo systemctl -f enable openvpn-server@server.service

      Em seguida, inicie o serviço OpenVPN:

      • sudo systemctl start openvpn-server@server.service

      Verifique novamente se o serviço OpenVPN está ativo com o seguinte comando: Você deve ver active (running) no resultado:

      • sudo systemctl status openvpn-server@server.service

      Output

      ● openvpn-server@server.service - OpenVPN service for server Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 16872 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 1137) Memory: 1.0M CGroup: /system.slice/system-openvpnx2dserver.slice/openvpn-server@server.service └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed

      Agora, completamos a configuração na parte do servidor para o OpenVPN. Em seguida, você irá configurar sua máquina de cliente e se conectar ao Servidor OpenVPN.

      Passo 11 — Criando a infraestrutura de configuração de clientes

      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 esse novo arquivo usando o nano ou seu editor de texto preferido:

      • 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:

      ~/client-configs/base.conf

      . . .
      # 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:

      ~/client-configs/base.conf

      proto udp
      

      Em seguida, descomente as diretivas user e group removendo o sinal “;” no começo de cada linha:

      ~/client-configs/base.conf

      # 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:

      ~/client-configs/base.conf

      # 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
      

      De maneira similar, transforme em comentário a diretiva tls-auth, pois você adicionará a ta.key diretamente no arquivo de configuração do cliente (e o servidor é configurado para usar o tls-crypt):

      ~/client-configs/base.conf

      # 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/server.conf:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      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:

      ~/client-configs/base.conf

      key-direction 1
      

      Finalmente, adicione algumas linhas comentadas para lidar com diferentes métodos que os clientes de VPN baseados em Linux usarão para a resolução DNS. Você adicionará dois conjuntos semelhantes, mas separados por linhas comentadas. O primeiro conjunto é para clientes que não usam o systemd-resolved para gerenciar o DNS. Esses clientes dependem do utilitário resolvconf para atualizar informações de DNS para clientes Linux.

      ~/client-configs/base.conf

      ; script-security 2
      ; up /etc/openvpn/update-resolv-conf
      ; down /etc/openvpn/update-resolv-conf
      

      Agora, adicione outro conjunto de linhas para clientes que usam o systemd-resolved para a resolução DNS:

      ~/client-configs/base.conf

      ; script-security 2
      ; up /etc/openvpn/update-systemd-resolved
      ; down /etc/openvpn/update-systemd-resolved
      ; down-pre
      ; dhcp-option DOMAIN-ROUTE .
      

      Salve e feche o arquivo quando você terminar.

      Mais tarde no Passo 13 – Instalando a Configuração de Cliente deste tutorial, você aprenderá como determinar como a resolução DNS funciona em clientes Linux e em qual seção descomentar.

      Em seguida, vamos criar um script 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:

      ~/client-configs/make_config.sh

      #!/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-crypt>') 
          ${KEY_DIR}/ta.key 
          <(echo -e '</tls-crypt>') 
          > ${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 de usar este método é que, caso tenha necessidade de adicionar um cliente no futuro, você pode executar esse script para criar rapidamente um novo arquivo de configuração e garantir que todas as informações importantes sejam 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.

      Passo 12 — Gerando as configurações de clientes

      Se acompanhou o guia, você criou um certificado e chave de cliente nomeados client1.crt e client1.key, respectivamente, no passo 6. É 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
      • ./make_config.sh client1

      Isso criará um arquivo chamado client1.ovpn no seu diretório ~/client-configs/files:

      • ls ~/client-configs/files

      Output

      client1.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 exemplo de comando SFTP que você pode executar a partir do seu computador local (macOS ou Linux). Isso irá copiar o arquivo client1.ovpn que criamos no último passo para o seu diretório base:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      Aqui estão diversas ferramentas e tutoriais para transferir arquivos com segurança do servidor OpenVPN para um computador local:

      Passo 13 — Instalando a configuração do cliente

      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.

      Windows

      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 FilesOpenVPNconfig
      

      Ao iniciar o OpenVPN, ele localizará 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.

      macOS

      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.

      Linux

      Instalando

      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 dnf install epel-release
      • sudo dnf install openvpn

      Configurando Clientes que usam systemd-resolved

      Primeiro, verifique se seu sistema está usando o systemd-resolved para lidar com a resolução DNS verificando o arquivo /etc/resolv.conf:

      Output

      # This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0

      Se seu sistema estiver configurado para usar o systemd-resolved para a resolução DNS, o endereço IP após a opção nameserver será 127.0.0.53. Também deve haver comentários no arquivo, como a saída mostrada que explica como o systemd-resolved está gerenciando o arquivo. Se você tiver um endereço IP diferente do 127.0.0.53, então existem chances de seu sistema não estar usando o systemd-resolved e você pode ir para a próxima seção sobre a configuração de clientes Linux que têm um script update-resolv-conf.

      Para apoiar esses clientes, instale primeiro o pacote openvpn-systemd-resolved. Ele fornece scripts que forçarão o systemd-resolved a usar o servidor VPN para a resolução DNS.

      • sudo apt install openvpn-systemd-resolved

      Assim que este pacote estiver instalado, configure o cliente para usá-lo e enviar todas as consultas de DNS pela interface VPN. Abra o arquivo VPN do cliente:

      Agora, descomente as seguintes linhas que você adicionou anteriormente:

      client1.ovpn

      script-security 2
      up /etc/openvpn/update-systemd-resolved
      down /etc/openvpn/update-systemd-resolved
      down-pre
      dhcp-option DOMAIN-ROUTE .
      

      Configurando Clientes que usam update-resolv-conf

      Se o sistema não estiver usando o systemd-resolved para gerenciar o DNS, verifique se a distribuição inclui um script /etc/openvpn/update-resolv-conf em vez disso:

      Output

      update-resolv-conf

      Se seu cliente inclui o arquivo update-resolv-conf, então edite o arquivo de configuração do cliente OpenVPN que você transferiu anteriormente:

      Descomente as três linhas que você adicionou para ajustar as configurações de DNS:

      client1.ovpn

      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:

      client1.ovpn

      group nobody
      

      Salve e feche o arquivo.

      ** Conectando **

      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.

      Nota: se seu cliente usa o systemd-resolved para gerenciar o DNS, verifique se as configurações foram aplicadas corretamente executando o comando systemd-resolve --status desta forma:

      • systemd-resolve --status tun0

      Deverá ver um resultado como o seguinte:

      Output

      Link 22 (tun0) . . . DNS Servers: 208.67.222.222 208.67.220.220 DNS Domain: ~.

      Se você ver os endereços IP dos servidores de DNS que você configurou no servidor OpenVPN, junto com a configuração ~. para o DNS Domain na saída, então você configurou corretamente seu cliente para usar o resolvedor DNS do servidor VPN. Você também pode verificar se está enviando consultas de DNS pela VPN usando um site como o DNS leak test.com.

      iOS

      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 de Documentos OpenVPN. iTunes mostrando o perfil VPN pronto para carregar no iPhone

      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.

      O app iOS do OpenVPN mostrando o novo perfil pronto para importaçãoConectando-se

      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 da VPN em Settings não pode ser usado para se conectar à VPN. Se tentar fazer isso, você receberá uma notificação para se conectar apenas usando o app OpenVPN.

      The OpenVPN iOS app connected to the VPN

      Android

      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 FILE para importar o perfil.

      The OpenVPN Android app profile import menu selection

      Então, navegue até a localização do perfil salvo (a captura de tela usa /storage/emulated/0/openvpn) e selecione o seu arquivo .ovpn. Clique no botão IMPORT para terminar a importação deste perfil.

      The OpenVPN Android app selecting VPN profile to import

      Conectando-se Assim que o perfil for adicionado, você verá uma tela como esta:

      O app Android do OpenVPN com o novo perfil adicionado

      Para se conectar, clique no botão de alternância próximo do perfil que quiser usar. Você verá as estatísticas em tempo real da sua conexão e tráfego sendo roteado através do seu servidor OpenVPN: O app Android do OpenVPN conectado à VPN

      Para desconectar-se, simplesmente clique novamente no botão de alternância no canto superior esquerdo. Você será solicitado a confirmar que deseja desconectar-se da sua VPN.

      Passo 14 — Testando sua conexão VPN (opcional)

      Nota: esse método para testar sua conexão VPN funcionará apenas se você optou por rotear todo o tráfego pela VPN no Passo 7, quando você editou o arquivo server.conf para o OpenVPN.

      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.

      Passo 15 — Revogando certificados de clientes

      De vez em quando, você pode precisar revogar um certificado de cliente para impedir o acesso adicional ao servidor OpenVPN.

      Para fazer isso, siga o exemplo no tutorial de pré-requisito How to Set Up and Configure a Certificate Authority on Ubuntu 20.04, sob a seção Revoking a Certificate

      Assim que tiver revogado um certificado para um cliente usando essas instruções, você precisará copiar o arquivo crl.pem gerado para o seu servidor OpenVPN no diretório /etc/openvpn/server:

      • sudo cp /tmp/crl.pem /etc/openvpn/server/

      Em seguida, abra o arquivo de configuração do servidor OpenVPN:

      • sudo nano /etc/openvpn/server/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:

      /etc/openvpn/server/server.conf

      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@server.service

      O cliente já não deve conseguir se conectar com sucesso ao servidor usando a credencial antiga.

      Para revogar outros clientes, siga este processo:

      1. Revogue o certificado com o comando ./easyrsa revoke client_name
      2. Gere um novo CRL
      3. Transfira o novo arquivo crl.pem para o seu servidor OpenVPN e copie-o para o diretório /etc/openvpn/server/ para sobrepor a lista antiga.
      4. Reinicie o serviço OpenVPN.

      Você pode usar este processo para revogar quaisquer certificados que você tenha emitido anteriormente para seu servidor.

      Conclusão

      Agora, você deve ter uma rede virtual privada totalmente operacional em funcionamento no seu Servidor OpenVPN. Você pode navegar na Web e baixar conteúdo sem se preocupar com atores mal-intencionados rastreando sua atividade.

      Há vários passos que você pode seguir para personalizar ainda mais sua instalação do OpenVPN, tal como configurar seu cliente para se conectar à VPN automaticamente ou configurar regras específicas do cliente e políticas de acesso. Para esses exemplos e outras personalizações do OpenVPN, consulte a documentação oficial do OpenVPN.

      Para configurar mais clientes, você precisa seguir apenas os passos 6 e 11 a 13 para cada dispositivo adicional. Para revogar o acesso a clientes, siga o passo 15.



      Source link

      Установка и настройка сервера OpenVPN в Ubuntu 20.04


      Введение

      Виртуальная частная сеть (VPN) позволит вам работать в незащищенных сетях, как если бы вы находились в частной сети. Она предоставляет возможность получить безопасный и защищенный доступ к сети Интернет со смартфона или ноутбука при подключении к недоверенной сети, например Wi-Fi в отеле или в кафе.

      В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение, а также любой незашифрованный трафик HTTP при работе в незащищенной сети.

      OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом, которое использует протокол TLS и позволяет использовать широкий круг конфигураций. В этом обучающем руководстве мы установим OpenVPN на сервере Ubuntu 20.04 и настроим его для доступа с клиентского компьютера.

      Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.

      Дополнительную информацию можно найти на этой странице.

      Предварительные требования

      Для данного обучающего руководства вам потребуется следующее:

      Примечание. Хотя технически возможно использовать ваш сервер OpenVPN или ваш локальный компьютер в качестве центра сертификации, делать это не рекомендуется, поскольку это открывает ваш VPN для ряда уязвимостей. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш ЦС располагается на отдельном сервере Ubuntu 20.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.

      Помимо этого вам потребуется клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. В этом обучающем руководстве мы будем называть его клиентом OpenVPN. В целях данного руководства рекомендуется использовать ваш локальный компьютер в качестве клиента OpenVPN.

      После выполнения всех предварительных требований вы можете начать установку и настройку сервера OpenVPN в Ubuntu 20.04.

      Примечание. Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, то можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего руководства. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере ЦС, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 20.04.

      Шаг 1 — Установка OpenVPN и Easy-RSA

      Первый шаг этого руководства подразумевает установку OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для генерации запроса сертификата, который вы затем будете проверять и подписывать на сервере ЦС.

      Для начала обновите указатель пакетов сервера OpenVPN и установите OpenVPN и Easy-RSA. Оба пакета доступны в репозиториях Ubuntu по умолчанию, и поэтому вы можете использовать apt для установки:

      • sudo apt update
      • sudo apt install openvpn easy-rsa

      Далее вам потребуется создать новую директорию на сервере OpenVPN от имени вашего пользователя без прав root с названием ~/easy-rsa:

      Теперь вам нужно создать символьную ссылку из скрипта easyrsa, установленного пакетом в директории ~/easy-rsa, которую вы только что создали:

      • ln -s /usr/share/easy-rsa/* ~/easy-rsa/

      Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa в директорию PKI, в этом обучающем руководстве мы используем подход на основе символьных ссылок. Таким образом, любые изменения пакета easy-rsa будут автоматически отражаться в ваших скриптах PKI.

      В заключение убедитесь, что владельцем директории является ваш пользователь без прав root с привилегиями sudo, и ограничьте доступ с помощью команды chmod:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      После установки этих программ и их перемещения в нужные локации в вашей системе следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к вашему VPN.

      Шаг 2 — Создание PKI для OpenVPN

      Прежде чем вы сможете создавать закрытый ключ и сертификат вашего сервера OpenVPN, вам нужно создать локальную директорию инфраструктуры открытых ключей на сервере OpenVPN. Вы будете использовать эту директорию для управления запросами сертификата сервера и клиентов, вместо того чтобы получать их прямо на сервере ЦС.

      Для создания директории PKI на сервере OpenVPN вам нужно указать в файле vars ряд значений по умолчанию. Используйте команду cd для перехода в каталог easy-rsa, а затем создайте и отредактируйте файл vars с помощью nano или другого предпочитаемого текстового редактора:

      После открытия файла вставьте следующие две строки:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      Эти две строки потребуются вам в файле vars на сервере OpenVPN, поскольку он не будет использоваться в качестве ЦС. Они будут гарантировать, что ваши закрытые ключи и запросы сертификата будут настроены для использования современной криптографии на эллиптических кривых (Elliptic Curve Cryptography, ECC) при генерации ключей и защищенных подписей для ваших клиентов и сервера OpenVPN.

      Под настройкой использования ECC для ваших серверов OpenVPN и ЦС подразумевается, что, когда клиент и сервер будут пытаться установить общий симметричный ключ, они будут использовать алгоритмы эллиптической кривой для обмена. Использование ECC для обмена ключами значительно быстрее, чем использование простого алгоритма Диффи — Хеллмана с классическим алгоритмом RSA, поскольку числа намного меньше, а вычисления выполняются быстрее.

      Справка: когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как открытый/закрытый ключ) для выполнения TLS-рукопожатия. Однако при передаче шифрованного VPN-трафика сервер и клиенты используют симметричное шифрование, которое также известно как шифрование общедоступного ключа.

      Симметричное шифрование требует гораздо меньшего количества вычислений по сравнению с асимметричным: используемые числа гораздо меньше, и современные процессоры имеют инструкции для выполнения оптимизированного симметричного шифрования. Для переключения с асимметричного на симметричное шифрование сервер OpenVPN и клиент будут использовать алгоритм Диффи — Хеллмана на эллиптических кривых для согласования общего секретного ключа в максимально короткие сроки.

      После добавления в файл vars данных вы можете перейти к созданию директории PKI. Для этого воспользуйтесь скриптом easyrsa с опцией init-pki. Хотя вы уже использовали эту команду на сервере ЦС в соответствии с предварительными требованиями, необходимо запустить ее здесь, поскольку сервер OpenVPN и сервер ЦС имеют разные директории PKI.

      Обратите внимание, что на сервере OpenVPN не нужно создавать центр сертификации. Ваш сервер ЦС отвечает за валидацию и подпись сертификатов. PKI на вашем сервере VPN используется только в качестве удобного и централизованного места хранения запросов сертификата и публичных сертификатов.

      После инициализации PKI на сервере OpenVPN вы можете перейти к следующему шагу и создать запрос сертификата и закрытого ключа сервера OpenVPN.

      Шаг 3 — Создание запроса сертификата и закрытого ключа сервера OpenVPN

      Теперь, когда на вашем сервере OpenVPN установлено все необходимое, на следующем шаге мы сгенерируем закрытый ключ и запрос подписи сертификата на вашем сервере OpenVPN. После этого вы передадите запрос в ваш центр сертификации для подписи, создав необходимый сертификат. После подписи сертификата вы передадите его назад на сервер OpenVPN и установите его для использования на сервере.

      Для начала перейдите в директорию ~/easy-rsa на сервере OpenVPN, используя вашего пользователя без прав root:

      Теперь вы можете вызвать easyrsa с опцией gen-req, за которой необходимо указать стандартное имя для компьютера. Вы можете использовать любое стандартное имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем руководстве для сервера OpenVPN будет использоваться стандартное имя server. Обязательно добавьте опцию nopass. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями.

      Примечание. Если вы выберете любое другое имя, а не server, вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в директорию /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf, чтобы он указывал на соответствующие файлы .crt и .key.

      • ./easyrsa gen-req server nopass

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

      В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в директорию /etc/openvpn/server:

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      В результате выполнения этих шагов вы успешно создали закрытый ключ для вашего сервера OpenVPN. Также вы создали запрос на подпись сертификата для сервера OpenVPN. Запрос на подпись сертификата теперь готов к подписи в вашем центре сертификации. В следующем разделе этого обучающего руководства вы узнаете, как подписать запрос на подпись сертификата с помощью закрытого ключа вашего сервера ЦС.

      Шаг 4 — Подпись запроса сертификата сервера OpenVPN

      На предыдущем шаге вы создали запрос на подпись сертификата (CSR) и закрытый ключ для сервера OpenVPN. Теперь сервер ЦС должен узнать о сертификате server и выполнить его валидацию. После подтверждения сертификата сервером ЦС и его отправки назад на сервер OpenVPN клиенты, которые доверяют вашему ЦС, также смогут доверять серверу OpenVPN.

      На сервере OpenVPN от имени вашего пользователя без прав root воспользуйтесь запросом на передачу или другим методом передачи для копирования запроса сертификата server.req на сервер ЦС для подписи:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Если вы выполнили предварительное требование обучающего модуля Установка и настройка Центра сертификации (ЦС) в Ubuntu 20.04, следующим шагом будет войти на сервер ЦС как пользователь без прав root, которого вы создали для управления ЦС. Вы использовали команду cd для перехода в каталог ~/easy-rsa, где вы создали и импортируйте запрос сертификата с помощью скрипта easyrsa:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/server.req server

      Output

      . . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.

      Далее подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и стандартного имени. В качестве типа запроса может использоваться client или server. Поскольку мы работаем с запросом сертификата сервера OpenVPN, необходимо использовать тип запроса server:

      • ./easyrsa sign-req server server

      В выводе вам будет нужно подтвердить, что запрос поступил из надежного источника. Введите yes, а затем нажмите ENTER для подтверждения:

      Output

      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 . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Обратите внимание, что если вы зашифровали закрытый ключ ЦС, вам будет предложено ввести пароль в данный момент.

      В результате выполнения этих шагов вы успешно подписали запрос сертификата сервера OpenVPN с помощью закрытого ключа сервера ЦС. Полученный файл server.crt​​​ содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС. Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.

      Для завершения настройки сертификатов скопируйте файлы server.crt и ca.crt с сервера ЦС на сервер OpenVPN:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Теперь вернитесь на ваш сервер OpenVPN, скопируйте файлы из /tmp в /etc/openvpn/server:

      • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

      Теперь ваш сервер OpenVPN почти готов к принятию подключений. На следующем шаге вы выполните ряд дополнительных шагов для повышения безопасности сервера.

      Шаг 5 — Настройка криптографических материалов OpenVPN

      В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты, с помощью директивы OpenVPN tls-crypt. Эта опция используется, чтобы «затемнить» сертификат TLS, используемый, когда сервер и клиент первоначально подключаются друг к другу. Также она используется сервером OpenVPN для выполнения быстрых проверок входящих пакетов: если пакет подписан с помощью предварительно предоставленного ключа, сервер обрабатывает его, если подпись отсутствует, сервер понимает, что пакет получен из непроверенного источника, и может отклонить его, не выполняя дополнительную работу по расшифровке.

      Эта опция поможет убедиться, что ваш сервер OpenVPN может справляться с неудостоверенным трафиком, сканированием портов и DoS-атаками, которые могут связывать ресурсы сервера. Она также затрудняет выявление сетевого трафика OpenVPN.

      Для получения предварительно предоставленного ключа tls-crypt​​​ запустите следующую команду на сервере OpenVPN в директории ~/easy-rsa:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      В результате вы получите файл с именем ta.key. Скопируйте его в директорию /etc/openvpn/server/:

      • sudo cp ta.key /etc/openvpn/server

      После получения этих файлов на сервере OpenVPN вы можете переходить к созданию клиентских сертификатов и файлов ключей для ваших пользователей, которые вы будете использовать для подключения к VPN.

      Шаг 6 — Создание сертификата клиента и пары ключей

      Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в ЦС для подписания, в этом обучающем руководстве мы рассмотрим процесс генерирования запроса сертификата на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.

      В этом обучающем руководстве мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем руководстве мы будем использовать первую пару сертификат/ключ под именем client1.

      Вначале создайте в домашней директории структуру директорий, где будут храниться файлы сертификатов и ключей клиентской системы:

      • mkdir -p ~/client-configs/keys

      Поскольку в этой директории будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для нее следует закрыть все разрешения:

      • chmod -R 700 ~/client-configs

      Вернитесь в директорию EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:

      • cd ~/easy-rsa
      • ./easyrsa gen-req client1 nopass

      Нажмите ENTER, чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданную директорию ~/client-configs/keys/​​​:

      • cp pki/private/client1.key ~/client-configs/keys/

      Затем передайте файл client1.req на сервер ЦС, используя безопасный метод:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Теперь выполните вход на ваш сервер ЦС. Затем перейдите в директорию EasyRSA и импортируйте запрос сертификата:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/client1.req client1

      Затем подпишите запрос, как вы делали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client:

      • ./easyrsa sign-req client client1

      При запросе введите yes, чтобы подтвердить, что вы планируете подписать запрос сертификата и что он поступил из доверенного источника:

      Output

      Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

      Если вы зашифровали свой ключ ЦС, вам будет предложено ввести пароль.

      В результате будет создан файл клиентского сертификата с именем client1.crt. Переместите этот файл обратно на сервер.

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Вернитесь на ваш сервер OpenVPN, скопируйте клиентский сертификат в директорию ~/client-configs/keys/​​:

      • cp /tmp/client1.crt ~/client-configs/keys/

      Затем скопируйте файлы ca.crt и ta.key в директорию ~/client-configs/keys/ и предоставьте соответствующие разрешения для вашего пользователя sudo:

      • cp ~/easy-rsa/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
      • sudo chown sammy.sammy ~/client-configs/keys/*

      В результате вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих директориях на вашем сервере OpenVPN. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Теперь вы можете перейти к настройке OpenVPN.

      Шаг 7 — Настройка OpenVPN

      Как и во многих широко используемых инструментах с открытым исходным кодом, OpenVPN имеет множество доступных параметров настройки для кастомизации вашего сервера согласно вашим нуждам. В этом разделе мы предоставим инструкции по настройке конфигурации сервера OpenVPN на основе одного из примеров файлов конфигурации, который включен в документацию для этого программного обеспечения.

      Вначале скопируйте файл server.conf в качестве отправной точки для вашего собственного файла конфигурации:

      • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
      • sudo gunzip /etc/openvpn/server/server.conf.gz

      Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем случае мы будем использовать nano:

      • sudo nano /etc/openvpn/server/server.conf

      Нам нужно изменить несколько строк в этом файле. Сначала необходимо найти раздел HMAC в конфигурации, выполнив поиск директивы tls-auth. Эта строка должна быть разкомментирована. Закомментируйте ее, добавив ; в начало строки. Затем добавьте после нее новую строку, содержащую только значение tls-crypt ta.key​​​:

      /etc/openvpn/server/server.conf

      ;tls-auth ta.key 0 # This file is secret
      tls-crypt ta.key
      

      Затем найдите раздел криптографических шифров, выполнив поиск строк с текстом cipher. По умолчанию установлено значение AES-256-CBC, однако шифр AES-256-GCM обеспечивает более высокий уровень шифрования, производительности и лучше поддерживается современными клиентами OpenVPN. Мы закомментируем значение по умолчанию, добавив ; в начало этой строки, а затем добавим другую строку после нее, содержащую обновленное значение AES-256-GCM:

      /etc/openvpn/server/server.conf

      ;cipher AES-256-CBC
      cipher AES-256-GCM
      

      Сразу после этой строки добавьте директиву auth для выбора алгоритма выборки сообщений HMAC. Для этого хорошо подойдет SHA256:

      /etc/openvpn/server/server.conf

      auth SHA256
      

      Затем найдите строку с директивой dh, которая определяет параметры алгоритма Диффи — Хеллмана. Поскольку мы настроили все сертификаты для использования криптографии на эллиптических кривых, нет необходимости в использовании файла прототипа Диффи — Хеллмана. Закомментируйте существующую строку dh dh2048.pem​​​ или dh dh.pem. Имя файла для ключа Диффи — Хеллмана может отличаться от того, что перечислено в примере файла конфигурации сервера. Затем добавьте строку после нее с содержанием dh none:

      /etc/openvpn/server/server.conf

      ;dh dh2048.pem
      dh none
      

      Далее нам нужно запустить OpenVPN без привилегий, с которыми он запущен, поэтому нам нужно указать на необходимость запуска с пользователем nobody и группой nogroup. Чтобы активировать эту возможность, найдите и разкомментируйте строки user nobody и group nogroup, удалив ; в начале каждой строки:

      /etc/openvpn/server/server.conf

      user nobody
      group nogroup
      

      (Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN

      Вышеуказанные настройки создадут соединение VPN между вашим клиентом и сервером, но не будут заставлять соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего клиентского трафика, вам нужно будет передать дополнительные настройки на клиентские компьютеры.

      Для начала найдите и разкомментируйте строку push "redirect-gateway def1 bypass-dhcp". Она будет сообщать вашему клиенту о необходимости перенаправлять весь трафик через ваш сервер OpenVPN. Обратите внимание, что при активации этой функции могут возникать проблемы с подключением к другим сетевым службам, например SSH:

      /etc/openvpn/server/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Под этой строкой найдите раздел dhcp-option. Удалите ; в начале обеих строк, чтобы разкомментировать эти строки:

      /etc/openvpn/server/server.conf

      push "dhcp-option DNS 208.67.222.222"
      push "dhcp-option DNS 208.67.220.220"
      

      Эти строки будут сообщать вашему клиенту о необходимости использования бесплатных интерпретаторов OpenDNS на перечисленных IP-адресах. Если вы предпочитаете использовать другие интерпретаторы DNS, вставьте их на место выделенных IP-адресов.

      Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

      (Необязательно) Изменение порта и протокола

      По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила брандмауэра.

      Чтобы заставить OpenVPN прослушивать порт 443, откройте файл server.conf и найдите строку, которая выглядит следующим образом:

      /etc/openvpn/server/server.conf

      port 1194
      

      Измените ее, указав порт 443:

      /etc/openvpn/server/server.conf

      # Optional!
      port 443
      

      Довольно часто этот порт также ограничивает протокол. В этом случае найдите строку proto под строкой port и измените протокол с udp на tcp:

      /etc/openvpn/server/server.conf

      # Optional!
      proto tcp
      

      Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP.

      Найдите строку explicit-exit-notify в конце файла и измените значение на 0:

      /etc/openvpn/server/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Если вам не нужно использовать другие порт и протокол, лучше всего оставить эти настройки без изменений.

      (Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию

      Если вы выбрали другое имя при вводе команды ./easyrsa gen-req server ранее, измените строки cert и key​​​ в файле конфигурации server.conf​​, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию server, можно считать, что все уже настроено корректно:

      /etc/openvpn/server/server.conf

      cert server.crt
      key server.key
      

      После завершения редактирования сохраните и закройте файл.

      Вы успешно завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.

      Шаг 8 — Настройка конфигурации сети сервера OpenVPN

      Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.

      Чтобы изменить используемые по умолчанию настройки IP-передачи сервера OpenVPN, откройте файл /etc/sysctl.conf с помощью nano или предпочитаемого редактора:

      • sudo nano /etc/sysctl.conf

      Добавьте следующую строку в конец файла:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Сохраните файл и закройте его после завершения.

      Чтобы прочитать файл и загрузить значения для текущей сессии, введите:

      Output

      net.ipv4.ip_forward = 1

      Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик из одного сетевого устройства на другое. Эта настройка гарантирует, что сервер сможет направлять трафик от клиентов, подключенных к виртуальному интерфейсу VPN, на другие физические сетевые устройства. Эта конфигурация будет передавать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а открытый IP-адрес клиента будет фактически скрыт.

      На следующем шаге вам нужно настроить ряд правил брандмауэра, чтобы гарантировать корректную передачу входящего и исходящего трафика на вашем сервере OpenVPN.

      Шаг 9 — Настройка брандмауэра

      К настоящему моменту вы установили OpenVPN на ваш сервер, настроили его и создали ключи и сертификаты, необходимые вашему клиенту для доступа к VPN. Однако вы еще не предоставили OpenVPN какие-либо инструкции о том, куда нужно отправлять входящий веб-трафик от клиентов. Вы можете указать, как сервер должен обрабатывать клиентский трафик, добавив ряд правил брандмауэра и настроив конфигурацию маршрутизации.

      Если вы выполнили предварительные требования, указанные в начале этого обучающего модуля, у вас на сервере должен быть установлен и запущен ufw. Чтобы разрешить OpenVPN через брандмауэр, вам нужно будет включить маскировку. Маскировка — это концепция таблиц iptables, на основе которой выполняется автоматическая трансляция сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.

      Прежде чем открыть файл конфигурации брандмауэра для добавления правил маскарадинга, нужно предварительно найти публичный сетевой интерфейс компьютера. Для этого введите:

      Строка после слова «dev» в этой команде — это ваш публичный интерфейс. Например, в этом результате показан интерфейс с именем eth0, который выделен ниже:

      Output

      default via 159.65.160.1 dev eth0 proto static

      Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

      • sudo nano /etc/ufw/before.rules

      Правила UFW обычно добавляются с помощью команды ufw. Правила, перечисленные в файле before.rules, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING в таблице nat, и любой трафик из VPN будет маскироваться. Обязательно замените eth0 в строке -A POSTROUTING на интерфейс, определенный с помощью следующей команды:

      /etc/ufw/before.rules

      #
      # 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 eth0 (change to the interface you discovered!)
      -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
      COMMIT
      # END OPENVPN RULES
      
      # Don't delete these required lines, otherwise there will be errors
      *filter
      . . .
      

      Сохраните файл и закройте его после завершения.

      Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw:

      • sudo nano /etc/default/ufw

      Найдите в файле директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

      /etc/default/ufw

      DEFAULT_FORWARD_POLICY="ACCEPT"
      

      Сохраните файл и закройте его после завершения.

      Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf, вам нужно будет открыть трафик UDP на порту 1194. Если вы изменили порт или протокол, замените выбранные здесь значения.

      Если вы забыли добавить порт SSH при выполнении предварительных требований, добавьте его сейчас:

      • sudo ufw allow 1194/udp
      • sudo ufw allow OpenSSH

      После добавления этих правил отключите и заново включите UFW, чтобы загрузить изменения из всех измененных файлов:

      • sudo ufw disable
      • sudo ufw enable

      Теперь ваш сервер настроен для правильной обработки трафика OpenVPN. После создания правил брандмауэра мы можем запустить службу OpenVPN на сервере.

      Шаг 10 — Запуск OpenVPN

      OpenVPN работает как служба systemd, поэтому мы можем использовать systemctl для управления. Мы настроим для OpenVPN запуск при загрузке, чтобы вы могли подключаться к вашей VPN в любое время, пока ваш сервер работает. Для этого активируйте службу OpenVPN, добавив ее в systemctl:

      • sudo systemctl -f enable openvpn-server@server.service

      Затем запустите службу OpenVPN:

      • sudo systemctl start openvpn-server@server.service

      Еще раз проверьте, что служба OpenVPN активна, воспользовавшись следующей командой. Вы должны увидеть в выводе active (running):

      • sudo systemctl status openvpn-server@server.service

      Output

      ● openvpn-server@server.service - OpenVPN service for server Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 16872 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 1137) Memory: 1.0M CGroup: /system.slice/system-openvpnx2dserver.slice/openvpn-server@server.service └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed

      Мы успешно завершили конфигурацию OpenVPN на стороне сервера. Далее вам нужно будет настроить клиентский компьютер и подключиться к серверу OpenVPN.

      Шаг 11 — Создание инфраструктуры конфигурации клиентских систем

      Создание файлов конфигурации для клиентов OpenVPN может быть связано с этой задачей, поскольку каждый клиент должен иметь собственную конфигурацию, и каждая из этих конфигураций должна соответствовать параметрам, заданным в файле конфигурации сервера. Вместо создания единого файла конфигурации, который можно использовать только для одного клиента, на этом шаге мы определим процесс создания инфраструктуры клиентской конфигурации, который вы сможете использовать для быстрого генерирования файлов конфигурации. Вначале вы создадите «базовый» файл конфигурации, а затем сценарий, который позволит по мере необходимости генерировать уникальные файлы конфигурации клиентов, сертификаты и ключи.

      Для начала создайте новую директорию для хранения файлов конфигурации клиентов в ранее созданной директории client-configs:

      • mkdir -p ~/client-configs/files

      Затем скопируйте файл с образцом конфигурации клиента в директорию client-configs, чтобы использовать ее как базовую конфигурацию:

      • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

      Откройте новый файл в nano или предпочитаемом текстовом редакторе:

      • nano ~/client-configs/base.conf

      Найдите в файле директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

      ~/client-configs/base.conf

      . . .
      # 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
      . . .
      

      Протокол должен соответствовать значениям, используемым в конфигурации сервера:

      ~/client-configs/base.conf

      proto udp
      

      Разкомментируйте директивы user и group, удалив символ ; в начале каждой строки:

      ~/client-configs/base.conf

      # Downgrade privileges after initialization (non-Windows only)
      user nobody
      group nogroup
      

      Найдите директивы, задающие ca, cert и key. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:

      ~/client-configs/base.conf

      # 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
      

      Затем закомментируйте директиву tls-auth, поскольку вы добавите ta.key прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt):

      ~/client-configs/base.conf

      # If a tls-auth key is used on the server
      # then every client must also have the key.
      ;tls-auth ta.key 1
      

      Создайте зеркало настроек cipher и auth, заданных в файле /etc/openvpn/server/server.conf​​​:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      auth SHA256
      

      Затем добавьте в файл директиву key-direction. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:

      ~/client-configs/base.conf

      key-direction 1
      

      В заключение добавьте несколько закомментированных строк для обработки различных методов, которые клиенты VPN на базе Linux будут использовать для разрешения DNS. Также мы добавим два похожих, но отдельных набора закомментированных строк. Первый набор предназначен для клиентов, которые не используют systemd-resolved для управления DNS. Эти клиенты используют утилиту resolvconf для обновления информации DNS для клиентов Linux.

      ~/client-configs/base.conf

      ; script-security 2
      ; up /etc/openvpn/update-resolv-conf
      ; down /etc/openvpn/update-resolv-conf
      

      Теперь добавьте другой набор строк для клиентов, которые используют systemd-resolved для разрешения DNS:

      ~/client-configs/base.conf

      ; script-security 2
      ; up /etc/openvpn/update-systemd-resolved
      ; down /etc/openvpn/update-systemd-resolved
      ; down-pre
      ; dhcp-option DOMAIN-ROUTE .
      

      Сохраните файл и закройте его после завершения.

      На шаге 13 «Установка конфигурации клиента» этого обучающего модуля вы узнаете, как определять, работает ли разрешение DNS для клиентов Linux, и какой раздел нужно разкомментировать.

      Далее создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в директорию ~/client-configs/files. Откройте новый файл с именем make_config.sh в директории ~/client-configs:

      • nano ~/client-configs/make_config.sh

      Добавьте в файл следующее:

      ~/client-configs/make_config.sh

      #!/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-crypt>') 
          ${KEY_DIR}/ta.key 
          <(echo -e '</tls-crypt>') 
          > ${OUTPUT_DIR}/${1}.ovpn
      

      Сохраните файл и закройте его после завершения.

      Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:

      • chmod 700 ~/client-configs/make_config.sh

      Этот скрипт создает копию созданного вами файла base.conf, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Преимущество такого метода состоит в том, что если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации, а вся важная информация будет храниться в одном удобном для доступа месте.

      Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.

      Шаг 12 — Создание конфигураций клиентов

      Если вы следовали указаниям руководства, на шаге 6 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в директорию ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

      • cd ~/client-configs
      • ./make_config.sh client1

      При этом файл client1.ovpn будет создан в директории ~/client-configs/files:

      • ls ~/client-configs/files

      Output

      client1.ovpn

      Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.

      Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

      Здесь представлен пример команды SFTP, которую можно запустить с локального компьютера (под управлением macOS или Linux). Она будет копировать файл client1.ovpn, который мы создали на последнем шаге, в вашу домашнюю директорию:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      Ниже представлено несколько инструментов и обучающих руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:

      Шаг 13 — Установка клиентской конфигурации

      В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.

      Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn. В этом обучающем руководстве это означает, что соединение будет иметь имя client1.ovpn, что соответствует первому сгенерированному клиентскому файлу.

      Windows

      Установка

      Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.

      Примечание. Для установки OpenVPN требуются права администратора.

      После установки OpenVPN, скопируйте файл .ovpn в:

      C:Program FilesOpenVPNconfig
      

      При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.

      Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбирать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.

      Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.

      Подключение

      При каждом запуске графического интерфейса OpenVPN операционная система Windows будет спрашивать, разрешаете или вы этой программме внести изменения на вашем компьютере. Нажмите Да. При запуске клиентского приложения OpenVPN в области задач появляется значок приложения, с помощью которого вы сможете подключать и отключать соединение VPN; соединение VPN не устанавливается автоматически.

      После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn) и нажмите Подключиться.

      Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.

      Отключение от VPN выполняется аналогично: перейдите в область задач, нажмите значок приложения OpenVPN правой кнопкой мыши, выберите профиль клиента и нажмите Отключиться.

      macOS

      Установка

      Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды нажмите загруженный файл .dmg и следуйте указаниям по установке.

      В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.

      Подключение

      Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.

      Linux

      Установка

      Если вы используете Linux, существуют различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.

      Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.

      В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:

      • sudo apt update
      • sudo apt install openvpn

      В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:

      • sudo dnf install epel-release
      • sudo dnf install openvpn

      Настройка клиентов, использующих systemd-resolved

      Вначале определите, использует ли ваша система systemd-resolved для разрешения DNS, проверив файл /etc/resolv.conf:

      Output

      # This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0

      Если ваша система настроена для использования systemd-resolved для разрешения DNS, IP-адрес после опции nameserver будет иметь значение 127.0.0.53. Также в файле должны быть комментарии, в частности информация о том, как systemd-resolved управляет файлом. Если у вас отображается не 127.0.0.53, а другой IP-адрес, то есть вероятность, что ваша система не использует systemd-resolved. В этом случае вы можете перейти к следующему разделу, предназначенному для настройки клиентов Linux, использующих скрипт update-resolv-conf.

      Для поддержки этих клиентов нужно предварительно установить пакет openvpn-systemd-resolved. Он содержит скрипты, принудительно запускающие использование systemd-resolved для разрешения DNS сервером VPN.

      • sudo apt install openvpn-systemd-resolved

      После установки пакета настройте клиент для его использования и отправки всех запросов DNS через интерфейс VPN. Откройте файл VPN клиента:

      Разкомментируйте следующие строки, добавленные вами ранее:

      client1.ovpn

      script-security 2
      up /etc/openvpn/update-systemd-resolved
      down /etc/openvpn/update-systemd-resolved
      down-pre
      dhcp-option DOMAIN-ROUTE .
      

      Настройка клиентов, использующих update-resolv-conf

      Если ваша система не использует systemd-resolved для управления DNS, проверьте наличие в вашем дистрибутиве скрипта /etc/openvpn/update-resolv-conf:

      Output

      update-resolv-conf

      Если в вашем клиенте имеется файл update-resolv-conf, измените ранее переданный файл конфигурации клиента OpenVPN:

      Разкомментируйте три добавленные вами строки для изменения настроек DNS:

      client1.ovpn

      script-security 2
      up /etc/openvpn/update-resolv-conf
      down /etc/openvpn/update-resolv-conf
      

      Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

      client1.ovpn

      group nobody
      

      Сохраните и закройте файл.

      ** Подключение **

      Теперь для подключения к VPN вы можете просто указать команде openvpn файл конфигурации клиента:

      • sudo openvpn --config client1.ovpn

      Эта команда должна установить подключение к вашей VPN.

      Примечание. Если ваш клиент использует systemd-resolved для управления DNS, проверьте правильность применения настроек, запустив команду systemd-resolve --status:

      • systemd-resolve --status tun0

      Результат будет выглядеть следующим образом:

      Output

      Link 22 (tun0) . . . DNS Servers: 208.67.222.222 208.67.220.220 DNS Domain: ~.

      Если вы видите IP-адреса серверов DNS, настроенные вами на сервере OpenVPN, и настройку ~. для DNS Domain в выводе, это означает, что вы правильно настроили клиент для управления DNS на сервере VPN. Также вы можете проверить отправку запросов DNS через VPN используя сайт DNS leak test.com или другой подобный сайт.

      iOS

      Установка

      Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.

      Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn в окно OpenVPN Documents. iTunes, показывающий профиль VPN, готовый к подключению iPhone

      Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите зеленый значок плюс, чтобы импортировать его.

      Приложение OpenVPN для iOS показывает, что новый профиль готов к импорту Подключение

      Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.

      Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.

      Приложение OpenVPN для iOS, подключенное к VPN

      Android

      Установка

      Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.

      Вы можете переместить профиль .ovpn, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, вы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.

      Запустите приложение OpenVPN и нажмите меню FILE, чтобы импортировать профиль.

      Выбор меню импорта профиля в приложении OpenVPN для Android

      Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /storage/emulated/0/openvpn) и выберите файл .ovpn​​​. Нажмите кнопку IMPORT, чтобы завершить импорт этого профиля.

      Приложение OpenVPN для Android выбирает профиль VPN для импорта

      Подключение После добавления профиля вы увидите следующий экран:

      Приложение OpenVPN для Android с добавленным новым профилем

      Для подключения нажмите кнопку-переключатель рядом с профилем, который вы хотите использовать. Вы увидите статистические данные вашего подключения в режиме реального времени и трафик, проходящий через ваш сервер OpenVPN: Приложение OpenVPN для Android, подключенное к VPN

      Для отключения просто нажмите кнопку-переключатель слева еще раз. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.

      Шаг 14 — Тестирование соединения VPN (необязательно)

      Примечание. Этот метод тестирования подключения VPN будет работать только в случае, если вы выбрали перенаправление всего трафика через VPN на шаге 7 при редактировании файла server.conf​​ для OpenVPN.

      После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.

      Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.

      Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.

      Шаг 15 — Отзыв сертификатов клиента

      Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.

      Для этого используйте пример из предварительного обучающего модуля Установка и настройка центра сертификации в Ubuntu 20.04 из раздела Отзыв сертификата.

      После отзыва сертификата для клиента с помощью этих инструкций вам нужно будет скопировать созданный файл crl.pem на ваш сервер OpenVPN в директорию /etc/openvpn/server:

      • sudo cp /tmp/crl.pem /etc/openvpn/server/

      Затем откройте файл конфигурации сервера OpenVPN:

      • sudo nano /etc/openvpn/server/server.conf

      Добавьте в конце файла опцию crl-verify, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:

      /etc/openvpn/server/server.conf

      crl-verify crl.pem
      

      Сохраните и закройте файл.

      Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

      • sudo systemctl restart openvpn-server@server.service

      Клиент больше не сможет подключаться к серверу, используя старые учетные данные.

      Чтобы запретить доступ другим клиентам, повторите эту процедуру:

      1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
      2. Создайте новый список CRL.
      3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в директорию /etc/openvpn/server/, чтобы перезаписать старый список.
      4. Перезапустите службу OpenVPN.

      С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.

      Заключение

      Теперь у вас должна быть полностью готовая к использованию виртуальная частная сеть, запущенная на вашем сервере OpenVPN. Вы можете просматривать веб-ресурсы и загружать контент, не беспокоясь о том, что злоумышленники смогут отслеживать вашу активность.

      Для дальнейшей кастомизации вашей установки OpenVPN можно выполнить несколько шагов, например, настроить для вашего клиента автоматическое подключение к VPN или задать специальные правила и политики доступа для конкретного клиента. При выполнении этих действий по кастомизации OpenVPN вы должны ознакомиться с официальной документацией для OpenVPN.

      Для настройки большего числа клиентов вам нужно выполнить шаги 6 и 11–13 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 15.



      Source link

      Установка и настройка сервера OpenVPN для CentOS 8


      Введение

      Виртуальная частная сеть (VPN) позволит вам работать в незащищенных сетях, как если бы вы находились в частной сети. Она предоставляет возможность получить безопасный и защищенный доступ к сети Интернет со смартфона или ноутбука при подключении к недоверенной сети, например Wi-Fi в отеле или в кафе.

      В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение, а также любой незашифрованный трафик HTTP при работе в незащищенной сети.

      OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом, которое использует протокол TLS и позволяет использовать широкий круг конфигураций. В этом обучающем руководстве вы установите OpenVPN на сервере CentOS 8 и настроите его для доступа с клиентского компьютера.

      Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.

      Дополнительную информацию можно найти на этой странице.

      Предварительные требования

      Для данного обучающего руководства вам потребуется следующее:

      Примечание. Хотя технически возможно использовать ваш сервер OpenVPN или ваш локальный компьютер в качестве центра сертификации, делать это не рекомендуется, поскольку это открывает ваш VPN для ряда уязвимостей. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем руководстве предполагается, что ваш ЦС располагается на отдельном сервере CentOS 8, где также имеются пользователь non-root user с привилегиями sudo и активированный базовый брандмауэр.

      Помимо этого вам потребуется клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. В этом обучающем руководстве мы будем называть его клиентом OpenVPN. В целях данного руководства рекомендуется использовать ваш локальный компьютер в качестве клиента OpenVPN.

      После выполнения всех предварительных требований вы можете начать установку и настройку сервера OpenVPN на CentOS 8.

      Примечание. Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, то можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего руководства. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере ЦС, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем руководстве Настройка ключей SSH в CentOS 8.

      Шаг 1 — Установка OpenVPN и Easy-RSA

      Первый шаг этого руководства подразумевает установку OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для генерации запроса сертификата, который вы затем будете проверять и подписывать на сервере ЦС.

      OpenVPN и Easy-RSA отсутствуют по умолчанию в CentOS 8, так что вам нужно будет активировать репозиторий Extra Packages for Enterprise Linux (EPEL). EPEL управляется Fedora Project и содержит популярные нестандартные пакеты для Fedora, CentOS и других дистрибутивов Linux, использующих формат пакетов RPM. Войдите на сервер OpenVPN от имени пользователя non-root user с привилегиями sudo, созданного на начальном этапе установки, и запустите следующую команду:

      • sudo dnf install epel-release
      • sudo dnf install openvpn easy-rsa

      Далее вам потребуется создать новую директорию на сервере OpenVPN от имени вашего пользователя non-root user с названием ~/easy-rsa:

      Теперь вам нужно создать символьную ссылку из скрипта easyrsa, установленного пакетом в директории ~/easy-rsa, которую вы только что создали:

      • ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/

      Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa в директорию PKI, в этом обучающем руководстве мы используем подход на основе символьных ссылок. Таким образом, любые изменения пакета easy-rsa будут автоматически отражаться в ваших скриптах PKI.

      В заключение убедитесь, что владельцем директории является ваш пользователь non-root user с привилегиями sudo, и ограничьте доступ с помощью команды chmod:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      После установки этих программ и их перемещения в нужные локации в вашей системе следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к вашему VPN.

      Шаг 2 — Создание PKI для OpenVPN

      Прежде чем вы сможете создавать закрытый ключ и сертификат вашего сервера OpenVPN, вам нужно создать локальную директорию инфраструктуры открытых ключей на сервере OpenVPN. Вы будете использовать эту директорию для управления запросами сертификата сервера и клиентов, вместо того чтобы получать их прямо на сервере ЦС.

      Для создания директории PKI на сервере OpenVPN вам нужно указать в файле vars ряд значений по умолчанию. Используйте команду cd для перехода в директорию easy-rsa, а затем создайте и отредактируйте файл vars с помощью предпочитаемого текстового редактора.

      Предоставляемый с CentOS 8 по умолчанию текстовый редактор — vi. vi является очень мощным текстовым редактором, но освоить работу с ним неопытным пользователям достаточно сложно. Вы можете установить более удобный для пользователя редактор, например nano, для облегчения редактирования файлов конфигурации на сервере CentOS 8:

      Когда вам будет предложено установить nano, введите y, чтобы продолжить выполнение установки. Теперь вы готовы к редактированию файла vars:

      После открытия файла вставьте следующие две строки:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      Эти строки будут гарантировать, что ваши закрытые ключи и запросы сертификата будут настроены для использования современной криптографии на эллиптических кривых (Elliptic Curve Cryptography, ECC) при генерации ключей и защищенных подписей для ваших клиентов и сервера OpenVPN.

      Под настройкой использования ECC для ваших серверов OpenVPN и ЦС подразумевается, что, когда клиент и сервер будут пытаться установить общий симметричный ключ, они будут использовать алгоритмы эллиптической кривой для обмена. Использование ECC для обмена ключами значительно быстрее, чем использование простого алгоритма Диффи — Хеллмана с классическим алгоритмом RSA, поскольку числа намного меньше, а вычисления выполняются быстрее.

      Справка: когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как открытый/закрытый ключ) для выполнения TLS-рукопожатия. Однако при передаче шифрованного VPN-трафика сервер и клиенты используют симметричное шифрование, которое также известно как шифрование общедоступного ключа.

      Симметричное шифрование требует гораздо меньшего количества вычислений по сравнению с асимметричным: используемые числа гораздо меньше, и современные процессоры имеют инструкции для выполнения оптимизированного симметричного шифрования. Для переключения с асимметричного на симметричное шифрование сервер OpenVPN и клиент будут использовать алгоритм Диффи — Хеллмана на эллиптических кривых для согласования общего секретного ключа в максимально короткие сроки.

      После добавления в файл vars данных вы можете перейти к созданию директории PKI. Для этого воспользуйтесь скриптом easyrsa с опцией init-pki. Хотя вы уже использовали эту команду на сервере ЦС в соответствии с предварительными требованиями, необходимо запустить ее здесь, поскольку сервер OpenVPN и сервер ЦС имеют разные директории PKI.

      Обратите внимание, что на сервере OpenVPN не нужно создавать центр сертификации. Ваш сервер ЦС отвечает за валидацию и подпись сертификатов. PKI на вашем сервере VPN используется только в качестве удобного и централизованного места хранения запросов сертификата и публичных сертификатов.

      После инициализации PKI на сервере OpenVPN вы можете перейти к следующему шагу и создать запрос сертификата и закрытого ключа сервера OpenVPN.

      Шаг 3 — Создание запроса сертификата и закрытого ключа сервера OpenVPN

      Теперь, когда на вашем сервере OpenVPN установлено все необходимое, на следующем шаге мы сгенерируем закрытый ключ и запрос подписи сертификата на вашем сервере OpenVPN. После этого вы передадите запрос в ваш центр сертификации для подписи, создав необходимый сертификат. После подписи сертификата вы передадите его назад на сервер OpenVPN и установите его для использования на сервере.

      Для начала перейдите в директорию ~/easy-rsa на сервере OpenVPN, используя вашего пользователя non-root user:

      Теперь вы можете вызвать easyrsa с опцией gen-req, за которой необходимо указать стандартное имя для компьютера. Вы можете использовать любое стандартное имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем руководстве для сервера OpenVPN будет использоваться стандартное имя server. Обязательно добавьте опцию nopass. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями.

      Примечание. Если вы выберете любое другое имя, а не server, вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в директорию /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf, чтобы он указывал на соответствующие файлы .crt и .key.

      • ./easyrsa gen-req server nopass

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

      В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в директорию /etc/openvpn/server:

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      В результате выполнения этих шагов вы успешно создали закрытый ключ для вашего сервера OpenVPN. Также вы создали запрос на подпись сертификата для сервера OpenVPN. Запрос на подпись сертификата теперь готов к подписи в вашем центре сертификации. В следующем разделе этого обучающего руководства вы узнаете, как подписать запрос на подпись сертификата с помощью закрытого ключа вашего сервера ЦС.

      Шаг 4 — Подпись запроса сертификата сервера OpenVPN

      На предыдущем шаге вы создали запрос на подпись сертификата (CSR) и закрытый ключ для сервера OpenVPN. Теперь сервер ЦС должен узнать о сертификате server и выполнить его валидацию. После подтверждения сертификата сервером ЦС и его отправки назад на сервер OpenVPN клиенты, которые доверяют вашему ЦС, также смогут доверять серверу OpenVPN.

      На сервере OpenVPN от имени вашего пользователя non-root user воспользуйтесь запросом на передачу или другим методом передачи для копирования запроса сертификата server.req на сервер ЦС для подписи:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Теперь выполните вход на сервер ЦС с помощью пользователя non-root user, которому принадлежат права на директорию easy-rsa, где вы создали ваш PKI. Импортируйте запрос сертификата с помощью скрипта easyrsa:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/server.req server

      Output

      . . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.

      Далее подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и стандартного имени. В качестве типа запроса может использоваться client или server. Поскольку мы работаем с запросом сертификата сервера OpenVPN, необходимо использовать тип запроса server:

      • ./easyrsa sign-req server server

      В выводе вам будет нужно подтвердить, что запрос поступил из надежного источника. Введите yes, а затем нажмите ENTER для подтверждения:

      Output

      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 . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Обратите внимание, что если вы зашифровали закрытый ключ ЦС, вам будет предложено ввести пароль в данный момент.

      В результате выполнения этих шагов вы успешно подписали запрос сертификата сервера OpenVPN с помощью закрытого ключа сервера ЦС. Полученный файл server.crt​​​ содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС. Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.

      Для завершения настройки сертификатов скопируйте файлы server.crt и ca.crt с сервера ЦС на сервер OpenVPN:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Теперь вернитесь на ваш сервер OpenVPN, скопируйте файлы из /tmp в /etc/openvpn/server:

      • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

      Теперь ваш сервер OpenVPN почти готов к принятию подключений. На следующем шаге вы выполните ряд дополнительных шагов для повышения безопасности сервера.

      Шаг 5 — Настройка криптографических материалов OpenVPN

      В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты, с помощью директивы OpenVPN tls-crypt. Эта опция используется, чтобы «затемнить» сертификат TLS, используемый, когда сервер и клиент первоначально подключаются друг к другу. Также она используется сервером OpenVPN для выполнения быстрых проверок входящих пакетов: если пакет подписан с помощью предварительно предоставленного ключа, сервер обрабатывает его, если подпись отсутствует, сервер понимает, что пакет получен из непроверенного источника, и может отклонить его, не выполняя дополнительную работу по расшифровке.

      Эта опция поможет убедиться, что ваш сервер OpenVPN может справляться с неудостоверенным трафиком, сканированием портов и DoS-атаками, которые могут связывать ресурсы сервера. Она также затрудняет выявление сетевого трафика OpenVPN.

      Для получения предварительно предоставленного ключа tls-crypt​​​ запустите следующую команду на сервере OpenVPN в директории ~/easy-rsa:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      В результате вы получите файл с именем ta.key. Скопируйте его в директорию /etc/openvpn/server/:

      • sudo cp ta.key /etc/openvpn/server

      После получения этих файлов на сервере OpenVPN вы можете переходить к созданию клиентских сертификатов и файлов ключей для ваших пользователей, которые вы будете использовать для подключения к VPN.

      Шаг 6 — Создание сертификата клиента и пары ключей

      Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в ЦС для подписания, в этом обучающем руководстве мы рассмотрим процесс генерирования запроса сертификата на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.

      В этом обучающем руководстве мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем руководстве мы будем использовать первую пару сертификат/ключ под именем client1.

      Вначале создайте в домашней директории структуру директорий, где будут храниться файлы сертификатов и ключей клиентской системы:

      • mkdir -p ~/client-configs/keys

      Поскольку в этой директории будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для нее следует закрыть все разрешения:

      • chmod -R 700 ~/client-configs

      Вернитесь в директорию EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:

      • cd ~/easy-rsa
      • ./easyrsa gen-req client1 nopass

      Нажмите ENTER, чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданную директорию ~/client-configs/keys/​​​:

      • cp pki/private/client1.key ~/client-configs/keys/

      Затем передайте файл client1.req на сервер ЦС, используя безопасный метод:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Теперь выполните вход на ваш сервер ЦС. Затем перейдите в директорию EasyRSA и импортируйте запрос сертификата:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/client1.req client1

      Затем подпишите запрос, как вы делали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client:

      • ./easyrsa sign-req client client1

      При запросе введите yes, чтобы подтвердить, что вы планируете подписать запрос сертификата и что он поступил из доверенного источника:

      Output

      Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

      Если вы зашифровали свой ключ ЦС, вам будет предложено ввести пароль.

      В результате будет создан файл клиентского сертификата с именем client1.crt. Переместите этот файл обратно на сервер.

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Вернитесь на ваш сервер OpenVPN, скопируйте клиентский сертификат в директорию ~/client-configs/keys/​​:

      • cp /tmp/client1.crt ~/client-configs/keys/

      Затем скопируйте файлы ca.crt и ta.key в директорию ~/client-configs/keys/ и предоставьте соответствующие разрешения для вашего пользователя sudo:

      • cp ~/easy-rsa/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
      • sudo chown sammy.sammy ~/client-configs/keys/*

      В результате вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих директориях на вашем сервере OpenVPN. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Теперь вы можете перейти к настройке OpenVPN.

      Шаг 7 — Настройка OpenVPN

      Как и во многих широко используемых инструментах с открытым исходным кодом, OpenVPN имеет множество доступных параметров настройки для кастомизации вашего сервера согласно вашим нуждам. В этом разделе мы предоставим инструкции по настройке конфигурации сервера OpenVPN на основе одного из примеров файлов конфигурации, который включен в документацию для этого программного обеспечения.

      Вначале скопируйте файл server.conf в качестве отправной точки для вашего собственного файла конфигурации:

      • sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

      Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем случае мы будем использовать nano:

      • sudo nano /etc/openvpn/server/server.conf

      Нам нужно изменить несколько строк в этом файле. Сначала необходимо найти раздел HMAC в конфигурации, выполнив поиск директивы tls-auth. Эта строка должна быть разкомментирована. Закомментируйте ее, добавив ; в начало строки. Затем добавьте после нее новую строку, содержащую только значение tls-crypt ta.key​​​:

      /etc/openvpn/server.conf

      ;tls-auth ta.key 0 # This file is secret
      tls-crypt ta.key
      

      Затем найдите раздел криптографических шифров, выполнив поиск строк с текстом cipher. По умолчанию установлено значение AES-256-CBC, однако шифр AES-256-GCM обеспечивает более высокий уровень шифрования, производительности и лучше поддерживается современными клиентами OpenVPN. Мы закомментируем значение по умолчанию, добавив ; в начало этой строки, а затем добавим другую строку после нее, содержащую обновленное значение AES-256-GCM:

      /etc/openvpn/server.conf

      ;cipher AES-256-CBC
      cipher AES-256-GCM
      

      Сразу после этой строки добавьте директиву auth для выбора алгоритма выборки сообщений HMAC. Для этого хорошо подойдет SHA256:

      /etc/openvpn/server.conf

      auth SHA256
      

      Затем найдите строку с директивой dh, которая определяет параметры алгоритма Диффи — Хеллмана. Поскольку мы настроили все сертификаты для использования криптографии на эллиптических кривых, нет необходимости в использовании файла прототипа Диффи — Хеллмана. Закомментируйте существующую строку dh dh2048.pem​​​ или dh dh.pem. Имя файла для ключа Диффи — Хеллмана может отличаться от того, что перечислено в примере файла конфигурации сервера. Затем добавьте строку после нее с содержанием dh none:

      /etc/openvpn/server.conf

      ;dh dh2048.pem
      dh none
      

      Далее нам нужно запустить OpenVPN без привилегий, с которыми он запущен, поэтому нам нужно указать на необходимость запуска с пользователем и группой nobody. Чтобы активировать эту возможность, найдите и разкомментируйте строки user nobody и group nobody​​, удалив ; в начале каждой строки:

      /etc/openvpn/server.conf

      user nobody
      group nobody
      

      (Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN

      Вышеуказанные настройки создадут соединение VPN между вашим клиентом и сервером, но не будут заставлять соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего клиентского трафика, вам нужно будет передать дополнительные настройки на клиентские компьютеры.

      Для начала найдите и разкомментируйте строку push "redirect-gateway def1 bypass-dhcp". Она будет сообщать вашему клиенту о необходимости перенаправлять весь трафик через ваш сервер OpenVPN. Обратите внимание, что при активации этой функции могут возникать проблемы с подключением к другим сетевым службам, например SSH:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Под этой строкой найдите раздел dhcp-option. Удалите ; в начале обеих строк, чтобы разкомментировать эти строки:

      /etc/openvpn/server.conf

      push "dhcp-option DNS 208.67.222.222"
      push "dhcp-option DNS 208.67.220.220"
      

      Эти строки будут сообщать вашему клиенту о необходимости использования бесплатных интерпретаторов OpenDNS на перечисленных IP-адресах. Если вы предпочитаете использовать другие интерпретаторы DNS, вставьте их на место выделенных IP-адресов.

      Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

      (Необязательно) Изменение порта и протокола

      По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила брандмауэра.

      Чтобы заставить OpenVPN прослушивать порт 443, откройте файл server.conf и найдите строку, которая выглядит следующим образом:

      /etc/openvpn/server.conf

      port 1194
      

      Измените ее, указав порт 443:

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Довольно часто этот порт также ограничивает протокол. В этом случае найдите строку proto под строкой port и измените протокол с udp на tcp:

      /etc/openvpn/server.conf

      # Optional!
      proto tcp
      

      Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP.

      Найдите строку explicit-exit-notify в конце файла и измените значение на 0:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Если вам не нужно использовать другие порт и протокол, лучше всего оставить эти настройки без изменений.

      (Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию

      Если вы выбрали другое имя при вводе команды ./easyrsa gen-req server ранее, измените строки cert и key​​​ в файле конфигурации server.conf​​, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию server, можно считать, что все уже настроено корректно:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      После завершения редактирования сохраните и закройте файл.

      Вы успешно завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.

      Шаг 8 — Настройка конфигурации сети сервера OpenVPN

      Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.

      Чтобы изменить используемые по умолчанию настройки IP-передачи сервера OpenVPN, откройте файл /etc/sysctl.conf с помощью nano или предпочитаемого редактора:

      • sudo nano /etc/sysctl.conf

      Затем добавьте следующую строку вверху файла:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Сохраните файл и закройте его после завершения.

      Чтобы прочитать файл и загрузить значения для текущей сессии, введите:

      Output

      net.ipv4.ip_forward = 1

      Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик из одного сетевого устройства на другое. Эта настройка гарантирует, что сервер сможет направлять трафик от клиентов, подключенных к виртуальному интерфейсу VPN, на другие физические сетевые устройства. Эта конфигурация будет передавать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а открытый IP-адрес клиента будет фактически скрыт.

      На следующем шаге вам нужно настроить ряд правил брандмауэра, чтобы гарантировать корректную передачу входящего и исходящего трафика на вашем сервере OpenVPN.

      Шаг 9 — Настройка брандмауэра

      К настоящему моменту вы установили OpenVPN на ваш сервер, настроили его и создали ключи и сертификаты, необходимые вашему клиенту для доступа к VPN. Однако вы еще не предоставили OpenVPN какие-либо инструкции о том, куда нужно отправлять входящий веб-трафик от клиентов. Вы можете указать, как сервер должен обрабатывать клиентский трафик, добавив ряд правил брандмауэра и настроив конфигурацию маршрутизации.

      Если вы выполнили предварительные требования, указанные в начале руководства, у вас на сервере должен быть установлен и запущен firewalld. Чтобы разрешить OpenVPN работу через брандмауэр, вам нужно узнать активную зону firewalld. Для этого воспользуйтесь следующей командой:

      • sudo firewall-cmd --get-active-zones

      Output

      public Interfaces: eth0

      Если вы не увидите доверенную зону с интерфейсом tun0, выполните следующие команды для добавления устройства VPN в эту зону:

      • sudo firewall-cmd --zone=trusted --add-interface=tun0
      • sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0

      Затем добавьте службу openvpn в список разрешенных служб firewalld в активной зоне, после чего сделайте эти настройки постоянными, запустив команду снова, но добавив опцию --permanent:

      • sudo firewall-cmd --permanent --add-service openvpn
      • sudo firewall-cmd --permanent --zone=trusted --add-service openvpn

      Чтобы применить изменения в брандмауэре, выполните следующую команду:

      • sudo firewall-cmd --reload

      Теперь вы можете проверить, что служба была добавлена корректно, воспользовавшись следующей командой:

      • sudo firewall-cmd --list-services --zone=trusted

      Output

      openvpn

      Далее мы добавим правило подмены в брандмауэр. Подмена позволяет вашему серверу OpenVPN преобразовывать адреса клиентов OpenVPN в собственный открытый адрес сервера, а затем выполнять обратное преобразование для трафика, который отправляется обратно клиенту. Этот процесс также известен как преобразование сетевых адресов (NAT).

      Добавьте правила подмены с помощью следующих команд:

      • sudo firewall-cmd --add-masquerade
      • sudo firewall-cmd --add-masquerade --permanent

      Вы можете проверить, что подмена была добавлена корректно, воспользовавшись следующей командой:

      • sudo firewall-cmd --query-masquerade

      Output

      yes

      Далее вам нужно создать конкретное правило подмены, которое будет использоваться только для вашей подсети OpenVPN. Для этого необходимо сначала создать переменную оболочки (DEVICE в нашем примере), которая будет представлять первичный сетевой интерфейс, используемый вашим сервером, а затем использовать эту переменную, чтобы добавить правило маршрутизации на постоянной основе:

      • DEVICE=$(ip route | awk '/^default via/ {print $5}')
      • sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE

      Обязательно перезагрузите firewalld, чтобы все изменения вступили в силу:

      • sudo firewall-cmd --reload

      Команды с флагом --permanent будут гарантировать, что правила будут сохраняться после перезагрузки. Команда firewall-cmd --reload позволяет гарантировать, что все оставшиеся изменения для брандмауэра будут применены. После создания правил брандмауэра мы можем запустить службу OpenVPN на сервере.

      Шаг 10 — Запуск OpenVPN

      OpenVPN работает как служба systemd, поэтому мы можем использовать systemctl для управления. Мы настроим для OpenVPN запуск при загрузке, чтобы вы могли подключаться к вашему VPN в любое время, пока ваш сервер работает. Для этого активируйте службу OpenVPN, добавив ее в systemctl:

      • sudo systemctl -f enable openvpn-server@server.service

      Затем запустите службу OpenVPN:

      • sudo systemctl start openvpn-server@server.service

      Еще раз проверьте, что служба OpenVPN активна, воспользовавшись следующей командой. Вы должны увидеть в выводе active (running):

      • sudo systemctl status openvpn-server@server.service

      Output

      ● openvpn-server@server.service - OpenVPN service for server Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-04-07 02:32:07 UTC; 1min 52s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 15868 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 5059) Memory: 1.2M CGroup: /system.slice/system-openvpnx2dserver.slice/openvpn-server@server.service └─15868 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config server.conf . . .

      Мы успешно завершили конфигурацию OpenVPN на стороне сервера. Далее вам нужно будет настроить клиентский компьютер и подключиться к серверу OpenVPN.

      Шаг 11 — Создание инфраструктуры конфигурации клиентских систем

      Создание файлов конфигурации для клиентов OpenVPN может быть связано с этой задачей, поскольку каждый клиент должен иметь собственную конфигурацию, и каждая из этих конфигураций должна соответствовать параметрам, заданным в файле конфигурации сервера. Вместо создания единого файла конфигурации, который можно использовать только для одного клиента, на этом шаге мы определим процесс создания инфраструктуры клиентской конфигурации, который вы сможете использовать для быстрого генерирования файлов конфигурации. Вначале вы создадите «базовый» файл конфигурации, а затем сценарий, который позволит по мере необходимости генерировать уникальные файлы конфигурации клиентов, сертификаты и ключи.

      Для начала создайте новую директорию для хранения файлов конфигурации клиентов в ранее созданной директории client-configs:

      • mkdir -p ~/client-configs/files

      Затем скопируйте файл с образцом конфигурации клиента в директорию client-configs, чтобы использовать ее как базовую конфигурацию:

      • cp /usr/share/doc/openvpn/sample/sample-config-files/client.conf ~/client-configs/base.conf

      Откройте новый файл в nano или предпочитаемом текстовом редакторе:

      • nano ~/client-configs/base.conf

      Найдите в файле директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

      ~/client-configs/base.conf

      . . .
      # 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
      . . .
      

      Протокол должен соответствовать значениям, используемым в конфигурации сервера:

      ~/client-configs/base.conf

      proto udp
      

      Разкомментируйте директивы user и group, удалив символ ; в начале каждой строки:

      ~/client-configs/base.conf

      # Downgrade privileges after initialization (non-Windows only)
      user nobody
      group nobody
      

      Найдите директивы, задающие ca, cert и key. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:

      ~/client-configs/base.conf

      # 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
      

      Затем закомментируйте директиву tls-auth, поскольку вы добавите ta.key прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt):

      ~/client-configs/base.conf

      # If a tls-auth key is used on the server
      # then every client must also have the key.
      ;tls-auth ta.key 1
      

      Создайте зеркало настроек cipher и auth, заданных в файле /etc/openvpn/server/server.conf​​​:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      auth SHA256
      

      Затем добавьте в файл директиву key-direction. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:

      ~/client-configs/base.conf

      key-direction 1
      

      В заключение добавьте несколько строк комментариев. Хотя вы можете включить эти директивы в каждый файл конфигурации клиента, их нужно включать только для клиентов Linux с файлом /etc/openvpn/update-resolv-conf. Этот скрипт использует утилиту resolvconf для обновления данных DNS клиентов Linux.

      ~/client-configs/base.conf

      ; script-security 2
      ; up /etc/openvpn/update-resolv-conf
      ; down /etc/openvpn/update-resolv-conf
      

      Если ваш клиент работает под управлением Linux и на нем есть файл /etc/openvpn/update-resolv-conf, удалите знак комментария в начале этих строк файла конфигурации клиента, когда он будет сгенерирован.

      Сохраните файл и закройте его после завершения.

      Далее создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в директорию ~/client-configs/files. Откройте новый файл с именем make_config.sh в директории ~/client-configs:

      • nano ~/client-configs/make_config.sh

      Добавьте в файл следующее:

      ~/client-configs/make_config.sh

      #!/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-crypt>') 
      ${KEY_DIR}/ta.key 
      <(echo -e '</tls-crypt>') 
      > ${OUTPUT_DIR}/${1}.ovpn
      

      Сохраните файл и закройте его после завершения.

      Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:

      • chmod 700 ~/client-configs/make_config.sh

      Этот скрипт создает копию созданного вами файла base.conf, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Преимущество такого метода состоит в том, что если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации, а вся важная информация будет храниться в одном удобном для доступа месте.

      Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.

      Шаг 12 — Создание конфигураций клиентов

      Если вы следовали указаниям руководства, на шаге 6 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в директорию ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

      • cd ~/client-configs
      • ./make_config.sh client1

      При этом файл client1.ovpn будет создан в директории ~/client-configs/files:

      • ls ~/client-configs/files

      Output

      client1.ovpn

      Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.

      Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

      Здесь представлен пример команды SFTP, которую можно запустить с локального компьютера (под управлением macOS или Linux). Она будет копировать файл client1.ovpn, который мы создали на последнем шаге, в вашу домашнюю директорию:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      Ниже представлено несколько инструментов и обучающих руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:

      Шаг 13 — Установка клиентской конфигурации

      В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.

      Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn. В этом обучающем руководстве это означает, что соединение будет иметь имя client1.ovpn, что соответствует первому сгенерированному клиентскому файлу.

      Windows

      Установка

      Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.

      Примечание. Для установки OpenVPN требуются права администратора.

      После установки OpenVPN, скопируйте файл .ovpn в:

      C:Program FilesOpenVPNconfig
      

      При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.

      Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбирать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.

      Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.

      Подключение

      При каждом запуске графического интерфейса OpenVPN операционная система Windows будет спрашивать, разрешаете или вы этой программме внести изменения на вашем компьютере. Нажмите Да. При запуске клиентского приложения OpenVPN в области задач появляется значок приложения, с помощью которого вы сможете подключать и отключать соединение VPN; соединение VPN не устанавливается автоматически.

      После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn) и нажмите Подключиться.

      Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.

      Отключение от VPN выполняется аналогично: перейдите в область задач, нажмите значок приложения OpenVPN правой кнопкой мыши, выберите профиль клиента и нажмите Отключиться.

      macOS

      Установка

      Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды нажмите загруженный файл .dmg и следуйте указаниям по установке.

      В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.

      Подключение

      Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.

      Linux

      Установка

      Если вы используете Linux, существуют различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.

      Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.

      В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:

      • sudo apt update
      • sudo apt install openvpn

      В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:

      • sudo yum install epel-release
      • sudo yum install openvpn

      Настройка

      Проверьте, включен ли в ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf:

      Output

      update-resolv-conf

      Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:

      Если вы нашли файл update-resolv-conf, уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:

      client1.ovpn

      script-security 2
      up /etc/openvpn/update-resolv-conf
      down /etc/openvpn/update-resolv-conf
      

      Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

      client1.ovpn

      group nobody
      

      Сохраните и закройте файл.

      Теперь для подключения к VPN вы можете просто указать команде openvpn файл конфигурации клиента:

      • sudo openvpn --config client1.ovpn

      Эта команда должна установить подключение к вашей VPN.

      iOS

      Установка

      Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.

      Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn в окно OpenVPN Documents. iTunes, показывающий профиль VPN, готовый к подключению iPhone

      Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите зеленый значок плюс, чтобы импортировать его.

      Приложение OpenVPN для iOS показывает, что новый профиль готов к импорту Подключение

      Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.

      Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.

      Приложение OpenVPN для iOS, подключенное к VPN

      Android

      Установка

      Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.

      Вы можете переместить профиль .ovpn, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, вы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.

      Запустите приложение OpenVPN и нажмите меню FILE, чтобы импортировать профиль.

      Выбор меню импорта профиля в приложении OpenVPN для Android

      Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /storage/emulated/0/openvpn) и выберите файл .ovpn​​​. Нажмите кнопку IMPORT, чтобы завершить импорт этого профиля.

      Приложение OpenVPN для Android выбирает профиль VPN для импорта

      Подключение После добавления профиля вы увидите следующий экран:

      Приложение OpenVPN для Android с добавленным новым профилем

      Для подключения нажмите кнопку-переключатель рядом с профилем, который вы хотите использовать. Вы увидите статистические данные вашего подключения в режиме реального времени и трафик, проходящий через ваш сервер OpenVPN: Приложение OpenVPN для Android, подключенное к VPN

      Для отключения просто нажмите кнопку-переключатель слева еще раз. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.

      Шаг 14 — Тестирование соединения VPN (необязательно)

      Примечание. Этот метод тестирования подключения VPN будет работать только в случае, если вы выбрали перенаправление всего трафика через VPN на шаге 7 при редактировании файла server.conf​​ для OpenVPN.

      После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.

      Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.

      Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.

      Шаг 15 — Отзыв сертификатов клиента

      Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.

      Для этого воспользуйтесь примером в руководстве по установке и настройке центра сертификации в CentOS 8 в разделе Отзыв сертификата.

      После отзыва сертификата для клиента с помощью этих инструкций вам нужно будет скопировать созданный файл crl.pem на ваш сервер OpenVPN в директорию /etc/openvpn/server:

      • sudo cp /tmp/crl.pem /etc/openvpn/server/

      Затем откройте файл конфигурации сервера OpenVPN:

      • sudo nano /etc/openvpn/server/server.conf

      Добавьте в конце файла опцию crl-verify, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:

      /etc/openvpn/server/server.conf

      crl-verify crl.pem
      

      Сохраните и закройте файл.

      Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

      • sudo systemctl restart openvpn-server@server.service

      Клиент больше не сможет подключаться к серверу, используя старые учетные данные.

      Чтобы запретить доступ другим клиентам, повторите эту процедуру:

      1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
      2. Создайте новый список CRL.
      3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в директорию /etc/openvpn/server/, чтобы перезаписать старый список.
      4. Перезапустите службу OpenVPN.

      С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.

      Заключение

      Теперь у вас должна быть полностью готовая к использованию виртуальная частная сеть, запущенная на вашем сервере OpenVPN. Вы можете просматривать веб-ресурсы и загружать контент, не беспокоясь о том, что злоумышленники смогут отслеживать вашу активность.

      Для дальнейшей кастомизации вашей установки OpenVPN можно выполнить несколько шагов, например, настроить для вашего клиента автоматическое подключение к VPN или задать специальные правила и политики доступа для конкретного клиента. При выполнении этих действий по кастомизации OpenVPN вы должны ознакомиться с официальной документацией для OpenVPN.

      Для настройки большего числа клиентов вам нужно выполнить шаги 6 и 11–13 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 15.



      Source link