WireGuard: A Simplicidade e a Segurança da Moderna Tunelagem VPN

WireGuard: A Simplicidade e a Segurança da Moderna Tunelagem VPN

Descubra o WireGuard, um protocolo VPN moderno que prioriza a simplicidade e a segurança. Este artigo explora suas vantagens, desmistifica sua configuração e compara-o com alternativas como OpenVPN e IPsec, além de fornecer um guia prático para a implementação.

MundiX News·23 de maio de 2026·15 min de leitura·👁 10 views

WireGuard: A Simplicidade e a Segurança da Moderna Tunelagem VPN ou um aperto de mão secreto em um quarto escuro

Não seria correto considerar o WireGuard apenas como um meio de contornar bloqueios. No entanto, sem essa propriedade, também não seria possível considerá-lo. Hoje, vou refletir sobre a segurança da comunicação com o mundo exterior e reunir em um só lugar uma instrução passo a passo completa para a implantação.

Isenção de responsabilidade, cidadãos. Não passem por cima. Este artigo é de natureza puramente educacional e de pesquisa. O autor considera o WireGuard como uma ferramenta para construir canais de comunicação protegidos para infraestruturas corporativas, trabalho remoto e proteção de dados pessoais em redes inseguras. A implantação de um servidor VPN pessoal, descrita abaixo, destina-se a fins legais: unificação de escritórios, proteção de tráfego em Wi-Fi público, acesso a dispositivos domésticos. O autor não apela ao uso da tecnologia para obter acesso a informações cuja distribuição é restrita no território da Federação Russa e lembra que a responsabilidade pelo uso da VPN recai sobre o usuário final, de acordo com a legislação em vigor.

WireGuard é um protocolo de tunelamento seguro implementado como uma interface de rede virtual no kernel Linux. Observo separadamente que no kernel Linux versão 5.6+, pois foi adicionado oficialmente apenas em 2020. Nas versões anteriores à 5.6, ele terá que ser compilado separadamente por conta própria. Para seus propósitos práticos, considero o Debian 12 com o kernel 6.1LTS, onde também foram adicionadas otimizações WireGuard (GSO — Generic Segmentation Offload, GRO — Generic Receive Offload). Como o material tem uma orientação prática, então imediatamente sobre o que usei na preparação deste artigo: VPS 1CPU 3,3 GHz, 1GB RAM, armazenamento de 15 GB NVMe com o sistema Debian 12.

Ainda vale a pena notar que mesmo um hardware VPS tão modesto permite que você implante uma rede decente em termos de quantidade e qualidade. Essa é a primeira grande vantagem do WireGuard. Ao contrário do OpenVPN e IPSec, o WireGuard não é um aplicativo separado, portanto, o consumo de recursos é mais do que modesto. O sistema foi projetado para uma boa escalabilidade. Cada cliente individual - peer não ocupará mais do que alguns kilobytes de memória. Aproximadamente 1,5–1,9 KB por um peer conectado para versões de kernel de 2021 e mais recentes. O processo de conexão e manutenção da conexão se parece com um HANDSHAKE, e então a rotação das chaves de sessão a cada 2-3 minutos (se houver tráfego), na ausência de tráfego, nada acontece.

Estatísticas de carga no servidor com WireGuard durante o dia com 8 a 12 usuários ativos (dispositivos). A memória operacional é, basicamente, consumida pelo sistema e pelo contêiner Docker.

Convido você, caros leitores, a estudar o material do patch: Linux-Kernel Archive: [PATCH 5.10 660/663] wireguard: queueing: get rid of per-peer ring buffers, onde Jason Donenfeld descreve as vantagens e desvantagens da transição de ring buffers para filas baseadas em listas. A ideia principal é reduzir a alocação de memória. Uma breve citação:

Jason A. Donenfeld Jason@xxxxxxxxx Segunda-feira, 01 de março de 2021 Ter dois ring buffers por peer significa que cada nó leva a duas grandes alocações de anéis. Em uma máquina x86_64 de oito núcleos, este commit reduz a alocação por peer de 18.688 bytes para 1.856 bytes, o que representa uma redução de 90%. Noventa por cento! Em algumas implantações em uma única máquina, chegando a 500.000 peers, estamos falando de uma redução de 7 gigabytes de memória para 700 megabytes.

E quanto à segurança? A parte mais significativa. WireGuard é posicionado, em primeiro lugar, como um criptoprotocolo. É uma espécie de preservativo para visitar a Internet. O túnel VPN é apenas uma consequência de como a criptografia funciona. A questão tradicionalmente causa controvérsias entre os defensores do OpenVPN, WireGuard. Em todos os lugares, como de costume, existem seus pontos fortes e fracos.

As vantagens, por exemplo, do OpenVPN, incluem frequentemente a flexibilidade na escolha de algoritmos de criptografia, mas isso também é sua desvantagem. A pergunta surge imediatamente: qual deve ser a pilha? AES-256 ou 128? ou CHACHA? Sim, especialistas de alta classe são necessários para uma configuração competente e correta. E para suas tarefas, o OpenVPN às vezes é realmente indispensável.

