1 pontos por GN⁺ 2024-05-13 | 1 comentários | Compartilhar no WhatsApp

Principais recursos do Wag

  • Adiciona MFA, restrição de rotas e registro de dispositivos ao WireGuard
    • Permite definir rotas que exigem autenticação MFA ou rotas sempre acessíveis publicamente
    • Fornece uma API simples para registrar novos clientes
    • Suporte a alta disponibilidade
    • Oferece várias opções de MFA, como Webauthn e OIDC
  • Desenvolvido com apoio da Aura Information Security

Requisitos

  • iptables e libpam devem estar instalados
  • O Wag deve ser executado como root para gerenciar iptables e dispositivos wireguard
  • O encaminhamento deve estar ativado no sysctl
    sysctl -w net.ipv4.ip_forward=1
    
  • O Wag não precisa de wg-quick nem similares, desde que o kernel tenha suporte a WireGuard

Como instalar

Release binária (requer glibc 2.31+)

curl -L $(curl -s https://api.github.com/repos/NHAS/wag/releases/latest | jq -M -r '.assets[0].browser_download_url') -o wag
sudo ./wag gen-config
sudo ./wag start -config <generated_config_name>  

Instalação a partir do código-fonte (requer go1.19, npm, gulp, clang, llvm-strip, libbpf)

git clone git@github.com:NHAS/wag.git
cd wag
make
cp example_config.json config.json
sudo ./wag start
  • Se estiver rodando atrás de um proxy reverso, é preciso configurar X-Forwarded-For

Administração

O usuário root pode gerenciar o servidor wag com comandos como este:

wag subcommand [-options]
  • Subcomandos suportados: start, cleanup, reload, version, firewall, registration, devices, users, webadmin, gen-config
  • Fornece instruções de uso para cada comando

Guia do usuário

Instalar o Wag

  1. Copie wag e config.json para /opt/wag
  2. Gere uma chave privada do WireGuard com wg genkey e configure-a em PrivateKey no exemplo de configuração
  3. Copie (ou crie um link para) wag.service em /etc/systemd/system/ e inicie/ative o serviço

Gerar um novo token de registro

# ./wag registration -add -username tester

token,username
e83253fd9962c68f73aa5088604f3f425d58a963bfb5c0889cca54d63a34b2e3,tester

Buscar o token com curl:

curl http://public.server.address/register_device/…

O serviço retorna uma resposta completa, que pode ser salva como arquivo de configuração.

Executar MFA

O usuário acessa o endereço VPN (por exemplo, 192.168.1.1:8080) e insere o código 2FA. A duração da sessão pode ser definida no arquivo de configuração.

Fazer login no console de administração

Defina ManagementUI.Enabled como true e execute o comando abaixo:

sudo ./wag webadmin -add -username <your_username> -password <your-password-here>

Acesse o endereço de escuta da administração e insira as credenciais. Não é possível adicionar usuários administradores pela interface web.

Opinião do GN⁺

  • É impressionante que ele ofereça suporte a alta disponibilidade por meio de funcionalidade de clustering. Parece útil para recuperação de desastres e serviços sem interrupção.

  • Outro ponto positivo é o suporte a vários métodos de autenticação. Com TOTP, WebAuthn, OIDC etc., parece fácil integrar com o sistema de autenticação da empresa.

  • Como as regras de ACL podem ser definidas com flexibilidade, ele parece permitir um controle de acesso bem granular. É possível restringir IPs, portas e protocolos acessíveis por usuário/grupo.

  • É uma pena que não ofereça suporte a IPv6. Como hoje a migração para IPv6 está acelerada, parece importante ter esse suporte logo.

  • Se você está procurando uma solução de VPN especializada para Linux, isso parece ser uma boa opção. Funciona em sistemas mais recentes com kernel 5.9 ou superior.

1 comentários

 
GN⁺ 2024-05-13
Comentários do Hacker News

Resumo:

  • Não é desejável que o servidor gere a chave privada e a envie ao cliente. O correto é o cliente gerar a chave privada e enviar a chave pública ao servidor.
  • No exemplo, está sendo usado o protocolo HTTP, o que não é adequado do ponto de vista de segurança; sugere-se substituí-lo por HTTPS.
  • É necessário haver uma forma de o cliente perceber quando a sessão expirar. Por exemplo, pode-se considerar um método de verificar periodicamente uma URL para confirmar o estado, como na detecção de Captive Portal do Wi‑Fi.
  • As chaves do WireGuard funcionam como chaves de sessão permanentes, então, para se tornar uma solução completa de servidor VPN, seria necessário implementar recursos adicionais como rotação periódica de chaves de sessão, encerramento de sessão, mudança de endereço IP, configuração de rotas e, se necessário, renovação de autenticação.
  • Há muitas semelhanças com Head e Tailscale; seria bom ter material que comparasse sobreposição de funcionalidades, diferenças e planos de implementação.
  • É preciso haver medidas para prevenir ataques de força bruta contra códigos TOTP. Por exemplo, podem ser consideradas limitações de taxa de requisições e de número de tentativas.
  • Em um ambiente que escolheu WireGuard, é esperado o uso de configurações mais modernas, então a ULA (Unique Local Address) do IPv6 provavelmente terá alta utilidade.