Comment contrôler l'accès internet pour chaque programme?


60

Je voudrais utiliser un logiciel pour contrôler quel programme peut se connecter à Internet. Je sais que ce comportement est associé au mot "pare-feu", mais certains utilisateurs de Linux sont très mécontents si quelqu'un demande un pare-feu personnel. Je ne veux pas vous contrarier par la demande d'un tel programme.
Je ne veux pas "sécuriser les ports" ou d'autres objets qu'un pare-feu personnel promet sous Windows. J'ai examiné, iptablesmais cela ne correspond pas à mes exigences.

J'ai trouvé une excellente réponse ici ( "Comment bloquer l'accès à Internet pour les applications de vin" ) mais c'est très inconfortable de le configurer.

Existe-t-il un logiciel qui demande à chaque programme s'il peut accéder à Internet?


sur mac, il existe un logiciel appelé little snitch qui le fait. Je pense qu'il existe une version Windows également ...
Alvar

Réponses:


6

Il existe un script Perl sur le forum allemand Ubuntu ( traduit de Google en anglais ) qui semble le faire. Je n'ai jamais essayé et je n'ai pas regardé le script de plus près, mais peut-être que ça marche pour vous. La description est en allemand uniquement, vous aurez donc peut-être besoin d'un service de traduction (comme Google Translate; voir ci-dessus).


Je vais y jeter un coup d'oeil. C'est intéressant et peut être le bon outil. Malheureusement, il n'y a pas de gui, mais ça ne devrait pas m'arrêter :)
guerda

35

Si vous êtes toujours à la recherche de ce type d’application, je développe actuellement exactement cette application: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Mon application bloque toutes les applications inconnues (les nouvelles versions d'une application autorisée sont bloquées) et vous demande si vous autorisez ou refusez son trafic.

Regardez le site web ;-)

capture d'écran


Cool! J'ai aussi regardé ppa mais aucun paquet n’y existe malgré la création de l’application. Aussi, je me demande si cela pourrait afficher l'adresse IP résolue en un nom de site lisible? Et, je vais suivre les instructions de compilation, j'ai vu beaucoup d'astuces sur les paquets ubuntu dep, et j'utiliserai checkinstall pour créer ma copie locale des paquets .deb afin de gérer facilement les mises à jour (supprimer / installer). Peut-être que checkinstall pourrait être utilisé pour créer vos distributables aussi, je pense.
Aquarius Power

Vous pouvez ouvrir une demande de fonctionnalité sur Github ( github.com/Douane/Douane/issues ) :)
ZedTuX

2
euh, il semble exactement ce dont j'avais besoin !! Mais je ne trouve pas de paquet pour l'installer sur Ubuntu.
Azerafati

Toujours pas le paquet pour Ubuntu?
Anwar

1
Douaneapp.com est de retour! :)
ZedTuX

26

J'ai trouvé une solution pratique qui résout le problème. Vous créez un groupe qui n'est jamais autorisé à utiliser Internet et démarrez le programme en tant que membre de ce groupe.

  1. Créez un groupe no-internet. Ne pas rejoindre ce groupe

    sudo addgroup no-internet
    
  2. Ajouter une règle à iptables qui empêche tous les processus appartenant au groupe no-internetd'utiliser le réseau (à utiliser ip6tablespour empêcher également le trafic IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Execute sudo -g no-internet YOURCOMMANDau lieu de YOURCOMMAND.

Vous pouvez facilement écrire un script de wrapper utilisant sudo pour vous. Vous pouvez vous débarrasser de l'invite de mot de passe en ajoutant

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

ou quelque chose de similaire avec sudo visudo

Utilisez les règles de pare-feu iptables-saveet iptables-restorepour persister.


1
J'ai essayé votre guide, se sudo -g no-internet firefoxconnecte plus rapidement que celui par défaut. Ça ne marche pas
Kenn

1
@kenn Je peux seulement dire que cela fonctionne bien ici. Je suppose que vous faites quelque chose de mal lors de la création de la règle. Ne pas enregistrer la règle, ne pas rendre le script exécutable ou quelque chose du genre.
Tim

J'ai redémarré et appliqué à nouveau les règles ci-dessus sans
succès

1
a parfaitement fonctionné pour moi, même avec Firefox. Merci!
Kostanos

