#+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:

%t

%a <%e>
#+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