OpenSnitch

OpenSnitch – El firewall interactivo que trajo el control de salida de Little Snitch a Linux

Descripción del programa OpenSnitch

OpenSnitch es un firewall interactivo de capa de aplicación (application firewall) para GNU/Linux, diseñado específicamente para monitorizar y controlar las conexiones salientes de los programas, actuando como una alternativa nativa y de código abierto al popular Little Snitch de macOS. El proyecto fue iniciado en 2017 por Simone Margaritelli (evilsocket), y desde entonces ha crecido hasta convertirse en una herramienta de referencia en el ecosistema Linux, con contribuciones de más de 80 desarrolladores.

Su principal fortaleza radica en un enfoque radicalmente diferente al de los cortafuegos tradicionales. Mientras que la mayoría de los firewalls se centran en bloquear conexiones entrantes no deseadas, OpenSnitch se especializa en controlar lo que sale de tu ordenador, permitiendo detectar y bloquear rastreadores, telemetría no deseada, publicidad invasiva y posibles conexiones de malware a servidores de comando y control.

El programa funciona interceptando cada intento de conexión saliente de las aplicaciones y mostrando al usuario un diálogo interactivo para decidir si se permite o se bloquea, creando reglas permanentes que evitan futuras preguntas.

El proyecto se distribuye bajo licencia GNU General Public License v3.0 (GPLv3). Está empaquetado oficialmente para las principales distribuciones Linux, incluyendo Debian, Ubuntu, Arch Linux y NixOS, y también está disponible en SlackBuilds.org para Slackware.

El desarrollo se mantiene activo, con la última versión 1.8.0 disponible en el repositorio oficial de GitHub, aunque los paquetes estables en las distribuciones suelen estar ligeramente rezagados (por ejemplo, en Debian testing se encuentra la versión 1.6.9-3).

¿Necesitas controlar qué aplicaciones se conectan a Internet desde tu PC con Linux, bloqueando rastreadores y telemetría no deseados?

Características clave de OpenSnitch

1. Control interactivo de conexiones salientes con diálogos en tiempo real

La característica más distintiva de OpenSnitch es su capacidad de interceptar cada conexión saliente y mostrar un diálogo emergente que permite al usuario decidir si permitirla o bloquearla en el momento. Este diálogo muestra información detallada:

  • Aplicación: el programa que intenta conectarse (identificado por ruta y, opcionalmente, por hash del ejecutable)
  • Proceso padre: qué proceso inició la aplicación
  • Destino: dirección IP, puerto y nombre de dominio (si está disponible)
  • Opciones: permitir solo esta vez, permitir siempre, bloquear esta vez, bloquecer siempre

Si el usuario no responde dentro de un tiempo configurable, se aplica una acción por defecto predefinida. Esta interactividad elimina la necesidad de preconfigurar reglas complejas; las reglas se construyen de forma incremental a medida que se utilizan las aplicaciones.

2. Identificación robusta de procesos con múltiples métodos de monitorización

OpenSnitch puede monitorizar los procesos de tres formas diferentes, priorizando la más eficiente según el sistema:

  • eBPF (Extended Berkeley Packet Filter) – El método preferido y más eficiente. Requiere un kernel Linux 5.5 o superior y es el único método que puede interceptar conexiones iniciadas desde el espacio del kernel.
  • Audit Subsystem – Utiliza el sistema de auditoría del kernel (auditd). Es más lento y no permite el bloqueo en el punto de interceptación, sino que actúa después.
  • /proc filesystem – Método de respaldo que lee información de procesos desde /proc. Es compatible con casi todos los sistemas, pero no puede rastrear todas las conexiones (por ejemplo, las de contenedores).

El uso de hash del ejecutable en lugar de solo la ruta del archivo es una característica de seguridad avanzada: incluso si un malware modifica un ejecutable legítimo, OpenSnitch detectará el cambio de hash y volverá a preguntar.

3. Reglas granulares con soporte para expresiones regulares

