Jump to content

# Firefox/Privacy

2 languages

- 日本語
- 中文（简体）

From ArchWiki
< Firefox

Related articles

- Firefox
- Tor
- Browser extensions
- Firefox/Tweaks
- Firefox/Profile on RAM

This article overviews how to configure Firefox to enhance security and privacy.

## Configuration

The following are privacy-focused tweaks to prevent browser fingerprinting and tracking.

### Tracking protection

Firefox gained an option for Enhanced Tracking Protection. It can be enabled in different levels via the GUI Settings > Privacy & Security, or by setting `about:config`:

- `privacy.trackingprotection.enabled` `true`

Apart from privacy benefits, enabling tracking protection may also reduce load time by 44%.

Note that this is not a replacement for ad blocking extensions such as uBlock Origin and it may or may not work with Firefox forks. If you are already running such an ad blocker with the correct lists, tracking protection might be redundant.

### Anti-fingerprinting

The Firefox tracking protection blocks a list of known "fingerprinters" when your privacy settings are set to Standard (the default) or Strict. Fingerprinting Protection is a different, experimental feature under heavy development in Firefox.

Mozilla has started an anti-fingerprinting project in Firefox, as part of a project to upstream features from Tor Browser. Many of these anti-fingerprinting features are enabled by this setting in the `about:config`:

- `privacy.resistFingerprinting` `true`