No entanto, é a simplicidade declarada - essa é a razão para tal, pode-se dizer, publicidade do WireGuard - que abre o acesso a um grande número de usuários para criar seu próprio sistema de segurança. Eu não compro acesso a VPNs de fornecedores terceirizados, não confio em redes abertas. A segurança de meus dados pessoais, chaves, logins, etc. é importante para mim. Eu mesmo alugo um servidor para mim por alguns centavos e dirijo meu tráfego criptografado através dele.

Que criptografia é usada? Isso pode ser visto depois de instalar o WireGuard:

apt install wireguard -y modprobe wireguard && lsmod | grep wireguard libchacha20poly1305 curve25519_x86_64 libcurve25519_generic

Para o “aperto de mão”, o servidor usa um segredo compartilhado, calculado com base em chaves privadas e públicas.

As chaves privadas e públicas formam um par criptográfico: a chave pública é derivada matematicamente da chave privada. O cálculo reverso é impossível, e essa é a base da segurança:

wg genkey | tee server_private.key | wg pubkey > server_public.key

ChaCha20 criptografa o tráfego com chaves de sessão que a função hash BLAKE2s derivou do segredo compartilhado.

Os pacotes de tráfego são autenticados por Poly1305.

Outra característica conhecida do WireGuard é o “modo furtivo”.

Além do fato de que o protocolo não tem uma ligação obrigatória a portas específicas (51820 é tradicionalmente usado), depois de encontrar a porta, você não poderá entender o que está lá. Como isso funciona?

Ao escanear, o NMAP envia um pacote de dados de teste para a porta, esperando uma resposta. WireGuard, sendo um criptoprotocolo, tenta descriptografar este pacote com suas chaves privadas conhecidas. Poly1305 verifica a autenticidade da assinatura - e como os dados são lixo e a assinatura não corresponde ao conteúdo, o pacote é silenciosamente descartado sem qualquer resposta. NMAP registra open|filtered. O que está dentro não está claro.

Claro, nem tudo é tão unilateral e magnífico, e nem para todos os cenários o WireGuard é uma ferramenta de tunelamento recomendada. Sugiro que você leia a tradução do artigo do IPFire de Michael Tremer (ele é um claro defensor do IPsec) de 2020, postado no Habr: Por que você não deve usar WireGuard / Habr de Data_center_MIRAN. Esta é uma visão diferente sobre o assunto. Muito informativo.

Na verdade, o WireGuard carece de muitas opções úteis que parecem básicas ao trabalhar com tunelamento. Em comparação com o IPsec e o OpenVPN, ele se parece com um carro na configuração mínima, onde nem há um rádio. O protocolo é construído sobre UDP, e este é um dos problemas mais notáveis. Se a rede em que você planeja trabalhar tiver bloqueio de tráfego UDP, você não poderá prescindir de gambiarras (por exemplo, udp2raw, para “envolver” pacotes UDP WireGuard em uma conexão TCP), que, no entanto, também podem não dar resultado. O Roskomnadzor periodicamente derruba o WireGuard com confiança devido à impossibilidade de mascarar o tráfego UDP como HTTPS. Assim, acontece que a principal “característica” da leveza do protocolo e da rápida capacidade de aperto de mão se torna seu calcanhar de Aquiles.

