Endurecimento Linux contra vazamentos de MAC e fingerprinting
Endureça qualquer laptop Linux contra vazamentos de MAC e fingerprinting randomizando MAC wifi por conexão, desabilitando IPv6, rodando DNS-over-TLS, endurecendo Firefox com resistFingerprinting, criptografando disco com LUKS, rotacionando /etc/machine-id e substituindo NTP plaintext por sincronização de horário autenticada NTS. Os passos abaixo são agnósticos de distro e se aplicam a Arch, Manjaro, Fedora, Debian, Ubuntu e a maioria das distribuições Linux baseadas em systemd.
Por que um laptop Linux precisa de endurecimento contra fingerprinting?
Um laptop que entra em redes fora de casa — cafés, hotéis, coworkings, lounges de aeroporto, WiFi de conferência — está constantemente se apresentando a essas redes. A postura padrão na maioria das distribuições Linux vaza o endereço MAC real do hardware, o hostname do sistema, todo domínio consultado via DNS, o relógio do sistema com tráfego NTP com marca da distro, e quirks suficientes no browser para reidentificar o mesmo dispositivo entre sessões. Para quem trabalha em WiFi público com contas sensíveis, isso é uma superfície de risco significativa. Cada local que um laptop visita vira um ponto potencial de correlação.
Como randomizar um endereço MAC no Linux?
Configure o NetworkManager para clonar um novo MAC locally-administered a cada conexão. Crie /etc/NetworkManager/conf.d/wifi.conf com o conteúdo abaixo, depois reinicie o NetworkManager. O MAC de hardware nunca mais toca o ar.
[device]
wifi.scan-rand-mac-address=yes
[connection]
wifi.cloned-mac-address=random
ethernet.cloned-mac-address=random
connection.stable-id=${CONNECTION}/${BOOT}
ipv4.dhcp-send-hostname=no
ipv4.dhcp-client-id=perconnection
systemctl restart NetworkManager
Esqueça toda rede salva
Todo SSID ao qual um laptop Linux já se conectou vive em perfis do NetworkManager em /etc/NetworkManager/system-connections/. Qualquer pessoa com acesso físico — ou qualquer exploit local com acesso de leitura — pode enumerar essa lista e reconstruir o histórico de viagens do dispositivo ao longo de meses. Delete perfis não usados e deixe novas conexões herdarem os defaults endurecidos. Para qualquer laptop que viaja, isso está mais perto de essencial do que opcional.
Por que desabilitar IPv6 por privacidade?
Endereços IPv6 são mais fáceis de fingerprint do que IPv4 porque SLAAC pode embutir o MAC no endereço. Privacy extensions (RFC 4941) mitigam isso mas adicionam peças móveis. Se IPv6 não é ativamente necessário, desabilite no nível do kernel e no NetworkManager. Um protocolo a menos, um vetor de fingerprint a menos, zero perda de função para a maioria dos casos de uso.
# /etc/sysctl.d/40-ipv6-disable.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
nmcli connection modify <connection-name> ipv6.method disabled
Como parar vazamentos de DNS no Linux?
Roteie toda query DNS pelo systemd-resolved com DNS-over-TLS, e diga ao NetworkManager para ignorar servidores DNS empurrados via DHCP. Faça symlink de /etc/resolv.conf para /run/systemd/resolve/stub-resolv.conf, depois adicione ipv4.ignore-auto-dns=true aos defaults de conexão do NetworkManager para que o resolver do roteador nunca seja usado. Verifique com resolvectl query example.com — a resposta deve dizer "acquired via local or encrypted transport: yes".
# /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.2#security.cloudflare-dns.com
FallbackDNS=9.9.9.9#dns.quad9.net
DNSOverTLS=yes
DNSSEC=allow-downgrade
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
systemctl enable --now systemd-resolved
Quais configurações do Firefox bloqueiam fingerprinting?
Ative privacy.resistFingerprinting=true no about:config. Essa configuração única unifica hash de canvas, timezone, dimensões de tela, user-agent e lista de fontes com todo outro usuário RFP — entrando numa multidão muito maior em vez de se destacar. Não empilhe extensões — cada uma adiciona unicidade. Instale uBlock Origin e nada mais.
privacy.resistFingerprinting = true
privacy.trackingprotection.fingerprinting.enabled = true
privacy.partition.network_state = true
network.cookie.cookieBehavior = 5
webgl.disabled = true
media.peerconnection.enabled = false
network.trr.mode = 3
network.trr.uri = https://cloudflare-dns.com/dns-query
network.http.http3.enable = false
Por que mudar seu hostname?
O hostname ainda vaza via mDNS, NetBIOS, broadcasts SMB e DHCP se não foi desabilitado. Um hostname único como "user-laptop" ou "founder-thinkpad" é um identificador persistente em toda rede que o dispositivo entra. Use um default estilo Windows — essa é a maior população de hostnames na Terra. Misture-se, não se destaque.
hostnamectl set-hostname DESKTOP-A3KF9Z2X
E os vazamentos de NTP?
O systemd-timesyncd padrão envia pacotes NTP plaintext para servidores pool com marca da distro a cada 60–1024 segundos. Isso é um beacon de liveness, um identificador de distro e um vetor MITM — um atacante pode adiantar o relógio para invalidar certs TLS ou quebrar 2FA. Substitua por chrony sobre NTS (NTP envolvido em autenticação TLS).
systemctl disable --now systemd-timesyncd
# instale chrony via seu gerenciador de pacotes, depois configure:
# /etc/chrony.conf
server time.cloudflare.com iburst nts
server nts.netnod.se iburst nts
server ptbtime1.ptb.de iburst nts
minsources 2
rtcsync
systemctl enable --now chronyd
Como reduzir a superfície de ataque no nível do kernel?
Coloque um arquivo em /etc/sysctl.d/50-kernel-harden.conf com as configurações abaixo. Isso bloqueia os primitivos comuns de escalação local de privilégio — vazamentos de ponteiros de kernel, snooping ptrace, abuso eBPF sem privilégio, rootkits kexec, exploits userfaultfd — sem quebrar uso diário. Não defina kernel.unprivileged_userns_clone=0: quebra o sandbox do Firefox, Flatpak e vários outros apps que legitimamente precisam de user namespaces.
# /etc/sysctl.d/50-kernel-harden.conf
kernel.kptr_restrict=2
kernel.dmesg_restrict=1
kernel.unprivileged_bpf_disabled=1
kernel.yama.ptrace_scope=2
kernel.kexec_load_disabled=1
kernel.perf_event_paranoid=3
vm.unprivileged_userfaultfd=0
sysctl --system
O que criptografar?
Toda partição que toca disco. Verifique com lsblk — se / e /home não estão em crypto_LUKS, o disco está plaintext para quem roubar o laptop. Swap deve ser criptografado separadamente, via /etc/crypttab com key aleatória a cada boot ou como volume LUKS. Desabilite core dumps para que não escrevam conteúdo de memória — incluindo keys e cookies de sessão — no disco.
lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
# Desabilitar core dumps
systemctl mask systemd-coredump
# /etc/sysctl.d/50-kernel-harden.conf (append)
kernel.core_pattern=|/bin/false
Por que rotacionar /etc/machine-id?
Systemd gera /etc/machine-id na instalação e qualquer processo sem privilégio pode lê-lo. É um ID estável de 32 caracteres que identifica uma instalação específica para sempre — mais persistente que qualquer cookie. Regenere, mantenha /var/lib/dbus/machine-id como symlink para ele, depois reinicie. Tudo que antes usava machine-id como chave agora vê uma instalação totalmente nova.
dd if=/dev/urandom bs=16 count=1 | od -An -tx1 | tr -d ' \n' > /etc/machine-id
ln -sf /etc/machine-id /var/lib/dbus/machine-id
reboot
Como essas camadas se comparam em prioridade?
| Camada de endurecimento | Risco fechado | Esforço | Prioridade |
|---|---|---|---|
| Randomização de MAC | Vazamento de ID de hardware a cada join WiFi | Baixo | Crítica |
| Supressão de hostname DHCP | Broadcast de hostname para roteador/logs DHCP | Baixo | Crítica |
| DNS-over-TLS | DNS plaintext visível para ISP e roteador | Baixo | Crítica |
| LUKS full-disk encryption | Dados plaintext em dispositivo roubado | Médio (reinstalação) | Crítica |
| Firefox resistFingerprinting | Identificação cross-site no browser | Baixo | Alta |
| Desabilitar IPv6 | Embedding de MAC SLAAC, superfície extra de fingerprint | Baixo | Alta |
| Rotação de machine-id | Identificador persistente de instalação local | Baixo | Média |
| Sysctls de kernel | Primitivos de escalação local de privilégio | Baixo | Média |
| chrony NTS | NTP plaintext, fingerprinting de distro, clock MITM | Médio | Média |
| Masking de coredump | Keys e secrets escritos no disco em crash | Baixo | Média |
Veredito
Randomização de MAC, supressão de hostname DHCP, DoT, LUKS e pass de Firefox resistFingerprinting é a baseline — uma tarde de trabalho que fecha os vazamentos mais barulhentos em qualquer laptop Linux. Adicione rotação de machine-id, sysctls de kernel, chrony NTS e masking de coredump se o dispositivo viaja ou vê redes não confiáveis. VPN ainda é o maior ganho restante em cima de tudo isso, porque nenhum endurecimento local esconde o IP público real do resto da internet. Para um threat model centrado em WiFi público em cafés, hotéis e aeroportos, este é o setup.
Perguntas Frequentes
Randomização de MAC quebra captive portals de WiFi?
Às vezes. Captive portals frequentemente vinculam a sessão a um MAC, então um MAC random novo na reconexão força login novo. Se isso ficar doloroso em um local específico, mude aquela conexão de "random" para "stable" no NetworkManager — stable dá um MAC consistente por SSID sem revelar o MAC de hardware.
Firefox resistFingerprinting basta sozinho?
Na maior parte. Unifica canvas, fontes, tamanho de tela, timezone e user-agent para o browser combinar com todo outro usuário RFP. Não bloqueia domínios de tracker ou requests third-party no nível de rede — para isso, instale uBlock Origin e ative as listas de filtro Privacy and Annoyances. Pule extensões extras além do uBO, porque cada uma adiciona unicidade.
Preciso desabilitar IPv6 se tenho privacy extensions ativadas?
Só se serviços IPv6 são usados ativamente. Privacy extensions (RFC 4941) rotacionam o identificador de interface IPv6 em schedule, o que resolve o problema de embedding de MAC. Se IPv6 não é usado, desabilitar completamente remove uma stack de protocolo inteira da superfície de ataque com zero perda de funcionalidade.
Por que não usar só VPN ou Tor e pular tudo isso?
VPN e Tor protegem o IP público e criptografam transporte, mas nenhum esconde o MAC real do WiFi local, o hostname de broadcasts mDNS, queries DNS de um roteador hostil, ou o fingerprint do browser de websites. Privacidade em nível de rede e privacidade em nível de host são camadas empilhadas — ambas são necessárias.
Sysctls de endurecimento de kernel quebram algum app normal?
O conjunto listado aqui não. kernel.yama.ptrace_scope=2 significa que sudo é necessário para anexar um debugger — ok em laptop pessoal, levemente chato em máquina de dev. Evite kernel.unprivileged_userns_clone=0, que quebra o sandbox do Firefox, Flatpak e qualquer app que usa user namespaces sem privilégio legitimamente.
Este guia cobre práticas genéricas de endurecimento Linux. Comandos e caminhos de config assumem uma distribuição baseada em systemd com NetworkManager — adapte conforme sua distro e threat model específicos.
Frequently Asked Questions
Randomização de MAC quebra captive portals de WiFi?
Às vezes. Captive portals frequentemente vinculam a sessão a um MAC, então um MAC random novo na reconexão força login novo. Se isso ficar doloroso em um local específico, mude aquela conexão de "random" para "stable" no NetworkManager — stable dá um MAC consistente por SSID sem revelar o MAC de hardware.
Firefox resistFingerprinting basta sozinho?
Na maior parte. Unifica canvas, fontes, tamanho de tela, timezone e user-agent para o browser combinar com todo outro usuário RFP. Não bloqueia domínios de tracker ou requests third-party no nível de rede — para isso, instale uBlock Origin e ative as listas de filtro Privacy and Annoyances. Pule extensões extras além do uBO, porque cada uma adiciona unicidade.
Preciso desabilitar IPv6 se tenho privacy extensions ativadas?
Só se serviços IPv6 são usados ativamente. Privacy extensions (RFC 4941) rotacionam o identificador de interface IPv6 em schedule, o que resolve o problema de embedding de MAC. Se IPv6 não é usado, desabilitar completamente remove uma stack de protocolo inteira da superfície de ataque com zero perda de funcionalidade.
Por que não usar só VPN ou Tor e pular tudo isso?
VPN e Tor protegem o IP público e criptografam transporte, mas nenhum esconde o MAC real do WiFi local, o hostname de broadcasts mDNS, queries DNS de um roteador hostil, ou o fingerprint do browser de websites. Privacidade em nível de rede e privacidade em nível de host são camadas empilhadas — ambas são necessárias.
Sysctls de endurecimento de kernel quebram algum app normal?
O conjunto listado aqui não. kernel.yama.ptrace_scope=2 significa que sudo é necessário para anexar um debugger — ok em laptop pessoal, levemente chato em máquina de dev. Evite kernel.unprivileged_userns_clone=0, que quebra o sandbox do Firefox, Flatpak e qualquer app que usa user namespaces sem privilégio legitimamente.