Linux 防 MAC 与指纹泄露加固
通过每次连接随机化 WiFi MAC、禁用 IPv6、运行 DNS-over-TLS、用 resistFingerprinting 加固 Firefox、LUKS 加密磁盘、轮换 /etc/machine-id、用 NTS 认证时间同步替换明文 NTP,可加固任何 Linux 笔记本以防 MAC 与指纹泄露。以下步骤发行版无关,适用于 Arch、Manjaro、Fedora、Debian、Ubuntu 及大多数基于 systemd 的 Linux 发行版。
Linux 笔记本为何需要指纹加固?
在家以外网络接入的笔记本——咖啡馆、酒店、联合办公、机场休息室、会议 WiFi——不断向这些网络自我介绍。多数 Linux 发行版默认会泄露真实硬件 MAC、系统主机名、DNS 查询的每个域名、带发行版品牌 NTP 流量的系统时钟,以及足以跨会话重新识别同一设备的浏览器级特征。对通过公共 WiFi 处理敏感账户的人,这是有意义的风险面。笔记本访问的每个场所都可能成为关联点。
如何在 Linux 上随机化 MAC 地址?
配置 NetworkManager 为每次连接克隆新的本地管理 MAC。创建 /etc/NetworkManager/conf.d/wifi.conf 如下内容,然后重启 NetworkManager。硬件 MAC 不再出现在空中。
[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
清除每个已保存网络
Linux 笔记本连接过的每个 SSID 都保存在 /etc/NetworkManager/system-connections/ 的 NetworkManager 配置中。任何物理访问者——或具有读权限的本地漏洞利用——都可枚举该列表并重建设备数月旅行史。删除未用配置,让新连接继承加固默认值。对经常出行的笔记本,这更接近必需而非可选。
为何为隐私禁用 IPv6?
IPv6 地址比 IPv4 更易指纹,因为 SLAAC 可将 MAC 嵌入地址。隐私扩展(RFC 4941)可缓解但增加复杂度。若未主动使用 IPv6,在内核级与 NetworkManager 中禁用。少一个协议面,少一个指纹向量,对大多数用例零功能损失。
# /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
如何阻止 Linux DNS 泄露?
通过 systemd-resolved 与 DNS-over-TLS 路由所有 DNS 查询,并告诉 NetworkManager 忽略 DHCP 推送的 DNS 服务器。将 /etc/resolv.conf 符号链接到 /run/systemd/resolve/stub-resolv.conf,然后在 NetworkManager 连接默认中添加 ipv4.ignore-auto-dns=true,使路由器解析器不被使用。用 resolvectl query example.com 验证——响应应显示「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
哪些 Firefox 设置可阻止指纹?
在 about:config 中将 privacy.resistFingerprinting=true。该单一设置统一 canvas 哈希、时区、屏幕尺寸、User-Agent 与字体列表与所有其他 RFP 用户——加入更大人群而非脱颖而出。不要堆叠扩展——每个都增加独特性。只安装 uBlock Origin,别无其他。
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
为何要改主机名?
主机名仍通过 mDNS、NetBIOS、SMB 广播与 DHCP(若未禁用)泄露。像「user-laptop」或「founder-thinkpad」这样的唯一主机名是设备加入每个网络的持久标识。使用 Windows 风格默认——那是地球上最大的主机名群体。融入人群,不要脱颖而出。
hostnamectl set-hostname DESKTOP-A3KF9Z2X
NTP 泄露怎么办?
默认 systemd-timesyncd 每 60–1024 秒向带发行版品牌的 pool 服务器发送明文 NTP 包。那是存活信标、发行版标识与中间人攻击向量——攻击者可拨动时钟使 TLS 证书失效或破坏双因素认证。用 chrony 配合 NTS(TLS 认证的 NTP)替换。
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
如何减少内核级攻击面?
在 /etc/sysctl.d/50-kernel-harden.conf 放入以下设置。阻止常见本地提权原语——内核指针泄露、ptrace 窥探、非特权 eBPF 滥用、kexec rootkit、userfaultfd 漏洞利用——而不破坏日常使用。不要设置 kernel.unprivileged_userns_clone=0:会破坏 Firefox 沙箱、Flatpak 及若干合法需要用户命名空间的应用。
# /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
应加密什么?
每个落盘的分区。用 lsblk 检查——若 / 与 /home 不在 crypto_LUKS 上,磁盘对偷走笔记本的人明文可读。Swap 须单独加密,通过 /etc/crypttab 每次启动随机密钥或 LUKS 卷。禁用 core dump 以免将内存内容——含密钥与会话 cookie——写入磁盘。
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
为何轮换 /etc/machine-id?
Systemd 在安装时生成 /etc/machine-id,任何非特权进程可读。它是稳定的 32 字符 ID,永久标识特定安装——比任何 cookie 更持久。重新生成,保持 /var/lib/dbus/machine-id 为其符号链接,然后重启。任何先前依赖 machine-id 的现在看到全新安装。
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
这些层优先级如何对比?
| 加固层 | 关闭的风险 | 工作量 | 优先级 |
|---|---|---|---|
| MAC 随机化 | 每次 WiFi 加入的硬件 ID 泄露 | 低 | 关键 |
| DHCP 主机名抑制 | 主机名广播至路由器/DHCP 日志 | 低 | 关键 |
| DNS-over-TLS | ISP 与路由器可见明文 DNS | 低 | 关键 |
| LUKS 全盘加密 | 被盗设备上的明文数据 | 中(重装) | 关键 |
| Firefox resistFingerprinting | 浏览器级跨站识别 | 低 | 高 |
| 禁用 IPv6 | SLAAC MAC 嵌入、额外指纹面 | 低 | 高 |
| machine-id 轮换 | 持久本地安装标识 | 低 | 中 |
| 内核 sysctl | 本地提权原语 | 低 | 中 |
| chrony NTS | 明文 NTP、发行版指纹、时钟 MITM | 中 | 中 |
| Core dump 屏蔽 | 崩溃时将密钥与秘密写入磁盘 | 低 | 中 |
结论
MAC 随机化、DHCP 主机名抑制、DoT、LUKS 与 Firefox resistFingerprinting 是基线——一下午工作可关闭任何 Linux 笔记本上最明显的泄露。若设备经常出行或接入不可信网络,再加 machine-id 轮换、内核 sysctl、chrony NTS 与 core dump 屏蔽。VPN 仍是以上全部之上最大的剩余收益,因为本地加固无法向互联网其余部分隐藏真实公网 IP。威胁模型以咖啡馆、酒店、机场公共 WiFi 为中心时,这是推荐配置。
常见问题
MAC 随机化会破坏 WiFi 强制门户吗?
有时会。强制门户常将会话绑定到 MAC,重连时新随机 MAC 需重新登录。若某场所变得麻烦,在 NetworkManager 中将该连接从「random」改为「stable」——stable 为每个 SSID 提供一致 MAC 而不暴露硬件 MAC。
仅 Firefox resistFingerprinting 够吗?
大体够。它统一 canvas、字体、屏幕尺寸、时区与 User-Agent,使浏览器与其他 RFP 用户一致。它不在网络层阻止跟踪域或第三方请求——为此安装 uBlock Origin 并启用隐私与烦人元素过滤列表。除 uBO 外不要加扩展,每个都会增加独特性。
启用隐私扩展后还需禁用 IPv6 吗?
仅当主动使用 IPv6 服务时不需要。隐私扩展(RFC 4941)按计划轮换 IPv6 接口标识,处理 MAC 嵌入问题。若未使用 IPv6,完全禁用可从攻击面移除整个协议栈,零功能损失。
为何不只用 VPN 或 Tor 跳过这些?
VPN 与 Tor 保护公网 IP 并加密传输,但都无法向本地 WiFi 隐藏真实 MAC、向 mDNS 广播隐藏主机名、向恶意路由器隐藏 DNS 查询,或向网站隐藏浏览器指纹。网络层隐私与主机层隐私是叠加层——两者都需要。
内核加固 sysctl 会破坏正常应用吗?
本文所列不会。kernel.yama.ptrace_scope=2 意味 attach 调试器需 sudo——个人笔记本没问题,开发机略烦。避免 kernel.unprivileged_userns_clone=0,会破坏 Firefox 沙箱、Flatpak 及合法使用非特权用户命名空间的应用。
本指南涵盖通用 Linux 加固实践。命令与配置路径假设基于 systemd 的发行版与 NetworkManager——请按具体发行版与威胁模型调整。
Frequently Asked Questions
MAC 随机化会破坏 WiFi 强制门户吗?
有时会。强制门户常将会话绑定到 MAC,重连时新随机 MAC 需重新登录。若某场所变得麻烦,在 NetworkManager 中将该连接从「random」改为「stable」——stable 为每个 SSID 提供一致 MAC 而不暴露硬件 MAC。
仅 Firefox resistFingerprinting 够吗?
大体够。它统一 canvas、字体、屏幕尺寸、时区与 User-Agent,使浏览器与其他 RFP 用户一致。它不在网络层阻止跟踪域或第三方请求——为此安装 uBlock Origin 并启用隐私与烦人元素过滤列表。除 uBO 外不要加扩展,每个都会增加独特性。
启用隐私扩展后还需禁用 IPv6 吗?
仅当主动使用 IPv6 服务时不需要。隐私扩展(RFC 4941)按计划轮换 IPv6 接口标识,处理 MAC 嵌入问题。若未使用 IPv6,完全禁用可从攻击面移除整个协议栈,零功能损失。
为何不只用 VPN 或 Tor 跳过这些?
VPN 与 Tor 保护公网 IP 并加密传输,但都无法向本地 WiFi 隐藏真实 MAC、向 mDNS 广播隐藏主机名、向恶意路由器隐藏 DNS 查询,或向网站隐藏浏览器指纹。网络层隐私与主机层隐私是叠加层——两者都需要。
内核加固 sysctl 会破坏正常应用吗?
本文所列不会。kernel.yama.ptrace_scope=2 意味 attach 调试器需 sudo——个人笔记本没问题,开发机略烦。避免 kernel.unprivileged_userns_clone=0,会破坏 Firefox 沙箱、Flatpak 及合法使用非特权用户命名空间的应用。