Comment bloquer l'accès Internet à certains programmes sous Linux

20

Récemment, j'ai rencontré un problème de limitation de l'accès Internet à des programmes spécifiques. Quelqu'un pourrait-il recommander une bonne façon de procéder sans utiliser de logiciel particulier?

Ilia Rostovtsev
la source

Réponses:

31

La solution pour moi s'est avérée être simple.

  1. Créer, valider un nouveau groupe ; ajoutez les utilisateurs requis à ce groupe:
    • Créer: groupadd no-internet
    • Valider: grep no-internet /etc/group
    • Ajouter un utilisateur: useradd -g no-internet username

      Remarque: Si vous modifiez un utilisateur déjà existant, vous devez exécuter: usermod -a -G no-internet userName vérifiez avec:sudo groups userName

  2. Créez un script dans votre chemin et rendez-le exécutable:
    • Créer: nano /home/username/.local/bin/no-internet
    • Exécutable: chmod 755 /home/username/.local/bin/no-internet
    • Contenu: #!/bin/bash
                    sg no-internet "$@"

  3. Ajouter une règle iptables pour abandonner l'activité réseau pour le groupe sans Internet :


   4. Vérifiez-le, par exemple sur Firefox en exécutant:

  • no-internet "firefox"

Dans le cas où vous voudriez faire une exception et autoriser un programme à accéder au réseau local :

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

REMARQUE: En cas d'apparition, les règles seront maintenues. Par exemple, si vous exécutez un programme sans règle sans Internet et que ce programme ouvrira la fenêtre du navigateur, les règles seront toujours appliquées.

Ilia Rostovtsev
la source
2
Quelques notes Ilia: Annonce 1: - pour modifier un utilisateur existant: usermod -a -G nom_groupe nom_utilisateur - vérifier avec: sudo groups nom_utilisateur Annonce 3: - J'ai déjà beaucoup de règles dans iptables, La position de la nouvelle règle est cruciale . devrait être la première règle de la chaîne OUTPUT. Par conséquent, j'utilise insert: iptables -I OUTPUT 1 -m owner --gid-owner no-internet -j DROP Pour autoriser l'accès au LAN: assurez-vous que les règles ACCEPT sont supérieures à la règle DENY. Fonctionne comme un charme. Utilisez-le par exemple sur Wifiguard. Prog vérifie wlan pour les périphériques inconnus, mais "téléphones à la maison" à chaque démarrage.
Le script ne passera que la commande. Si vous essayez de lancer un programme avec des paramètres, vous devez utiliser "$ @" au lieu de "$ 1". Pour une raison quelconque, j'ai dû le stocker temporairement dans une variable pour que bash le traite correctement: cmd = "$ @"; sg no-internet "$ {cmd}"
2015
utilisez "nointernet" au lieu de "no-internet". Pour une raison quelconque, Ubuntu 14.04 ne peut pas gérer le tiret lorsque vous essayez d'utiliser sg ou chgrp (il vous demande un mot de passe, puis échoue).
1
unshare -n YourAppToBlock> utilisez "nointernet" au lieu de "no-internet". peut-être, «pas \\ - Internet»?
SarK0Y
Je l'ai essayé comme décrit mais pour moi, après m'avoir ajouté à "no-internet" et défini les ip-tables, je ne peux plus me connecter à Internet (avec et sans le script bash no-internet).
Viatorus