Warning: This is an experimental feature and can cause some website breakage, timezone is UTC0, and websites will prefer light theme. Please note that text-to-speech engine will be disabled (bug #1636707) and some favicons will be broken (bug #1452391).

For more information see: Firefox's protection against fingerprinting.

### Change browser time zone

The time zone of your system can be used in browser fingerprinting. To set Firefox's time zone to UTC launch it as:

    $ TZ=UTC firefox

Or, set a script to launch the above (for example, at `/usr/local/bin/firefox`).

### Change user agent and platform

You can override Firefox's user agent with the `general.useragent.override` preference in `about:config`.

The value for the key is your browser's user agent. Select a known common one.

Tip:

- The value `Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0` is used as the user agent for the Tor browser, thus being very common.
- The #Anti-fingerprinting option also enables the Tor browser user agent and changes your browser platform automatically.

Warning: Changing the user agent without changing to a corresponding platform will make your browser nearly unique.

To change the platform for firefox, add the following `string` key in `about:config`:

    general.platform.override

Select a known common platform that corresponds with your user agent.

Tip: The value `Win32` is used as the platform for the Tor browser, corresponding with the user agent provided above.

### WebRTC exposes LAN IP address

To prevent websites from getting your local IP address via WebRTC's peer-to-peer (and JavaScript), open `about:config` and set:

- `media.peerconnection.ice.default_address_only` to `true`
- `media.peerconnection.enabled` to `false`. (only if you want to completely disable WebRTC)

You can use this WebRTC test page and WebRTC IP Leak VPN / Tor IP Test to confirm that your internal/external IP address is no longer leaked.

### Disable HTTP referer

HTTP referer is an optional HTTP header field that identifies the address of the previous webpage from which a link to the currently requested page was followed.

Set `network.http.sendRefererHeader` to `0` or `1`, depending on your preferences.

Note: Some sites use the referer header to control origin conditions. Disabling this header completely may cause site breaking. In this case adjusting `network.http.referer.XOriginPolicy` may provide a better solution.

### Disable connection tests

By default Firefox attempts to connect to Amazon and/or Akamai servers at regular intervals, to test your connection. For example a hotel, restaurant or other business might require you to enter a password to access the internet. If such a Captive portal exists and is blocking traffic this feature blocks all other connection attempts. This may leak your usage habits.

To disable Captive Portal testing, in `about:config` set:

- `network.captive-portal-service.enabled` to `false`

Note: A report states that the Mozilla VPN is unable to connect when this is disabled.

### Disable telemetry

Set `toolkit.telemetry.enabled` to `false` and/or disable it under Preferences > Privacy & Security > Firefox Data Collection and Use.

### Enable "Do Not Track" header

Set `privacy.donottrackheader.enabled` to `true` or toggle it in Preferences > Privacy & Security > Tracking Protection

Note: The remote server may choose to not honour the "Do Not Track" request.
Warning: The "Do Not Track" header (DNT) may actually be used to fingerprint your browser, since most users leave the option disabled.

### Disable/enforce 'Trusted Recursive Resolver'

Firefox 60 introduced a feature called Trusted Recursive Resolver (TRR). It circumvents DNS servers configured in your system, instead sending all DNS requests over HTTPS to Cloudflare servers. While this is significantly more secure (as "classic" DNS requests are sent in plain text over the network, and everyone along the way can snoop on these), this also makes all your DNS requests readable by Cloudflare, providing TRR servers.

- If you trust DNS servers you have configured yourself more than Cloudflare's, you can disable TRR in `about:config` by setting `network.trr.mode` (integer, create it if it does not exist) to `5`. (A value of 0 means disabled by default, and might be overridden by future updates - a value of 5 is disabled by choice and will not be overridden.)
- If you trust Cloudflare DNS servers and would prefer extra privacy (thanks to encrypted DNS requests), you can enforce TRR by setting `network.trr.mode` to `3` (which completely disables classic DNS requests) or `2` (uses TRR by default, falls back to classic DNS requests if that fails). Keep in mind that if you are using any intranet websites or trying to access computers in your local networks by their hostnames, enabling TRR may break name resolving in such cases.
- If you want to encrypt your DNS requests but not use Cloudflare servers, you can point to a new DNS over HTTPS server by setting `network.trr.uri` to your resolver URL. A list of currently available resolvers can be found in the curl wiki, along with other configuration options for TRR.

### Encrypted Client Hello

To enable Encrypted Client Hello (ECH) (formerly encrypted Server Name Indicator (eSNI)), so that nobody listening on the wire can see the server name you made a TLS connection to, set:

- `network.dns.echconfig.enabled` to `true`
- `network.dns.http3_echconfig.enabled` to `true`

You may also need to set `network.trr.mode` to `2` or `3`.

### Disable geolocation

Set `geo.enabled` to `false` in `about:config`.

Note: This may break websites that needs access to your location. One may want to simply allow location-access per site, instead of disabling this feature completely.

### Disable 'Safe Browsing' service

Safe Browsing offers phishing protection and malware checks, however it may send user information (e.g. URL, file hashes, etc.) to third parties like Google.

To disable the Safe Browsing service, in `about:config` set:

- `browser.safebrowsing.malware.enabled` to `false`
- `browser.safebrowsing.phishing.enabled` to `false`

In addition disable download checking, by setting `browser.safebrowsing.downloads.enabled` to `false`.

### Disable WebGL

WebGL is a potential security risk.[1] Set `webgl.disabled` to `true` in `about:config` if you want to disable it.

## Extensions

See Browser extensions#Privacy.

### Disable WebAssembly (and JavaScript)

WebAssembly, also known as Wasm, is a relatively new language. Unlike JavaScript, Wasm executes pre-compiled code natively in browsers for high-performance simulations and applications. It has been criticized for hiding pathways for malware and as with JavaScript, can be used to track users. Tor Browser blocks both JavaScript and Wasm.

See NoScript in Browser extensions#Privacy to block JavaScript the way Tor Browser does, which enables quick access when needed. To disable Wasm, in `about:config` set:

- `javascript.options.wasm` to `false`
- `javascript.options.wasm_baselinejit` to `false`
- `javascript.options.wasm_ionjit` to `false`

### Remove system-wide hidden extensions

Some extensions are hidden and installed by default in `/usr/lib/firefox/browser/features`. Many can be safely removed via `rm extension-name.xpi`. They might not be enabled by default and may have a menu option for enabling or disabling. Note that any files removed will return upon update of the firefox package. To keep these extensions removed, add the directories to NoExtract in `/etc/pacman.conf`. Some extensions include:

- `doh-rollout@mozilla.org.xpi` - DoH Roll-Out (do not remove if you chose to use #Disable/enforce 'Trusted Recursive Resolver' above).
- `screenshots@mozilla.org.xpi` - Firefox Screenshots.
- `webcompat-reporter@mozilla.org.xpi` - For reporting sites that are compromised in Firefox, so Mozilla can improve Firefox or patch the site dynamically using the `webcompat@mozilla.org.xpi` extension.
- All combined user and system extensions are listed in `about:support`. See [2] for a full list of system extensions including README files describing their functions.

Firefox installations to paths such as the default release installed to `/opt` have system extensions installed at `/firefox/firefox/browser/features`.

## Web search over Searx

This article or section is out of date.

Reason: SearX is no longer maintained since September 2023. The active fork is SearxNG. (Discuss in Talk:Firefox/Privacy)

Privacy can be boosted by reducing the amount of information you give to a single entity. For example, sending each new web search via a different, randomly selected proxy makes it near impossible for a single search engine to build a profile of you. We can do this using public instances (or sites) of Searx. Searx is an AGPL-3.0, open-source site-builder, that produces site, known as an 'instances'. Each public 'instance' can act as a middle-man between you and a myriad of different search engines.

From this list of public instances and others, bookmark as many Searx sites as you wish (if JavaScript is disabled you will need to enable it temporarily to load the list). For fast access to these bookmarks, consider adding `SX1`, `SX2` ... `SX(n)` to the bookmark's Name field, with `(n)` being the number of searx instances you bookmark.

After this bookmarking, simply typing `sx`, a number and `Enter` in the URL bar will load an instance.

Note: Update the above bookmarks from time to time or as instances become unreliable to reduce your online fingerprint.
Tip:

- If you have a web server and available bandwidth, consider running a public Searx instance to help others improve their privacy (more info).
- For increased privacy, use Searx instances with Tor Browser, which uses onion-routing to provide a degree of anonymity.
- You can improve your privacy further by running a private instance of Searx locally. Install the searxng-gitAUR package.

See https://www.privacyguides.org/en/search-engines/ for other options.

## Watch videos over Invidious

Invidious instances act as an alternative front-end to YouTube. They are websites built from open-source code. It has typically been difficult to limit the amount of information a user sent to YouTube (Google) in order to access content.

Benefits of using Invidious include:

- Videos are accessible without running scripts. YouTube forces users to run scripts.
- Videos can be saved for future viewing, or for viewing by others, including when offline. This reduces feedback sent to Google about when content is viewed or re-viewed.
- An optional audio-only mode that reduces bandwidth usage. When combined with a browser like Tor, using fewer data packets on a more lightweight website is likely to improve your anonymity.
- Invidious is a free and open-source interface that makes setting up an independent, private, video-hosting service easier. As such there are website that exist that are using Invidious to serve their own content or content removed from YouTube. Therefore it may help limit the profile-building capabilities of YouTube into the future (see note).

Bookmark as many functioning invidious instances from the following lists as possible (here, here, here[dead link 2024-01-13—HTTP 404]). Note that some of these instances may be hosted by Cloudflare.

You can change any YouTube video URL to an Invidious one by simply replacing the `youtube.com` part with the domain of the instance you want to use.

Note: Invidious does not index videos from Facebook or Cloudflare servers. Additionally, content is generally still sent to users from Google servers. For added privacy, see Tor Browser.

## Enterprise policies

Network and system-wide policies may be established through the use of enterprise policies which both supplements and overrides user configuration preferences. For example, there is no documented user preference to disable the checking of updates for beta channel releases. However, there exists an enterprise policy which can be effectively deployed as a workaround. Single and/or multiple policies may be administered through `policies.json` as follows:

- Disable application updates
- Force-enable hardware acceleration

    {
     "policies": {
      "DisableAppUpdate": true,
      "HardwareAcceleration": true
     }
    }

Verify that `Enterprise Policies` is set to `Active` in `about:support` and review release-specific policies in `about:policies`.

## Sanitized profiles

### prefs.js

Files which constitute a Firefox profile can be stripped of certain metadata. For example, a typical `prefs.js` contains strings which identify the client and/or the user.

    user_pref("app.normandy.user_id", "6f469186-12b8-50fb-bdf2-209ebc482c263");
    user_pref("security.sandbox.content.tempDirSuffix", "2a02902b-f25c-a9df-17bb-501350287f27");
    user_pref("toolkit.telemetry.cachedClientID", "22e251b4-0791-44f5-91ec-a44d77255f4a");

There are multiple approaches by which these strings can be reset with the caveat that a master `prefs.js` must first be created without such identifiers and synced into a working profile. The simplest solution is close Firefox before copying its `prefs.js` to a separate location:

    $ cp ~/.mozilla/firefox/example.default-release/prefs.js ~/prefs.sanitized.js

Strip out any and all identfier strings and date codes by either setting them to 0 or removing the entries outright from the copied `prefs.js`. Sync the now sanitized `prefs.js` to the working profile as required:

    $ rsync -v ~/.prefs.sanitized.js ~/.mozilla/firefox/example.default-release/prefs.js

Note: Required identifier and date code entries and/or strings will automatically be repopulated and reset to new values during the next launch of Firefox

A secondary privacy effect is also incurred which can be witnessed by examining the string results between a sanitized `prefs.js` versus a working `prefs.js` at Fingerprint JS API Demo.

### extensions.json

Assuming that extensions are installed, the `extensions.json` file lists all profile extensions and their settings. Of note is the location of the user home directory where the `.mozilla` and `extensions` folder exist by default. Unwanted background updates may be disabled by setting `applyBackgroundUpdates` to the appropriate `0` value. Of minor note are `installDate` and `updateDate`. Bubblewrap can effectively mask the username and location of the home directory at which time the `extensions.json` file may be sanitized and modified to point to the sandboxed `HOME` location.

    {"schemaVersion":31,"addons":[{"id":"uBlock0@raymondhill.net","syncGUID":"{0}","version":"0","type":"extension","optionsURL":"dashboard.html","optionsType":3,"optionsBrowserStyle":true,"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":0,"updateDate":0,"applyBackgroundUpdates":0,"path":"/home/r/.mozilla/firefox/example.default-release/extensions/uBlock0@raymondhill.net.xpi","skinnable":false,"softDisabled":false,"foreignInstall":true,"strictCompatibility":true}}

Removal of similar metadata from `addonStartup.json.lz4` and `search.json.mozlz4` can also be accomplished. mozlz4 is a command-line tool which provides compression/decompression support for Mozilla (non-standard) LZ4 files.

## Removal of subsystems

Telemetry related to crash reporting may be disabled by removing the following:

    /usr/lib/firefox/crashreporter
    /usr/lib/firefox/minidump-analyzer
    /usr/lib/firefox/pingsender

Those deleted files will be back after upgrading the package, add them to NoExtract for persistence.

For those who have opted to install Firefox manually from official Mozilla sources, the updater system may be disabled by removing `updater` in the `firefox` directory.

## Editing the contents of omni.ja

Note: Certain features may be inhibited or lost as a result of modifying the contents of `omni.ja`. Additionally, it is updated/overwritten with each Firefox release. It is up to the user to determine whether the gain in privacy is worth the loss of expected usability.

The file `/usr/lib/firefox/omni.ja` contains most of the default configuration settings used by Firefox. As an example, starting from Firefox 73, network calls to `firefox.settings.services.mozilla.com` and/or `content-signature-2.cdn.mozilla.net` cannot be blocked by extensions or by setting preference URLs to `"");`. Aside from using a DNS sinkhole or firewalling resolved IP blocks, one solution is to grep(1) through the extracted contents of `omni.ja` before removing all references to `firefox.settings.services.mozilla.com` and/or `cdn.mozilla.net`. Extraneous modules such as unused dictionaries and hyphenation files can also be removed in order to reduce the size of `omni.ja` for both security and performance reasons.

To repack/rezip, use the command `zip -0DXqr omni.ja *` and make sure that your working directory is the root directory of the files from the `omni.ja` file.

## Hardened user.js templates

Several active projects maintain comprehensive hardened Firefox configurations in the form of a `user.js` config that can be dropped to Firefox profile directory:

- arkenfox/user.js (arkenfox-user.jsAUR)
- pyllyukko/user.js
- ffprofile.com (github) - online user.js generator. You select which features you want to enable and disable and in the end you get a download link for a zip-file with your profile template. You can for example disable some functions, which send data to Mozilla and Google, or disable several annoying Firefox functions like Mozilla Hello or the Pocket integration.

## See also

- Brainfucksec's firefox hardening guide - A well maintained firefox guide to harden your firefox.
- Privacy Guides - A community-maintained resource for keeping online privacy.
- privacytools.io Firefox Privacy Add-ons
- prism-break.org Web Browser Addons
- MozillaWiki:Privacy/Privacy Task Force/firefox about config privacy tweeks - a wiki page maintained by Mozilla with descriptions of privacy specific settings.
- How to stop Firefox from making automatic connections - Is an annotated list of corresponding Firefox functionality and settings to disable it case-by-case.
- Search Engine Comparison - Web page for comparing popular search engines across some privacy-centric data points.

Category:

- Web browser

Hidden categories:

- Pages or sections flagged with Template:Out of date
- Pages with dead links