⏱️ Lectura: 14 min
Un administrador de TI puede bloquear extensiones, apagar el guardado de contraseñas y forzar actualizaciones en miles de equipos sin tocar una sola máquina: las políticas de Firefox Enterprise hacen eso con un archivo JSON de pocas líneas.
📑 En este artículo
Mozilla las documenta como parte de su oferta Firefox Enterprise, pensada para empresas que necesitan auditar y controlar el navegador en toda la organización. El mecanismo real detrás de esa promesa no es una consola misteriosa, es un archivo llamado policies.json que Firefox lee al iniciar.
TL;DR
- policies.json es un archivo de configuración que Firefox lee al arrancar y aplica antes de mostrar cualquier ventana.
- Windows usa plantillas ADMX vía Group Policy o Intune; macOS y Linux leen el mismo JSON desde una carpeta del sistema.
- Las políticas bloqueadas con
Locked:trueno pueden revertirse desde about:preferences ni con permisos de administrador local. - about:policies muestra en vivo qué directivas están activas y si hubo errores de sintaxis al cargar el archivo.
- El repositorio policy-templates de Mozilla en GitHub documenta cada clave válida, desde actualizaciones hasta certificados.
¿Qué son las políticas de Firefox Enterprise?
Las políticas de Firefox Enterprise son un conjunto de directivas JSON que Mozilla expone para que un administrador configure, bloquee o despliegue ajustes del navegador en todos los equipos de una organización, sin depender de la interfaz gráfica de cada usuario. Se definen en un archivo policies.json o mediante plantillas ADMX y MDM.
El motor que las interpreta se llama Enterprise Policy Engine y viene integrado en Firefox desde la versión 60, lanzada en 2018. No es un producto aparte que haya que instalar. Cualquier build oficial de Firefox para escritorio, Windows, macOS y Linux, ya sabe leer este archivo; Firefox para Android todavía no soporta policies.json.
El repositorio policy-templates de Mozilla en GitHub es la referencia canónica: ahí viven las plantillas ADMX/ADML para Windows, los perfiles para macOS y la documentación de cada clave JSON válida, con ejemplos listos para copiar.
Por qué importa
Una empresa que no controla su navegador no controla su mayor superficie de ataque. El navegador es donde los empleados pegan credenciales, suben archivos a servicios externos y corren extensiones de terceros con acceso a cada pestaña abierta.
Mozilla construyó su propuesta Enterprise alrededor de marcos regulatorios concretos: DORA y NIS2 en la Unión Europea, GDPR para datos personales, ISO 27001 y SOC 2 para controles de seguridad operativa. Ninguno de esos marcos exige un navegador específico, pero todos exigen poder demostrar qué controles existen y auditarlos. policies.json es, en la práctica, una forma directa de generar esa evidencia, un archivo versionado en Git que un auditor puede leer línea por línea.
Hay además un argumento de independencia técnica que Mozilla repite en su propio sitio: a diferencia de un navegador basado en Chromium, Firefox corre su propio motor, Gecko, así que una vulnerabilidad en el motor de Chrome no afecta automáticamente a la flota de Firefox de una empresa. Diversificar el motor de navegador reduce el riesgo de que un solo exploit tumbe todos los equipos a la vez.
Cómo funciona policies.json por dentro
Cuando Firefox arranca, antes de cargar cualquier perfil de usuario, busca el archivo policies.json en una ruta fija del sistema operativo. Si lo encuentra y el JSON es válido, aplica cada clave como una directiva: oculta un menú, fuerza un valor o bloquea una preferencia para que el usuario no pueda cambiarla ni desde about:config.
La ruta cambia según el sistema:
- Windows: carpeta
distributionjunto al ejecutable (C:\Program Files\Mozilla Firefox\distribution\policies.json), o directamente vía Group Policy con las plantillas ADMX importadas en el dominio. - macOS:
/Applications/Firefox.app/Contents/Resources/distribution/policies.json, o un perfil de configuración distribuido por MDM. - Linux:
/etc/firefox/policies/policies.jsonen Debian y Ubuntu, o/usr/lib/firefox/distribution/policies.jsonen otras distribuciones, según cómo se empaquetó el navegador.
Todo policies.json válido debe tener la clave raíz "policies". Sin ella, Firefox también ignora el archivo completo, igual que con un JSON malformado. Dentro de esa clave raíz entran las decenas de directivas documentadas en policy-templates, desde ajustes triviales (Homepage, NewTabPage) hasta controles de seguridad profundos (SSLVersionMin, DisableSafeMode). No hace falta declarar las que no te interesan. Firefox aplica solo las claves presentes y deja el resto en su valor por defecto.
flowchart TD
A["Firefox arranca"] --> B["Busca distribution/policies.json"]
B --> C{"Archivo valido?"}
C -->|"si"| D["Enterprise Policy Engine aplica cada clave"]
C -->|"no, JSON roto"| E["Ignora el archivo y loguea el error"]
D --> F["Perfil del usuario carga con las restricciones activas"]
Ejemplos prácticos
El policies.json más simple posible desactiva una sola función. Este ejemplo bloquea las actualizaciones automáticas, útil cuando el equipo de TI prefiere empujar versiones probadas manualmente:
{
"policies": {
"DisableAppUpdate": true
}
}
Al reiniciar Firefox y abrir about:preferences#general, la sección de actualizaciones desaparece por completo: no hay botón ni mensaje, porque la clave quedó bloqueada antes de que la interfaz se dibuje.
Un caso más realista combina varias directivas para una política de extensiones. Esta configuración permite solo una extensión específica e impide instalar cualquier otra:
{
"policies": {
"ExtensionSettings": {
"*": {
"installation_mode": "blocked"
},
"[email protected]": {
"installation_mode": "force_installed",
"install_url": "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
}
}
}
}
Con esta política, el menú de complementos (about:addons) ya no tiene botón para explorar más complementos, y cualquier intento de arrastrar un .xpi al navegador falla con un aviso de que la instalación está bloqueada por política de la organización.
El tercer ejemplo combina control de red y de certificados, algo típico en empresas que inspeccionan tráfico TLS con un proxy corporativo:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true,
"Install": ["proxy-ca-corporativa.crt"]
},
"DNSOverHTTPS": {
"Enabled": false,
"Locked": true
}
}
}
ImportEnterpriseRoots le dice a Firefox que confíe en los certificados raíz que ya están instalados en el almacén del sistema operativo, en vez de usar solo el almacén propio de Mozilla. DNSOverHTTPS deshabilitado y bloqueado evita que un empleado lo reactive desde about:config y así sortee la inspección de DNS corporativa.
Cómo empezar
Dependencias antes de arrancar: Firefox 60 o superior instalado (cualquier versión actual lo cumple), permisos de administrador o root en el equipo donde se prueba, y un editor de texto para escribir JSON válido.
En Linux, el camino más directo es crear la carpeta de políticas y el archivo a mano:
sudo mkdir -p /etc/firefox/policies
sudo tee /etc/firefox/policies/policies.json > /dev/null <<'EOF'
{
"policies": {
"DisableTelemetry": true,
"OverrideFirstRunPage": ""
}
}
EOF
Después de guardar el archivo, cerrá todas las ventanas de Firefox y volvé a abrirlo. Para confirmar que la política cargó, entrá a about:policies: la pestaña «Políticas activas» debe listar DisableTelemetry y OverrideFirstRunPage con el valor exacto que pusiste en el archivo. Si el JSON tiene un error de sintaxis, esa misma pantalla muestra un aviso en la pestaña «Errores» en vez de aplicar nada.
En Windows, el equivalente sin dominio es copiar el mismo archivo a la carpeta distribution dentro del directorio de instalación de Firefox; con dominio, se importan las plantillas ADMX del repositorio policy-templates en la consola de Group Policy y se configuran desde ahí. En macOS, el archivo va en /Applications/Firefox.app/Contents/Resources/distribution/policies.json, o se empaqueta como perfil de configuración para distribuirlo por MDM.
💡 Tip: about:policies también tiene una pestaña «Documentación» con el esquema JSON completo de la versión de Firefox instalada: sirve para validar nombres de clave sin salir del navegador.
Casos de uso reales
Mozilla agrupa las políticas más pedidas por empresas reguladas en un puñado de escenarios, documentados en su página de Firefox Enterprise:
- Prevención de fuga de datos (DLP): la clave
WebsiteFiltero extensiones gestionadas víaExtensionSettingspueden advertir o bloquear acciones hacia dominios no autorizados. - Control de herramientas de IA: con
ExtensionSettingsyWebsiteFiltercombinados, TI puede permitir, restringir o desactivar por completo el acceso a chatbots de IA desde el navegador corporativo. - Modo Lockdown: endurece el navegador para perfiles de alto riesgo, restringiendo ejecución de scripts en sitios no confiables.
- Integración con SIEM: Firefox puede exportar eventos del navegador, como descargas o instalaciones de extensiones, hacia un colector SIEM para auditoría centralizada.
- Gobierno de extensiones: una lista blanca o negra organización-wide, igual que el ejemplo de uBlock Origin de la sección anterior, pero aplicada a cientos de equipos a la vez.
Errores comunes y buenas prácticas
El error más frecuente es un JSON mal formado. Una coma de más o una llave sin cerrar bastan para romperlo. Firefox no avisa con un cuadro de diálogo, simplemente ignora el archivo completo y arranca sin ninguna política aplicada. La única forma de detectarlo es revisar about:policies después de cada cambio, nunca asumir que porque el archivo existe, se está usando.
Otro error común es confundir la carpeta distribution (donde vive policies.json) con la carpeta del perfil de usuario (~/.mozilla/firefox/xxxxxxxx.default): son rutas distintas y poner el archivo en la segunda no tiene ningún efecto.
En entornos con dominio Windows, el orden de precedencia importa. Group Policy siempre gana sobre un policies.json local si ambos definen la misma clave. Si una política parece no aplicarse, lo primero es revisar si una GPO del dominio la está sobrescribiendo.
Buena práctica: usar Locked:true solo en las claves que realmente necesitan impedir que el usuario las cambie. Bloquear preferencias que el usuario legítimamente necesita ajustar, como el idioma o el zoom, genera tickets de soporte innecesarios.
⚠️ Ojo: policies.json no cifra ni oculta su contenido. Cualquier usuario con acceso de lectura al sistema de archivos puede abrir el archivo y ver exactamente qué restricciones tiene; no es un mecanismo de seguridad por ofuscación, es configuración declarada.
Comparativa con alternativas
No todas las empresas necesitan el mismo mecanismo de distribución. La tabla siguiente resume cuándo conviene cada camino, desde un policies.json suelto hasta la oferta on-premises completa que Mozilla anuncia en su sitio.
| Opción | Cuándo usarla | Ventaja | Limitación |
|---|---|---|---|
| policies.json local | Equipos sueltos, sin dominio, pruebas rápidas | No requiere infraestructura adicional, se versiona en Git | Hay que distribuir el archivo a mano o con un script propio |
| Group Policy (ADMX) en Windows | Empresas con Active Directory ya desplegado | Aplicación centralizada y automática a toda la unidad organizativa | Solo cubre equipos Windows unidos al dominio |
| Perfil MDM (macOS / Intune) | Flotas de laptops corporativas con MDM existente | Se integra con el mismo pipeline que gestiona el resto del dispositivo | Requiere una solución MDM ya contratada y configurada |
| Firefox Enterprise on-premises | Organizaciones reguladas que no quieren depender de infraestructura de un tercero | Consola, datos y políticas corren en infraestructura propia | Mozilla no publica aún precios ni fecha general de disponibilidad |
Profundizando: precedencia y el motor de políticas
Por debajo de policies.json corre el mismo motor, Enterprise Policy Engine, sin importar si la fuente es el archivo JSON, una GPO de Windows o un perfil MDM de macOS: todas terminan convertidas a la misma estructura interna antes de aplicarse. Eso es lo que permite mezclar fuentes sin reescribir código específico por plataforma.
Cuando dos fuentes definen la misma clave, gana la de mayor jerarquía administrativa, no la que se cargó último. En Windows, el orden es GPO de máquina, luego GPO de usuario y por último policies.json local. En macOS y Linux, al no existir GPO, policies.json es la fuente de mayor jerarquía disponible fuera de un MDM.
flowchart LR
A["GPO de maquina Windows"] --> D["Enterprise Policy Engine"]
B["GPO de usuario Windows"] --> D
C["policies.json local"] --> D
E["Perfil MDM macOS"] --> D
D --> F["Configuracion final aplicada al navegador"]
Antes de 2018, Mozilla resolvía esto con autoconfig, archivos .cfg con JavaScript embebido, un mecanismo mucho más frágil: un error de sintaxis en JavaScript podía romper el arranque completo del navegador, mientras que un policies.json inválido simplemente se ignora. El cambio a JSON declarativo fue, en buena medida, una respuesta a años de reportes de bugs por ese motivo.
Una limitación real: policies.json no soporta lógica condicional. No hay forma de decir «aplicá esta política solo si el usuario pertenece al grupo X» dentro del archivo mismo; esa segmentación hay que hacerla afuera, generando un policies.json distinto por grupo y distribuyendo el que corresponda con la herramienta de gestión de configuración que ya use la empresa, sea Ansible, Puppet o Intune.
Como policies.json vive en el sistema de archivos sin firma criptográfica propia, la integridad depende de quién puede escribir en esa carpeta. Un atacante con acceso de escritura a distribution/ podría, en teoría, forzar Certificates.ImportEnterpriseRoots o desactivar DNSOverHTTPS para facilitar un ataque de intermediario. Por eso la recomendación habitual es tratar esa carpeta con los mismos permisos que un binario del sistema. Solo una cuenta root o de servicio de gestión de configuración debería poder modificarla, nunca el usuario final.
📖 Resumen en Telegram: Ver resumen
Tu próximo paso: creá un policies.json con una sola clave como DisableTelemetry en una máquina de prueba y confirmá el resultado en about:policies antes de tocar un equipo de producción.
Preguntas frecuentes
¿Qué pasa si policies.json tiene un error de sintaxis?
Firefox ignora el archivo completo y arranca sin ninguna política aplicada, sin mostrar un cuadro de diálogo de error. La forma de detectarlo es revisar la pestaña «Errores» en about:policies.
¿Las políticas de Firefox Enterprise funcionan sin Active Directory?
Sí. policies.json es un archivo local que Firefox lee aunque el equipo no esté unido a ningún dominio. Group Policy y MDM son capas adicionales, no un requisito.
¿policy-templates y policies.json son lo mismo?
No. policies.json es el archivo de configuración en sí. policy-templates es el repositorio de GitHub de Mozilla que documenta cada clave válida y provee las plantillas ADMX para importar esas mismas claves en Group Policy.
¿Un usuario puede revertir una política bloqueada en policies.json?
No, si la clave tiene Locked:true. Ni desde about:preferences ni desde about:config aparece la opción de cambiarla; queda fija hasta que un administrador modifique el archivo.
¿Firefox para Android soporta policies.json?
No, al momento de escribir este artículo el soporte del Enterprise Policy Engine está limitado a las versiones de escritorio: Windows, macOS y Linux.
Referencias
- Firefox.com, página oficial de Firefox Enterprise: describe la oferta on-premises, DLP nativo y los marcos regulatorios que cubre.
- Repositorio policy-templates de Mozilla en GitHub: documentación completa de cada clave JSON y las plantillas ADMX/ADML oficiales.
- Mozilla Support: centro de soporte oficial con guías de configuración para administradores de TI.
- Wikipedia: Firefox: contexto sobre el motor Gecko y la historia del navegador de Mozilla.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Imagen destacada: Foto de ThisisEngineering en Unsplash
¿Te sirvió? ¿Te dio otro error? Contalo abajo: las preguntas se responden y le sirven al siguiente que llegue.
Dejar un comentario
0 Comentarios