Guia de tecnologias

Instalar e configurar OpenVPN no FreeBSD 12.0

7 min read Tutoriais Atualizado 17 Oct 2025
OpenVPN no FreeBSD 12.0 — Guia passo a passo
OpenVPN no FreeBSD 12.0 — Guia passo a passo

Importante: este tutorial pressupõe acesso root ao sistema FreeBSD e que você tenha pf (packet filter) como firewall ativo ou configurável.

Por que este guia é útil

OpenVPN cria uma rede privada virtual (VPN) segura sobre a Internet pública. Ele usa a biblioteca OpenSSL para criptografia e oferece vários mecanismos de autenticação: certificados (recomendado para servidores), chaves pré-compartilhadas e autenticação por usuário/senha. Neste guia vamos usar autenticação baseada em certificados porque é escalável e permite revogação de clientes.

O que você vai aprender

  • Instalar OpenVPN no FreeBSD 12.0
  • Preparar easy-rsa e variáveis para certificados
  • Gerar CA, servidor, clientes, DH e CRL
  • Configurar o servidor OpenVPN
  • Ajustar regras do pf para NAT e permitir tráfego VPN
  • Habilitar encaminhamento de pacotes no FreeBSD
  • Criar arquivo de configuração .ovpn para o cliente
  • Testes básicos e procedimentos de verificação

Pré-requisitos

  • FreeBSD 12.0 instalado (mínimo 512 MB RAM, 1 CPU)
  • Acesso root ou privilégios sudo
  • Conectividade de rede adequada para baixar pacotes
  • pf configurável como firewall

1. Instalar OpenVPN

Atualize o repositório de pacotes e instale o OpenVPN:

pkg update
pkg install openvpn

Em seguida, ative o serviço OpenVPN na inicialização e defina a interface tun:

sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"

Agora o pacote OpenVPN está instalado no sistema FreeBSD 12.0.

Tela de instalação do OpenVPN no FreeBSD

2. Preparar variáveis para os certificados (easy-rsa)

Crie o diretório de configuração do OpenVPN e copie o easy-rsa:

mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Acesse o diretório e edite o arquivo vars:

cd /usr/local/etc/openvpn/easy-rsa/
vim vars

Edite os valores padrão com as informações da sua organização. Exemplo:

set_var EASYRSA             "$PWD"
set_var EASYRSA_PKI         "$EASYRSA/pki"
set_var EASYRSA_DN          "cn_only"
set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE "Frankfurt"
set_var EASYRSA_REQ_CITY    "Frankfurt"
set_var EASYRSA_REQ_ORG     "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL   "[email protected]"
set_var EASYRSA_REQ_OU      "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE    2048
set_var EASYRSA_ALGO        rsa
set_var EASYRSA_CA_EXPIRE   7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT  "no"
set_var EASYRSA_NS_COMMENT  "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR     "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF    "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST      "sha256"

Salve e torne o arquivo executável:

chmod +x vars

Diretório easy-rsa copiado para /usr/local/etc/openvpn

3. Gerar certificados

A seguir vamos inicializar a PKI e criar os artefatos: CA, certificados de servidor e cliente, DH e CRL.

cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki

Gerar CA

./easyrsa.real build-ca

Você será solicitado a criar uma senha para a chave da CA. Guarde essa senha com segurança. Após a conclusão, a CA (pki/ca.crt e pki/private/ca.key) estará criada.

Gerar CA com easy-rsa

Gerar e assinar certificado do servidor

Gerar requisição e chave do servidor:

./easyrsa.real gen-req openvpn-bsd nopass

Assinar a requisição com a CA:

./easyrsa.real sign-req server openvpn-bsd

Digite a senha da CA quando solicitado. Depois, verifique o certificado:

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt

Se não houver erro, o certificado do servidor está válido.

Criação e assinatura do certificado do servidor

Verificação do certificado do servidor

Gerar e assinar certificado do cliente

Gerar requisição do cliente:

./easyrsa.real gen-req client01 nopass

Assinar como cliente:

./easyrsa.real sign-req client client01

Verifique:

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Gerando certificado do cliente

Assinatura do certificado do cliente

Gerar DH e CRL

Gere a lista de revogação (CRL) e parâmetros Diffie-Hellman:

./easyrsa.real gen-crl
./easyrsa.real gen-dh

Esses arquivos serão usados pelo servidor para revogar clientes e completar o handshake seguro.

Geração de DH e CRL

Copiar certificados para diretórios do OpenVPN

Crie pastas e copie os arquivos necessários:

mkdir -p /usr/local/etc/openvpn/{server,client}
cp pki/ca.crt /usr/local/etc/openvpn/server/
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/
cp pki/ca.crt /usr/local/etc/openvpn/client/
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/
cp pki/private/client01.key /usr/local/etc/openvpn/client/
cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/

