OpenSnitch, firewall interactivo de aplicaciones para GNU/Linux
(github.com/evilsocket)- OpenSnitch es un firewall de aplicaciones para GNU/Linux, enfocado en filtrar de forma interactiva las conexiones externas de las aplicaciones
- Puede bloquear dominios de publicidad, rastreadores y malware en todo el sistema, y también permite configurar desde la GUI un firewall del sistema basado en nftables
- La GUI admite la configuración de reglas del sistema como políticas de entrada y permisos para servicios entrantes, y permite administrar varios nodos de forma centralizada
- La instalación se realiza descargando paquetes deb/rpm e instalándolos con
aptodnf; luego se ejecutaopensnitch-uio se abre la GUI desde el menú de aplicaciones - Ofrece un espacio de discusión Show and tell para compartir casos en los que intercepta conexiones inesperadas, así como integración con SIEM para monitorear conexiones en entornos operativos
Qué hace OpenSnitch
- OpenSnitch es un firewall de aplicaciones para GNU/Linux
- Su función principal es filtrar de forma interactiva las conexiones salientes de las aplicaciones
- Admite el bloqueo de publicidad, rastreadores y dominios de malware en todo el sistema
Funciones de firewall y administración de nodos
- Desde la GUI se puede configurar el firewall del sistema
- Maneja configuraciones basadas en nftables
- Permite definir políticas de entrada y autorizar servicios entrantes, entre otras opciones
- Desde una GUI central se pueden administrar varios nodos
- Admite integración con SIEM
Descarga e instalación
- Los paquetes deb/rpm pueden descargarse desde GitHub Releases
- Instalación del paquete deb:
sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
- Instalación del paquete rpm:
sudo dnf install opensnitch*.rpm
- Después de instalar, ejecuta
opensnitch-uio inicia la GUI desde el menú de aplicaciones - Para información detallada de instalación, consulta la documentación
Casos de uso y participación
- Los ejemplos de OpenSnitch interceptando conexiones inesperadas están reunidos en la discusión Show and tell
- Si detectas una conexión inesperada, puedes enviarla como una nueva discusión
Información del proyecto
- OpenSnitch usa la licencia GPL3
- Se puede apoyar el proyecto desde la sección Sponsor this project, en la parte derecha del repositorio de GitHub
- El mantenedor actual puede verificarse en el historial de commits de la rama master
- La lista de contribuidores puede verse en el gráfico de contributors
- La traducción se realiza en Weblate
1 comentarios
Opiniones en Hacker News
Intenté usar bastante OpenSnitch como firewall interactivo, pero hay un problema que no sé siquiera si se puede resolver, y no es tanto culpa de OpenSnitch.
Por ejemplo, si ejecuto
curldesde la terminal, cada vez tengo que decidir si permitirlo o ponerlo permanentemente en la lista de permitidos.Pero si permites herramientas de uso general como
curlowget, el malware en una máquina comprometida también puede usarlas para salir a Internet sin alertas del firewall, así que dejas la puerta totalmente abierta.La tranquilidad de que te pregunte si permitir un nuevo acceso hace que la molestia inicial valga la pena, y cuando te acostumbras también es bastante fácil de administrar.
También uso mucho reglas con vencimiento. Por ejemplo, si confías en un instalador y quieres dejarlo actuar libremente por un rato, abres una regla para el ejecutable que vence en un futuro cercano. Las opciones son permanente, hasta el reinicio, los próximos 30 segundos, los próximos 5 minutos, etc.; incluso tareas con muchos endpoints se vuelven mucho más simples y no dejan agujeros permanentes.
curl/wgetpara el usuariodevy seguir detectándolo para el usuarionormal.El trabajo de desarrollo se ejecutaría con algo como
su -c curl … dev.Si un programa malicioso se está ejecutando en el espacio del usuario normal, el firewall de aplicaciones podría detectar adecuadamente el uso de
curlywget.Como es molesto ingresar la contraseña cada vez, también podrías configurar PAM con YubiKey o autenticación biométrica, y ese usuario debería no poder iniciar sesión ni tener contraseña.
curlowget.En móvil uso un firewall a nivel de aplicación, pero no pongo el nombre del programa en una lista de permitidos, sino que permito que un programa específico acceda a determinados dominios/direcciones IP.
Por experiencia, la forma más fácil de bloquear las comunicaciones externas de programas o malware es bloquear el acceso a DNS. Lo he hecho así durante décadas y todavía funciona perfectamente. El “99%” de los programas/malware que se comunican con el exterior dependen de DNS, no de IPs hardcodeadas.
Los raros programas/malware que no necesitan DNS también son fáciles de detectar, y en DNS solo permito dominios específicos. Hoy en día ni siquiera uso un archivo de zona local con las direcciones IP necesarias; un proxy de reenvío se encarga del mapeo dominio→IP. La lista de permitidos que lee el proxy es parecida a un archivo de zona, pero es un archivo de texto más simple.
curlsi el comando padre es un comando de confianza, por ejemplobash/zshpropiedad del usuario, y bloquearlo si no. Aunque sí parece bastante engorroso.Por ejemplo, si se ejecutó
curly al subir por la lista de procesos padre se encuentra un proceso/usr/bin/trusted, deberías poder declarar que esa invocación decurlse permita. Así, mientras el padre del script de bash sea/usr/bin/trusted, se podría permitir que ese script ejecutecurl.Esto fue, al final, lo que me llevó a pasarme a NixOS.
Antes, cuando usaba un firewall de aplicaciones, tenía mucha configuración; se rompía seguido cuando las actualizaciones cambiaban rutas, y al mudarme a una computadora nueva tenía que rehacerlo todo, con mucho churn y desperdicio.
Al integrarlo con el gestor de paquetes, esos problemas desaparecieron. Una vez hecha la configuración inicial de la lista de permitidos, solo hay que hacer un poco de trabajo al agregar un paquete nuevo a la configuración de nix.
Si da pereza agregar la lista de permitidos a la configuración de nix, puedes poner una lista de permitidos temporal que dure solo hasta el próximo reinicio. La curva de aprendizaje fue empinada y hubo mucho trabajo, pero ahora el mantenimiento es muy fácil.
Es bueno para detectar apps flojas que abren demasiadas conexiones. Thunderbird, hablo de ti.
Me gusta, pero también tiene pequeñas molestias. Las reglas temporales vencidas no se eliminan ni dejan de mostrarse en la interfaz, así que a veces hay que reiniciar la GUI para limpiarlas.
En Fedora, podría recomendar esto antes que ponerse a trastear con firewalld/firewall-config.
dnfcuando, en cada actualización, se pone a buscar por todo el continente?https://news.ycombinator.com/item?id=41124755
Podría simplemente permitirlo, pero no quiero.
Me gustaría tener algo así al correr APIs o servicios web en contenedores Docker.
containerA: permitir todo el tráfico salientecontainerB: bloquear el tráfico saliente salvo cuando responde a clientescontainerC: solo puede acceder aupdates.example.com¿Esto es simplemente iptables por contenedor? Supongo que se podría meter iptables en imágenes existentes, pero parece mucho trabajo. ¿O se manejaría con iptables en el host?
¿Hay algo así para teléfonos Android? Me interesan buenas recomendaciones.
https://netguard.me
Usé AFWall+ durante mucho tiempo; tiene un control limpio para permitir o bloquear Wi‑Fi, datos móviles y LAN por app. Como es un frontend de iptables/nftables, puedes personalizar las reglas todo lo que quieras: https://github.com/ukanth/afwall
Funciona desde Android 2+.
Sin root, solo quedan soluciones tipo VPN como Adguard.
Si necesitas estadísticas, también existe la versión Android de GlassWire. Solo probé la beta, así que no sé en qué estado está ahora, pero vale la pena revisarla.
"Rethink: DNS + Firewall + VPN"tiene funciones parecidas.Me cambié a eso desde NetGuard, que mencionaron arriba.
Estaría bueno que también hubiera paquetes para Arch y OpenSUSE.
opensnitch, y en AUR estáopensnitch-ebpf-module.¿Cómo se compara con algo como UFW? Me pregunto si el punto central es la UI para ver la actividad en curso.
Si una app cualquiera hace algo como una llamada de telemetría, puedes definir una whitelist/greylist con granularidad, por ejemplo permitir solo la conexión de este ejecutable a esta dirección, permitir siempre esta dirección, etc., y también elegir la duración: una sola vez, durante 15 segundos, hasta el reinicio, etc.
Una vez que superas la barrera inicial de poner en la lista de permitidos las apps que usas y en las que confías, está bastante bien, y muestra muy bien cosas que no sabías que estaban haciendo tus apps o juegos.
¿Habrá planes de portarlo a macOS? Usé Little Snitch por un tiempo, pero por razones no relacionadas con el pago prefiero algo open source.
Varias veces intenté usarlo de forma intermitente, pero tenía demasiados crashes aleatorios, así que era bastante difícil de usar.