Las reglas de OpenSnitch son extremadamente flexibles y pueden basarse en múltiples criterios:

  • Identificador del proceso: ruta del ejecutable, hash del archivo, línea de comandos completa
  • Usuario y grupo: propietario del proceso
  • Destino: dirección IP, puerto, nombre de dominio (incluyendo soporte para wildcards)
  • Protocolo: TCP, UDP
  • Variables de entorno: por ejemplo, bloquear conexiones si LD_PRELOAD no está vacío

Las reglas se almacenan en formato JSON y pueden editarse manualmente o exportarse/importarse entre equipos. Desde la versión 1.7.2, el editor de reglas permite especificar listas de puertos, IPs o dominios separados por comas.

4. Arquitectura cliente-servidor con interfaz gráfica y gestión centralizada

OpenSnitch se divide en dos componentes:

  • opensnitchd (daemon): el agente que intercepta las conexiones y aplica las reglas. Se ejecuta en segundo plano con privilegios de root.
  • opensnitch-ui (interfaz gráfica): la interfaz de usuario (escrita en Python/Qt) que muestra los diálogos y permite gestionar las reglas. Se ejecuta en el espacio de usuario.

Esta arquitectura permite una gestión centralizada: un único ordenador con la interfaz gráfica puede recibir conexiones de múltiples demonios que se ejecutan en otros equipos de la red, centralizando el control y la monitorización.

5. Listas de bloqueo masivas y protección contra rastreadores

OpenSnitch soporta la importación de listas de dominios a bloquear en bloque, una caracterática especialmente útil para eliminar rastreadores y publicidad a nivel de sistema. El wiki del proyecto en GitHub incluye listas de más de 420,000 dominios de rastreo y publicidad que pueden añadirse de una sola vez.

También incluye reglas por defecto que permiten automáticamente las conexiones locales (localhost, 127.0.0.0/8,::1) para evitar interrupciones innecesarias en la comunicación entre procesos locales.

6. Modo de aprendizaje y estadísticas detalladas

Para facilitar la configuración inicial, OpenSnitch ofrece un modo de aprendizaje donde, durante un período configurable, todas las conexiones se permiten automáticamente mientras se registran en el historial. Transcurrido ese tiempo, el usuario puede revisar las reglas creadas, eliminar las que no desea y activar el modo de bloqueo total. La interfaz gráfica proporciona estadísticas detalladas sobre las conexiones realizadas, permitiendo identificar patrones de comportamiento sospechoso.

Explicación detallada de las funcionalidades

La arquitectura de OpenSnitch se basa en una integración profunda con el subsistema de red del kernel de Linux. Utiliza Netfilter y la cola NFQUEUE para interceptar los paquetes salientes antes de que abandonen el sistema. Cuando se establece una nueva conexión, el paquete se desvía a una cola en el espacio de usuario, donde el demonio opensnitchd lo recibe y determina qué proceso lo ha originado.

El proceso de identificación del proceso es el siguiente:

  1. El demonio recibe el paquete de la cola NFQUEUE.
  2. Utiliza el método de monitorización configurado (eBPF, audit o /proc) para averiguar qué PID (identificador de proceso) está asociado al socket que originó el paquete.
  3. Con el PID, obtiene información detallada del proceso: ruta del ejecutable, línea de comandos, usuario, variables de entorno, etc.
  4. Consulta la base de datos de reglas (almacenada en /etc/opensnitchd/rules/) para ver si existe una regla que coincida con estos datos.
  5. Si encuentra una regla, permite o bloquea la conexión en consecuencia.
  6. Si no encuentra una regla, muestra un diálogo al usuario (a través de la interfaz gráfica) y, según la respuesta, crea una nueva regla.

El uso de eBPF es la opción más eficiente y segura porque las verificaciones se realizan directamente en el kernel, sin necesidad de enviar datos al espacio de usuario para cada paquete. Los programas eBPF que utiliza OpenSnitch interceptan llamadas al sistema relacionadas con la red y eventos de creación de procesos, manteniendo un seguimiento constante de la actividad del sistema con una sobrecarga mínima.

La arquitectura cliente-servidor ofrece flexibilidad adicional. El demonio puede configurarse para conectarse a una interfaz gráfica remota especificando una dirección IP y puerto en lugar del socket Unix por defecto. Esto permite que un administrador supervise múltiples máquinas desde una sola estación de trabajo, ideal para entornos con varios equipos o servidores.

