Instalar e configurar OpenVPN no FreeBSD 12.0

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.
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
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 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.
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
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.
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.
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
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
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
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
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
- 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/
- Reinicie o serviço OpenVPN para recarregar o CRL ou configure reload dinâmico.
service openvpn restart
- 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)
- Preparação: planejar sub-rede 10.5.5.0/24, escolher IP público e definir regras de NAT.
- Instalação: pkg install openvpn e copiar easy-rsa.
- Criação: gerar CA, servidor, clientes, DH e CRL com easy-rsa.
- 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
Materiais semelhantes
Aprenda inglês com IA: 10 apps essenciais

Legendas no Final Cut Pro: guia prático
Instalar BIKA LIMS Inkosi no Ubuntu Server

Guia prático: aumentar a bateria do iPhone

Corrigir erro 0x800F0909 no Windows 11