Não existe uma única solução técnica (acho que isso se aplica não apenas ao tunelamento) que satisfaça todas as solicitações e todos os solicitantes. Para uso diário, com todas as desvantagens e vantagens inerentes, escolhi o WireGuard para mim como uma maneira fácil e rápida de obter segurança adicional. Além disso, não há necessidade de alugar um servidor no exterior (estrangeiro, é claro, é mais caro (cerca de 2500r/mês para mim). Para criptografia adicional de tráfego, o nacional também é perfeito.

É hora de passar para a parte prática.

Como implantar este doce?

Todo o processo, junto com o Docker e outras coisas, levará não mais de uma hora se executado com cuidado.

Abaixo estão todos os comandos e o conteúdo das configurações para que seja conveniente copiá-los. Depois deles, as instruções necessárias serão fornecidas.

Então, alugamos espaço no servidor. Abrimos o console e executamos os comandos da lista linha por linha. Um comando (linha) por vez. Se você precisar concordar com algo, concordamos com tudo. O Linux não oferecerá bobagens.

apt update && apt upgrade -y

apt install wireguard -y

modprobe wireguard && lsmod | grep wireguard

umask 077 wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

cat /etc/wireguard/server_private.key cat /etc/wireguard/server_public.key

mkdir -p /etc/wireguard/clients umask 077 wg genkey | tee /etc/wireguard/clients/peer_private.key | wg pubkey > /etc/wireguard/clients/peer_public.key

cat /etc/wireguard/clients/peer_private.key cat /etc/wireguard/clients/peer_public.key

nano /etc/wireguard/wg0.conf

chmod 600 /etc/wireguard/wg0.conf

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p

ip route get 1.1.1.1 | awk '{print $5; exit}'

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

apt install iptables-persistent -y

iptables -I INPUT -p udp --dport 51820 -j ACCEPT netfilter-persistent save

nano /etc/wireguard/clients/peer.conf

cat /etc/wireguard/clients/peer.conf

Conteúdo do arquivo de configuração wg0.conf:

Após o comando da linha 20 da lista acima, um editor será aberto, onde você precisa inserir esses dados (copiar as chaves recebidas durante a geração após o comando da linha 8):

[Interface] Address = 10.0.0.1/24 ListenPort = 51820 (pode ser qualquer um, a seu gosto, exceto os reservados) PrivateKey = (chave privada do Servidor)

[Peer] PublicKey = (chave pública do CLIENTE) AllowedIPs = 10.0.0.2/32

Conteúdo peer.conf:

Semelhante ao wg0.conf após o comando da linha 37 (nano /etc/wireguard/clients/peer.conf)

[Interface] Address = 10.0.0.2/32 PrivateKey = (aqui está a chave privada do CLIENTE) DNS = 1.1.1.1

[Peer] PublicKey = (aqui deve estar a chave pública do SERVIDOR) Endpoint = (aqui deve estar seu IP público) AllowedIPs = 0.0.0.0/0

No exemplo, DNS = 1.1.1.1 - Cloudflare. Você pode escolher outro para si mesmo, por exemplo, Google 8.8.8.8 - também rápido, mas o Cloudflare não armazena logs, ao contrário do Google, ou AdGuard - 94.140.14.14, 94.140.15.15, que é bom para bloquear anúncios. Você pode até registrar dois ou mais separados por vírgulas: DNS = 1.1.1.1, 8.8.8.8, 94.140.15.15. Na verdade, o DNS pode não ser especificado, então o sistema será usado, mas é melhor não fazer isso.

Se você chegou a este ponto e executou todos os comandos corretamente no console, parabéns.

Você configurou o WireGuard!

wg-quick up wg0 - iniciamos a interface wg show - verificamos. Se tudo estiver OK, veremos a seguinte saída:

latest handshake: 5 seconds ago transfer: 1.2 MiB received, 800 KiB sent

Tudo está funcionando! systemctl enable wg-quick@wg0 - adicionamos o WireGuard à inicialização automática no servidor para não ter que iniciá-lo manualmente a cada reinicialização do VPS

Nisso, poderíamos parar. Mas há mais um pequeno detalhe que gostaria de adicionar para que a experiência de interação com o WireGuard seja realmente agradável. Vamos adicionar uma interface web para criar novos peers no servidor.

Primeiro, vamos parar o servidor:

wg-quick down wg0

Em seguida, instalamos e verificamos o Docker:

apt install docker.io docker-compose -y systemctl enable --now docker docker --version docker run -d --name=wg-easy -e WG_HOST= ADICIONE SEU IP PÚBLICO -e PASSWORD= INVENTE SUA PRÓPRIA SENHA! -e WG_DEFAULT_DNS=1.1.1.1 -v ~/.wg-easy:/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl="net.ipv4.conf.all.src_valid_mark=1" --sysctl="net.ipv4.ip_forward=1" --restart unless-stopped weejewel/wg-easy

Observe que as configurações do Docker são copiadas em massa. Você precisa adicionar sua senha, sua porta UDP, se você não definiu 51820 ao configurar o WireGuard

Em seguida, abrimos a porta no firewall:

iptables -I INPUT -p tcp --dport 51821 -j ACCEPT netfilter-persistent save

Tudo! Isso é tudo. Verificamos. Vamos para o painel em: seu_ip_publico:porta_tcp_dos_configs_docker (por exemplo: 145.145.145.145:51821), insira a senha dos configs do Docker e nos alegremos e também alegremos nossos entes queridos com nossa própria VPN. Agradecemos weejewel (Emile Nijssen) pela maravilhosa interface web

Obrigado a todos pela atenção! Atenciosamente @noise_floor.

Tags: wireguard vpn túnel vpn túnel vpn via nat

Habr: Navegadores Tarefas interessantes Segurança da informação Configurando o Linux Ciência popular 0 0 0 2K+ Cobertura em 30 dias 5 Karma Andrey @noise_floor Beleza mediterrânea Assinar Fluxo de segurança da informação disponível 24 horas por dia, 7 dias por semana, graças ao apoio dos amigos do Habr Cursos Habr para todos PUBLICIDADE Prática, Hexlet, SkyPro, cursos do autor - reunimos todos e pedimos descontos. Resta escolher! Ir Ir para o fluxo de segurança da informação Comentar Melhor do dia Semelhante Mostrar o melhor de todos os tempos

📤 Compartilhar & Baixar