Descarga e instalación de OpenSnitch

  • Página oficial: github.com/evilsocket/opensnitch
  • Versión actual: 1.8.0 (última release en GitHub); paquetes estables en distribuciones: 1.6.9-3 en Debian testing
  • Últimas versiones: 1.8.0 (GitHub), 1.7.2, 1.6.9 (Debian), 1.6.8.x
  • Tamaño: Demonio: 4-5 MB (dependiendo de la arquitectura); Interfaz gráfica: aproximadamente 1.2 MB
  • Sistemas operativos compatibles: Linux exclusivamente (Debian, Ubuntu, Arch, NixOS, Slackware, Fedora/RHEL mediante paquetes.rpm)
  • Requisitos mínimos: Kernel Linux 5.5 o superior para el modo eBPF (recomendado); 256 MB de RAM, 50 MB de espacio en disco
  • Licencia: GNU General Public License v3.0 (GPLv3)
  • Idiomas: Múltiples idiomas (i18n), incluyendo español, inglés, alemán, francés, japonés, chino
  • Soporte técnico: GitHub Issues, comunidad en foros de distribuciones

Nota sobre la instalación: OpenSnitch se divide en dos paquetes: opensnitch (demonio) y python3-opensnitch-ui (interfaz gráfica). En Debian/Ubuntu, se instalan con:

sudo apt install opensnitch python3-opensnitch-ui

En Arch Linux:

sudo pacman -S opensnitch opensnitch-gui

Para sistemas basados en Red Hat/Fedora, se proporcionan paquetes .rpm en la página de releases de GitHub. En Slackware, está disponible a través de SlackBuilds.org, aunque puede requerir recompilar el kernel con opciones adicionales para eBPF.

Cómo usar OpenSnitch

El uso de OpenSnitch se basa en un flujo interactivo que combina la configuración inicial con la toma de decisiones en tiempo real.

Paso 1: Instalación y primera configuración

Una vez instalados ambos paquetes, el demonio debería iniciarse automáticamente. Verifica su estado:

sudo systemctl status opensnitch

Si no está activo, habilítalo e inícialo:

sudo systemctl enable --now opensnitch

Paso 2: Configurar el modo de aprendizaje inicial

Para evitar un aluvión de diálogos al primer uso, se recomienda configurar inicialmente la acción por defecto como «Permitir» y activar el modo de aprendizaje:

  1. Abre la interfaz gráfica desde el icono de la bandeja del sistema.
  2. Ve a Preferences > Nodes.
  3. Establece «Default Action» como «Allow».
  4. Marca «Intercept unknown connections».
  5. Aplica los cambios.

Durante unos días, utiliza el ordenador normalmente. OpenSnitch registrará todas las conexiones y creará reglas automáticamente. En este período, la aplicación apenas molestará al usuario.

Paso 3: Revisar y depurar las reglas acumuladas

Tras el período de aprendizaje, accede a la pestaña «Rules» en la interfaz gráfica. Verás una lista de todas las reglas creadas automáticamente. Revisa cada una:

  • Elimina aquellas que correspondan a aplicaciones que ya no utilizas.
  • Verifica que no haya reglas que permitan conexiones a dominios sospechosos.
  • Puedes editar reglas existentes para hacerlas más específicas (por ejemplo, limitar un programa a ciertos dominios).

Paso 4: Activar el modo de bloqueo total

Una vez depuradas las reglas, cambia la acción por defecto a «Deny» o «Reject» en Preferences > Nodes. A partir de este momento, cualquier conexión de una aplicación sin una regla explícita será bloqueada, y se te notificará para que decidas si deseas crear una nueva regla.

Paso 5: Responder a los diálogos interactivos

Cuando una aplicación intente conectarse sin una regla existente, aparecerá una ventana emergente con la siguiente información:

  • Application: ruta del ejecutable y su hash (opcionalmente)
  • Parent Process: qué programa inició esta aplicación
  • Destination: dominio, dirección IP y puerto de destino
  • Opciones: «Allow once», «Allow always», «Deny once», «Deny always»

Elige la opción adecuada. Para aplicaciones de confianza (navegador, cliente de correo), selecciona «Allow always». Para conexiones sospechosas o rastreadores, selecciona «Deny always».

