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.
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:
Cipher Block Chaining (CBC): um modo de operação de criptografia que usa blocos de dados para criptografar informações.
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.
Electronic Codebook (ECB): um modo de operação de criptografia que divide os dados em blocos e criptografa cada bloco separadamente.
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 sertun2
.
Configuração | Descrição |
---|---|
remote 192.168.121.102 | Define o endereço IP ou nome de domínio do servidor OpenVPN remoto que o cliente deve se conectar. |
dev tun2 | Especifica 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.10 | Define 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 60 | Define 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-rem | Esta 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-tun | Esta 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-key | Esta 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.key | Especifica 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-client | Como 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ção | Descriçã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. |
status | Quando 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