Proxy reverso com WireGuard

Sergio Durigan Junior <sergiodj@debian.org>

1. WireGuard

  • Implementação de VPN moderna, simples e rápida.
    • Jason A. Donenfeld (cgit, pass, etc.), 2015.
  • Remove bastante da complexidade de configurar uma VPN.
  • Estabelece apenas uma interface de rede.
    • Todo o resto é delegado para outras ferramentas (ip, iptables, etc.)

2. Modo de usar

  • O conceito de servidor não é definido.
  • Geralmente usa-se o wg-quick (do pacote wireguard-tools).
    • Mas outras ferramentas suportam WireGuard: systemd-networkd, network-manager.
  • Gera-se um par de chaves (pense em ssh), distribui-se a chave pública para os peers.
  • Arquivo de configuração (geralmente) fica em /etc/wireguard/ (nesse caso, há integração com o wg-quick@.service).

2.1. Exemplo de configuração

# cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = eJdSgoS7BZ/uWkuSREN+vhCJPPr3M3UlB3v1Su/amWk=
ListenPort = 51000
Address = 10.10.11.10/24

[Peer]
# office
PublicKey = xeWmdxiLjgebpcItF1ouRo0ntrgFekquRJZQO+vsQVs=
Endpoint = wg.example.com:51000
AllowedIPs = 10.10.11.0/24, 10.10.10.0/24

2.2. Habilitando a interface

# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.10.11.10/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.10.10.0/24 dev wg0

3. Exemplos de topologia de rede

3.1. Wireguard no roteador

                           internet              ┌─── wg0 10.10.11.1/24
10.10.11.2/24                                       │        VPN network
        home0│            xxxxxx       ppp0 ┌───────┴┐
           ┌─┴──┐         xx   xxxxx  ──────┤ router │
           │    ├─wlan0  xx       xx        └───┬────┘    home network, .home domain
           │    │       xx        x             │.1       10.10.10.0/24
           │    │        xxx    xxx             └───┬─────────┬─────────┐
           └────┘          xxxxxx                   │         │         │
Laptop                                            ┌─┴─┐     ┌─┴─┐     ┌─┴─┐
(Coffee shop)                                     │   │     │   │     │   │
                                                  │pi4│     │NAS│     │...│
                                                  │   │     │   │     │   │
                                                  └───┘     └───┘     └───┘

3.2. WireGuard dentro da rede interna

                            internet
10.10.10.3/24
        home0│            xxxxxx       ppp0 ┌────────┐
           ┌─┴──┐         xx   xxxxx  ──────┤ router │
           │    ├─ppp0  xxx       xx        └───┬────┘    home network, .home domain
           │    │       xx        x             │         10.10.10.0/24
           │    │        xxx    xxx             └───┬─────────┬─────────┐
           └────┘          xxxxxx                   │         │         │
                                                  ┌─┴─┐     ┌─┴─┐     ┌─┴─┐
                                            wg0 ──┤   │     │   │     │   │
                                  10.10.10.10/32  │pi4│     │NAS│     │...│
                                                  │   │     │   │     │   │
                                                  └───┘     └───┘     └───┘
Reservado para VPN:
10.10.10.2-9

3.3. WireGuard ponto-a-ponto (nosso caso)

                           internet
10.20.30.2/32
        home0│            xxxxxx       ppp0 ┌────────┐
           ┌─┴──┐         xx   xxxxx  ──────┤ router │
           │    ├─ppp0  xxx       xx        └───┬────┘    home network
           │    │       xx        x             │         10.10.10.0/24
           │    │        xxx    xxx             └───┬
           └────┘          xxxxxx                   │
                                                  ┌─┴─────┐
                                            wg0 ──┤       │
                                  10.20.30.1/32   │Service│
                                                  │       │
                                                  └───────┘

4. Por que fazer (em casa)?

  • Controle sobre a localidade dos dados.
  • Controle da máquina onde o serviço está rodando.
  • Gasto menor com servidores.

5. Por que NÃO fazer (em casa)?

  • Aumento da superfície de ataque à sua rede doméstica.
  • Consumo de banda/dados.
  • Gasto com energia elétrica.
  • Menos uptime.

6. Cuidados

  • Proteja sua rede interna!
    • Firewall, VLAN, fail2ban, etc.
  • Isole o serviço!
    • VM, container, chroot, etc.
  • Use SSL/TLS no proxy reverso.
    • Lembre-se que o servidor onde o proxy está rodando é o SSL termination!

7. Referências