Agora estamos prontos para configurar o servidor OpenVPN.

Arquivos copiados para diretórios server e client

Verificação das chaves e certificados no diretório

4. Configurar OpenVPN

Crie o arquivo de configuração do servidor:

cd /usr/local/etc/openvpn/
vim openvpn.conf

Exemplo de configuração “openvpn.conf”:

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Salve e inicie o serviço:

service openvpn start
service openvpn status

Verifique a porta com sockstat:

sockstat -l4

5. Configurar pf (firewall)

A seguir vamos criar regras pf para NAT e permitir tráfego para o servidor OpenVPN.

Edite o /usr/local/etc/pf.conf:

cd /usr/local/etc/
vim pf.conf

Adicione variáveis e regras básicas (ajuste “$ext_if” e “$ext_ip” conforme seu ambiente):

# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"

# reassemble all fragmented packets before filtering
scrub in on $ext_if all fragment reassemble

# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state

# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any

Verifique a configuração e recarregue o pf:

service pf check
service pf reload
pfctl -sr
pfctl -sn

Regras pf aplicadas

Nota: adapte $ext_if, $ext_ip e políticas de filtragem conforme a sua topologia. Em ambientes de produção, prefira políticas deny-by-default e permita somente o necessário.

6. Habilitar encaminhamento de pacotes

Edite /etc/sysctl.conf e adicione:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Aplique as configurações:

sysctl -f /etc/sysctl.conf

Habilite o gateway no rc.conf:

sysrc gateway_enable="YES"

Reinicie o servidor para garantir que todas as alterações sejam aplicadas:

reboot

Configuração de encaminhamento aplicada

7. Criar arquivo de configuração do cliente

No servidor, crie o arquivo de cliente em /usr/local/etc/openvpn/client/client01.ovpn:

cd /usr/local/etc/openvpn/client/
vim client01.ovpn

Exemplo de cliente:

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Troque remote xxx.xxx.xxx.xxx pelo IP público ou hostname do servidor.

Faça download dos seguintes arquivos para a máquina cliente (por método seguro):

  • client01.ovpn
  • ca.crt
  • client01.crt
  • client01.key

Arquivo de configuração do cliente pronto para download

8. Testes e verificação

No cliente, conecte usando o OpenVPN:

openvpn --config client01.ovpn

Verifique a interface tun0:

ifconfig tun0

Teste conectividade com o servidor interno:

ping -c3 10.5.5.1

Verifique o IP público (saída NAT do servidor):

curl ipinfo.io

Verificação do IP público após conectar via VPN

Se tudo estiver correto, a VPN está funcional e roteando tráfego para a Internet através do servidor.


Boas práticas de segurança

  • Proteja a chave da CA (pki/private/ca.key) em armazenamento offline sempre que possível.
  • Use certificação com senha para a CA e mantenha backups seguros.
  • Rotate certificados periodicamente e ajuste EASYRSA_CERT_EXPIRE conforme política da sua organização.
  • Habilite tls-auth ou tls-crypt para proteger o canal de controle contra ataques DoS simples.
  • Limite o protocolo e cifra (ex.: AES-256-GCM) e desative algoritmos fracos.
  • Mantenha o sistema e o pacote OpenVPN atualizados.

Exemplo de adição de tls-crypt:

# no servidor
tls-crypt /usr/local/etc/openvpn/server/tls-crypt.key

# no cliente
tls-crypt tls-crypt.key

Gere a chave com:

openvpn --genkey --secret /usr/local/etc/openvpn/server/tls-crypt.key

Procedimento de revogação de cliente

  1. No servidor, revogue o certificado:
cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real revoke client01
./easyrsa.real gen-crl
cp pki/crl.pem /usr/local/etc/openvpn/server/
  1. Reinicie o serviço OpenVPN para recarregar o CRL ou configure reload dinâmico.
service openvpn restart
  1. Distribua a nova crl.pem se necessário e verifique logs para tentativas de conexão do cliente revogado.

Lista de verificação por função

Administradores de sistema:

  • Instalar pkg e OpenVPN
  • Proteger chaves CA
  • Configurar pf e regras NAT
  • Habilitar encaminhamento de IP
  • Testar conectividade e logs

Network engineer:

  • Planejar sub-rede VPN (evitar conflitos)
  • Verificar MTU e ajuste se necessário (tun vs tap)
  • Certificar rotas e políticas de firewall

Usuário final (cliente):

  • Receber arquivo client01.ovpn e chaves
  • Testar conexão e acessar recursos internos
  • Reportar latência / perda de pacotes