1
Cela ne semble pas fonctionner pour moi non plus, sous Ubuntu 19.04. J'ai dû installer iptables-persistent afin de permettre aux modifications d'être enregistrées entre les redémarrages. (Vous pouvez donc ajouter cela à la solution ci-dessus). Cependant, sudo -g no-internet firefox n’empêche pas Firefox d’accéder à Internet. Conceptuellement, cette solution semble devoir fonctionner. Y a-t-il quelque chose de fondamental qui est négligé? Par exemple, devons-nous configurer à la fois ipv4 et ipv6 pour que cela fonctionne?
PJ Singh

5

Il existe déjà un pare-feu dans Ubuntu ufw, mais celui-ci est désactivé par défaut. Vous pouvez l'activer et l'utiliser avec la ligne de commande ou son interface, gufw , pouvant être installée directement à partir du Centre de logiciel Ubuntu.

Si vous devez bloquer l'accès Internet à une application spécifique, vous pouvez essayer LeopardFlower , qui est toujours en version bêta et qui n'est pas disponible dans le Centre du logiciel Ubuntu:


4

L'exécution d'un programme sous un autre utilisateur utilisera les fichiers de configuration pour cet utilisateur et non le vôtre.

Voici une solution qui ne nécessite pas de modification des règles de pare-feu et qui s'exécute sous le même utilisateur (via sudo) avec un environnement modifié, où se trouve votre utilisateur my_useret l'application que vous souhaitez exécuter my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Pour plus de détails, voir man unshareet cette réponse .

Pare-feu de l'interface graphique Linux

Si vous recherchez un pare-feu pour interface graphique, les résultats obtenus avec OpenSnitch ne sont pas encore disponibles. Je n’appellerais pas cela au niveau de la production, mais suivre les étapes de construction de la page github a fonctionné pour moi.


3

@ psusi: J'espère vraiment que les gens ne colporteront pas de mauvaises informations et qu'elles ne seront pas utiles. IPTables permet de le faire, alors je le considère à peine comme "imprudent". Dire simplement "NON" sans comprendre un cas d'utilisation est un peu étroit d'esprit. http://www.debian-administration.org/article/120/Application_level_firewalling

EDIT bodhi.zazen

REMARQUE - CETTE OPTION A ÉTÉ RETIRÉE DE IPTABLES EN 2005, 8 ANS AVANT QUE CETTE RÉPONSE SOIT PUBLIÉE.

VOIR - http://www.spinics.net/lists/netfilter/msg49716.html

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Auteur: Christoph Hellwig Date: dim 14 août 17:33:59 2005 -0700

[NETFILTER]: Supprimer l'abus de tasklist_lock dans ipt {, 6} propriétaire

Extrayez les correspondances cmd / sid / pid car elles ne sont plus corrigées et empêchent de verrouiller les modifications apportées à tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
Pour ceux qui envisagent de signaler ceci: Cela ne devrait pas être un commentaire, cela répond à la question qui a été posée . @ user141987 Je recommande toutefois de développer cela pour fournir plus d'informations sur la manière de configurer iptablespour implémenter des restrictions par application. Je vous recommande d'inclure les informations importantes dans votre réponse (tout en fournissant le lien, pour référence).
Eliah Kagan

2
iptables ne filtre PAS par application.
Panthère

Cet article semble être de la désinformation puisqu'il n'y a pas une telle option. La raison pour laquelle les demandes de création d’une telle option ont été rejetées dans le passé est qu’elle serait par nature peu fiable; une application peut simplement changer de nom.
Psusi

3
@ psusi Voulez-vous dire que "Si votre noyau a été compilé avec CONFIG_IP_NF_MATCH_OWNER, vous pouvez configurer votre pare-feu iptables pour autoriser ou rejeter les paquets sur une base par commande" est incorrect? Ou simplement que la plupart des noyaux n'incluent pas l'option? Si cela est incorrect, existe-t-il des sources d'informations qui le démystifient? (Notez également que l'objectif principal des restrictions de pare-feu par application n'est pas d'essayer de rendre parfaitement sûre l'exécution d'applications non fiables. L'objectif est principalement de donner à l'utilisateur une mesure de contrôle allant au-delà des options de configuration intégrées des applications. )
Eliah Kagan

Cette option a été retirée du noyau en 2005, 8 ans avant cette réponse - spinics.net/lists/netfilter/msg49716.html . Malgré toute affirmation contraire, vous ne pouvez PAS filtrer les applications avec iptables.
Panthère

3

