Skip to main content

212.5 OpenVPN


Introdução


O OpenVPN é um software de código aberto que permite criar conexões VPN (Redes Virtuais Privadas) seguras e confiáveis. Com o OpenVPN, é possível criar uma rede privada virtual que conecta dispositivos em diferentes locais geográficos, permitindo a transmissão segura de dados através da Internet pública.


O OpenVPN suporta vários protocolos de criptografia, incluindo SSL (Secure Sockets Layer) e TLS (Transport Layer Security), que garantem a segurança das informações transmitidas. Além disso, o OpenVPN é altamente configurável e oferece várias opções de personalização para atender às necessidades específicas de cada usuário.


Uma das principais vantagens do OpenVPN é sua capacidade de operar em diferentes plataformas, incluindo Windows, Mac, Linux, Android e iOS. Isso significa que você pode usá-lo em praticamente qualquer dispositivo, desde desktops até smartphones.


Outra vantagem do OpenVPN é que ele é bastante flexível e pode ser facilmente configurado para atender a diferentes requisitos de segurança. Por exemplo, é possível configurar o OpenVPN para autenticar usuários usando certificados digitais ou senhas.


Com a VPN é possível trafegar informações sensíveis na Internet; uma Rede que não é segura.

VPN


O OpenVPN trabalha na porta 1194 UDP (por padrão). O OpenVPN suporta vários tipos de encriptação de dados para garantir a segurança das informações transmitidas através da rede VPN. Entre as opções de criptografia suportadas pelo OpenVPN, destacam-se:


  1. Cipher Block Chaining (CBC): um modo de operação de criptografia que usa blocos de dados para criptografar informações.


  2. Cipher Feedback (CFB): um modo de operação de criptografia que permite o uso de algoritmos de criptografia de bloco para proteger a confidencialidade dos dados.


  3. Electronic Codebook (ECB): um modo de operação de criptografia que divide os dados em blocos e criptografa cada bloco separadamente.


  4. Galois/Counter Mode (GCM): um modo de operação de criptografia que combina o modo de contador com a autenticação de mensagens usando códigos de autenticação de mensagem (MAC).


Já os métodos de autenticação e criptografia usados pelo OpenVPN são:

A Static Key é uma chave de criptografia compartilhada que é pré-configurada em ambos os lados da conexão VPN. Isso significa que a mesma chave é usada para criptografar e descriptografar dados em ambas as extremidades da conexão. A chave estática é fácil de configurar e é uma boa opção para redes VPN com um número limitado de usuários. No entanto, como a mesma chave é compartilhada entre todos os usuários, a chave estática não é recomendada para redes VPN maiores ou que requerem maior segurança.


A Public Key, ou chave pública, é um método mais seguro de autenticação e criptografia usado pelo OpenVPN. Ele usa um par de chaves, uma chave pública e uma chave privada, para autenticar e proteger a conexão VPN. A chave pública é compartilhada com os usuários remotos, enquanto a chave privada é mantida em sigilo. Quando um usuário remoto se conecta à rede VPN, ele usa a chave pública para criptografar os dados enviados para a rede. A chave privada é usada pelo servidor VPN para descriptografar os dados. Esse método de criptografia é mais seguro do que a static key, pois cada usuário tem uma chave única, garantindo maior privacidade e segurança.


Tanto o servidor (VPN) quanto o cliente possuem uma interface virtual para a criptografia dos dados, podem receber os nomes: tun ou tap.

  • tap
    Nível Ethernet (layer 2). Usado para Bridges.


  • tun
    Nível Rede (layer 3). Usado para roteamento IP.



Instalação e Configuração


Comece fazendo a instalação:

$ sudo apt install -y openvpn

Os arquivos de configuração ficam em /etc/openvpn/.


Vamos trabalhar com Static Key, para isso, vamos começar gerando a chave na máquina cliente:

# Método antigo (ainda funciona):
$ openvpn --genkey --secret static.key

# Método novo:
$ openvpn --genkey secret static.key

# Agora envie a chave para o servidor:
$ scp static.key vagrant@192.168.121.102:~/