Paso 6: Importar listas de bloqueo masivas (opcional)

Para bloquear grandes listas de rastreadores y publicidad de una sola vez, descarga un archivo de lista del wiki del proyecto y utiliza la función de importación de la interfaz gráfica. Esto añadirá reglas de bloqueo para miles de dominios, reduciendo drásticamente el ruido de fondo.

Paso 7: Solución de problemas (si el demonio no intercepta conexiones)

Si OpenSnitch no intercepta las conexiones, verifica que la regla de Netfilter esté presente:

sudo iptables -t mangle -L OUTPUT | grep NFQUEUE

Deberías ver una línea similar a:

NFQUEUE all -- anywhere anywhere ctstate NEW,RELATED NFQUEUE num 0 bypass

Si no aparece, puede que otro firewall esté interfiriendo. En sistemas que utilizan ufw o firewalld, es posible que necesites desactivarlos o configurarlos para que no interfieran con las reglas de OpenSnitch.

Observaciones sobre el programa OpenSnitch

Frente a otros cortafuegos para Linux como UFW (Uncomplicated Firewall), firewalld o iptables/nftables, OpenSnitch ocupa un nicho completamente diferente. Mientras que las herramientas tradicionales se centran en reglas estáticas basadas en puertos y direcciones IP, OpenSnitch ofrece un control basado en aplicaciones con toma de decisiones en tiempo real.

Un usuario lo describe en un foro: «Es justo tan molesto como Little Snitch en macOS cuando lo usas por primera vez, pero después de una semana se vuelve mucho más silencioso».

Para el usuario final, el beneficio práctico de OpenSnitch es visibilidad y control. Como señala un usuario en LWN, «es sorprendente ver cuántos sitios de rastreo y publicidad intentan conectarse desde las páginas web», y OpenSnitch permite bloquearlos de raíz.

También es útil para detectar aplicaciones que ignoran la configuración del sistema, como Chromium, que puede intentar conectar directamente a los DNS de Google (8.8.8.8) incluso si se ha configurado otro servidor DNS. OpenSnitch permite bloquear estas conexiones de forma permanente.

La comunidad y el desarrollo son otros puntos fuertes. Aunque el creador original, Simone Margaritelli, abandonó el proyecto temporalmente, fue retomado por Gustavo Iñiguez Goya, quien también es el mantenedor del paquete en Debian y el contribuidor más prolífico. El proyecto cuenta con una comunidad activa y recibe contribuciones regulares.

