Puis-je limiter un utilisateur (et leurs applications) à une seule interface réseau?

15

J'ai en fait deux scénarios pour appliquer cela:

  1. Multiseat Desktop: deux connexions réseau avec passerelles Internet et deux comptes effectuant des tâches gourmandes en bande passante sur chacune. Je veux les diviser afin qu'un seul compte utilise eth0 et le deuxième compte n'utilise que eth1.

  2. Serveur: J'ai deux adresses IP sur un serveur et je veux m'assurer que l'utilisateur de messagerie n'envoie que des courriels à partir de la deuxième adresse IP (alias eth0: 1)

Le second peut probablement être IPTabled (je ne sais pas comment) pour acheminer le trafic de messagerie via cette interface, mais le premier traitera de toutes sortes de trafic et doit donc être basé sur l'utilisateur. S'il existe une solution basée sur l'utilisateur, je pourrais l'appliquer aux deux endroits.

Oli
la source

Réponses:

6

Vous voudrez utiliser le module propriétaire iptables et peut-être une manipulation intelligente des paquets.

propriétaire Ce module tente de faire correspondre diverses caractéristiques du créateur de paquets, pour les paquets générés localement. Il n'est valide que dans la chaîne OUTPUT, et même dans ce cas, certains paquets (tels que les réponses ping ICMP) peuvent ne pas avoir de propriétaire, et donc ne jamais correspondre.

--uid-owner userid Correspond si le paquet a été créé par un processus avec l'ID utilisateur effectif (numérique) donné.

--gid-owner groupid Correspond si le paquet a été créé par un processus avec l'ID de groupe effectif (numérique) donné.

--pid-owner processid Correspond si le paquet a été créé par un processus avec l'ID de processus donné.

--sid-owner sessionid Correspond si le paquet a été créé par un processus dans le groupe de sessions donné.

Li Lo
la source
Vous pouvez utiliser iptables pour définir la marque, que vous pouvez ensuite utiliser dans la table de routage. Voir les cibles MARK et CONNMARK. Dans iproute, son alors `` règle ip ajouter fwmark X ... '' Je ne serais pas surpris, en fait, si iproute2 seul peut le faire ...
derobert
3
Étant quelqu'un qui a fait un travail approfondi avec l'appariement des propriétaires, je peux dire que cela ne produira pas toujours le résultat souhaité. C'est-à-dire que tous les paquets n'ont pas de propriétaire comme vous vous y attendez. ICMP et ESP sont des types qui appartiennent au noyau (ou à la racine) quelle que soit l'application d'origine et auxquels ne correspondra pas -m owner. Il est assez fiable avec TCP et UDP, mais d'autres types ne sont pas aussi fiables. Le seul moyen fiable d'atteindre cet objectif à 100% est d'utiliser des machines virtuelles ou des conteneurs.
bahamat
1

Je ne suis pas sûr que ce soit possible pour le premier point. Vous souhaitez effectuer une manipulation de routage en fonction de l'ID utilisateur de l'utilisateur. La dernière fois que j'ai vérifié, je n'ai pas vu cette possibilité.

Pour le deuxième point, ce n'est pas iptables que vous souhaitez utiliser mais iproute2 (http://lartc.org/howto/ et http://www.policyrouting.org/iproute2.doc.html pour la doc complète). C'est le remplacement des commandes ifconfig / route car elles sont considérées comme obsolètes. iproute2 vous permet de router les paquets en fonction de sa source. C'est ce que tu veux

Luc Stepniewski
la source