Implantar VPN em servidores headless
O FreeGuard CLI funciona nativamente em servidores Linux headless sem necessidade de ambiente de desktop. Seja para proteger uma instância na nuvem, um laboratório doméstico ou rotear tráfego de contêineres via VPN, este guia abrange instalação, autenticação, configuração de serviço e monitoramento para implantações em servidores de produção.

Implantar VPN em servidores headless

O FreeGuard CLI funciona nativamente em servidores Linux headless sem necessidade de ambiente de desktop. Seja para proteger uma instância na nuvem, um laboratório doméstico ou rotear tráfego de contêineres via VPN, este guia abrange instalação, autenticação, configuração de serviço e monitoramento para implantações em servidores de produção.

Por que executar VPN em um servidor?

Servidores lidam com tráfego sensível: conexões com bancos de dados, chamadas de API, transferências de backup e comunicação entre serviços. Executar VPN no próprio servidor garante que todo o tráfego de saída seja criptografado sem configurar aplicações individuais.

Casos de uso comuns:

  • Instâncias na nuvem acessando APIs com restrição geográfica
  • Runners CI/CD que precisam de identidade de rede consistente
  • Serviços auto-hospedados que se beneficiam do mascaramento de IP
  • Servidores de desenvolvimento usados por equipes distribuídas

Instalação

Ubuntu / Debian

curl -fsSL https://cli.freeguard.com/install.sh | bash

Ou instale pelo repositório APT:

curl -fsSL https://cli.freeguard.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/freeguard.gpg
echo "deb [signed-by=/usr/share/keyrings/freeguard.gpg] https://apt.freeguard.com stable main" | sudo tee /etc/apt/sources.list.d/freeguard.list
sudo apt update
sudo apt install freeguard-cli

CentOS / RHEL / Fedora

curl -fsSL https://cli.freeguard.com/install.sh | bash

Ou use o repositório RPM:

sudo rpm --import https://cli.freeguard.com/gpg.key
sudo tee /etc/yum.repos.d/freeguard.repo <<EOF
[freeguard]
name=FreeGuard CLI
baseurl=https://rpm.freeguard.com/stable
gpgcheck=1
gpgkey=https://cli.freeguard.com/gpg.key
EOF
sudo yum install freeguard-cli

Alpine Linux

curl -fsSL https://cli.freeguard.com/install.sh | bash

Usuários do Alpine podem precisar instalar o libc6-compat primeiro:

apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash

Verificar instalação

freeguard --version

Autenticação headless

Em servidores sem navegador, você não pode usar o fluxo de login OAuth padrão. O FreeGuard CLI oferece autenticação por e-mail para ambientes headless.

Login por e-mail

freeguard login --method email

O CLI solicita que você insira o e-mail da conta. Um código de verificação é enviado para esse endereço. Insira o código no terminal para concluir a autenticação.

$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.

Login baseado em token

Para implantações automatizadas, use um token de serviço:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Gere tokens de serviço no painel da conta. Os tokens podem ser limitados a servidores específicos e ter expiração configurável.

Verificar autenticação

freeguard status --json | jq '.authenticated'

Executar como serviço systemd

Para implantações em produção, execute o FreeGuard CLI como serviço systemd para iniciar no boot e reiniciar em caso de falha.

Criar o arquivo de serviço

sudo tee /etc/systemd/system/freeguard.service <<EOF
[Unit]
Description=FreeGuard VPN
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/freeguard connect --server us-east --no-color
ExecStop=/usr/local/bin/freeguard disconnect
Restart=on-failure
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF

Habilitar e iniciar

sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard

Verificar status do serviço

sudo systemctl status freeguard

Ver logs

sudo journalctl -u freeguard -f

Scripting com --json e --no-color

Scripts de produção devem analisar saída estruturada em vez de texto legível por humanos.

Saída JSON

Todo comando suporta --json:

# Connection status
freeguard status --json

Saída:

{
  "connected": true,
  "server": "us-east-1",
  "server_name": "New York",
  "protocol": "hysteria2",
  "uptime": 86400,
  "bytes_sent": 1048576,
  "bytes_received": 5242880
}

Modo sem cores

Remova códigos de cor ANSI para arquivos de log limpos:

freeguard status --no-color >> /var/log/freeguard-status.log

Exemplo de scripting

Um script de verificação de saúde que reconecta em caso de falha:

#!/bin/bash
STATUS=$(freeguard status --json 2>/dev/null)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')

if [ "$CONNECTED" != "true" ]; then
  echo "$(date): VPN disconnected, reconnecting..." >> /var/log/freeguard-health.log
  freeguard connect --server us-east --json >> /var/log/freeguard-health.log 2>&1
fi

Adicione ao cron para verificações regulares:

# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh

Monitoramento e verificações de saúde

Verificação de saúde básica

freeguard status --json | jq -r '.connected'

Retorna true ou false. Simples o suficiente para qualquer sistema de monitoramento.

Integração com ferramentas de monitoramento

Exporte o status para Prometheus, Datadog ou qualquer sistema de monitoramento que possa executar comandos shell:

#!/bin/bash
# prometheus-exporter.sh
STATUS=$(freeguard status --json)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
UPTIME=$(echo "$STATUS" | jq -r '.uptime')

if [ "$CONNECTED" = "true" ]; then
  echo "freeguard_connected 1"
  echo "freeguard_uptime_seconds $UPTIME"
else
  echo "freeguard_connected 0"
  echo "freeguard_uptime_seconds 0"
fi

Alertas

Combine a verificação de saúde com seu sistema de alertas. Exemplo com um webhook simples:

#!/bin/bash
CONNECTED=$(freeguard status --json | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
  curl -X POST https://hooks.example.com/alert \
    -H "Content-Type: application/json" \
    -d '{"text": "FreeGuard VPN disconnected on '"$(hostname)"'"}'
fi

Considerações de segurança

  • Executar como root: O túnel VPN requer privilégios root para modificar rotas de rede. O serviço systemd executa como root por padrão.
  • Armazenamento de tokens: Tokens de serviço são armazenados em ~/.config/freeguard/. Garanta permissões de arquivo adequadas (chmod 600).
  • Regras de firewall: Se usar UFW ou iptables, garanta que a interface do túnel VPN esteja permitida.
  • Kill switch: Ative o kill switch para bloquear todo o tráfego se o VPN desconectar: freeguard config set kill-switch true.

Próximos passos

Última atualização: março de 2026