Cómo endurecer un portátil Linux contra fugas de MAC y fingerprinting

Endurecimiento Linux contra fugas de MAC y fingerprinting

Endurece cualquier portátil Linux contra fugas de MAC y fingerprinting randomizando la MAC wifi por conexión, deshabilitando IPv6, ejecutando DNS-over-TLS, endureciendo Firefox con resistFingerprinting, cifrando disco con LUKS, rotando /etc/machine-id y reemplazando NTP en texto plano por sincronización horaria autenticada NTS. Los pasos siguientes son agnósticos de distro y aplican a Arch, Manjaro, Fedora, Debian, Ubuntu y la mayoría de distribuciones Linux basadas en systemd.

11 Capas de endurecimiento
DoT DNS cifrado
LUKS Cifrado de disco completo
Linux NetworkManager systemd-resolved Firefox RFP LUKS chrony NTS

¿Por qué un portátil Linux necesita endurecimiento contra fingerprinting?

Un portátil que se une a redes fuera de casa — cafeterías, hoteles, coworkings, lounges de aeropuerto, WiFi de conferencias — se presenta constantemente a esas redes. La postura por defecto en la mayoría de distribuciones Linux filtra la MAC hardware real, el hostname del sistema, cada dominio consultado por DNS, el reloj del sistema con tráfico NTP con marca de distro, y suficientes peculiaridades a nivel de navegador para reidentificar el mismo dispositivo entre sesiones. Para quien trabaja sobre WiFi público con cuentas sensibles, esto es una superficie de riesgo significativa. Cada venue que visita un portátil se convierte en un posible punto de correlación.

¿Cómo randomizar una dirección MAC en Linux?

Configura NetworkManager para clonar una MAC localmente administrada nueva en cada conexión. Crea /etc/NetworkManager/conf.d/wifi.conf con el siguiente contenido, luego reinicia NetworkManager. La MAC hardware nunca vuelve a tocar el aire.

