Protege a Tua Ligação! Instala um Servidor OpenVPN no Proxmox

Tunel

1. Introdução

Neste artigo vou explicar como podes configurar um servidor OpenVPN utilizando um container no software gratuito de virtualização Proxmox. A segurança e a privacidade online são preocupações cada vez mais relevantes, tanto para utilizadores domésticos como para empresas. Uma das soluções mais eficazes para garantir comunicações seguras é a utilização de redes privadas virtuais (VPNs), que permitem estabelecer ligações encriptadas entre dispositivos remotos e redes privadas.

O OpenVPN é uma das ferramentas mais populares para criar uma VPN segura e altamente configurável. Com esta solução, é possível aceder remotamente a dispositivos, proteger a navegação em redes públicas e até mesmo interligar diferentes locais de forma privada e segura.

Neste artigo, iremos explorar a configuração de um servidor OpenVPN num container LXC no Proxmox, tirando partido da eficiência e leveza dos containers. Além disso, para simplificar a gestão dos perfis de ligação, iremos instalar uma interface gráfica, permitindo a criação e administração dos ficheiros .ovpn de forma intuitiva, sem necessidade de recorrer à linha de comandos.

No final deste guia, terás um servidor OpenVPN totalmente funcional, pronto para estabelecer ligações seguras e fácil de gerir através de uma interface amigável.

2. Preparação do Ambiente

Antes de avançarmos para a instalação e configuração do OpenVPN, é necessário garantir que o ambiente está devidamente preparado. Neste guia, iremos utilizar um container LXC no Proxmox, uma solução leve e eficiente em comparação com máquinas virtuais tradicionais.

Requisitos

Antes de começar, certifica-te de que tens:

  • Um servidor Proxmox funcional e com acesso root.
  • Ligação à internet para descarregar os pacotes necessários.
  • Conhecimentos básicos de gestão de containers e rede no Proxmox.

Criação do Container LXC

Escolha da imagem

No Proxmox, acede ao menu Content do teu armazenamento e descarrega uma imagem de Debian ou Ubuntu.

Logical Volume onde vai ser descarregado o template
LV escolhida para o download do template
Escolha do template debian 12 bookworm
Recomenda-se o uso de Debian 12 (Bookworm), pois é uma distribuição estável e bem suportada.

Criação do container

Criação do contentor
No Proxmox, vai a Datacenter → Node → Create CT.

Define um nome para o container (Hostname) e uma palavra-passe para a conta root. Como este container vai ser usado para transporte de pacotes IP vamos ainda tirar o visto da opção Unprivileged Container.

Escolha do Template
Escolhe a imagem descarregada.

Configura os recursos do sistema:

Opções de disco
Disco: 2GB ou mais, dependendo do número de clientes e logs.
Opção de CPU
CPU: Pelo menos 1 core.
Opções de RAM
RAM: 512MB a 1GB são suficientes para OpenVPN.

Configuração da rede

Escolher Bridge (vmbr0) para Permitir que o container tenha um IP na mesma rede do host.

Certifica-te de que o container tem acesso à internet para instalar pacotes.

Configurações finais da máquina virtual

Editar o arquivo /etc/pve/lxc/<ID do container>.conf

nano /etc/pve/lxc/<ID fo container>.conf

e adicionar os seguintes parametros:

lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

Estes parâmetros permitem montar o dispositivo tun0 no container.

Aceder ao container

Após a criação, inicia o container e liga-te via console. Insere as credenciais (root e a palavra-passe que escolheste).

Configuração da rede

Verifica qual é a interface de rede usada.

ip a

No meu caso a interface é a eth0. Vamos agora editar o ficheiro /etc/network/interfaces

nano /etc/network/interfaces

e colar o seguinte:

auto eth0
iface eth0 inet static
    address x.x.x.x
    netmask x.x.x.x
    gateway x.x.x.x
    dns-nameservers x.x.x.x

Em address colocar o ip do container. No meu caso vou escolher 192.168.1.25. Netmask colocar a máscara para identificar a rede, que no meu caso é 255.255.255.0. Gateway colocar qual o endereço de saída, e nesta configuração será o endereço do meu router. No dns-nameservers colocar onde o dns vai ser resolvido. Na minha rede quem está responsável por este serviço também é o router.

No final para gravar o ficheiro é só clicar ctrl + o, y para gravar e ctrl + x para sair. Finalmente vamos aplicar as configurações com o comando:

systemctl restart networking

Atualiza os pacotes antes de avançar:

apt update && apt upgrade -y

Com o container pronto e atualizado, podemos avançar para a instalação e configuração do OpenVPN.

3. Instalação e Configuração do OpenVPN

Agora que o container LXC está criado e atualizado, podemos prosseguir com a instalação e configuração do OpenVPN. O objetivo desta secção é configurar um servidor VPN funcional, pronto para aceitar ligações de clientes.

Instalar o OpenVPN e EasyRSA

Antes de mais, certifica-te de que estás ligado ao container via consola.

Depois, instala os pacotes necessários:

apt install openvpn easy-rsa -y

O EasyRSA é um conjunto de scripts que facilita a criação dos certificados de segurança necessários para o OpenVPN.

Criar a Autoridade Certificadora (CA)

O OpenVPN utiliza certificados para autenticar servidores e clientes. Para isso, vamos criar uma Autoridade Certificadora (CA) dentro do diretório do EasyRSA:

mkdir -p /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

Inicializa o ambiente do EasyRSA:

./easyrsa init-pki

Cria a CA e define uma palavra-passe segura quando solicitado:

./easyrsa build-ca

Agora, gera a chave e o certificado do servidor OpenVPN:

./easyrsa gen-req server nopass
./easyrsa sign-req server server
#A palavra-passe pedida é a que foi definida para o PEM

Em seguida, gera os certificados dos clientes (cada cliente precisa de um ficheiro .ovpn individual):

./easyrsa gen-req cliente1 nopass
./easyrsa sign-req client cliente1
#A palavra-passe pedida é a que foi definida para o PEM

Cria os parâmetros Diffie-Hellman, necessários para a encriptação segura:

./easyrsa gen-dh
#Este passo poderá demorar um pouco

Configurar o Servidor OpenVPN

Copia os ficheiros necessários para a pasta do OpenVPN:

cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem /etc/openvpn/

Cria um ficheiro de configuração para o servidor:

nano /etc/openvpn/server.conf

Adiciona o seguinte conteúdo:

port 1194
proto udp
dev tun0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
topology subnet
server 10.10.20.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
log /etc/openvpn/openvpn.log
push "route <rede interna acabada em 0> 255.255.255.0"

Guarda e sai do ficheiro (CTRL + X, Y, ENTER). Por fim vamos adicionar alguns parâmetros ao binário do OpenVPN com o seguinte comando:

setcap cap_net_admin,cap_net_raw=eip /usr/sbin/openvpn

Ativar o redirecionamento IP

Para os nossos pacotes chegarem ao seu destino é necessário ativar o redirecionamento IP com o seguinte comando:

nano /etc/sysctl.conf

e adicionar

net.ipv4.ip_forward = 1

Crtl + o, Y para guardar e Ctrl + X para sair. Reinicia o serviço.

sysctl -p

e finalmente temos de adicionar umas regras NAT com o iptables

apt install iptables-persistent
iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -d 192.168.1.0/24 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -s 10.10.20.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -d 10.10.20.0/24 -s 192.168.1.0/24 -j ACCEPT
iptables-save > /etc/iptables/rules.v4

Ativar e Iniciar o OpenVPN

Habilita e inicia o serviço OpenVPN:

systemctl enable openvpn@server
systemctl start openvpn@server
systemctl status openvpn@server

Se tudo estiver correto, o OpenVPN já estará a correr e pronto para aceitar ligações de clientes!

Na próxima secção, veremos como configurar os clientes e gerar os ficheiros .ovpn.

4. Configuração de Clientes OpenVPN

Com o servidor OpenVPN operacional, o próximo passo é configurar os clientes para se conectarem à VPN. Para isso, precisamos criar perfis de configuração .ovpn e testá-los.

Criando Perfis .ovpn Manualmente

Cada cliente OpenVPN necessita de um ficheiro de configuração específico para estabelecer a ligação ao servidor. Esse ficheiro contém informações como o endereço do servidor, certificados e chaves de autenticação.

Para criar um perfil .ovpn, cria um novo ficheiro no servidor:

nano /etc/openvpn/client/client1.ovpn

E adiciona o seguinte conteúdo, ajustando conforme necessário:

client
dev tun
proto udp
remote SEU_IP_OU_DOMÍNIO 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
comp-lzo
verb 3
<ca>
# Conteúdo do ficheiro /etc/openvpn/ca.crt
</ca>
<cert>
# Conteúdo do ficheiro /etc/openvpn/easy-rsa/issued/client1.crt
</cert>
<key>
# Conteúdo do ficheiro /etc/openvpn/easy-rsa/private/client1.key
</key>

Guarda e fecha o ficheiro. Depois, transfere-o para o dispositivo cliente (PC, smartphone, etc.).


Testando a Conexão de um Cliente

No cliente, instala o OpenVPN (caso ainda não esteja instalado) e testa a conexão com o servidor utilizando o ficheiro .ovpn gerado.

Linux/macOS:

openvpn --config client1.ovpn

Windows:

  1. Instala o OpenVPN Connect.
  2. Copia o ficheiro .ovpn para a pasta de configurações do OpenVPN.
  3. Abre o OpenVPN Connect e inicia a conexão.

Se tudo estiver configurado corretamente, o cliente deverá estabelecer a conexão com sucesso ao servidor OpenVPN!

Num próximo artigo irei explicar como podemos afinar o servidor VPN e instalar a interface gráfica para gerar os ficheiros .ovpn com facilidade.

Obrigado por leres até aqui e se encontrares algum erro ou tiveres alguma duvida, por favor, faz um comentário que tentarei responder o mais breve possivel.

Leave a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *