Forum Linux.général Cas d'utilisation : N'autoriser que firefox à sortir sur les ports HTTP(S)

Posté par (page perso) . Licence CC by-sa
4
21
juil.
2015

Bonjour forum,

Denis Szalkowski pense qu'on ne peut pas n'autoriser que firefox à sortir sur les ports 80 et 443 .

Après recherche rapide, j'ai l'impression que la meilleure solution serait de combiner une isolation en cgroup (grâce à systemd ?) et un filtrage meta cgroup grâce à nftables. Je n'ai jamais fait cela et n'ai pas le temps aujourd'hui.

Points bonus : Je soupçonne qu'une notification graphique XDG correspondant au rejet d'une connexion sortante avec des informations concernant l'application concernée ou le cgroup serait bienvenue —voire un moyen (toujours graphique ?) de rejeter définitivement (ou accepter, mais ça nécessite probablement de créer un cgroup ad-hoc, donc pas forcément facile ou possible).

Est-ce possible, tout ça ?

  • # AppArmor

    Posté par . Évalué à 1.

    Jamais testé, mais je pense qu'avec AppArmor on doit pouvoir arriver à faire ça :
    http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Network_rules

    La facilité d'implémentation doit dépendre de la ditribution.

  • # NuFW

    Posté par . Évalué à 2.

    Ca fait un petit moment que je ne le suis plus mais il y avait un Firewall sous GPL qui s'appelait NuFW et qui permettait de créer des règles du type toto peut sortir sur le port 80 avec Firefox et titi avec ie …

    L'éditeur a fermé en 2011 et il a changé de nom, il s’appelle fwi-filterd.

    • [^] # Re: NuFW

      Posté par (page perso) . Évalué à 2.

      Il s'agit en fait de Ufwi. Le projet semble moribond comme ceux de Fireflier, TuxGuardian et de Program Guard, qui s'appuient sur NFQUEUE. Je me suis servi de Fireflier. Ça marchait bien ! Aujourd'hui, ces logiciels sont difficilement compilables. Nufw ou Ufwi n'existe plus dans les dépôts de la Fedora.

      J'ai vu un autre projet, Douane, qui lui non plus, en semble pas très vivace.

  • # Utilisateur limité.

    Posté par (page perso) . Évalué à 1.

    Question de béotien :
    Ne peut-on limiter les droits d'accès réseau au niveau du compte utilisateur ? Il me semble que c'est ce que fait le Tor Bundle en créant un utilisateur 'tor'.

    (Et une appli dockerisée ?)

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

  • # owner

    Posté par (page perso) . Évalué à 3.

    Je faisais un truc comme cela dans le temps via le module owner et cmd-owner afin d'interdire au programme acroread d'aller sur le net. Mais malheureusement, cela a été retiré du noyau. C'est pas fiable à 100% car on renommait son processus et il passait la barrière mais c'était simple et parfois, les choses simples marchent dans pas mal de cas…

    J'ai trouvé un autre piste via http://stackoverflow.com/questions/4314163/create-iptables-rule-per-process-service mais je n'ai pas testé. Tu crée un groupe grp-firefox et tu rend firefox sgid sur ce groupe. Puis tu appliques une règle via

    iptables -A OUTPUT -dport 80 -m owner --gid-owner grp-firefox -j ACCEPT
    iptables -A OUTPUT -dport 80 -j REJECT
    C'est pas bien clean clean car on touche au bit sgid… mais cela pourrait marcher !

    • [^] # Re: owner

      Posté par (page perso) . Évalué à 1.

      On peut le faire aussi avec l'uid. Mais c'est d'un compliqué à gérer… Mais je me demande si ça s'applique quand on est root ???

    • [^] # Re: owner

      Posté par (page perso) . Évalué à 1.

      Sous root/MATE/Fedora 22 :

      useradd firefox
      chgrp firefox /usr/lib64/firefox/firefox
      chmod g+s /usr/lib64/firefox/firefox
      firefox &

      Et là : "You must create a helper progam instead"

      -> http://www.gtk.org/setuid.html

      ???

  • # avec un proxy ?

    Posté par (page perso) . Évalué à 1.

    On pourrait aussi le faire avec un proxy :
    - mettre en place un proxy http/https sur un port non standard (squid ?)
    - bloquer les sorties sur les ports http/https
    - ne renseigner le proxy que dans firefox

    • [^] # Re: avec un proxy ?

      Posté par (page perso) . Évalué à 3.

      Certains logiciels vont aller fouiller les paramètres proxy des navigateurs, donc ça ne fonctionnera pas pour ces logiciels.

      • [^] # Re: avec un proxy ?

        Posté par (page perso) . Évalué à 1.

        J'ai pris, là, l'exemple de Firefox. Mais élargissons. J'ai un client Torrent du type transmission auquel je veux associer le port UDP 60000 en entrant. Je fais comment ?

        Le proxy est un filtrage "applicatif". Ce dont nous avons besoin, c'est ce qui existait avec Fireflier ou bien une console du type wf.msc comme elle existe sous Windows.

  • # Voyager dans le multispace (ou multivers, ce genre de trucs)

    Posté par . Évalué à 2.

    Je pense qu'isoler les programmes dans un espace réseau différent, avec des règles de réseaux différentes (met à la poubelle tout ce qui n'est pas sur le port 443) marchera bien.

    Le manuel sera plus efficace que moi pour introduire la solution :

    http://man7.org/linux/man-pages/man8/ip-netns.8.html

  • # Bien sur!

    Posté par (page perso) . Évalué à 2.

    Salut Feth!

    Je viens de faire un post a ce propos sur mon blog:
    http://florent.daigniere.com/posts/2015/07/application-firewalling-with-netfilter/

    Les firewalls applicatifs c'est une tres mauvaise idee. Ca sert pas a grand chose… mais oui c'est possible.

    • [^] # Re: Bien sur!

      Posté par (page perso) . Évalué à 1.

      Contrôler ce qui sort d'une machine, c'est inutile ? Ah bon. En matière de sécurité, au niveau d'une station de travail, c'est tout juste le b.a.-ba.

      Blague à part. C'est quoi au juste nextgens, users au niveau de la commande cgcreate dans ton "tuto". As-tu testé ?

  • # SYNTHESE

    Posté par (page perso) . Évalué à -1. Dernière modification le 26/07/15 à 08:06.

    SELinux ne prend en charge que les paquets en mode SECMARK dans Iptables.

    AppArmor ne prend pas en charge les ports et le protocoles.
    Le commutateur—cgroup n'est pas pris en charge dans
    Iptables. Sinon, c'était une excellent idée !!!

    Ip-netns n'est pas fait pour ça.

    Fireflier, Program Guard, TuxGuardian, Ufwi, Douane sont dans les choux.

    Les commutateurs --gid-owner et --uid-owner dans Iptables ne sont pas possibles du fait que GTK, KDE, etc n'autorisent pas l'exécution en mode sgid ou suid.

    Autrement dit, il n'y a pas de solution à ce jour pour filtrer les paquets associés à un process. Et c'est tout de même un comble quand Windows et Mac OS X proposent tous deux cette fonctionnalité. Faut-il en déduire que Linux n'est pas fait pour la station de travail ? Pour ma part, je le pense.

Suivre le flux des commentaires

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