FireJail est une autre option . Il exécute l'application dans le bac à sable où vous pouvez contrôler si l'application peut voir le réseau:

firejail --net=none firefox

Cette commande démarrera le navigateur Firefox sans accès à Internet. Notez que la distribution firejail dans le dépôt Ubuntu est obsolète . Il vaut mieux télécharger sa dernière version LTS à partir de la page d’accueil de firejail.


2

J'ai trouvé la solution publiée ici une bonne solution . Cela implique la création d'un groupe d'utilisateurs pour lequel l'accès à Internet est autorisé et la configuration de règles de pare-feu pour autoriser l'accès uniquement à ce groupe. Le seul moyen pour une application d'accéder à Internet consiste à utiliser un membre de ce groupe. Vous pouvez exécuter des programmes sous ce groupe en ouvrant un shell avec sudo -g internet -s.

Pour récapituler ce qui est dans le post que j'ai lié ci-dessus:

  1. Créez le groupe "Internet" en tapant ce qui suit dans un shell: sudo groupadd internet

  2. Assurez-vous que l'utilisateur qui exécutera le script ci-dessous est ajouté au sudogroupe dans /etc/group. Si vous modifiez ce fichier, vous devrez vous déconnecter et vous reconnecter avant que le script ci-dessous ne fonctionne.

  3. Créez un script contenant les éléments suivants et exécutez-le:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. En exécutant le script ci-dessus, vous aurez un shell dans lequel vous pourrez exécuter des applications avec un accès Internet.

Notez que ce script ne fait rien pour enregistrer et restaurer vos règles de pare-feu. Vous voudrez peut-être modifier le script pour utiliser les commandes iptables-saveet iptables-restoreshell.


1

Pour le meilleur ou pour le pire, Linux utilise une approche différente. Il n’existe pas d’interface graphique simple offrant cette fonctionnalité. Il existe de nombreuses discussions sur ce sujet sur Internet et vous pouvez trouver des discussions intéressantes si vous recherchez Google. Bien que le débat soit intéressant, à ce jour, aucun groupe de programmeurs n’a voulu écrire et maintenir cette fonctionnalité.

Les outils offrant cette fonctionnalité sous Linux sont Apparmor, Selinux et Tomoyo.

Aucun de ces outils n'est trop facile à apprendre et tous présentent des avantages et des inconvénients. Personnellement, je préfère SELinux, bien que SELinux ait une courbe d'apprentissage plus abrupte.

Voir:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Il y avait (est) une application qui a déjà été référencée, leopardflower. Je ne suis pas sûr du statut / maintien.




0

Non, ce n'est pas possible. Cela ne fait pas non plus partie de la définition traditionnelle d'un pare-feu. C'est quelque chose que Microsoft a récemment mis au point pour tenter de comprendre leurs problèmes de sécurité fondamentalement brisés. Il est considéré imprudent et inutilisable dans la communauté Linux car un programme non autorisé peut simplement en exécuter un autre et obtenir ainsi un accès.

Si vous n'aimez pas ce que fait un programme sur le réseau lorsque vous l'exécutez, n'exécutez pas ce programme.


7
Le pare-feu de Microsoft n'a pas été le premier pare-feu majeur à offrir cette fonctionnalité. Ce n'était même pas le premier pare-feu Windows à l'offrir. BlackIce Defender, ZoneAlarm et divers autres pare-feu logiciels pour Windows ont précédé de plusieurs années l’introduction du pare-feu de connexion Internet Windows. De plus, il n’existe pas de tel consensus dans la communauté Linux. Nous utilisons souvent AppArmor (ou SELinux) pour contraindre le comportement des applications (et je me demande si AppArmor pourrait être adapté à cette fin ...). Il n'y a aucune raison que ce soit "faux" de vouloir contrôler quelles applications peuvent accéder à Internet.
Eliah Kagan

Et, comme plusieurs autres réponses peuvent en témoigner, les restrictions de pare-feu par application sont tout à fait possibles ; cette fonctionnalité est intégrée à iptables / netfilter!
Eliah Kagan

Non, ni netfilter ni iptables ne peuvent filtrer par application. Ils peuvent filtrer par utilisateur et par port, mais pas par application.
Panthère

"Peut simplement courir un autre" ???? Alors, évidemment, le créateur d'un tel programme qui ne bloque pas les processus enfants du programme cible est extrêmement imparfait.
trusktr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.