wireguard-reverse-proxy/wireguard-reverse-proxy.org

5.7 KiB

Proxy reverso com WireGuard

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.)

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).

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

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

Exemplos de topologia de rede

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│     │...│
                                                  │   │     │   │     │   │
                                                  └───┘     └───┘     └───┘

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

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│
                                                  │       │
                                                  └───────┘

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.

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.

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!