Forum Linux.général Comment interdire par défaut, l'accès aux réseaux pour toutes les applications ?

Posté par  . Licence CC By‑SA.
3
4
oct.
2019

Bonjour,
Tout est dans le titre.
J'aimerais que toutes applications se voient—par défaut—interdites d'accès à toutes les interfaces réseaux.
Un fichier de configuration permettrait de remédier à cela :

ALL_INTERFACES=eno1 enp3s0

# Ping peut accéder aux 2 interfaces
Ping                /bin/ping                                 $ALL_INTERFACES

# Eclipse peux accéder qu'à une seule interace
Eclipse             /opt/eclipse/java-2019-03/eclipse/eclipse enp3s0

# Python3 (lancé par Eclipse) : idem
Eclipse/Python3     /usr/bin/python3                          IDEM

# Tous les processus lancés depuis Eclipse/Python3 : full access
Eclipse/Python3/ALL ALL                                       $ALL_INTERFACES

Alors j'ai vu que la commande 'ip' permettait de faire ça en utilisant les espaces de nom réseau. L'article ici https://lord.re/posts/137-linux-nonet-app/ explique comment interdire l'accès au réseau à une application. C'est un bon début.
Mais il reste beaucoup à faire…

Pouvez-vous m'aider ?
Merci.

  • # si tu veux couper l'accès réseaux pour TOUTES les applications

    Posté par  . Évalué à 0.

    ip link set eno1 down
    ip link set enp3s0 down

    et hop, plus de connexion
    bon tu peux aussi juste débrancher le câble en fait

  • # MAC

    Posté par  . Évalué à 4.

    Tu veux faire du contrôle d'accès obligatoire on dirait.
    Regarde du côté de selinux.

    • [^] # Re: MAC

      Posté par  . Évalué à 2.

      Je ne connais pas SELinux. Un peu plus AppArmor… Dans mon exemple je parle d'Eclipse, application pour laquelle je voulais interdire tout accès au net. J'ai dû écrire un profil AppArmor pour cela… Pour moi, c'est vraiment trop compliqué. Alors que le besoin est simple !
      Maintenant, pour le cas d'Eclipse, je ne passe plus par AA. Mais bien par la commande "ip netns exec". Je pense que la solution passe par cette commande. Je creuse…

      https://manpages.debian.org/unstable/iproute2/ip-netns.8.en.html

      • [^] # Re: MAC

        Posté par  (site Web personnel) . Évalué à 4.

        Tu peux aussi regarder du côté de Firejail, plutôt une app de sandboxing mais tu peux interdire la connexion.

        « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

  • # Idée de daemon

    Posté par  . Évalué à 3. Dernière modification le 04/10/19 à 18:44.

    Voici ce à quoi j'ai pensé. Proposez-moi mieux, plus simple, de déjà existant… Partagez vos idées !

    Au lancement du service (qu'il nous faut écrire ;) :
    - changer netns de tous les processus ayant un exe dans leur proc pour NONET (aucune interface déclarée)
    - création de tous les netns nécessaires pour la configuration
    - appliquer la configuration avec un processus de surveillance :

    Fichier de configuration :

    # création des alias interface
    alias <alias if name> <interface>
    
    # affection des ns aux groupes d'applications
    grp [<parent grp name>:[<parent grp name>:[..]]]<grp name> <exe path> \
      [+<checker function> [+<checker function> [..]]] \
      [<alias if name> [<alias if name> [..]]]|IDEM \
      [LOCKDOWN]

    Exemple :

    alias local enp3s0
    alias net   eno1
    
    grp Ping              /bin/ping                                                    local net
    grp Eclipse           /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java +checkEclipse local
    grp Eclipse:Python3   /usr/bin/python3                                             local net
    grp Eclipse:Python3:* *                                                            local

    Le processus de surveillance réalise les opérations suivantes (ttes les n secondes) :

    • liste l'ensemble des processus en cours : si le processus considéré est déjà enregistré alors ne fait rien. sinon enregistre le processus :
      • recherche dans /proc/<pid>/exe et s'il le trouve récupère le chemin pointé (ex : /usr/bin/python3)
      • recherche dans les chemins en conf une correspondance non bloquée (bloquée = LOCKDOWN) et validée (tous les routines de vérification sont satisfaites comme +checkEclipse dans l'exemple) (ex : -> Eclipse:Python3)
        • la chaine des parents doit être reconstruite (ex : le processus Python possède-t-il comme parent Eclipse ? ie le PPID du processus Python appartient-il au groupe Eclipse ?) si non, alors on ne fait rien de plus si oui, alors on poursuit ainsi de suite jusqu'au premier parent. Si c'est le dernier parent qui a été considéré alors : on déplace le processus Python dans le netns correspondant.

    Si parmi la liste des processus enregistrés certains n'existent plus, alors ils sont retirés de la liste.

  • # en plus interactif

    Posté par  . Évalué à 6.

    En plus interactif j'irai plutôt chercher du côté de douane ou opensnitch

  • # Des choses existent déjà !

    Posté par  . Évalué à 2.

    Merci à tous pour vos liens : firejail, douane et OpenSnitch.
    Il y a sans doute de bonnes choses à (ap)prendre.
    J’essaierai de vous faire un retour.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.