web-dev-qa-db-fra.com

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

Je voudrais utiliser un logiciel pour contrôler quel programme peut se connecter à Internet. Je sais que ce comportement est associé au "pare-feu" de Word, 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 souhaite pas "sécuriser les ports" ni les autres éléments promis par un pare-feu personnel à Windows. J'ai examiné iptables mais cela ne correspond pas à mes besoins.

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

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

57
guerda

Il y a un script Perl dans 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).

6
Florian Diesch

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 ;-)

screen shot

33
ZedTuX

I 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. Ajoutez une règle à iptables qui empêche tous les processus appartenant au groupe no-internet d'utiliser le réseau (utilisez ip6tables pour empêcher également le trafic IPv6)

    Sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Exécutez Sudo -g no-internet YOURCOMMAND au lieu de YOURCOMMANDname__.

Vous pouvez facilement écrire un script d’emballage qui utilise 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 codes iptables-save et iptables-restore pour conserver les règles de pare-feu.

26
Tim

Il existe déjà un pare-feu dans Ubuntu, ufw , mais il est désactivé par défaut. Vous pouvez l'activer et l'utiliser avec la ligne de commande ou son interface, gufw , installable 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:

5
heiko81

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ù votre utilisateur est my_user et l'application que vous souhaitez exécuter est my_app:

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

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

Pare-feu de l'interface graphique Linux

Si vous recherchez un pare-feu graphique avec lequel j'ai obtenu de bons résultats avec OpenSnitch - il n'est pas encore dans les dépôts ubuntu et je ne l'appellerais pas au niveau de la production, mais en suivant les étapes de construction du - github page a fonctionné pour moi.

4
ccpizza

@ psusi: Je souhaite vraiment que les gens ne colportent pas de mauvaises informations et qu'elles ne soient 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 la correspondance cmd/sid/pid puisque son infixable est cassé et empêche 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>
3
user141987

J'ai trouvé la solution affichée ici pour être une bonne solution. Cela implique la création d'un groupe d'utilisateurs pour lequel l'accès à Internet est autorisé , ainsi que 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 de 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 groupe Sudo 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 pouvez 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 souhaiterez peut-être modifier le script pour utiliser les commandes Shell iptables-save et iptables-restore.

2
Mark

Une autre option est firejail. 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 référentiel Ubuntu est obsolète - il vaut mieux télécharger sa dernière version LTS à partir de la page d’accueil de firejail.

2
Dimitar II

Essayez fleur de léopard . Il a une interface graphique et des restrictions par application.

1
brand

C’était dans iptables jusqu’à la version 2.6.24 du noyau Si vous utilisez une machine 2.x - 2.6.24 et que votre noyau s’y est conformé, vous pouvez le faire. pour une raison quelconque, ils l'ont sorti, donc non ce n'est pas Microsoft. http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html

1
not really

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.

1
Panther

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 disséminer 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 un accès de cette manière.

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.

0
psusi