[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

Olvida cada red guardada

Cada SSID al que se ha conectado un portátil Linux vive en perfiles de NetworkManager bajo /etc/NetworkManager/system-connections/. Cualquiera con acceso físico — o cualquier exploit local con acceso de lectura — puede enumerar esa lista y reconstruir el historial de viajes del dispositivo a lo largo de meses. Elimina perfiles no usados y deja que nuevas conexiones hereden los defaults endurecidos. Para cualquier portátil que viaja, esto está más cerca de esencial que de opcional.

¿Por qué deshabilitar IPv6 por privacidad?

Las direcciones IPv6 son más fáciles de fingerprint que IPv4 porque SLAAC puede incrustar la MAC en la dirección. Las extensiones de privacidad (RFC 4941) mitigan esto pero añaden piezas móviles. Si IPv6 no se requiere activamente, deshabilítalo a nivel de kernel y en NetworkManager. Una superficie de protocolo menos, un vector de fingerprint menos, cero pérdida de función para la mayoría de 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

¿Cómo detener fugas DNS en Linux?

Enruta cada consulta DNS a través de systemd-resolved con DNS-over-TLS, e indica a NetworkManager que ignore servidores DNS empujados por DHCP. Crea un symlink de /etc/resolv.conf a /run/systemd/resolve/stub-resolv.conf, luego añade ipv4.ignore-auto-dns=true a los defaults de conexión de NetworkManager para que el resolver del router nunca se use. Verifica con resolvectl query example.com — la respuesta debería decir "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

¿Qué ajustes de Firefox bloquean fingerprinting?

Activa privacy.resistFingerprinting=true en about:config. Ese único ajuste unifica hash de canvas, timezone, dimensiones de pantalla, user-agent y lista de fuentes con todo otro usuario RFP — uniéndote a una multitud mucho mayor en lugar de destacar. No acumules extensiones — cada una añade unicidad. Instala uBlock Origin y nada más.

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 qué cambiar tu hostname?

El hostname aún filtra a través de mDNS, NetBIOS, broadcasts SMB y DHCP si no se ha deshabilitado. Un hostname único como "user-laptop" o "founder-thinkpad" es un identificador persistente en cada red a la que se une el dispositivo. Usa un default estilo Windows — esa es la población de hostnames más grande del planeta. Mezclarse, no destacar.

hostnamectl set-hostname DESKTOP-A3KF9Z2X

¿Qué hay de las fugas NTP?

El systemd-timesyncd por defecto envía paquetes NTP en texto plano a servidores pool con marca de distro cada 60–1024 segundos. Eso es una baliza de actividad, un identificador de distro y un vector MITM — un atacante puede adelantar el reloj para invalidar certs TLS o romper 2FA. Reemplázalo con chrony sobre NTS (NTP envuelto en autenticación TLS).

systemctl disable --now systemd-timesyncd
# install chrony via your package manager, then 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

¿Cómo reducir la superficie de ataque a nivel de kernel?

Coloca un archivo en /etc/sysctl.d/50-kernel-harden.conf con los ajustes siguientes. Eso bloquea las primitivas comunes de escalada de privilegios local — fugas de punteros kernel, snooping ptrace, abuso eBPF sin privilegios, rootkits kexec, exploits userfaultfd — sin romper el uso diario. No establezcas kernel.unprivileged_userns_clone=0: rompe el sandbox de Firefox, Flatpak y varias apps que legítimamente necesitan 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

¿Qué deberías cifrar?

Toda partición que toque disco. Comprueba con lsblk — si / y /home no están sobre crypto_LUKS, el disco está en texto plano para cualquiera que robe el portátil. Swap debe cifrarse por separado, ya sea vía /etc/crypttab con una key aleatoria en cada boot o como volumen LUKS. Deshabilita core dumps para que no puedan escribir contenidos de memoria — incluyendo keys y cookies de sesión — a disco.

lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
# Disable core dumps
systemctl mask systemd-coredump
# /etc/sysctl.d/50-kernel-harden.conf (append)
kernel.core_pattern=|/bin/false

¿Por qué rotar /etc/machine-id?

Systemd genera /etc/machine-id en el momento de instalación y cualquier proceso sin privilegios puede leerlo. Es un ID estable de 32 caracteres que identifica una instalación concreta para siempre — más persistente que cualquier cookie. Regenera el ID, mantén /var/lib/dbus/machine-id como symlink hacia él, y reinicia. Todo lo que antes usaba machine-id como clave ahora ve una instalación completamente nueva.

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

¿Cómo se comparan estas capas en prioridad?

Capa de endurecimiento Riesgo cerrado Esfuerzo Prioridad
Randomización MACFuga de ID hardware en cada unión WiFiBajoCrítica
Supresión hostname DHCPBroadcast de hostname a router/logs DHCPBajoCrítica
DNS-over-TLSDNS en texto plano visible para ISP y routerBajoCrítica
LUKS cifrado disco completoDatos en texto plano en dispositivo robadoMedio (reinstalación)Crítica
Firefox resistFingerprintingIdentificación cross-site a nivel navegadorBajoAlta
Deshabilitar IPv6Incrustación MAC SLAAC, superficie extra de fingerprintBajoAlta
Rotación machine-idIdentificador persistente de instalación localBajoMedia
Sysctls de kernelPrimitivas de escalada de privilegios localBajoMedia
chrony NTSNTP en texto plano, fingerprinting de distro, MITM de relojMedioMedia
Enmascaramiento coredumpKeys y secretos escritos a disco en crashBajoMedia

Veredicto

La randomización MAC, supresión hostname DHCP, DoT, LUKS y pasada de Firefox resistFingerprinting es la línea base — una tarde de trabajo que cierra las fugas más ruidosas en cualquier portátil Linux. Añade rotación machine-id, sysctls de kernel, chrony NTS y enmascaramiento de coredump si el dispositivo viaja o ve redes no confiables. Una VPN sigue siendo la mayor victoria restante encima de todo esto, porque ninguno de los endurecimientos locales oculta la IP pública real al resto de internet. Para un modelo de amenaza centrado en WiFi público en cafeterías, hoteles y aeropuertos, este es el setup.

Preguntas frecuentes

¿La randomización MAC rompe portales cautivos WiFi?

A veces. Los portales cautivos suelen vincular la sesión a una MAC, así que una MAC aleatoria nueva al reconectar fuerza un login fresco. Si eso se vuelve molesto en un venue concreto, cambia esa conexión única de "random" a "stable" en NetworkManager — stable da una MAC consistente por SSID sin revelar la MAC hardware.

¿Firefox resistFingerprinting basta por sí solo?

Mayormente. Unifica canvas, fuentes, tamaño de pantalla, timezone y user-agent para que el navegador coincida con todo otro usuario RFP. No bloquea dominios tracker ni peticiones de terceros a nivel de red — para eso, instala uBlock Origin y activa las listas de filtros Privacy y Annoyances. Evita extensiones extra más allá de uBO, porque cada una añade unicidad.

¿Necesito deshabilitar IPv6 si tengo extensiones de privacidad activadas?

Solo si los servicios IPv6 se usan activamente. Las extensiones de privacidad (RFC 4941) rotan el identificador de interfaz IPv6 según un calendario, lo que maneja el problema de incrustación MAC. Si IPv6 no se usa, deshabilitarlo por completo elimina un stack de protocolo entero de la superficie de ataque con cero pérdida de funcionalidad.

¿Por qué no usar solo VPN o Tor y saltarse todo esto?

VPN y Tor protegen la IP pública y cifran el transporte, pero ninguno oculta la MAC real del WiFi local, el hostname de broadcasts mDNS, consultas DNS de un router hostil, o el fingerprint del navegador frente a sitios web. La privacidad a nivel de red y la privacidad a nivel de host son capas apiladas — ambas son necesarias.

¿Los sysctls de endurecimiento de kernel rompen alguna app normal?

El conjunto listado aquí no lo hará. kernel.yama.ptrace_scope=2 significa que sudo es necesario para adjuntar un debugger — bien en un portátil personal, ligeramente molesto en una máquina de desarrollo. Evita kernel.unprivileged_userns_clone=0, que rompe el sandbox de Firefox, Flatpak y cualquier app que use legítimamente user namespaces sin privilegios.

Esta guía cubre prácticas genéricas de endurecimiento Linux. Comandos y rutas de config asumen una distribución basada en systemd con NetworkManager — adapta según tu distro y modelo de amenaza concretos.

Frequently Asked Questions

¿La randomización MAC rompe portales cautivos WiFi?

A veces. Los portales cautivos suelen vincular la sesión a una MAC, así que una MAC aleatoria nueva al reconectar fuerza un login fresco. Si eso se vuelve molesto en un venue concreto, cambia esa conexión única de "random" a "stable" en NetworkManager — stable da una MAC consistente por SSID sin revelar la MAC hardware.

¿Firefox resistFingerprinting basta por sí solo?

Mayormente. Unifica canvas, fuentes, tamaño de pantalla, timezone y user-agent para que el navegador coincida con todo otro usuario RFP. No bloquea dominios tracker ni peticiones de terceros a nivel de red — para eso, instala uBlock Origin y activa las listas de filtros Privacy y Annoyances. Evita extensiones extra más allá de uBO, porque cada una añade unicidad.

¿Necesito deshabilitar IPv6 si tengo extensiones de privacidad activadas?

Solo si los servicios IPv6 se usan activamente. Las extensiones de privacidad (RFC 4941) rotan el identificador de interfaz IPv6 según un calendario, lo que maneja el problema de incrustación MAC. Si IPv6 no se usa, deshabilitarlo por completo elimina un stack de protocolo entero de la superficie de ataque con cero pérdida de funcionalidad.

¿Por qué no usar solo VPN o Tor y saltarse todo esto?

VPN y Tor protegen la IP pública y cifran el transporte, pero ninguno oculta la MAC real del WiFi local, el hostname de broadcasts mDNS, consultas DNS de un router hostil, o el fingerprint del navegador frente a sitios web. La privacidad a nivel de red y la privacidad a nivel de host son capas apiladas — ambas son necesarias.

¿Los sysctls de endurecimiento de kernel rompen alguna app normal?

El conjunto listado aquí no lo hará. kernel.yama.ptrace_scope=2 significa que sudo es necesario para adjuntar un debugger — bien en un portátil personal, ligeramente molesto en una máquina de desarrollo. Evita kernel.unprivileged_userns_clone=0, que rompe el sandbox de Firefox, Flatpak y cualquier app que use legítimamente user namespaces sin privilegios.