# No servidor envie para o diretório abaixo:
$ sudo mv static.key /etc/openvpn/


Configuração no Cliente


Crie o arquivo de configuração no Cliente:

$ sudo vim /etc/openvpn/client.conf

# Adicione a conf abaixo:
remote 192.168.121.102
dev tun2
ifconfig 10.0.0.20 10.0.0.10
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
secret static.key

Como já tenho uma interface tun no cliente, vou configurar para essa nova ser tun2.


ConfiguraçãoDescrição
remote 192.168.121.102Define o endereço IP ou nome de domínio do servidor OpenVPN remoto que o cliente deve se conectar.
dev tun2Especifica o nome do dispositivo TUN/TAP a ser usado para esta conexão VPN. Neste caso, está definido como "tun2".
ifconfig 10.0.0.20 10.0.0.10Define o endereço IP local e o endereço IP remoto para esta conexão VPN. O primeiro endereço IP especificado (10.0.0.20) será atribuído à interface TUN/TAP no cliente, enquanto o segundo endereço IP (10.0.0.10) será atribuído ao servidor remoto.
keepalive 10 60Define o tempo em segundos que o cliente deve esperar antes de enviar um pacote de "ping" para o servidor, e o tempo em segundos que o servidor deve esperar antes de enviar um pacote de "ping" de volta para o cliente. Esses pacotes "ping" são usados para manter a conexão viva e detectar se a conexão foi interrompida.
ping-timer-remEsta configuração é usada para desativar a detecção de inatividade (também conhecida como "time-out"), que normalmente fecha a conexão se não houver tráfego por um determinado período de tempo.
persist-tunEsta opção mantém o dispositivo TUN/TAP aberto mesmo se a conexão OpenVPN cair, o que significa que a conexão pode ser reestabelecida mais rapidamente sem precisar reabrir o dispositivo.
persist-keyEsta opção mantém a chave de autenticação salva em um arquivo, para que a conexão possa ser reestabelecida mais rapidamente sem precisar inserir a senha novamente.
secret static.keyEspecifica o nome do arquivo contendo a chave de autenticação compartilhada entre o cliente e o servidor. Essa chave é usada para autenticar e criptografar o tráfego VPN.
client-to-clientComo o modo de servidor OpenVPN lida com vários clientes por meio de uma única interface tun ou tap, ele é efetivamente um roteador. A flag –client-to-client diz ao OpenVPN para rotear internamente o tráfego cliente-para-cliente em vez de enviar todo o tráfego de origem do cliente para a interface TUN / TAP. Quando esta opção é usada, cada cliente “verá” os outros clientes que estão conectados no momento. Caso contrário, cada cliente verá apenas o servidor. Não use essa opção se você quiser fazer o firewall do tráfego de túnel usando regras personalizadas por cliente.


Configuração no Servidor


Crie o arquivo de configuração no Cliente:

$ sudo vim /etc/openvpn/server.conf

# Adicione a conf abaixo:
dev tun
ifconfig 10.0.0.10 10.0.0.20
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
secret static.key
push "dhcp-option DNS 8.8.8.8"
status /var/log/openvpn-status.log

É possível obter exemplos e configuração em /usr/share/doc/openvpn/examples.


ConfiguraçãoDescrição
pushÉ uma opção que permite que o servidor envie informações adicionais para o cliente.
"dhcp-option DNS 8.8.8.8"É uma instrução que indica ao cliente que ele deve usar o servidor DNS com o endereço IP 8.8.8.8 quando precisar resolver nomes de domínio em endereços IP.
statusQuando usada no cliente ou em instâncias rodando no modo point-to-point, o arquivo gerado conterá estatísticas de tráfego. Já em instâncias funcionando como servidores conterá a lista de clientes conectados e a tabela de roteamento.

Inicie o servidor:

$ sudo openvpn --config /etc/openvpn/server.conf --daemon

Inicie o cliente:

# Pode usar o '&' para deixar em background:
$ openvpn /etc/openvpn/client.conf


Fontes


https://community.openvpn.net/openvpn/wiki/BridgingAndRouting

https://openvpn.net/community-resources/how-to/