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

139 lines
5.7 KiB
Org Mode

#+REVEAL_ROOT: file:///home/sergio/pessoal/slides/wireguard-reverse-proxy/reveal.js-master
#+REVEAL_THEME: night
#+REVEAL_INIT_OPTIONS: transition:'concave', slideNumber:"c/t", hash:true, center:true
#+AUTHOR: Sergio Durigan Junior
#+EMAIL: sergiodj@debian.org
#+TITLE: Proxy reverso com WireGuard
#+REVEAL_TITLE_SLIDE: <h2>%t</h2><h6>%a &lt;%e&gt;</h6>
#+OPTIONS: toc:nil
* 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
#+begin_src
# 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
#+end_src
** Habilitando a interface
#+begin_src
# 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
#+end_src
* Exemplos de topologia de rede
** Wireguard no roteador
#+begin_src
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│ │...│
│ │ │ │ │ │
└───┘ └───┘ └───┘
#+end_src
** WireGuard dentro da rede interna
#+begin_src
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
#+end_src
** WireGuard ponto-a-ponto (nosso caso)
#+begin_src
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│
│ │
└───────┘
#+end_src
* 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/!
* Referências
- https://www.wireguard.com/
- https://ubuntu.com/server/docs/wireguard-vpn-introduction