Sin embargo, OpenSnitch no está exento de inconvenientes:

  • Curva de aprendizaje inicial: El aluvión de diálogos durante la primera semana puede ser abrumador, pero disminuye rápidamente a medida que se establecen las reglas.
  • Requisitos de kernel: El modo eBPF (recomendado) requiere kernel 5.5 o superior, lo que puede ser un problema en distribuciones con kernels más antiguos.
  • Problemas de compatibilidad con entornos gráficos: En Wayland, los diálogos emergentes pueden fallar. La solución es cambiar el plugin Qt a «xcb» en las preferencias.
  • Conflictos con otros firewalls: Si se utiliza UFW o firewalld, puede haber conflictos con las reglas de Netfilter que OpenSnitch necesita.
  • Mantenimiento del paquete en distribuciones: Los paquetes en las distribuciones pueden estar rezagados respecto a las versiones de GitHub. Por ejemplo, en Debian, la versión 1.6.9-3 está marcada para posible eliminación si no se actualiza, y hay una solicitud de ayuda para el mantenimiento del paquete (#1070855).

El futuro del proyecto parece prometedor. La versión 1.8.0 ya está disponible en GitHub, y el desarrollo continúa activo, con mejoras en la interfaz de usuario (nuevos temas oscuros/claros), soporte para reglas más flexibles y correcciones de errores.

Limitaciones importantes

  • No funciona en Windows ni macOS: OpenSnitch está diseñado exclusivamente para Linux. Para macOS, la alternativa es Little Snitch (comercial); para Windows, existen alternativas como GlassWire o SimpleWall.
  • Requiere kernel 5.5+ para el modo eBPF: Sin eBPF, el rendimiento es menor y algunas conexiones no pueden interceptarse correctamente.
  • Curva de aprendizaje inicial pronunciada: El primer uso puede resultar abrumador debido a la cantidad de diálogos.
  • Problemas ocasionales con Wayland y Qt: Los diálogos emergentes pueden no mostrarse correctamente en entornos Wayland, requiriendo cambiar a XCB.
  • Mantenimiento del paquete en distribuciones: El paquete en Debian está marcado para posible autoremoción si no se actualiza, y se necesita ayuda para el mantenimiento.

Alternativa recomendada

Si buscas una solución similar para Windows, GlassWire es una alternativa popular con interfaz visual y control de conexiones salientes, aunque es de pago (con versión gratuita limitada). SimpleWall es una alternativa gratuita y ligera basada en el filtrado de Windows (WFP).

Para macOS, la alternativa es el propio Little Snitch (comercial), que inspiró a OpenSnitch. Si prefieres mantenerte en Linux pero buscas una solución más sencilla, Portmaster (de Safing) ofrece funcionalidades similares con una interfaz más moderna y gestión centralizada, aunque es menos ligero.

OpenSnitch es una herramienta esencial para cualquier usuario de Linux preocupado por su privacidad, ofreciendo un control sin precedentes sobre las conexiones salientes de las aplicaciones. Aunque requiere una inversión inicial de tiempo para configurarlo correctamente, los beneficios en términos de bloqueo de rastreadores, telemetría y malware bien valen la pena. Puedes instalarlo desde los repositorios de tu distribución (Debian, Ubuntu, Arch, NixOS) o descargar la última versión desde su página oficial en GitHub.

Sección FAQ

¿OpenSnitch es gratis o de pago?

OpenSnitch es completamente gratuito y de código abierto, publicado bajo la licencia GNU General Public License v3.0 (GPLv3). No tiene versiones de pago ni funcionalidades bloqueadas. Puedes descargarlo, usarlo y modificarlo libremente.

¿Funciona en Linux, macOS, Windows 10 y Windows 11?

OpenSnitch está desarrollado exclusivamente para sistemas Linux. Es compatible con las principales distribuciones (Debian, Ubuntu, Arch, NixOS, Fedora, Slackware). No existen versiones nativas para macOS, Windows u otros sistemas operativos. Para macOS, la alternativa comercial es Little Snitch; para Windows, GlassWire o SimpleWall.

¿Qué diferencia a OpenSnitch de otros firewalls como UFW o iptables?

La diferencia fundamental es el control basado en aplicaciones vs. reglas de red. UFW y iptables trabajan con reglas estáticas basadas en puertos y direcciones IP, sin distinguir qué programa inicia la conexión. OpenSnitch, en cambio, identifica el proceso exacto (por ruta y hash) y permite crear reglas granulares por aplicación, incluyendo la capacidad de bloquear rastreadores a nivel de dominio. Es como un «Little Snitch para Linux».

¿OpenSnitch puede bloquear la telemetría de aplicaciones como Chrome o VS Code?

Sí, absolutamente. OpenSnitch es especialmente útil para detectar y bloquear conexiones de telemetría y rastreo. Por ejemplo, Chromium es conocido por intentar conectar directamente a los DNS de Google (8.8.8.8) incluso si se ha configurado otro servidor DNS; OpenSnitch permite detectar y bloquear estas conexiones permanentemente. También es eficaz para controlar aplicaciones Electron que tienden a conectar a múltiples servicios de rastreo.

¿Qué hago si OpenSnitch no intercepta ninguna conexión?

Si OpenSnitch no intercepta conexiones, verifica que la regla de Netfilter esté presente:

sudo iptables -t mangle -L OUTPUT | grep NFQUEUE

Si no aparece ninguna línea, puede que otro firewall (como UFW o firewalld) esté interfiriendo. Prueba a desactivar temporalmente UFW: sudo ufw disable. También verifica que el demonio esté en ejecución: sudo systemctl status opensnitch. Si el problema persiste, consulta los logs: sudo journalctl -u opensnitch o ejecuta el demonio en modo debug desde la línea de comandos:

sudo systemctl stop opensnitch
sudo /usr/bin/opensnitchd -debug