Mini-metodologia de implantação (4 passos)

  1. Preparação: planejar sub-rede 10.5.5.0/24, escolher IP público e definir regras de NAT.
  2. Instalação: pkg install openvpn e copiar easy-rsa.
  3. Criação: gerar CA, servidor, clientes, DH e CRL com easy-rsa.
  4. Operação: configurar pf, habilitar encaminhamento e monitorar logs.

Critérios de aceitação

  • Servidor OpenVPN inicia sem erros e escuta na porta 1194/UDP.
  • Cliente obtém IP 10.5.5.x e consegue pingar 10.5.5.1.
  • Tráfego de internet do cliente sai com o IP público do servidor (NAT ativo).
  • CRL aplicada e revogações são respeitadas.

Resolução de problemas comuns

Problema: OpenVPN não inicia

  • Verifique /var/log/openvpn.log
  • Execute service openvpn status e journal (se disponível)
  • Verifique permissões de arquivos de chave (.key)

Problema: Cliente conecta mas não acessa Internet

  • Verifique Pf.nat e regra de nat; confirme nat on !tun0 from 10.5.5.0/24 -> $ext_ip
  • Confirme net.inet.ip.forwarding=1
  • Verifique política de firewall externo

Problema: Conexão falha com TLS handshake

  • Confirme que ca.crt no cliente corresponde ao ca.crt do servidor
  • Verifique crl.pem para revogações
  • Teste time/date do servidor e cliente (certificados dependem de relógio correto)

Quando usar e quando evitar

Usar OpenVPN quando:

  • Você precisa de compatibilidade ampla entre clientes (Windows, macOS, Linux, mobile).
  • Deseja controle total sobre infraestrutura de VPN e política de roteamento.

Evitar OpenVPN quando:

  • Deseja uma solução zero-config e hospedada (p.ex. serviços comerciais VPN),
  • Tem restrições muito severas de CPU em dispositivos embarcados (WireGuard pode ser mais leve).

Alternativa leve: WireGuard — menos código, melhor desempenho, mas modelo de chave diferente e ainda em evolução para alguns casos de uso empresariais.

Fluxo de decisão para autenticação (Mermaid)

flowchart TD
  A[Precisa autenticação?] -->|Sim| B{Deseja gerenciar chaves?}
  A -->|Não| C[Use chave pré-compartilhada 'não recomendado para produção']
  B -->|Sim| D[Use certificados 'easy-rsa']
  B -->|Não| E[Use usuário/senha 'plugin PAM/LDAP']
  D --> F[Permite revogação e escala]
  E --> G[Menos seguro sem TLS adicional]

Compatibilidade e migração

  • Este guia foca FreeBSD 12.0, mas a maioria dos passos aplica-se a FreeBSD 11.x e 13.x com pequenas diferenças de paths e versões de pacote.
  • Ao migrar para outra plataforma (Linux, OpenBSD), revise nomes de serviços, paths de pacotes e sintaxe do firewall.

Glossário (1 linha cada)

  • CA: Autoridade certificadora que assina certificados.
  • CRL: Lista de certificados revogados.
  • DH: Parâmetros Diffie-Hellman para troca de chaves.
  • PKI: Infraestrutura de chave pública.

Conclusão

Seguindo estes passos você terá um servidor OpenVPN funcional no FreeBSD 12.0, com autenticação por certificados, regras de NAT no pf e encaminhamento de pacotes habilitado. Garanta a proteção da CA, revise periodicamente a CRL e adapte as regras de firewall ao seu modelo de segurança.

Leitura adicional


Anexos úteis

Comandos de verificação rápidos:

# Verificar serviço
service openvpn status

# Ver logs
tail -f /var/log/openvpn.log

# Ver regras pf
pfctl -sr
pfctl -sn

# Ver interfaces
ifconfig tun0

# Ver portas
sockstat -l4

Recursos visuais

Confirmação de certificados no diretório pki

Estrutura de diretórios do OpenVPN com certificados

Exemplo de lista de sockets com OpenVPN na porta 1194

Exemplo de saída do pfctl mostrando regras aplicadas

Autor
Edição

Materiais semelhantes

Aprenda inglês com IA: 10 apps essenciais
Educação

Aprenda inglês com IA: 10 apps essenciais

Legendas no Final Cut Pro: guia prático
[Edição de Vídeo]

Legendas no Final Cut Pro: guia prático

Instalar BIKA LIMS Inkosi no Ubuntu Server
Instalação

Instalar BIKA LIMS Inkosi no Ubuntu Server

Guia prático: aumentar a bateria do iPhone
Smartphones

Guia prático: aumentar a bateria do iPhone

Corrigir erro 0x800F0909 no Windows 11
Windows

Corrigir erro 0x800F0909 no Windows 11

Usar launcher-list-indicator no Unity
Guias

Usar launcher-list-indicator no Unity