OpenSnitch, pare-feu applicatif interactif pour GNU/Linux
(github.com/evilsocket)- OpenSnitch est un pare-feu applicatif pour GNU/Linux, axé sur le filtrage interactif des connexions sortantes des applications
- Il peut bloquer à l’échelle du système les domaines de publicité, de suivi et de malware, et permet aussi de configurer depuis l’interface graphique un pare-feu système basé sur nftables
- L’interface graphique prend en charge la configuration de règles système comme la définition des politiques d’entrée ou l’autorisation de services entrants, et permet de gérer plusieurs nœuds de façon centralisée
- L’installation consiste à télécharger les paquets deb/rpm puis à les installer avec
aptoudnf, avant d’exécuteropensnitch-uiou d’ouvrir l’interface graphique depuis le menu des applications - Il propose un espace de discussion Show and tell pour partager des cas où des connexions inattendues ont été interceptées, ainsi qu’une intégration SIEM utile pour surveiller les connexions en environnement d’exploitation
Ce que fait OpenSnitch
- OpenSnitch est un pare-feu applicatif pour GNU/Linux
- Sa fonction principale est de filtrer de manière interactive les connexions sortantes des applications
- Il permet à l’échelle du système le blocage des domaines de publicité, de suivi et de malware
Fonctions de pare-feu et gestion des nœuds
- L’interface graphique permet de configurer les paramètres du pare-feu système
- configuration basée sur nftables
- possibilité de définir les politiques d’entrée, d’autoriser des services entrants, etc.
- Il est possible de gérer plusieurs nœuds depuis une interface graphique centrale
- Il prend en charge l’intégration SIEM
Téléchargement et installation
- Les paquets deb/rpm peuvent être téléchargés depuis GitHub Releases
- Installation du paquet deb :
sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
- Installation du paquet rpm :
sudo dnf install opensnitch*.rpm
- Après l’installation, exécuter
opensnitch-uiou lancer l’interface graphique depuis le menu des applications - Pour plus d’informations sur l’installation, consulter la documentation
Cas d’usage et participation
- Des exemples où OpenSnitch intercepte des connexions inattendues sont rassemblés dans la discussion Show and tell
- Si vous découvrez une connexion inattendue, vous pouvez la soumettre dans une nouvelle discussion
Informations sur le projet
- OpenSnitch utilise la licence GPL3
- Le soutien financier est possible via la section Sponsor this project à droite du dépôt GitHub
- Les mainteneurs actuels peuvent être consultés dans l’historique des commits de la branche master
- La liste des contributeurs est visible dans le graphe des contributeurs
- La traduction est gérée sur Weblate
1 commentaires
Avis sur Hacker News
J’ai souvent essayé d’utiliser OpenSnitch comme pare-feu interactif, mais il y a un problème dont je ne sais même pas s’il est soluble, sans que ce soit vraiment la faute d’OpenSnitch
Par exemple, si l’on exécute
curldans un terminal, il faut décider à chaque fois de l’autoriser ou l’ajouter définitivement à la liste blancheMais si l’on autorise des outils génériques comme
curlouwget, un malware présent sur une machine compromise peut aussi les utiliser pour accéder à Internet sans alerte du pare-feu, ce qui ouvre grand la porteLe fait d’être rassuré parce qu’un nouvel accès déclenche une demande d’autorisation vaut bien la gêne initiale, et une fois l’habitude prise, la gestion devient assez simple
J’utilise aussi souvent les règles avec expiration. Par exemple, si je fais confiance à un installateur et que je veux le laisser agir librement pendant un court moment, j’ouvre pour l’exécutable une règle qui expire dans un avenir proche. Les options sont permanent, jusqu’au redémarrage, les 30 prochaines secondes, les 5 prochaines minutes, etc. Cela simplifie beaucoup les tâches qui touchent de nombreux endpoints, sans laisser de trou permanent
curl/wgetpour l’utilisateurdev, tout en continuant à le détecter pour l’utilisateurnormalLes tâches de développement s’exécuteraient par exemple avec
su -c curl … devSi un programme malveillant tourne dans l’espace utilisateur normal, le pare-feu applicatif devrait correctement détecter son usage de
curletwgetComme saisir le mot de passe à chaque fois est pénible, on peut aussi configurer PAM avec une YubiKey ou une authentification biométrique, et cet utilisateur ne devrait pas pouvoir se connecter ni avoir de mot de passe
curlouwgetSur mobile, j’utilise un pare-feu au niveau applicatif, mais je ne mets pas les noms de programmes en liste blanche : j’autorise un programme précis à accéder à un domaine/adresse IP précis
D’après mon expérience, le moyen le plus simple d’empêcher les communications externes d’un programme ou d’un malware est de bloquer l’accès DNS. Je fais ça depuis des décennies et ça fonctionne toujours parfaitement. « 99 % » des programmes/malwares qui communiquent vers l’extérieur s’appuient sur le DNS plutôt que sur des IP codées en dur
Les rares programmes/malwares qui n’ont pas besoin de DNS sont eux aussi faciles à détecter, et côté DNS je n’autorise que certains domaines. Aujourd’hui, je n’utilise même plus de fichier de zone local contenant les adresses IP nécessaires : un proxy de transfert gère la correspondance domaine→IP. La liste blanche lue par le proxy ressemble à un fichier de zone, mais c’est un fichier texte plus simple
curlsi la commande parente est une commande de confiance, par exemple unbash/zshpossédé par l’utilisateur, et le bloquer sinon. Cela dit, ça a l’air assez fastidieuxPar exemple, si
curlest lancé et qu’en remontant la liste des parents on trouve un processus/usr/bin/trusted, on devrait pouvoir déclarer que cet appel àcurlest autorisé. Ainsi, tant que le parent du script bash est/usr/bin/trusted, l’exécution decurldepuis ce script peut être autoriséeC’est finalement ce qui m’a fait passer à NixOS
Quand j’utilisais auparavant un pare-feu applicatif, il fallait beaucoup de configuration, les mises à jour cassaient souvent les règles en changeant les chemins, et à chaque nouveau PC il fallait tout refaire, ce qui entraînait beaucoup de churn et de gaspillage
L’intégration avec le gestionnaire de paquets a supprimé ces problèmes. Une fois la configuration initiale de la liste blanche terminée, il suffit d’un peu de travail quand on ajoute un nouveau paquet à la configuration nix
Si ajouter la liste blanche à la configuration nix est trop pénible, on peut mettre une autorisation temporaire qui ne dure que jusqu’au prochain redémarrage. La courbe d’apprentissage a été raide et il y a eu beaucoup de travail, mais maintenant la maintenance est très simple
C’est pratique pour repérer les applications bâclées qui créent un nombre excessif de connexions. Thunderbird, c’est de toi que je parle
J’aime bien, mais il y a aussi quelques petits désagréments. Les règles temporaires expirées ne sont pas supprimées ou affichées comme telles dans l’interface, donc il faut parfois redémarrer le GUI pour les faire disparaître
Sur Fedora, je peux recommander ça plutôt que de bricoler avec firewalld/firewall-config
dnfaille chercher partout sur plusieurs continents à chaque mise à jour ?https://news.ycombinator.com/item?id=41124755
On pourrait simplement l’autoriser, mais je n’en ai pas envie
J’aimerais avoir ce genre de fonctionnalité quand je fais tourner des API ou des services web dans des conteneurs Docker
containerA: autoriser tout le trafic sortantcontainerB: bloquer le trafic sortant, sauf lorsqu’il répond à un clientcontainerC: accès uniquement àupdates.example.comEst-ce simplement des iptables par conteneur ? On peut sans doute greffer iptables dans des images existantes, mais ça a l’air de représenter beaucoup de travail. Ou bien est-ce quelque chose qu’on gère avec iptables côté hôte ?
Est-ce qu’il existe quelque chose comme ça pour les téléphones Android ? Je serais curieux d’avoir de bonnes recommandations
https://netguard.me
J’ai longtemps utilisé AFWall+ ; le contrôle par application pour autoriser ou bloquer le Wi-Fi, le cellulaire et le LAN est propre. Comme c’est un frontend iptables/nftables, on peut personnaliser les règles autant qu’on veut : https://github.com/ukanth/afwall
Il fonctionne depuis Android 2+
Sans root, il ne reste que les solutions de type VPN comme Adguard
Si vous avez besoin de statistiques, il existe aussi une version Android de GlassWire. Je n’ai utilisé que la bêta, donc je ne sais pas où ça en est aujourd’hui, mais ça vaut le coup de vérifier
"Rethink: DNS + Firewall + VPN"propose des fonctionnalités similairesJe suis passé de NetGuard, mentionné plus haut, à celui-ci
Ce serait bien d’avoir aussi des paquets pour Arch et OpenSUSE
opensnitchdans le dépôt extra d’Arch, etopensnitch-ebpf-moduledans l’AURComment cela se compare-t-il à quelque chose comme UFW ? Je me demande si l’essentiel est l’interface qui montre l’activité en cours
Si une application quelconque fait un appel de télémétrie, par exemple, on peut définir finement une liste blanche/grise : autoriser seulement la connexion de cet exécutable vers cette adresse, toujours autoriser cette adresse, etc., avec aussi des durées comme une seule fois, pendant 15 secondes, jusqu’au redémarrage
Une fois passée la barrière initiale qui consiste à mettre en liste blanche les applications que l’on utilise et auxquelles on fait confiance, c’est plutôt bien, et cela montre très bien des choses que l’on ignorait sur ce que font les apps ou les jeux
Y a-t-il un projet de portage vers macOS ? J’ai utilisé Little Snitch pendant un temps, mais je préfère l’open source pour des raisons qui n’ont rien à voir avec le paiement
J’ai essayé de l’utiliser plusieurs fois par intermittence, mais il y avait tellement de plantages aléatoires que c’était assez difficile à utiliser