139 lines
5.7 KiB
Org Mode
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 <%e></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
|