Ter a sua própria VPN significa saber exatamente por onde o seu tráfego passa — sem depender de provedor comercial, sem log de terceiros e com controle total sobre quem acessa. Neste guia, a gente vai do zero até uma VPN WireGuard em produção: contratação da VPS, apontamento de DNS, acesso por chave SSH, hardening do kernel e do firewall, painel web com MFA e, no fim, o teste que comprova que nada está vazando.
Pré-requisitos: familiaridade básica com terminal Linux, um domínio (ou conta gratuita no Duck DNS) e uns 40 minutos.
Módulo 1 — Infraestrutura básica (VPS e DNS)
O alicerce da VPN é o servidor virtual e o apontamento de domínio.
1.1 Contratação e setup inicial da VPS
- Escolha o provedor: DigitalOcean (costuma oferecer créditos de teste), AWS EC2, Vultr ou opções mais baratas listadas em diretórios como o LowEndStock.
- Sistema operacional: use uma imagem limpa do Ubuntu Server 22.04 LTS (ou 24.04 LTS — os comandos são os mesmos).
- Hardware mínimo: 1 vCPU e 1 GB a 2 GB de RAM são mais que suficientes para uso pessoal e para o painel rodar estável.
1.2 Subdomínio (DNS)
Um subdomínio evita decorar o IP e facilita a emissão e renovação do certificado SSL do painel:
- Acesse o seu provedor de domínio ou um DNS dinâmico gratuito como o Duck DNS (
duckdns.org). - Crie um subdomínio, por exemplo
vpn.seudominio.comoumeuprojeto.duckdns.org. - Crie um registro A apontando para o IPv4 público da VPS.
Módulo 2 — Acesso inicial seguro (SSH com chaves)
Antes de instalar qualquer coisa, desative o login por senha e use apenas criptografia assimétrica.
2.1 Gerando a chave SSH
No seu computador (Linux, macOS ou Windows Terminal):
ssh-keygen -t ed25519 -C "seu-email@dominio.com"
Isso cria um par de chaves (pública e privada) em ~/.ssh/.
2.2 Instalando a chave e conectando
Copie o conteúdo de id_ed25519.pub para o arquivo ~/.ssh/authorized_keys da VPS — provedores como a DigitalOcean permitem cadastrar a chave no painel antes mesmo de criar a máquina. Depois conecte:
ssh -i ~/.ssh/id_ed25519 root@<IP_DA_VPS>
Com o acesso por chave funcionando, desligue o login por senha em /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin prohibit-password
E reinicie o serviço: sudo systemctl restart ssh.
⚠️ Teste a conexão por chave numa segunda janela antes de fechar a sessão atual. Se algo der errado, você ainda tem por onde corrigir.
Módulo 3 — Hardening do servidor (SO e rede)
É aqui que uma VPN caseira vira uma configuração de nível corporativo: blindar o kernel e o firewall contra negação de serviço, scanners e exposição acidental.
3.1 Hardening do kernel (/etc/sysctl.conf)
sudo nano /etc/sysctl.conf
Adicione ou ajuste:
# Roteamento de pacotes IPv4 (obrigatório para a VPN funcionar)
net.ipv4.ip_forward = 1
# Proteção contra IP spoofing (rejeita pacotes com origem forjada)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Prevenção de MITM via ICMP Redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# Mitigação de SYN Flood (DDoS)
net.ipv4.tcp_syncookies = 1
# Evita que o servidor sirva de refletor em ataques Smurf
net.ipv4.icmp_echo_ignore_broadcasts = 1
Aplique com:
sudo sysctl -p
💡 O UFW carrega o próprio arquivo
/etc/ufw/sysctl.confe pode sobrescrever oip_forward. Descomente lá também a linhanet/ipv4/ip_forward=1.
3.2 Firewall (UFW) e NAT
O UFW precisa bloquear o que não deve entrar e encaminhar o tráfego dos seus dispositivos para a internet.
Políticas base e portas:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH
sudo ufw allow 51820/udp # WireGuard
Permitir o encaminhamento: em /etc/default/ufw, altere a política de forward — sem isso, o NAT abaixo não funciona:
DEFAULT_FORWARD_POLICY="ACCEPT"
Mascaramento (NAT): edite as pré-regras do firewall:
sudo nano /etc/ufw/before.rules
Adicione este bloco no topo do arquivo, antes da seção *filter:
*nat
:POSTROUTING ACCEPT [0:0]
# 'eth0' = interface pública da VPS | '10.8.0.0/24' = sub-rede da VPN
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Confira o nome da interface com
ip route | grep default— em muitos provedores ela se chamaens3ouenp1s0, nãoeth0.
Por fim, ative o firewall:
sudo ufw enable
3.3 Mitigação de força bruta no SSH
Limite novas conexões SSH a 3 por minuto por IP usando o módulo recent do iptables:
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name ssh-protect --rsource
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name ssh-protect --rsource -j DROP
💡 Regras adicionadas direto no iptables somem no reboot. Uma alternativa nativa e persistente é
sudo ufw limit 22/tcp, que aplica um rate limit equivalente.
3.4 Protegendo containers (chain DOCKER-USER)
Se o painel da VPN roda em Docker, ele ignora o UFW e publica portas diretamente no iptables. Para não expor bancos de dados ou portas secundárias, adicione ao final de /etc/ufw/after.rules (antes do COMMIT da seção *filter):
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
-A DOCKER-USER -i eth0 -p tcp --dport 443 -j RETURN # HTTPS do painel
-A DOCKER-USER -i eth0 -p tcp --dport 80 -j RETURN # HTTP (redireciona para HTTPS)
-A DOCKER-USER -i eth0 -p udp --dport 51820 -j RETURN # WireGuard, se rodar em container
-A DOCKER-USER -i eth0 -j DROP # Bloqueia o resto
Recarregue com sudo ufw reload.
Módulo 4 — Instalação (WireGuard + painel web)
Com a fundação de segurança pronta, é hora dos serviços principais.
4.1 Rodando o script de automação
Projetos open source como wg-easy, Amnezia ou Firezone instalam o WireGuard junto com um painel gráfico:
- Execute o script oficial do projeto escolhido (normalmente via
wget/curl+bash). Leia o script antes de rodar — ele vai executar como root. - Siga os prompts interativos: o instalador cuida de Docker, dependências e variáveis de ambiente.
Durante a instalação, você vai precisar informar:
- Usuário administrador do painel web;
- Domínio completo configurado no Módulo 1 (ex.:
meuprojeto.duckdns.org); - DNS upstream: recomendamos
1.1.1.1(Cloudflare).
Ao terminar, aguarde a propagação de DNS e o build dos containers.
Módulo 5 — Painel web e MFA
5.1 Primeiro login
- Abra
https://meuprojeto.duckdns.orgno navegador. - Entre com as credenciais de administrador criadas no passo anterior.
5.2 Ativando o MFA pelo terminal
Se o painel exigir um app autenticador e você não tiver SMTP configurado para receber o código por e-mail, recupere o token pelo terminal:
- Conecte na VPS via SSH.
- Use o comando de administração do painel (ex.:
show-2fa) ou entre no container:docker exec -it <nome_do_container> /bin/bashe consulte os logs. - Copie o token/URL, cadastre no seu autenticador (1Password, Google Authenticator etc.) e conclua o login.
Módulo 6 — Conectando dispositivos sem vazamentos
6.1 Criando o perfil do cliente
- No painel, abra a aba Clientes/Dispositivos.
- Adicione um dispositivo com nome descritivo (ex.:
Macbook-Pro,iPhone-Trabalho). - O painel gera na hora o arquivo
.confe o QR Code com as chaves do cliente.
6.2 Prevenindo DNS leak
Garanta que o dispositivo resolva nomes apenas pelo túnel — caso contrário, a operadora local continua vendo quais sites você acessa. No .conf (ou nas opções avançadas do painel), confira:
[Interface]
DNS = 10.8.0.1
Use o IP interno da VPN ou um resolvedor confiável como 1.1.1.1. Para rotear todo o tráfego pela VPN, o peer deve ter AllowedIPs = 0.0.0.0/0, ::/0.
6.3 Conexão e validação final
- Instale o app oficial do WireGuard no computador ou smartphone.
- Escaneie o QR Code exibido no painel.
- Ative a conexão.
- Teste definitivo: acesse o MeuIP.com.br e rode o DNS Leak Test. IP, localização e servidores DNS precisam bater com a região da sua VPS — se aparecer o DNS da sua operadora, revise o passo 6.2.
Checklist final
- VPS com Ubuntu LTS e subdomínio apontado
- Login SSH só por chave, senha desativada
- Kernel endurecido via
sysctl - UFW ativo, forward liberado e NAT configurado
- Rate limit no SSH
- Portas do Docker contidas pela chain
DOCKER-USER - Painel com HTTPS e MFA
- Teste de IP e DNS leak aprovado
Com isso, você tem uma VPN própria, auditável e blindada — o mesmo nível de cuidado que aplicamos nos projetos de infraestrutura da Knightx. Se quiser ajuda para montar algo assim para a sua empresa, é só chamar.
